From dd09ca9ef4bb9780b953d6dd2999dbefe50bd1ff Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 3 Jan 2016 20:31:10 +0100 Subject: Instead of using controllers, directly use the models ...and connect components via properties --- .../package/contents/ui/FolderListView.qml | 9 ++-- .../kube-mail/package/contents/ui/MailListView.qml | 13 ++++-- .../package/contents/ui/SingleMailView.qml | 9 +++- .../kube-mail/package/contents/ui/main.qml | 17 +------- framework/mail/CMakeLists.txt | 4 +- framework/mail/folderlistmodel.cpp | 3 ++ framework/mail/folderlistmodel.h | 5 ++- framework/mail/maillistmodel.cpp | 48 ++++++++++++++++++++++ framework/mail/maillistmodel.h | 8 ++++ framework/mail/mailplugin.cpp | 15 ++----- framework/mail/qmldir | 4 +- 11 files changed, 93 insertions(+), 42 deletions(-) diff --git a/applications/kube-mail/package/contents/ui/FolderListView.qml b/applications/kube-mail/package/contents/ui/FolderListView.qml index f0ce7da2..1639fe70 100644 --- a/applications/kube-mail/package/contents/ui/FolderListView.qml +++ b/applications/kube-mail/package/contents/ui/FolderListView.qml @@ -22,10 +22,11 @@ import QtQuick.Layouts 1.1 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.akonadi2.mail 1.0 as Mail +import org.kde.kube.mail 1.0 as Mail Item { id: root + property variant currentFolder Item { id: searchBox @@ -58,7 +59,7 @@ Item { clip: true - model: folderList.model //FolderModel {} + model: Mail.FolderListModel {} delegate: PlasmaComponents.ListItem { @@ -69,8 +70,8 @@ Item { checked: listView.currentIndex == index onClicked: { - mailList.loadMailFolder(model.id) listView.currentIndex = model.index + root.currentFolder = model.domainObject } PlasmaCore.IconItem { @@ -99,4 +100,4 @@ Item { } } } -} \ No newline at end of file +} diff --git a/applications/kube-mail/package/contents/ui/MailListView.qml b/applications/kube-mail/package/contents/ui/MailListView.qml index f6ded917..5fb4678c 100644 --- a/applications/kube-mail/package/contents/ui/MailListView.qml +++ b/applications/kube-mail/package/contents/ui/MailListView.qml @@ -21,12 +21,19 @@ import QtQuick.Layouts 1.1 import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.kube.mail 1.0 as Mail + ScrollView { id: root + property variant parentFolder + property variant currentMail + ListView { id: listView - model: mailList.model //MailListModel {} + model: Mail.MailListModel { + parentFolder: root.parentFolder + } delegate: PlasmaComponents.ListItem { @@ -41,7 +48,7 @@ ScrollView { onClicked: { listView.currentIndex = model.index - singleMail.loadMail(model.id) + root.currentMail = model.domainObject } } @@ -128,4 +135,4 @@ ScrollView { } } } -} \ No newline at end of file +} diff --git a/applications/kube-mail/package/contents/ui/SingleMailView.qml b/applications/kube-mail/package/contents/ui/SingleMailView.qml index e307ccfd..caec88dd 100644 --- a/applications/kube-mail/package/contents/ui/SingleMailView.qml +++ b/applications/kube-mail/package/contents/ui/SingleMailView.qml @@ -19,8 +19,11 @@ import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Layouts 1.1 +import org.kde.kube.mail 1.0 as Mail + Item { id: root + property variant mail; Rectangle { id: background @@ -33,7 +36,9 @@ Item { Repeater { anchors.fill: parent - model: singleMail.model + model: Mail.MailListModel { + mail: root.mail + } delegate: Item { height: root.height @@ -61,4 +66,4 @@ Item { } } } -} \ No newline at end of file +} diff --git a/applications/kube-mail/package/contents/ui/main.qml b/applications/kube-mail/package/contents/ui/main.qml index 88d2edde..200328f3 100644 --- a/applications/kube-mail/package/contents/ui/main.qml +++ b/applications/kube-mail/package/contents/ui/main.qml @@ -20,8 +20,6 @@ import QtQuick.Controls 1.3 import QtQuick.Layouts 1.1 import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.akonadi2.mail 1.0 as Mail - ApplicationWindow { id: app @@ -32,19 +30,6 @@ ApplicationWindow { visible: true - //Controller: - Mail.FolderList { - id: folderList - } - - Mail.MailList { - id: mailList - } - - Mail.SingleMail{ - id: singleMail - } - //UI toolBar: ToolBar { @@ -111,6 +96,7 @@ ApplicationWindow { MailListView { id: mailListView + parentFolder: folderListView.currentFolder width: unit.size * 80 Layout.maximumWidth: unit.size * 250 @@ -119,6 +105,7 @@ ApplicationWindow { SingleMailView { id: mailView + mail: mailListView.currentMail Layout.fillWidth: true } diff --git a/framework/mail/CMakeLists.txt b/framework/mail/CMakeLists.txt index 7d7569a7..38ba3935 100644 --- a/framework/mail/CMakeLists.txt +++ b/framework/mail/CMakeLists.txt @@ -14,5 +14,5 @@ qt5_use_modules(mailplugin Core Quick Qml) target_link_libraries(mailplugin /work/install/lib64/libakonadi2common.so) #target_link_libraries(mailplugin /home/mike/projects/_install/lib/x86_64-linux-gnu/libakonadi2common.so) -install(TARGETS mailplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/akonadi2/mail) -install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/akonadi2/mail) \ No newline at end of file +install(TARGETS mailplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/kube/mail) +install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/kube/mail) diff --git a/framework/mail/folderlistmodel.cpp b/framework/mail/folderlistmodel.cpp index 0240d95a..0f66c46f 100644 --- a/framework/mail/folderlistmodel.cpp +++ b/framework/mail/folderlistmodel.cpp @@ -25,6 +25,7 @@ QHash< int, QByteArray > FolderListModel::roleNames() const roles[Name] = "name"; roles[Icon] = "icon"; roles[Id] = "id"; + roles[DomainObject] = "domainObject"; return roles; } @@ -39,6 +40,8 @@ QVariant FolderListModel::data(const QModelIndex &idx, int role) const return srcIdx.sibling(srcIdx.row(), 1).data(Qt::DisplayRole).toString(); case Id: return srcIdx.data(Akonadi2::Store::DomainObjectBaseRole).value()->identifier(); + case DomainObject: + return srcIdx.data(Akonadi2::Store::DomainObjectRole); } return QIdentityProxyModel::data(idx, role); } diff --git a/framework/mail/folderlistmodel.h b/framework/mail/folderlistmodel.h index 829bebff..9ce3ee79 100644 --- a/framework/mail/folderlistmodel.h +++ b/framework/mail/folderlistmodel.h @@ -17,8 +17,9 @@ public: enum Roles { Name = Qt::UserRole + 1, - Icon, - Id + Icon, + Id, + DomainObject }; QHash roleNames() const; diff --git a/framework/mail/maillistmodel.cpp b/framework/mail/maillistmodel.cpp index 80fb661f..e6a9c218 100644 --- a/framework/mail/maillistmodel.cpp +++ b/framework/mail/maillistmodel.cpp @@ -25,6 +25,7 @@ QHash< int, QByteArray > MailListModel::roleNames() const roles[Important] = "important"; roles[Id] = "id"; roles[MimeMessage] = "mimeMessage"; + roles[DomainObject] = "domainObject"; return roles; } @@ -70,3 +71,50 @@ void MailListModel::runQuery(const Akonadi2::Query &query) setSourceModel(m_model.data()); } +void MailListModel::setParentFolder(const QVariant &parentFolder) +{ + auto folder = parentFolder.value(); + if (!folder) { + qWarning() << "No folder: " << parentFolder; + return; + } + Akonadi2::Query query; + query.syncOnDemand = false; + query.processAll = false; + query.liveQuery = true; + query.requestedProperties << "subject" << "sender" << "senderName" << "date" << "unread" << "important" << "folder"; + query.propertyFilter.insert("folder", folder->identifier()); + query.resources << folder->resourceInstanceIdentifier(); + qWarning() << "Running folder query: " << folder->resourceInstanceIdentifier() << folder->identifier(); + runQuery(query); +} + +QVariant MailListModel::parentFolder() const +{ + return QVariant(); +} + +void MailListModel::setMail(const QVariant &variant) +{ + auto mail = variant.value(); + if (!mail) { + qWarning() << "No mail: " << mail; + return; + } + Akonadi2::Query query; + query.syncOnDemand = false; + query.processAll = false; + query.liveQuery = false; + query.requestedProperties << "subject" << "sender" << "senderName" << "date" << "unread" << "important" << "mimeMessage"; + query.ids << mail->identifier(); + query.resources << mail->resourceInstanceIdentifier(); + qWarning() << "Running mail query: " << mail->resourceInstanceIdentifier() << mail->identifier(); + runQuery(query); +} + +QVariant MailListModel::mail() const +{ + return QVariant(); +} + + diff --git a/framework/mail/maillistmodel.h b/framework/mail/maillistmodel.h index b5fa7c57..7718477c 100644 --- a/framework/mail/maillistmodel.h +++ b/framework/mail/maillistmodel.h @@ -9,6 +9,8 @@ class MailListModel : public QIdentityProxyModel { Q_OBJECT + Q_PROPERTY (QVariant parentFolder READ parentFolder WRITE setParentFolder) + Q_PROPERTY (QVariant mail READ mail WRITE setMail) public: MailListModel(QObject *parent = Q_NULLPTR); @@ -31,6 +33,12 @@ public: QHash roleNames() const; void runQuery(const Akonadi2::Query &query); + + void setParentFolder(const QVariant &parentFolder); + QVariant parentFolder() const; + + void setMail(const QVariant &mail); + QVariant mail() const; private: QSharedPointer m_model; }; diff --git a/framework/mail/mailplugin.cpp b/framework/mail/mailplugin.cpp index b2939acf..bf92f4e7 100644 --- a/framework/mail/mailplugin.cpp +++ b/framework/mail/mailplugin.cpp @@ -1,23 +1,14 @@ #include "mailplugin.h" -#include "maillistcontroller.h" #include "maillistmodel.h" -#include "singlemailcontroller.h" -#include "folderlistcontroller.h" #include "folderlistmodel.h" -#include #include void MailPlugin::registerTypes (const char *uri) { - Q_ASSERT(uri == QLatin1String("org.kde.akonadi2.mail")); + Q_ASSERT(uri == QLatin1String("org.kde.kube.mail")); - qmlRegisterType(); - qmlRegisterType(uri, 1, 0, "FolderList"); - - qmlRegisterType(); - qmlRegisterType(uri, 1, 0, "MailList"); - - qmlRegisterType(uri, 1, 0, "SingleMail"); + qmlRegisterType(uri, 1, 0, "FolderListModel"); + qmlRegisterType(uri, 1, 0, "MailListModel"); } diff --git a/framework/mail/qmldir b/framework/mail/qmldir index 7ca3151b..fd54e5ee 100644 --- a/framework/mail/qmldir +++ b/framework/mail/qmldir @@ -1,3 +1,3 @@ -module org.kde.akonadi2.mail +module org.kde.kube.mail -plugin mailplugin \ No newline at end of file +plugin mailplugin -- cgit v1.2.3