/* * 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) } } }