New items order in navigation bar
This commit is contained in:
parent
5888922df1
commit
7279d48f63
1 changed files with 188 additions and 0 deletions
188
qml/pages/components/MyList.qml
Normal file
188
qml/pages/components/MyList.qml
Normal file
|
@ -0,0 +1,188 @@
|
|||
import QtQuick 2.2
|
||||
import Sailfish.Silica 1.0
|
||||
import "../../lib/API.js" as Logic
|
||||
import "."
|
||||
|
||||
SilicaListView {
|
||||
id: myList
|
||||
property string type;
|
||||
property string title
|
||||
property string vwPlaceholderText: qsTr("Loading")
|
||||
property string vwPlaceholderHint: qsTr("please wait...")
|
||||
property string description
|
||||
property ListModel mdl: []
|
||||
property variant params: []
|
||||
property var locale: Qt.locale()
|
||||
property bool autoLoadMore : true;
|
||||
property bool loadStarted : false;
|
||||
property int scrollOffset;
|
||||
property string action: ""
|
||||
property variant vars
|
||||
property variant conf
|
||||
property bool notifier : false;
|
||||
model: mdl
|
||||
signal notify (string what, int num)
|
||||
onNotify: {
|
||||
console.log(what + " - " + num)
|
||||
}
|
||||
|
||||
|
||||
|
||||
signal openDrawer (bool setDrawer)
|
||||
onOpenDrawer: {
|
||||
//console.log("Open drawer: " + setDrawer)
|
||||
}
|
||||
signal send (string notice)
|
||||
onSend: {
|
||||
console.log("LIST send signal emitted with notice: " + notice)
|
||||
}
|
||||
|
||||
|
||||
BusyIndicator {
|
||||
size: BusyIndicatorSize.Large
|
||||
running: myList.model.count === 0 && !viewPlaceHolder.visible
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
header: PageHeader {
|
||||
title: myList.title
|
||||
description: myList.description
|
||||
}
|
||||
|
||||
|
||||
|
||||
ViewPlaceholder {
|
||||
id: viewPlaceHolder
|
||||
enabled: model.count === 0
|
||||
text: vwPlaceholderText
|
||||
hintText: vwPlaceholderHint
|
||||
}
|
||||
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
text: qsTr("Settings")
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("../Settings.qml"), {})
|
||||
}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Load more")
|
||||
onClicked: {
|
||||
loadData("prepend")
|
||||
}
|
||||
}
|
||||
}
|
||||
clip: true
|
||||
section {
|
||||
property: 'section'
|
||||
delegate: SectionHeader {
|
||||
height: Theme.itemSizeExtraSmall
|
||||
text: Format.formatDate(section, Formatter.DateMedium)
|
||||
}
|
||||
}
|
||||
|
||||
delegate: VisualContainer {
|
||||
} //Toot {}
|
||||
|
||||
add: Transition {
|
||||
NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 800 }
|
||||
NumberAnimation { property: "x"; duration: 800; easing.type: Easing.InOutBack }
|
||||
}
|
||||
|
||||
remove: Transition {
|
||||
NumberAnimation { properties: "x,y"; duration: 800; easing.type: Easing.InOutBack }
|
||||
}
|
||||
|
||||
onCountChanged: {
|
||||
loadStarted = false;
|
||||
/*contentY = scrollOffset
|
||||
console.log("CountChanged!")*/
|
||||
|
||||
}
|
||||
|
||||
footer: Item{
|
||||
visible: autoLoadMore
|
||||
width: parent.width
|
||||
height: Theme.itemSizeLarge
|
||||
Button {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.margins: Theme.paddingSmall
|
||||
anchors.bottomMargin: Theme.paddingLarge
|
||||
visible: false
|
||||
onClicked: {
|
||||
loadData("append")
|
||||
}
|
||||
}
|
||||
BusyIndicator {
|
||||
size: BusyIndicatorSize.Small
|
||||
running: loadStarted;
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
onContentYChanged: {
|
||||
|
||||
if (Math.abs(contentY - scrollOffset) > Theme.itemSizeMedium) {
|
||||
openDrawer(contentY - scrollOffset > 0 ? false : true )
|
||||
scrollOffset = contentY
|
||||
}
|
||||
|
||||
if(contentY+height > footerItem.y && !loadStarted && autoLoadMore){
|
||||
loadData("append")
|
||||
loadStarted = true;
|
||||
}
|
||||
}
|
||||
VerticalScrollDecorator {}
|
||||
|
||||
WorkerScript {
|
||||
id: worker
|
||||
source: "../../lib/Worker.js"
|
||||
onMessage: {
|
||||
if (messageObject.error){
|
||||
console.log(JSON.stringify(messageObject))
|
||||
}
|
||||
if (messageObject.fireNotification && notifier){
|
||||
Logic.notifier(messageObject.data)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
loadData("prepend")
|
||||
}
|
||||
|
||||
Timer {
|
||||
triggeredOnStart: false; interval: 5*60*1000; running: true; repeat: true
|
||||
onTriggered: {
|
||||
console.log(title + ' ' +Date().toString())
|
||||
loadData("prepend")
|
||||
}
|
||||
}
|
||||
function loadData(mode){
|
||||
var p = [];
|
||||
if (params.length)
|
||||
for(var i = 0; i<params.length; i++)
|
||||
p.push(params[i])
|
||||
|
||||
if (mode === "append" && model.count){
|
||||
p.push({name: 'max_id', data: model.get(model.count-1).id});
|
||||
}
|
||||
if (mode === "prepend" && model.count){
|
||||
p.push({name:'since_id', data: model.get(0).id});
|
||||
}
|
||||
|
||||
var msg = {
|
||||
'action' : type,
|
||||
'params' : p,
|
||||
'model' : model,
|
||||
'mode' : mode,
|
||||
'conf' : Logic.conf
|
||||
};
|
||||
console.log(JSON.stringify(msg))
|
||||
if (type !== "")
|
||||
worker.sendMessage(msg);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue