psa: fixed configdir value
[feedingit] / psa_harmattan / feedingit / deb_dist / feedingit-0.1.0 / qml / main.qml
index 5a6a117..0ade188 100644 (file)
@@ -1,10 +1,41 @@
 import QtQuick 1.0
 import com.nokia.meego 1.0
 
-
 PageStackWindow {
+    id: window
     initialPage: categoryPage
 
+    signal longPressCategory(string catid)
+    signal longPressFeed(string key)
+    signal categoryReloadRequest()
+    signal feedReloadRequest()
+    signal addFileSignal(string fullname, string filename)
+
+    property string feedid
+    property string catid
+
+    function addFileNotification(fullname, filename) {
+        window.addFileSignal(fullname,filename)
+    }
+
+    function updateStarted() {
+        banner.show(qsTr("Update Started"))
+    }
+
+    function updateFinished() {
+        banner.show(qsTr("Updated Completed"))
+    }
+
+    onLongPressFeed: {
+        unsubscribeFeedMenu.key = key
+        unsubscribeFeedMenu.open()
+    }
+
+    onLongPressCategory: {
+        unsubscribeCategoryMenu.catid = catid
+        unsubscribeCategoryMenu.open()
+    }
+
     ToolBarLayout {
         id: commonTools
         visible: false
@@ -21,10 +52,86 @@ PageStackWindow {
         id: myMenu
         visualParent: pageStack
         MenuLayout {
+            MenuItem { text: qsTr("Settings"); onClicked: {pageStack.push(settingsPage)}  }
+            MenuItem { text: qsTr("Manage Subscriptions"); onClicked: { pageStack.push(addFeedPage)  } }
+            MenuItem { text: qsTr("Update All Categories"); onClicked: controller.updateAll(); }
             MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
         }
     }
 
+    Menu {
+        id: myFeedsMenu
+        visualParent: pageStack
+        MenuLayout {
+            MenuItem { text: qsTr("Update All Feeds"); onClicked: controller.updateCategory(catid); }
+            //MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
+        }
+    }
+
+    Menu {
+        id: myArticlesMenu
+        visualParent: pageStack
+        MenuLayout {
+            MenuItem { text: qsTr("Mark All As Read"); onClicked: controller.markAllAsRead(feedid); }
+            MenuItem { text: qsTr("Update Feed"); onClicked: controller.updateFeed(feedid); }
+            //MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
+        }
+    }
+
+    Menu {
+        id: unsubscribeFeedMenu
+        visualParent: pageStack
+        property string key
+        MenuLayout {
+            //MenuItem { text: qsTr("Update"); onClicked: controller.updateFeed(parent.feedid); }
+            MenuItem { text: qsTr("Delete");
+                onClicked: {
+                    feedConfirm.open()
+                    unsubscribeFeedMenu.close()
+                }
+            }
+        }
+        QueryDialog {
+            id: feedConfirm
+            //icon: "common/images/feedingit.png"
+            //titleText: "Delete Feed?"
+            message: "Delete this feed?"
+            acceptButtonText: "OK"
+            rejectButtonText: "Cancel"
+            onAccepted: {
+                controller.removeFeed(unsubscribeFeedMenu.key);
+                window.feedReloadRequest()
+            }
+        }
+    }
+
+    Menu {
+        id: unsubscribeCategoryMenu
+        visualParent: pageStack
+        property string catid
+        MenuLayout {
+            //MenuItem { text: qsTr("Update"); onClicked: controller.updateFeed(parent.feedid); }
+            MenuItem { text: qsTr("Delete");
+                onClicked: {
+                    categoryConfirm.open()
+                    unsubscribeFeedMenu.close()
+                }
+            }
+        }
+        QueryDialog {
+            id: categoryConfirm
+            //icon: "common/images/feedingit.png"
+            //titleText: "Delete Feed?"
+            message: "Delete this category?"
+            acceptButtonText: "OK"
+            rejectButtonText: "Cancel"
+            onAccepted: {
+                controller.removeCategory(unsubscribeCategoryMenu.catid);
+                window.categoryReloadRequest()
+            }
+        }
+    }
+
     QueryDialog {
         id: query
         icon: "common/images/feedingit.png"
@@ -36,44 +143,199 @@ PageStackWindow {
         acceptButtonText: "OK"
     }
 
-//    Page{
-//        id: mainPage
-//        Component.onCompleted: {
-//            var main = Qt.createComponent("FeedingIt.qml");
-//            main.createObject(mainPage);
-//        }
-//    }
-
     Component {
         id: categoryPage
         Page {
             tools: commonTools
             Categories {
-                onCategoryClicked: pageStack.push(feedsPage, {catid: cat})
+                id: categoriesItem
+                onCategoryClicked: {
+                    window.catid = cat
+                    pageStack.push(feedsPage)
+                }
+
+            }
+            Connections {
+                target: window
+                onCategoryReloadRequest: {
+                    console.log("category reloaded")
+                    categoriesItem.reload()
+                }
             }
         }
     }
 
     Component {
         id: feedsPage
+
         Page {
-            tools: commonTools
-            property string catid
+            tools: feedsTools
+            anchors.fill: parent
+            property string catid: window.catid
             Feeds {
                 id: feedsItem
-                onFeedClicked: pageStack.push(articlesPage, {feedid: feedid})
+                onFeedClicked: {
+                    window.feedid = feedid
+                    pageStack.push(articlesPage)
+                }
+
+            }
+            ToolBarLayout {
+                id: feedsTools
+                visible: false
+                ToolIcon { iconId: "toolbar-back";
+                    onClicked: {
+                        myArticlesMenu.close();
+                        window.categoryReloadRequest()
+                        pageStack.pop();
+                    }
+                }
+                ToolIcon {
+                    platformIconId: "toolbar-view-menu"
+                    anchors.right: (parent === undefined) ? undefined : parent.right
+                    onClicked: (myFeedsMenu.status == DialogStatus.Closed) ? myFeedsMenu.open() : myFeedsMenu.close()
+                }
             }
+            Connections {
+                 target: window
+                 onFeedReloadRequest: feedsItem.reload()
+             }
         }
     }
 
     Component {
         id: articlesPage
         Page {
-            tools: commonTools
-            property string feedid
+            tools: articleTools
+            property string feedid: window.feedid
             ArticleViewer {
                 id: flipper
             }
+
+            ToolBarLayout {
+                id: articleTools
+                visible: false
+                ToolIcon { iconId: "toolbar-back";
+                    onClicked: {
+                        myArticlesMenu.close();
+                        if (flipper.articleShown) {
+                            flipper.articleShown = false;
+                            flipper.reload()
+                        } else {
+                            window.feedReloadRequest();
+                            pageStack.pop();
+                        }
+                    }
+                }
+
+                ToolIcon {
+                    platformIconId: "toolbar-previous"
+                    visible: flipper.articleShown
+                    //anchors.right: (parent === undefined) ? undefined : parent.right
+                    onClicked: flipper.prev();
+                }
+
+                ToolIcon {
+                    platformIconId: "toolbar-next"
+                    visible: flipper.articleShown
+                    //anchors.right: (parent === undefined) ? undefined : parent.right
+                    onClicked: flipper.next()
+                }
+
+                ToolIcon {
+                    platformIconId: "toolbar-view-menu"
+                    anchors.right: (parent === undefined) ? undefined : parent.right
+                    onClicked: (myArticlesMenu.status == DialogStatus.Closed) ? myArticlesMenu.open() : myArticlesMenu.close()
+                }
+            }
+        }
+    }
+
+    Component {
+        id: addFeedPage
+        AddFeed {
+            id: addFeedItem
+
+            Connections {
+                 target: window
+                 onAddFileSignal: addFeedItem.addFileToDialog(fullname, filename)
+             }
+        }
+    }
+
+    Component {
+        id: settingsPage
+        SettingsPage {
+            id: settingsItem
+            tools: commonTools
+        }
+    }
+
+    Settings {
+        id: settings
+    }
+
+    Rectangle {
+        id: banner
+        x: 10
+        width: parent.width - 20
+        height: bannerText.height + 20
+        y: 50
+        z:8
+
+        visible: false
+        radius: 4
+        border.color: "white"
+        color: "black"
+
+        Text {
+            id: bannerText
+            anchors.centerIn: parent
+            font.pixelSize: 24
+            //text: "Test"
+            color: "white"
+            wrapMode: Text.WordWrap;
+        }
+
+        Timer {
+            id: bannerTimer
+            interval: 3000
+            repeat: false
+            running: false
+            onTriggered: banner.visible = false
+        }
+
+        function show(str) {
+            bannerText.text = str;
+            banner.visible = true
+            bannerTimer.start()
+        }
+
+        MouseArea {
+            anchors.fill: parent
+            onClicked: {
+                bannerTimer.stop()
+                banner.visible= false
+            }
+        }
+
+        //text: "This is an info banner with no icon"
+    }
+
+    Item {
+        AutomaticUpdate {
+            id: autoUpdate
+        }
+
+        Connections {
+            target: settings
+            onAutoUpdateEnabledChanged: {
+                if (!settings.autoUpdateEnabled) {
+                    autoUpdate.stop();
+                } else {
+                    autoUpdate.start();
+                }
+            }
         }
     }
 }