From 84714d6f9435b59045c08c76eb556663d1ee36d4 Mon Sep 17 00:00:00 2001 From: Michael Bohlender Date: Thu, 2 Feb 2017 21:23:40 +0100 Subject: add initial contact controller and contact detail view --- components/package/contents/ui/People.qml | 90 +++++++++++++++++++++++++++++++ framework/domain/CMakeLists.txt | 1 + framework/domain/contactcontroller.cpp | 59 ++++++++++++++++++++ framework/domain/contactcontroller.h | 56 +++++++++++++++++++ framework/domain/mailplugin.cpp | 2 + 5 files changed, 208 insertions(+) create mode 100644 framework/domain/contactcontroller.cpp create mode 100644 framework/domain/contactcontroller.h diff --git a/components/package/contents/ui/People.qml b/components/package/contents/ui/People.qml index 47dd82ec..810ae0f4 100644 --- a/components/package/contents/ui/People.qml +++ b/components/package/contents/ui/People.qml @@ -22,6 +22,8 @@ import QtQuick.Controls 1.4 as Controls import QtQuick.Layouts 1.1 import org.kde.kirigami 1.0 as Kirigami +import org.kube.framework.domain 1.0 as KubeFramework + Popup { @@ -120,14 +122,102 @@ Popup { } Item { + + KubeFramework.ContactController { + id: contactController + } + height: parent.height Layout.fillWidth: true ToolBar { + id: detailToolBar width: parent.width height: Kirigami.Units.gridUnit * 2 } + + Rectangle { + + anchors { + top: detailToolBar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + //margins: Kirigami.Units.largeSpacing + } + + color: Krigami.Theme.viewBackgroundColor + + ColumnLayout { + + anchors { + top: parent.top + left: parent.left + margins: Kirigami.Units.smallSpacing + } + + width: parent.width + + Avatar { + id: avatar + + + height: Kirigami.Units.gridUnit * 2.5 + width: height + + name: contactController.name + } + + Text { + color: Kirigami.Theme.textColor + opacity: 0.8 + + text: contactController.name + + font.weight: Font.DemiBold + } + + Text { + color: Kirigami.Theme.textColor + text: "Email" + font.weight: Font.DemiBold + opacity: 0.8 + } + + ColumnLayout { + Repeater { + model: contactController.emails + + RowLayout { + Text { text: modelData } + Controls.ToolButton { + iconName: "edit-delete" + + onClicked: { + contactController.removeEmail(modelData) + } + } + } + } + + RowLayout { + TextField { + id: newEmail + } + + Button { + text: "Add email" + + onClicked: { + contactController.addEmail(newEmail.text) + newEmail.text = ""; + } + } + } + } + } + } } } } diff --git a/framework/domain/CMakeLists.txt b/framework/domain/CMakeLists.txt index 01d55de2..31ca5df9 100644 --- a/framework/domain/CMakeLists.txt +++ b/framework/domain/CMakeLists.txt @@ -24,6 +24,7 @@ set(mailplugin_SRCS mailcontroller.cpp foldercontroller.cpp mouseproxy.cpp + contactcontroller.cpp ) find_package(KF5 REQUIRED COMPONENTS Package) diff --git a/framework/domain/contactcontroller.cpp b/framework/domain/contactcontroller.cpp new file mode 100644 index 00000000..0be90e77 --- /dev/null +++ b/framework/domain/contactcontroller.cpp @@ -0,0 +1,59 @@ +/* + * 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. + */ + +#include "contactcontroller.h" + +ContactController::ContactController() + : Kube::Controller(), + action_save{new Kube::ControllerAction{this, &ContactController::save}} +{ + loadContact("test"); + updateSaveAction(); +} + +void ContactController::save() { + //TODO +} + +void ContactController::updateSaveAction() +{ + saveAction()->setEnabled(!getName().isEmpty()); +} + +void ContactController::loadContact(const QVariant &contact) +{ + setName("Anita Rosenzweig"); + m_emails << "rosenzweig@kolabnow.com" << "wolfi@kolabnow.com"; +} + +void ContactController::removeEmail(const QString &email) +{ + m_emails.removeOne(email); + emit emailsChanged(); +} + +void ContactController::addEmail(const QString &email) +{ + m_emails << email; + emit emailsChanged(); +} + +QStringList ContactController::emails() const +{ + return m_emails; +} diff --git a/framework/domain/contactcontroller.h b/framework/domain/contactcontroller.h new file mode 100644 index 00000000..d9bca563 --- /dev/null +++ b/framework/domain/contactcontroller.h @@ -0,0 +1,56 @@ +/* + * 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. + */ + + +#pragma once + +#include +#include +#include + +#include "controller.h" + +class ContactController : public Kube::Controller +{ + Q_OBJECT + + Q_PROPERTY(QStringList emails READ emails NOTIFY emailsChanged) + + //Interface properties + KUBE_CONTROLLER_PROPERTY(QString, Name, name) + + KUBE_CONTROLLER_ACTION(save) + +public: + explicit ContactController(); + + QStringList emails() const; + + Q_INVOKABLE void loadContact(const QVariant &contact); + Q_INVOKABLE void removeEmail(const QString &email); + Q_INVOKABLE void addEmail(const QString &email); + +signals: + void emailsChanged(); + +private slots: + void updateSaveAction(); + +private: + QStringList m_emails; +}; diff --git a/framework/domain/mailplugin.cpp b/framework/domain/mailplugin.cpp index 2ec73644..fba6c458 100644 --- a/framework/domain/mailplugin.cpp +++ b/framework/domain/mailplugin.cpp @@ -30,6 +30,7 @@ #include "mailcontroller.h" #include "foldercontroller.h" #include "mouseproxy.h" +#include "contactcontroller.h" #include @@ -47,4 +48,5 @@ void MailPlugin::registerTypes (const char *uri) qmlRegisterType(uri, 1, 0, "MailController"); qmlRegisterType(uri, 1, 0, "FolderController"); qmlRegisterType(uri, 1, 0, "MouseProxy"); + qmlRegisterType(uri, 1, 0,"ContactController"); } -- cgit v1.2.3