diff options
Diffstat (limited to 'app/pages/ListPage.qml')
-rw-r--r-- | app/pages/ListPage.qml | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/app/pages/ListPage.qml b/app/pages/ListPage.qml new file mode 100644 index 0000000..f4b78da --- /dev/null +++ b/app/pages/ListPage.qml @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2018 The Qt Company Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import QtQuick 2.6 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 + +Page { + id: root + property alias model: listView.model + + property int appSize: 0 + property int pageSize: 0 + property int currentPageIndex: 0 + + property int nPullHeight: 100 + + BusyIndicator { + id: prevBusyIndicator + anchors.horizontalCenter: parent.horizontalCenter + implicitWidth: 60 + implicitHeight: 60 + running: false + } + + StackView { + id: stack + initialItem: listView + anchors.fill: parent + anchors.margins: root.width * 0.075 + } + + ListView { + id: listView + //anchors.fill: parent + //anchors.margins: root.width * 0.075 + clip: true + + delegate: MouseArea { + id: delegate + width: listView.width + height: width / 6 + + RowLayout { + anchors.fill: parent + + Item { + Layout.preferredWidth: 100 + Layout.preferredHeight: 100 + + MouseArea{ + anchors.fill: parent + z: 2 + onClicked: { + stack.push("qrc:/pages/DetailPage.qml", {stack: stack, model: model}, StackView.Immediate) + } + } + Image { + anchors.fill: parent + source: model.icon + } + } + ColumnLayout { + Label { + Layout.fillWidth: true + text: model.name.toUpperCase() + color: '#00ADDC' + } + Label { + text: 'Version: ' + model.version + font.pixelSize: 16 + font.italic: true + } + Label { + text: 'Description: ' + model.description + font.pixelSize: 16 + wrapMode: Text.Wrap + elide: Text.ElideRight + Layout.preferredWidth: 400 + Layout.preferredHeight: 40 + } + } + ColumnLayout { + spacing: 5 + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + + Button { + x: x - 6 + text: model.statetext + onClicked: { + if (model.statetext === 'Install' || model.statetext === 'Update') { + listView.model.install(model.index) + } else if (model.statetext === 'Launch') { + if (listView.model.launch(model.id) > 1) { + homescreenHandler.tapShortcut(model.name) + } else { + console.warn('app cannot be launched') + } + } + } + implicitWidth: 140 + implicitHeight: 40 + //Layout.rightMargin: 5 + } + } + + } + DownloadBar { + anchors.fill: parent + progress: model.progress + } + Image { + source: 'qrc:/images/DividingLine.svg' + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + visible: model.index > 0 + } + + + } + + states: [ + State { + name: "prevPageState"; when: listView.contentY < -nPullHeight + StateChangeScript { + name: "prevPageScript" + script: getPrevPage() + } + } + ] + } + + function getPrevPage() { + listView.y = nPullHeight; + + currentPageIndex = currentPageIndex > 0 ? currentPageIndex-1 : 0; + prevBusyIndicator.running = true + prevPageTimer.start(); + } + + Timer { + id: prevPageTimer + interval: 1000 + repeat: false + running: false + onTriggered: { + listView.model.getPrevPage(currentPageIndex) + prevPageAnimation.start(); + } + } + + NumberAnimation { + id: prevPageAnimation + target: listView + property: "y" + duration: 100 + from: nPullHeight + to: 0 + onStopped: { + prevBusyIndicator.running = false + listView.y = 0; + } + } + + Connections { + target: listView.model + onRequestCompleted: { + appSize = appsize + pageSize = pagesize + console.log("request completed!", appSize, pageSize) + } + } +} |