summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/kube/contents/ui/Kube.qml205
-rw-r--r--framework/qml/FolderListView.qml30
-rw-r--r--framework/qml/InlineAccountSwitcher.qml120
-rw-r--r--framework/qmldir2
4 files changed, 171 insertions, 186 deletions
diff --git a/components/kube/contents/ui/Kube.qml b/components/kube/contents/ui/Kube.qml
index ab80d188..2dbc58b0 100644
--- a/components/kube/contents/ui/Kube.qml
+++ b/components/kube/contents/ui/Kube.qml
@@ -101,7 +101,7 @@ Controls2.ApplicationWindow {
101 //Model 101 //Model
102 Kube.AccountsModel { 102 Kube.AccountsModel {
103 id: currentAccountModel 103 id: currentAccountModel
104 accountId: accountSwitcher.accountId 104 accountId: accountFolderview.accountId
105 } 105 }
106 106
107 //BEGIN Shortcuts 107 //BEGIN Shortcuts
@@ -204,172 +204,61 @@ Controls2.ApplicationWindow {
204 } 204 }
205 } 205 }
206 206
207 Item { 207 Kube.InlineAccountSwitcher {
208 id: accountName 208 id: accountFolderview
209
210 Kube.FolderController {
211 id: accountNameFolderController
212 accountId: accountSwitcher.accountId
213 }
214
215 Menu {
216 id: contextMenu
217 title: "Edit"
218
219 MenuItem {
220 text: "Synchronize"
221 onTriggered: {
222 accountNameFolderController.synchronizeAction.execute()
223 }
224 }
225 }
226 209
227 anchors { 210 anchors {
228 top: newMailButton.bottom 211 top: newMailButton.bottom
229 topMargin: Kube.Units.smallSpacing 212 topMargin: Kube.Units.largeSpacing
230 left: parent.left
231 leftMargin: Kube.Units.largeSpacing
232 }
233
234 width: parent.width
235 height: Kube.Units.gridUnit * 2
236
237 MouseArea {
238 anchors.fill: parent
239 acceptedButtons: Qt.RightButton
240 onClicked: {
241 contextMenu.popup()
242 }
243 }
244
245 Repeater {
246 model: currentAccountModel
247 Row {
248 spacing: Kube.Units.smallSpacing
249 anchors {
250 bottom: parent.bottom
251 left: parent.left
252 leftMargin: Kube.Units.smallSpacing
253 }
254 Layout.fillHeight: true
255
256 Kube.Label{
257 text: model.name
258 font.weight: Font.Bold
259 color: Kube.Colors.highlightedTextColor
260 }
261
262 Kube.Icon {
263 id: statusIcon
264 visible: false
265 iconName: ""
266 states: [
267 State {
268 name: "busy"; when: model.status == Kube.AccountsModel.BusyStatus
269 PropertyChanges { target: statusIcon; iconName: Kube.Icons.busy_inverted; visible: true }
270 },
271 State {
272 name: "error"; when: model.status == Kube.AccountsModel.ErrorStatus
273 PropertyChanges { target: statusIcon; iconName: Kube.Icons.error_inverted; visible: true }
274 },
275 State {
276 name: "checkmark"; when: model.status == Kube.AccountsModel.ConnectedStatus
277 PropertyChanges { target: statusIcon; iconName: Kube.Icons.connected_inverted; visible: true }
278 },
279 State {
280 name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus
281 PropertyChanges { target: statusIcon; iconName: Kube.Icons.noNetworkConnection_inverted; visible: true }
282 }
283 ]
284 }
285 }
286 }
287 }
288
289 Kube.FolderListView {
290 id: folderListView
291
292 anchors {
293 top: accountName.bottom
294 topMargin: Kube.Units.smallSpacing
295 bottom: statusBar.top
296 left: parent.left
297 right: parent.right
298 leftMargin: Kube.Units.largeSpacing
299 }
300
301 focus: true
302 accountId: accountSwitcher.accountId
303 }
304
305 Item {
306 id: statusBar
307 anchors {
308 topMargin: Kube.Units.smallSpacing
309 bottom: outbox.top
310 left: parent.left
311 right: parent.right
312 }
313
314 height: Kube.Units.gridUnit
315
316 Repeater {
317 model: currentAccountModel
318 Kube.Label {
319 id: statusText
320 anchors.centerIn: parent
321 visible: false
322 color: Kube.Colors.highlightedTextColor
323 states: [
324 State {
325 name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus
326 PropertyChanges { target: statusText; text: "Offline"; visible: true }
327 }
328 ]
329 }
330 }
331 }
332
333 Kube.Outbox {
334 id: outbox
335
336 anchors {
337 bottom: toolBar.top
338 left: parent.left
339 right: parent.right
340 }
341 height: Kube.Units.gridUnit * 1.5
342 }
343
344
345 Item {
346 id: toolBar
347
348 anchors {
349 bottom: parent.bottom 213 bottom: parent.bottom
350 left: parent.left 214 left: newMailButton.left
351 right: parent.right 215 right: parent.right
352 } 216 }
353 height: Kube.Units.gridUnit * 2
354
355 RowLayout {
356 anchors.centerIn: parent
357
358 spacing: Kube.Units.largeSpacing
359
360 Kube.AccountSwitcher {
361 id: accountSwitcher
362 iconName: Kube.Icons.menu_inverted
363 height: Kube.Units.gridUnit * 1.5
364 width: height
365 }
366 }
367 } 217 }
368 } 218 }
219//TODO bring back status bar and outbox
220// Item {
221// id: statusBar
222// anchors {
223// topMargin: Kube.Units.smallSpacing
224// bottom: outbox.top
225// left: parent.left
226// right: parent.right
227// }
228//
229// height: Kube.Units.gridUnit
230//
231// Repeater {
232// model: currentAccountModel
233// Kube.Label {
234// id: statusText
235// anchors.centerIn: parent
236// visible: false
237// color: Kube.Colors.highlightedTextColor
238// states: [
239// State {
240// name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus
241// PropertyChanges { target: statusText; text: "Offline"; visible: true }
242// }
243// ]
244// }
245// }
246// }
247//
248// Kube.Outbox {
249// id: outbox
250//
251// anchors {
252// bottom: toolBar.top
253// left: parent.left
254// right: parent.right
255// }
256// height: Kube.Units.gridUnit * 1.5
257// }
369 258
370 Kube.MailListView { 259 Kube.MailListView {
371 id: mailListView 260 id: mailListView
372 parentFolder: folderListView.currentFolder 261 parentFolder: accountFolderview.currentFolder
373 width: Kube.Units.gridUnit * 20 262 width: Kube.Units.gridUnit * 20
374 height: parent.height 263 height: parent.height
375 Layout.maximumWidth: app.width * 0.4 264 Layout.maximumWidth: app.width * 0.4
@@ -381,8 +270,8 @@ Controls2.ApplicationWindow {
381 id: mailView 270 id: mailView
382 mail: mailListView.currentMail 271 mail: mailListView.currentMail
383 Layout.fillWidth: true 272 Layout.fillWidth: true
384 hideTrash: !folderListView.isTrashFolder 273 hideTrash: !accountFolderview.isTrashFolder
385 hideNonTrash: folderListView.isTrashFolder 274 hideNonTrash: accountFolderview.isTrashFolder
386 } 275 }
387 } 276 }
388 } 277 }
diff --git a/framework/qml/FolderListView.qml b/framework/qml/FolderListView.qml
index 11e29662..4082e08d 100644
--- a/framework/qml/FolderListView.qml
+++ b/framework/qml/FolderListView.qml
@@ -21,7 +21,6 @@ import QtQuick.Controls 1.4
21import QtQuick.Controls.Styles 1.4 21import QtQuick.Controls.Styles 1.4
22import QtQuick.Layouts 1.1 22import QtQuick.Layouts 1.1
23 23
24import org.kde.kirigami 1.0 as Kirigami
25import org.kube.framework 1.0 as Kube 24import org.kube.framework 1.0 as Kube
26 25
27Rectangle { 26Rectangle {
@@ -42,18 +41,6 @@ Rectangle {
42 } 41 }
43 } 42 }
44 43
45 Menu {
46 id: contextMenu
47 title: "Edit"
48
49 MenuItem {
50 text: "Synchronize"
51 onTriggered: {
52 folderController.synchronizeAction.execute()
53 }
54 }
55 }
56
57 TreeView { 44 TreeView {
58 id: treeView 45 id: treeView
59 46
@@ -80,29 +67,18 @@ Rectangle {
80 root.currentFolder = model.data(currentIndex, Kube.FolderListModel.DomainObject) 67 root.currentFolder = model.data(currentIndex, Kube.FolderListModel.DomainObject)
81 root.isTrashFolder = model.data(currentIndex, Kube.FolderListModel.Trash) 68 root.isTrashFolder = model.data(currentIndex, Kube.FolderListModel.Trash)
82 folderController.synchronizeAction.execute() 69 folderController.synchronizeAction.execute()
70 console.error(model.data)
83 } 71 }
84 72
85 alternatingRowColors: false 73 alternatingRowColors: false
86 headerVisible: false 74 headerVisible: false
87 75
88 MouseArea {
89 anchors.fill: parent
90 acceptedButtons: Qt.RightButton
91 onClicked: {
92 var index = parent.indexAt(mouse.x, mouse.y)
93 if (index.valid) {
94 folderController.folder = treeView.model.data(index, Kube.FolderListModel.DomainObject)
95 contextMenu.popup()
96 }
97 }
98 }
99
100 style: TreeViewStyle { 76 style: TreeViewStyle {
101 77
102 rowDelegate: Rectangle { 78 rowDelegate: Rectangle {
103 color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor 79 color: styleData.selected ? Kube.Colors.highlightColor : Kube.Colors.textColor
104 80
105 height: Kirigami.Units.gridUnit * 1.5 81 height: Kube.Units.gridUnit * 1.5
106 width: 20 82 width: 20
107 83
108 } 84 }
@@ -157,7 +133,7 @@ Rectangle {
157 Kube.Label { 133 Kube.Label {
158 anchors { 134 anchors {
159 verticalCenter: parent.verticalCenter 135 verticalCenter: parent.verticalCenter
160 leftMargin: Kirigami.Units.smallSpacing 136 leftMargin: Kube.Units.smallSpacing
161 } 137 }
162 138
163 text: styleData.value 139 text: styleData.value
diff --git a/framework/qml/InlineAccountSwitcher.qml b/framework/qml/InlineAccountSwitcher.qml
new file mode 100644
index 00000000..b7e70746
--- /dev/null
+++ b/framework/qml/InlineAccountSwitcher.qml
@@ -0,0 +1,120 @@
1/*
2 * Copyright (C) 2017 Michael Bohlender, <michael.bohlender@kdemail.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19import QtQuick 2.4
20import QtQuick.Layouts 1.1
21import org.kube.framework 1.0 as Kube
22
23Rectangle {
24 id: root
25
26 property string currentAccount: null
27 property var currentFolder: null
28 property bool isTrashFolder: false
29
30 Kube.AccountsModel {
31 id: accountsModel
32 }
33
34 color: Kube.Colors.textColor
35
36 ColumnLayout {
37 anchors.fill: parent
38
39 Repeater {
40 model: accountsModel
41
42 delegate: Item {
43 id: accountDelagte
44
45 height: Kube.Units.gridUnit
46 width: root.width
47 Layout.fillHeight: model.accountId == root.currentAccount
48
49 Rectangle {
50 id: accountLabel
51
52 height: Kube.Units.gridUnit
53 width: parent.width
54
55 color: Kube.Colors.textColor
56
57 MouseArea {
58 anchors.fill: parent
59 onClicked: {
60 root.currentAccount = model.accountId
61 }
62 }
63
64 Row {
65 spacing: Kube.Units.smallSpacing
66 anchors.verticalCenter: parent.verticalCenter
67 Layout.fillHeight: true
68
69 Kube.Label{
70 text: model.name
71 font.weight: Font.Bold
72 color: Kube.Colors.highlightedTextColor
73 }
74
75 Kube.Icon {
76 id: statusIcon
77 visible: false
78 iconName: ""
79 states: [
80 State {
81 name: "busy"; when: model.status == Kube.AccountsModel.BusyStatus
82 PropertyChanges { target: statusIcon; iconName: Kube.Icons.busy_inverted; visible: true }
83 },
84 State {
85 name: "error"; when: model.status == Kube.AccountsModel.ErrorStatus
86 PropertyChanges { target: statusIcon; iconName: Kube.Icons.error_inverted; visible: true }
87 },
88 State {
89 name: "checkmark"; when: model.status == Kube.AccountsModel.ConnectedStatus
90 PropertyChanges { target: statusIcon; iconName: Kube.Icons.connected_inverted; visible: true }
91 },
92 State {
93 name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus
94 PropertyChanges { target: statusIcon; iconName: Kube.Icons.noNetworkConnection_inverted; visible: true }
95 }
96 ]
97 }
98 }
99 }
100
101 Kube.FolderListView {
102 anchors {
103 top: accountLabel.bottom
104 left: parent.left
105 right: parent.right
106 bottom: parent.bottom
107 }
108
109 accountId: model.accountId
110 visible: model.accountId == root.currentAccount
111
112 onCurrentFolderChanged: {
113 root.currentFolder = currentFolder
114 root.isTrashFolder = isTrashFolder
115 }
116 }
117 }
118 }
119 }
120}
diff --git a/framework/qmldir b/framework/qmldir
index 1cc25b18..35d1cb62 100644
--- a/framework/qmldir
+++ b/framework/qmldir
@@ -6,6 +6,7 @@ ConversationView 1.0 ConversationView.qml
6FolderListView 1.0 FolderListView.qml 6FolderListView 1.0 FolderListView.qml
7MailListView 1.0 MailListView.qml 7MailListView 1.0 MailListView.qml
8AccountSwitcher 1.0 AccountSwitcher.qml 8AccountSwitcher 1.0 AccountSwitcher.qml
9InlineAccountSwitcher 1.0 InlineAccountSwitcher.qml
9NewAccountDialog 1.0 NewAccountDialog.qml 10NewAccountDialog 1.0 NewAccountDialog.qml
10EditAccountDialog 1.0 EditAccountDialog.qml 11EditAccountDialog 1.0 EditAccountDialog.qml
11OverlayDialog 1.0 OverlayDialog.qml 12OverlayDialog 1.0 OverlayDialog.qml
@@ -24,5 +25,4 @@ singleton Icons 1.0 Icons.qml
24singleton Units 1.0 Units.qml 25singleton Units 1.0 Units.qml
25singleton Font 1.0 Font.qml 26singleton Font 1.0 Font.qml
26 27
27
28plugin frameworkplugin 28plugin frameworkplugin