warehouse for ces2019
[apps/onscreenapp.git] / app / pages / ListPage.qml
diff --git a/app/pages/ListPage.qml b/app/pages/ListPage.qml
new file mode 100644 (file)
index 0000000..f4b78da
--- /dev/null
@@ -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)
+        }
+    }
+}