psa: improved add feed/categories dialog
[feedingit] / psa_harmattan / feedingit / qml / main.qml
1 import QtQuick 1.0
2 import com.nokia.meego 1.0
3
4
5 PageStackWindow {
6     id: window
7     initialPage: categoryPage
8
9     signal longPressCategory(string catid)
10     signal longPressFeed(string key)
11     signal categoryReloadRequest()
12     signal feedReloadRequest()
13     property string feedid
14     property string catid
15
16     Component.onCompleted: theme.inverted= true
17
18     onLongPressFeed: {
19         unsubscribeFeedMenu.key = key
20         unsubscribeFeedMenu.open()
21     }
22
23     onLongPressCategory: {
24         unsubscribeCategoryMenu.catid = catid
25         unsubscribeCategoryMenu.open()
26     }
27
28     ToolBarLayout {
29         id: commonTools
30         visible: false
31         ToolIcon { iconId: "toolbar-back"; onClicked: { myMenu.close(); pageStack.pop(); }
32             visible: pageStack.depth>1 }
33         ToolIcon {
34             platformIconId: "toolbar-view-menu"
35             anchors.right: (parent === undefined) ? undefined : parent.right
36             onClicked: (myMenu.status == DialogStatus.Closed) ? myMenu.open() : myMenu.close()
37         }
38     }
39
40     Menu {
41         id: myMenu
42         visualParent: pageStack
43         MenuLayout {
44             MenuItem { text: qsTr("Settings"); onClicked: {}  }
45             MenuItem { text: qsTr("Invert Theme"); onClicked: { theme.inverted = !theme.inverted }  }
46             MenuItem { text: qsTr("Add Feeds"); onClicked: { pageStack.push(addFeedPage)  } }
47             MenuItem { text: qsTr("Update All Categories"); onClicked: controller.updateAll(); }
48             MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
49         }
50     }
51
52     Menu {
53         id: myFeedsMenu
54         visualParent: pageStack
55         MenuLayout {
56             MenuItem { text: qsTr("Update All Feeds"); onClicked: controller.updateCategory(catid); }
57             //MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
58         }
59     }
60
61     Menu {
62         id: myArticlesMenu
63         visualParent: pageStack
64         MenuLayout {
65             MenuItem { text: qsTr("Mark All As Read"); onClicked: controller.markAllAsRead(feedid); }
66             MenuItem { text: qsTr("Update Feed"); onClicked: controller.updateFeed(feedid); }
67             //MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
68         }
69     }
70
71     Menu {
72         id: unsubscribeFeedMenu
73         visualParent: pageStack
74         property string key
75         MenuLayout {
76             //MenuItem { text: qsTr("Update"); onClicked: controller.updateFeed(parent.feedid); }
77             MenuItem { text: qsTr("Delete");
78                 onClicked: {
79                     feedConfirm.open()
80                     unsubscribeFeedMenu.close()
81                 }
82             }
83         }
84         QueryDialog {
85             id: feedConfirm
86             //icon: "common/images/feedingit.png"
87             //titleText: "Delete Feed?"
88             message: "Delete this feed?"
89             acceptButtonText: "OK"
90             rejectButtonText: "Cancel"
91             onAccepted: {
92                 controller.removeFeed(unsubscribeFeedMenu.key);
93                 window.feedReloadRequest()
94             }
95         }
96     }
97
98     Menu {
99         id: unsubscribeCategoryMenu
100         visualParent: pageStack
101         property string catid
102         MenuLayout {
103             //MenuItem { text: qsTr("Update"); onClicked: controller.updateFeed(parent.feedid); }
104             MenuItem { text: qsTr("Delete");
105                 onClicked: {
106                     categoryConfirm.open()
107                     unsubscribeFeedMenu.close()
108                 }
109             }
110         }
111         QueryDialog {
112             id: categoryConfirm
113             //icon: "common/images/feedingit.png"
114             //titleText: "Delete Feed?"
115             message: "Delete this category?"
116             acceptButtonText: "OK"
117             rejectButtonText: "Cancel"
118             onAccepted: {
119                 controller.removeCategory(unsubscribeCategoryMenu.catid);
120                 window.categoryReloadRequest()
121             }
122         }
123     }
124
125     QueryDialog {
126         id: query
127         icon: "common/images/feedingit.png"
128         titleText: "Feedingit RSS Reader"
129         message: "Version: 0.0.9"
130         +"<br><br>FeedingIt RSS Reader.<br>"
131         +"<br>&copy; 2011 feedingit.marcoz.org"
132         +"<br>http://feedingit.marcoz.org"
133         acceptButtonText: "OK"
134     }
135
136     Component {
137         id: categoryPage
138         Page {
139             tools: commonTools
140             Categories {
141                 id: categoriesItem
142                 onCategoryClicked: {
143                     window.catid = cat
144                     pageStack.push(feedsPage)
145                 }
146
147             }
148             Connections {
149                 target: window
150                 onCategoryReloadRequest: {
151                     console.log("category reloaded")
152                     categoriesItem.reload()
153                 }
154             }
155         }
156     }
157
158     Component {
159         id: feedsPage
160
161         Page {
162             tools: feedsTools
163             anchors.fill: parent
164             property string catid: window.catid
165             Feeds {
166                 id: feedsItem
167                 onFeedClicked: {
168                     window.feedid = feedid
169                     pageStack.push(articlesPage)
170                 }
171
172             }
173             ToolBarLayout {
174                 id: feedsTools
175                 visible: false
176                 ToolIcon { iconId: "toolbar-back";
177                     onClicked: {
178                         myArticlesMenu.close();
179                         window.categoryReloadRequest()
180                         pageStack.pop();
181                     }
182                 }
183                 ToolIcon {
184                     platformIconId: "toolbar-view-menu"
185                     anchors.right: (parent === undefined) ? undefined : parent.right
186                     onClicked: (myFeedsMenu.status == DialogStatus.Closed) ? myFeedsMenu.open() : myFeedsMenu.close()
187                 }
188             }
189             Connections {
190                  target: window
191                  onFeedReloadRequest: feedsItem.reload()
192              }
193         }
194     }
195
196     Component {
197         id: articlesPage
198         Page {
199             tools: articleTools
200             property string feedid: window.feedid
201             ArticleViewer {
202                 id: flipper
203             }
204
205             ToolBarLayout {
206                 id: articleTools
207                 visible: false
208                 ToolIcon { iconId: "toolbar-back";
209                     onClicked: {
210                         myArticlesMenu.close();
211                         if (flipper.articleShown) {
212                             flipper.articleShown = false;
213                             flipper.reload()
214                         } else {
215                             window.feedReloadRequest();
216                             pageStack.pop();
217                         }
218                     }
219                 }
220
221                 ToolIcon {
222                     platformIconId: "toolbar-previous"
223                     visible: flipper.articleShown
224                     //anchors.right: (parent === undefined) ? undefined : parent.right
225                     onClicked: flipper.prev();
226                 }
227
228                 ToolIcon {
229                     platformIconId: "toolbar-next"
230                     visible: flipper.articleShown
231                     //anchors.right: (parent === undefined) ? undefined : parent.right
232                     onClicked: flipper.next()
233                 }
234
235                 ToolIcon {
236                     platformIconId: "toolbar-view-menu"
237                     anchors.right: (parent === undefined) ? undefined : parent.right
238                     onClicked: (myArticlesMenu.status == DialogStatus.Closed) ? myArticlesMenu.open() : myArticlesMenu.close()
239                 }
240             }
241         }
242     }
243
244     Component {
245         id: addFeedPage
246         AddFeed {}
247     }
248
249     Settings {
250         id: settings
251     }
252 }