From a5b1c1c4bd44741a54895c4e84846c045facce70 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 5 Apr 2017 13:14:56 +0200 Subject: kube-mail is now kube --- components/CMakeLists.txt | 2 +- components/kube/contents/ui/Kube.qml | 455 +++++++++++++++++++++++++++++++++++ components/kube/contents/ui/main.qml | 24 ++ components/kube/metadata.desktop | 8 + components/kube/qmldir | 3 + components/mail/contents/ui/Mail.qml | 455 ----------------------------------- components/mail/contents/ui/main.qml | 24 -- components/mail/metadata.desktop | 8 - components/mail/qmldir | 3 - 9 files changed, 491 insertions(+), 491 deletions(-) create mode 100644 components/kube/contents/ui/Kube.qml create mode 100644 components/kube/contents/ui/main.qml create mode 100644 components/kube/metadata.desktop create mode 100644 components/kube/qmldir delete mode 100644 components/mail/contents/ui/Mail.qml delete mode 100644 components/mail/contents/ui/main.qml delete mode 100644 components/mail/metadata.desktop delete mode 100644 components/mail/qmldir (limited to 'components') diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index e339a700..3283286f 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -29,6 +29,6 @@ macro(install_component name) kpackage_install_package(${name} org.kube.components.${name} "genericqml") endmacro(install_component) -install_component(mail) +install_component(kube) install_component(accounts) install_component(mailviewer) diff --git a/components/kube/contents/ui/Kube.qml b/components/kube/contents/ui/Kube.qml new file mode 100644 index 00000000..7cabf9a9 --- /dev/null +++ b/components/kube/contents/ui/Kube.qml @@ -0,0 +1,455 @@ +/* + * Copyright (C) 2017 Michael Bohlender, + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +import QtQuick 2.7 +import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 + +import QtQuick.Controls 2.0 as Controls2 + +import org.kube.framework 1.0 as Kube +import org.kube.components.accounts 1.0 as KubeAccounts + +Controls2.ApplicationWindow { + id: app + + //FIXME remove fixed pixel hight + //for now just convinience during testing + height: 1080 * 0.8 + width: 1920 * 0.8 + + visible: true + + Kube.NotificationHandler { + id: notificationHandler + function handler(n) { + console.warn("We got a notification: ", n.message) + if (n.type == Kube.Notification.Warning) { + console.warn("And it's a warning!", n.type) + } + notificationPopup.notify(n.message); + } + } + + //BEGIN Actions + Kube.Context { + id: maillistcontext + property variant mail + property bool isDraft + mail: mailListView.currentMail + isDraft: mailListView.isDraft + } + + Kube.Action { + id: replyAction + actionId: "org.kde.kube.actions.reply" + context: maillistcontext + } + //END Actions + + //BEGIN ActionHandler + Kube.ActionHandler { + actionId: "org.kde.kube.actions.reply" + function isReady(context) { + return context.mail ? true : false; + } + + function handler(context) { + composer.loadMessage(context.mail, false) + composer.open() + } + } + + Kube.ActionHandler { + actionId: "org.kde.kube.actions.edit" + function isReady(context) { + return context.mail && context.isDraft; + } + function handler(context) { + composer.loadMessage(context.mail, true) + composer.open() + } + } + //END ActionHandler + + //Controller + Kube.MailController { + id: mailController + Binding on threadLeader { + //!! checks for the availability of the type + when: !!mailListView.currentMail + value: mailListView.currentMail + } + } + + Kube.FolderController { + id: folderController + Binding on folder { + //!! checks for the availability of the type + when: !!folderListView.currentFolder + value: folderListView.currentFolder + } + } + + //Model + Kube.AccountsModel { + id: currentAccountModel + accountId: accountSwitcher.accountId + } + + //BEGIN Shortcuts + Shortcut { + sequence: StandardKey.Refresh + onActivated: folderController.synchronizeAction.execute() + enabled: folderController.synchronizeAction.enabled + } + Shortcut { + sequence: StandardKey.Delete + onActivated: mailController.moveToTrashAction.execute() + enabled: mailController.moveToTrashAction.enabled + } + Shortcut { + sequence: StandardKey.MoveToNextLine + onActivated: mailListView.currentIndex++ + } + Shortcut { + sequence: StandardKey.MoveToPreviousLine + onActivated: mailListView.currentIndex-- + } + //END Shortcuts + + //BEGIN background + Rectangle { + anchors.fill: parent + + color: Kube.Colors.backgroundColor + } + //END background + + //BEGIN Main content + SplitView { + anchors { + top: app.top + left: app.left + } + + height: app.height + width: app.width + + Rectangle { + width: Kube.Units.gridUnit * 10 + Layout.maximumWidth: app.width * 0.25 + Layout.minimumWidth: Kube.Units.gridUnit * 5 + + color: Kube.Colors.textColor + + Controls2.ToolBar { + id: toolBar + + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + RowLayout { + anchors.centerIn: parent + + spacing: Kube.Units.largeSpacing + + Kube.AccountSwitcher { + id: accountSwitcher + iconName: Kube.Icons.menu + height: Kube.Units.gridUnit * 1.5 + width: height + } + + ToolButton { + iconName: Kube.Icons.user + height: Kube.Units.gridUnit * 1.5 + width: height + + onClicked: { + people.open() + } + } + + ToolButton { + iconName: Kube.Icons.search + height: Kube.Units.gridUnit * 1.5 + width: height + + onClicked: { + search.open() + } + } + } + } + + Kube.PositiveButton { + id: newMailButton + + anchors { + top: toolBar.bottom + left: parent.left + right: parent.right + margins: Kube.Units.largeSpacing + } + + text: qsTr("New Email") + + onClicked: { + composer.open() + } + } + + Item { + id: accountName + + Kube.FolderController { + id: accountNameFolderController + accountId: accountSwitcher.accountId + } + + Menu { + id: contextMenu + title: "Edit" + + MenuItem { + text: "Synchronize" + onTriggered: { + accountNameFolderController.synchronizeAction.execute() + } + } + } + + anchors { + top: newMailButton.bottom + topMargin: Kube.Units.smallSpacing + } + + width: parent.width + height: Kube.Units.gridUnit * 2 + + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.RightButton + onClicked: { + contextMenu.popup() + } + } + + Repeater { + model: currentAccountModel + Row { + spacing: Kube.Units.smallSpacing + anchors { + bottom: parent.bottom + left: parent.left + leftMargin: Kube.Units.smallSpacing + } + Layout.fillHeight: true + + Text { + text: model.name + font.weight: Font.DemiBold + color: Kube.Colors.highlightedTextColor + } + + Kube.Icon { + id: statusIcon + visible: false + iconName: "" + states: [ + State { + name: "busy"; when: model.status == Kube.AccountsModel.BusyStatus + PropertyChanges { target: statusIcon; iconName: Kube.Icons.busy; visible: true } + }, + State { + name: "error"; when: model.status == Kube.AccountsModel.ErrorStatus + PropertyChanges { target: statusIcon; iconName: Kube.Icons.error; visible: true } + }, + State { + name: "checkmark"; when: model.status == Kube.AccountsModel.ConnectedStatus + PropertyChanges { target: statusIcon; iconName: Kube.Icons.connected; visible: true } + }, + State { + name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus + PropertyChanges { target: statusIcon; iconName: Kube.Icons.noNetworkConnection; visible: true } + } + ] + } + } + } + } + + Kube.FolderListView { + id: folderListView + + anchors { + top: accountName.bottom + topMargin: Kube.Units.smallSpacing + bottom: statusBar.top + left: parent.left + right: parent.right + } + + focus: true + accountId: accountSwitcher.accountId + } + + Item { + id: statusBar + anchors { + topMargin: Kube.Units.smallSpacing + bottom: outbox.top + left: parent.left + right: parent.right + } + + height: Kube.Units.gridUnit + + Repeater { + model: currentAccountModel + Text { + id: statusText + anchors.centerIn: parent + visible: false + color: Kube.Colors.highlightedTextColor + states: [ + State { + name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus + PropertyChanges { target: statusText; text: "Offline"; visible: true } + } + ] + } + } + } + + Kube.Outbox { + id: outbox + + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + } + height: Kube.Units.gridUnit * 1.5 + } + } + + Kube.MailListView { + id: mailListView + parentFolder: folderListView.currentFolder + width: Kube.Units.gridUnit * 20 + height: parent.height + Layout.maximumWidth: app.width * 0.4 + Layout.minimumWidth: Kube.Units.gridUnit * 10 + focus: true + } + + Kube.ConversationView { + id: mailView + mail: mailListView.currentMail + Layout.fillWidth: true + } + } + //END Main content + + //BEGIN Composer + Kube.FocusComposer { + id: composer + + height: app.height * 0.85 + width: app.width * 0.85 + + x: app.width * 0.075 + y: app.height * 0.075 + } + //END Composer + + //BEGIN AccountWizard + KubeAccounts.AccountWizard { + id: accountWizard + + height: app.height * 0.85 + width: app.width * 0.85 + + x: app.width * 0.075 + y: app.height * 0.075 + } + //END AccountWizard + + //BEGIN Notification + Kube.NotificationPopup { + id: notificationPopup + + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + } + } + //END Notification + + //BEGIN Search + Controls2.Popup { + id: search + + width: app.width * 0.6 + height: Kube.Units.gridUnit * 3 + + x: app.width * 0.2 + y: app.height * 0.2 + + modal: true + focus: true + + RowLayout { + anchors.fill: parent + + Controls2.TextField { + id: searchField + Layout.fillWidth: true + placeholderText: "Search... is not available in this beta" + } + + Controls2.Button { + text: "Go" + + onClicked: { + search.close() + } + } + } + } + //END Search + + //BEGIN People + Kube.People { + id: people + + height: app.height * 0.85 + width: app.width * 0.85 + + x: app.width * 0.075 + y: app.height * 0.075 + + } + //END People +} diff --git a/components/kube/contents/ui/main.qml b/components/kube/contents/ui/main.qml new file mode 100644 index 00000000..4391ebe5 --- /dev/null +++ b/components/kube/contents/ui/main.qml @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 Michael Bohlender, + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.7 +import org.kube.components.kube 1.0 as KubeComponent + +KubeComponent.Kube { + +} diff --git a/components/kube/metadata.desktop b/components/kube/metadata.desktop new file mode 100644 index 00000000..581bbdf4 --- /dev/null +++ b/components/kube/metadata.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Kube +X-KDE-PluginInfo-Name=org.kube.components.kube +Exec=kpackagelauncherqml -a org.kube.components.kube +X-Plasma-MainScript=ui/main.qml +X-KDE-ServiceTypes=KPackage/GenericQML +Icon=kmail2 +Type=Service diff --git a/components/kube/qmldir b/components/kube/qmldir new file mode 100644 index 00000000..f663c916 --- /dev/null +++ b/components/kube/qmldir @@ -0,0 +1,3 @@ +module org.kube.components.kube + +Kube 1.0 Kube.qml diff --git a/components/mail/contents/ui/Mail.qml b/components/mail/contents/ui/Mail.qml deleted file mode 100644 index 7cabf9a9..00000000 --- a/components/mail/contents/ui/Mail.qml +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2017 Michael Bohlender, - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - - -import QtQuick 2.7 -import QtQuick.Controls 1.3 -import QtQuick.Layouts 1.1 - -import QtQuick.Controls 2.0 as Controls2 - -import org.kube.framework 1.0 as Kube -import org.kube.components.accounts 1.0 as KubeAccounts - -Controls2.ApplicationWindow { - id: app - - //FIXME remove fixed pixel hight - //for now just convinience during testing - height: 1080 * 0.8 - width: 1920 * 0.8 - - visible: true - - Kube.NotificationHandler { - id: notificationHandler - function handler(n) { - console.warn("We got a notification: ", n.message) - if (n.type == Kube.Notification.Warning) { - console.warn("And it's a warning!", n.type) - } - notificationPopup.notify(n.message); - } - } - - //BEGIN Actions - Kube.Context { - id: maillistcontext - property variant mail - property bool isDraft - mail: mailListView.currentMail - isDraft: mailListView.isDraft - } - - Kube.Action { - id: replyAction - actionId: "org.kde.kube.actions.reply" - context: maillistcontext - } - //END Actions - - //BEGIN ActionHandler - Kube.ActionHandler { - actionId: "org.kde.kube.actions.reply" - function isReady(context) { - return context.mail ? true : false; - } - - function handler(context) { - composer.loadMessage(context.mail, false) - composer.open() - } - } - - Kube.ActionHandler { - actionId: "org.kde.kube.actions.edit" - function isReady(context) { - return context.mail && context.isDraft; - } - function handler(context) { - composer.loadMessage(context.mail, true) - composer.open() - } - } - //END ActionHandler - - //Controller - Kube.MailController { - id: mailController - Binding on threadLeader { - //!! checks for the availability of the type - when: !!mailListView.currentMail - value: mailListView.currentMail - } - } - - Kube.FolderController { - id: folderController - Binding on folder { - //!! checks for the availability of the type - when: !!folderListView.currentFolder - value: folderListView.currentFolder - } - } - - //Model - Kube.AccountsModel { - id: currentAccountModel - accountId: accountSwitcher.accountId - } - - //BEGIN Shortcuts - Shortcut { - sequence: StandardKey.Refresh - onActivated: folderController.synchronizeAction.execute() - enabled: folderController.synchronizeAction.enabled - } - Shortcut { - sequence: StandardKey.Delete - onActivated: mailController.moveToTrashAction.execute() - enabled: mailController.moveToTrashAction.enabled - } - Shortcut { - sequence: StandardKey.MoveToNextLine - onActivated: mailListView.currentIndex++ - } - Shortcut { - sequence: StandardKey.MoveToPreviousLine - onActivated: mailListView.currentIndex-- - } - //END Shortcuts - - //BEGIN background - Rectangle { - anchors.fill: parent - - color: Kube.Colors.backgroundColor - } - //END background - - //BEGIN Main content - SplitView { - anchors { - top: app.top - left: app.left - } - - height: app.height - width: app.width - - Rectangle { - width: Kube.Units.gridUnit * 10 - Layout.maximumWidth: app.width * 0.25 - Layout.minimumWidth: Kube.Units.gridUnit * 5 - - color: Kube.Colors.textColor - - Controls2.ToolBar { - id: toolBar - - anchors { - top: parent.top - left: parent.left - right: parent.right - } - - RowLayout { - anchors.centerIn: parent - - spacing: Kube.Units.largeSpacing - - Kube.AccountSwitcher { - id: accountSwitcher - iconName: Kube.Icons.menu - height: Kube.Units.gridUnit * 1.5 - width: height - } - - ToolButton { - iconName: Kube.Icons.user - height: Kube.Units.gridUnit * 1.5 - width: height - - onClicked: { - people.open() - } - } - - ToolButton { - iconName: Kube.Icons.search - height: Kube.Units.gridUnit * 1.5 - width: height - - onClicked: { - search.open() - } - } - } - } - - Kube.PositiveButton { - id: newMailButton - - anchors { - top: toolBar.bottom - left: parent.left - right: parent.right - margins: Kube.Units.largeSpacing - } - - text: qsTr("New Email") - - onClicked: { - composer.open() - } - } - - Item { - id: accountName - - Kube.FolderController { - id: accountNameFolderController - accountId: accountSwitcher.accountId - } - - Menu { - id: contextMenu - title: "Edit" - - MenuItem { - text: "Synchronize" - onTriggered: { - accountNameFolderController.synchronizeAction.execute() - } - } - } - - anchors { - top: newMailButton.bottom - topMargin: Kube.Units.smallSpacing - } - - width: parent.width - height: Kube.Units.gridUnit * 2 - - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.RightButton - onClicked: { - contextMenu.popup() - } - } - - Repeater { - model: currentAccountModel - Row { - spacing: Kube.Units.smallSpacing - anchors { - bottom: parent.bottom - left: parent.left - leftMargin: Kube.Units.smallSpacing - } - Layout.fillHeight: true - - Text { - text: model.name - font.weight: Font.DemiBold - color: Kube.Colors.highlightedTextColor - } - - Kube.Icon { - id: statusIcon - visible: false - iconName: "" - states: [ - State { - name: "busy"; when: model.status == Kube.AccountsModel.BusyStatus - PropertyChanges { target: statusIcon; iconName: Kube.Icons.busy; visible: true } - }, - State { - name: "error"; when: model.status == Kube.AccountsModel.ErrorStatus - PropertyChanges { target: statusIcon; iconName: Kube.Icons.error; visible: true } - }, - State { - name: "checkmark"; when: model.status == Kube.AccountsModel.ConnectedStatus - PropertyChanges { target: statusIcon; iconName: Kube.Icons.connected; visible: true } - }, - State { - name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus - PropertyChanges { target: statusIcon; iconName: Kube.Icons.noNetworkConnection; visible: true } - } - ] - } - } - } - } - - Kube.FolderListView { - id: folderListView - - anchors { - top: accountName.bottom - topMargin: Kube.Units.smallSpacing - bottom: statusBar.top - left: parent.left - right: parent.right - } - - focus: true - accountId: accountSwitcher.accountId - } - - Item { - id: statusBar - anchors { - topMargin: Kube.Units.smallSpacing - bottom: outbox.top - left: parent.left - right: parent.right - } - - height: Kube.Units.gridUnit - - Repeater { - model: currentAccountModel - Text { - id: statusText - anchors.centerIn: parent - visible: false - color: Kube.Colors.highlightedTextColor - states: [ - State { - name: "disconnected"; when: model.status == Kube.AccountsModel.OfflineStatus - PropertyChanges { target: statusText; text: "Offline"; visible: true } - } - ] - } - } - } - - Kube.Outbox { - id: outbox - - anchors { - bottom: parent.bottom - left: parent.left - right: parent.right - } - height: Kube.Units.gridUnit * 1.5 - } - } - - Kube.MailListView { - id: mailListView - parentFolder: folderListView.currentFolder - width: Kube.Units.gridUnit * 20 - height: parent.height - Layout.maximumWidth: app.width * 0.4 - Layout.minimumWidth: Kube.Units.gridUnit * 10 - focus: true - } - - Kube.ConversationView { - id: mailView - mail: mailListView.currentMail - Layout.fillWidth: true - } - } - //END Main content - - //BEGIN Composer - Kube.FocusComposer { - id: composer - - height: app.height * 0.85 - width: app.width * 0.85 - - x: app.width * 0.075 - y: app.height * 0.075 - } - //END Composer - - //BEGIN AccountWizard - KubeAccounts.AccountWizard { - id: accountWizard - - height: app.height * 0.85 - width: app.width * 0.85 - - x: app.width * 0.075 - y: app.height * 0.075 - } - //END AccountWizard - - //BEGIN Notification - Kube.NotificationPopup { - id: notificationPopup - - anchors { - top: parent.top - horizontalCenter: parent.horizontalCenter - } - } - //END Notification - - //BEGIN Search - Controls2.Popup { - id: search - - width: app.width * 0.6 - height: Kube.Units.gridUnit * 3 - - x: app.width * 0.2 - y: app.height * 0.2 - - modal: true - focus: true - - RowLayout { - anchors.fill: parent - - Controls2.TextField { - id: searchField - Layout.fillWidth: true - placeholderText: "Search... is not available in this beta" - } - - Controls2.Button { - text: "Go" - - onClicked: { - search.close() - } - } - } - } - //END Search - - //BEGIN People - Kube.People { - id: people - - height: app.height * 0.85 - width: app.width * 0.85 - - x: app.width * 0.075 - y: app.height * 0.075 - - } - //END People -} diff --git a/components/mail/contents/ui/main.qml b/components/mail/contents/ui/main.qml deleted file mode 100644 index abf0465d..00000000 --- a/components/mail/contents/ui/main.qml +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2017 Michael Bohlender, - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.7 -import org.kube.components.mail 1.0 as MailComponent - -MailComponent.Mail { - -} diff --git a/components/mail/metadata.desktop b/components/mail/metadata.desktop deleted file mode 100644 index 470ad18c..00000000 --- a/components/mail/metadata.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Name=Kube Mail -X-KDE-PluginInfo-Name=org.kube.components.mail -Exec=kpackagelauncherqml -a org.kube.components.mail -X-Plasma-MainScript=ui/main.qml -X-KDE-ServiceTypes=KPackage/GenericQML -Icon=kmail2 -Type=Service diff --git a/components/mail/qmldir b/components/mail/qmldir deleted file mode 100644 index 2c0088f6..00000000 --- a/components/mail/qmldir +++ /dev/null @@ -1,3 +0,0 @@ -module org.kube.components.mail - -Mail 1.0 Mail.qml -- cgit v1.2.3