From 6d726bb10386b3d7f5481d41b735ec06cb2163ad Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 9 Jan 2018 09:35:59 +0100 Subject: Install composer/converations/people as separate views and load them dynamically. --- views/accounts/metadata.json | 4 + views/accounts/qml/View.qml | 143 ++++++++++++++++++++++++++++++ views/accounts/tests/tst_accountsview.qml | 37 ++++++++ 3 files changed, 184 insertions(+) create mode 100644 views/accounts/metadata.json create mode 100644 views/accounts/qml/View.qml create mode 100644 views/accounts/tests/tst_accountsview.qml (limited to 'views/accounts') diff --git a/views/accounts/metadata.json b/views/accounts/metadata.json new file mode 100644 index 00000000..55091f97 --- /dev/null +++ b/views/accounts/metadata.json @@ -0,0 +1,4 @@ +{ + "tooltip": "Account configuration.", + "hidden": true +} diff --git a/views/accounts/qml/View.qml b/views/accounts/qml/View.qml new file mode 100644 index 00000000..9b774907 --- /dev/null +++ b/views/accounts/qml/View.qml @@ -0,0 +1,143 @@ +/* + * 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.4 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 1.3 as Controls +import QtQuick.Controls 2.0 +import org.kube.framework 1.0 as Kube +import org.kube.components.accounts 1.0 as KubeAccounts + +FocusScope { + id: root + //Defines whether more than one account is supported. + property bool singleAccountMode: false + //Defines available account types. + property var availableAccountPlugins: ["kolabnow", "imap", "maildir", "gmail"] + + Controls.SplitView { + height: parent.height + width: parent.width + + Item { + id: accountList + width: Kube.Units.gridUnit * 12 + Layout.fillHeight: true + visible: !root.singleAccountMode + + Kube.PositiveButton { + id: newAccountButton + anchors { + top: parent.top + left: parent.left + right: parent.right + margins: Kube.Units.largeSpacing + } + text: qsTr("New Account") + + onClicked: accountWizard.open() + } + + Kube.ListView { + id: listView + + anchors { + top: newAccountButton.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + topMargin: Kube.Units.largeSpacing + } + + clip: true + + model: Kube.AccountsModel {} + + onCurrentItemChanged: { + if (currentItem) { + edit.accountId = currentItem.currentData.accountId + } + } + + delegate: Kube.ListDelegate { + id: delegateRoot + + Kube.Label { + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: Kube.Units.largeSpacing + } + width: parent.width - Kube.Units.largeSpacing * 2 + + text: model.name + color: delegateRoot.textColor + elide: Text.ElideRight + } + } + } + } + + Item { + height: parent.height + width: Kube.Units.gridUnit * 20 + Layout.fillWidth: true + + Kube.EditAccount { + id: edit + anchors { + fill: parent + bottomMargin: Kube.Units.largeSpacing + } + + canRemove: !root.singleAccountMode + + Component.onCompleted: { + //We don't have any accounts setup if accountId is empty, so we trigger the accountWizard + //FIXME: this assumes we load accounts synchronously, which we do right now. + if (accountId == "") { + //Require the setup to be completed since it's the first account + accountWizard.requireSetup = true + //Launch account wizard + accountWizard.open() + } + } + } + } + } + + onActiveFocusChanged: { + if (activeFocus && accountWizard.visible) { + accountWizard.forceActiveFocus() + } + } + + //BEGIN AccountWizard + KubeAccounts.AccountWizard { + id: accountWizard + + parent: ApplicationWindow.overlay + height: app.height + width: app.width - app.sidebarWidth + x: app.sidebarWidth + y: 0 + + availableAccountPlugins: root.availableAccountPlugins + } + //END AccountWizard +} diff --git a/views/accounts/tests/tst_accountsview.qml b/views/accounts/tests/tst_accountsview.qml new file mode 100644 index 00000000..096ca9eb --- /dev/null +++ b/views/accounts/tests/tst_accountsview.qml @@ -0,0 +1,37 @@ +/* + * Copyright 2017 Christian Mollekopf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, 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 Library General Public License for more details + * + * You should have received a copy of the GNU Library 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 QtTest 1.0 +import "../qml" + +TestCase { + id: testCase + width: 400 + height: 400 + name: "AccountsView" + + View { + id: accountsView + } + + function test_start() { + verify(accountsView) + } +} -- cgit v1.2.3