From 3b455f3b2e557fa4f1ca69c042309612acf7fe59 Mon Sep 17 00:00:00 2001 From: Michael Bohlender Date: Fri, 16 Oct 2015 17:11:22 +0200 Subject: initial mailplugin with maillistcontroller, model and view --- framework/mail/CMakeLists.txt | 12 ++++++ framework/mail/maillistcontroller.cpp | 35 +++++++++++++++++ framework/mail/maillistcontroller.h | 31 +++++++++++++++ framework/mail/maillistmodel.cpp | 73 +++++++++++++++++++++++++++++++++++ framework/mail/maillistmodel.h | 29 ++++++++++++++ framework/mail/mailplugin.cpp | 13 +++++++ framework/mail/mailplugin.h | 13 +++++++ framework/mail/qmldir | 3 ++ 8 files changed, 209 insertions(+) create mode 100644 framework/mail/CMakeLists.txt create mode 100644 framework/mail/maillistcontroller.cpp create mode 100644 framework/mail/maillistcontroller.h create mode 100644 framework/mail/maillistmodel.cpp create mode 100644 framework/mail/maillistmodel.h create mode 100644 framework/mail/mailplugin.cpp create mode 100644 framework/mail/mailplugin.h create mode 100644 framework/mail/qmldir (limited to 'framework/mail') diff --git a/framework/mail/CMakeLists.txt b/framework/mail/CMakeLists.txt new file mode 100644 index 00000000..100b9d9e --- /dev/null +++ b/framework/mail/CMakeLists.txt @@ -0,0 +1,12 @@ +set(mailplugin_SRCS + mailplugin.cpp + maillistcontroller.cpp + maillistmodel.cpp +) + +add_library(mailplugin SHARED ${mailplugin_SRCS}) + +qt5_use_modules(mailplugin Core Quick Qml) + +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 diff --git a/framework/mail/maillistcontroller.cpp b/framework/mail/maillistcontroller.cpp new file mode 100644 index 00000000..60d29f7c --- /dev/null +++ b/framework/mail/maillistcontroller.cpp @@ -0,0 +1,35 @@ +#include "maillistcontroller.h" + +#include + +MailListController::MailListController(QObject *parent) : QObject(parent), m_model(new MailListModel) +{ +} + +MailListModel *MailListController::model() const +{ + return m_model.data(); +} + +QString MailListController::query() const +{ + return m_query; +} + +void MailListController::setQuery(const QString &query) +{ + if ( m_query != query) { + m_query = query; + m_model->runQuery(query); + emit queryChanged(); + } +} + +void MailListController::addMail(QString subject) +{ + QStringList list; + + list << subject; + + m_model->addMails(list); +} diff --git a/framework/mail/maillistcontroller.h b/framework/mail/maillistcontroller.h new file mode 100644 index 00000000..8aa5713b --- /dev/null +++ b/framework/mail/maillistcontroller.h @@ -0,0 +1,31 @@ +#pragma once + +#include "maillistmodel.h" + +#include +#include +#include + +class MailListController : public QObject +{ + Q_OBJECT + Q_PROPERTY (QString query READ query WRITE setQuery NOTIFY queryChanged) + Q_PROPERTY (MailListModel *model READ model CONSTANT) + +public: + explicit MailListController(QObject *parent = Q_NULLPTR); + + QString query() const; + void setQuery(const QString &query); + MailListModel *model() const; + +signals: + void queryChanged(); + +public slots: + void addMail(QString subject); + +private: + QString m_query; + QScopedPointer m_model; +}; \ No newline at end of file diff --git a/framework/mail/maillistmodel.cpp b/framework/mail/maillistmodel.cpp new file mode 100644 index 00000000..14219ee2 --- /dev/null +++ b/framework/mail/maillistmodel.cpp @@ -0,0 +1,73 @@ +#include "maillistmodel.h" + +#include + +MailListModel::MailListModel(QObject *parent) : QAbstractListModel(parent), m_msgs() +{ + +} + +MailListModel::~MailListModel() +{ + +} + +QHash< int, QByteArray > MailListModel::roleNames() const +{ + QHash roles; + + roles[Subject] = "subject"; + + return roles; +} + + +QVariant MailListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) { + return QVariant(); + } + + if (index.row() >= m_msgs.count() || index.row() < 0) { + return QVariant(); + } + switch (role) { + case Subject: + return m_msgs.at(index.row()); + } + return QVariant(); +} + +int MailListModel::rowCount(const QModelIndex &parent) const +{ + return m_msgs.size(); +} + +bool MailListModel::addMails(const QStringList &items) +{ + beginInsertRows(QModelIndex(), rowCount(), rowCount() + items.size() - 1); + + m_msgs += items; + + endInsertRows(); + + return true; +} + +void MailListModel::clearMails() +{ + if (!m_msgs.isEmpty()) { + beginResetModel(); + m_msgs.clear(); + endResetModel(); + } +} + +void MailListModel::runQuery(const QString& query) +{ + clearMails(); + QStringList itemlist; + itemlist << "I feel tiny" << "Big News!" << "[FUN] lets do things"; + addMails(itemlist); +} + diff --git a/framework/mail/maillistmodel.h b/framework/mail/maillistmodel.h new file mode 100644 index 00000000..72a26c59 --- /dev/null +++ b/framework/mail/maillistmodel.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +class MailListModel : public QAbstractListModel +{ + Q_OBJECT + +public: + MailListModel(QObject *parent = Q_NULLPTR); + ~MailListModel(); + + enum Roles { + Subject = Qt::UserRole + 1 + }; + + QHash roleNames() const; + QVariant data(const QModelIndex &index, int role) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + + bool addMails(const QStringList &items); + void clearMails(); + + void runQuery(const QString &query); + +private: + QStringList m_msgs; +}; \ No newline at end of file diff --git a/framework/mail/mailplugin.cpp b/framework/mail/mailplugin.cpp new file mode 100644 index 00000000..b9800541 --- /dev/null +++ b/framework/mail/mailplugin.cpp @@ -0,0 +1,13 @@ +#include "mailplugin.h" + +#include "maillistcontroller.h" +#include "maillistmodel.h" + +#include + +void MailPlugin::registerTypes (const char *uri) +{ + Q_ASSERT(uri == QLatin1String("org.kde.akonadi2.mail")); + qmlRegisterType(uri, 1, 0, "MailList"); + qmlRegisterType(uri, 1, 0, "MailListModel"); +} \ No newline at end of file diff --git a/framework/mail/mailplugin.h b/framework/mail/mailplugin.h new file mode 100644 index 00000000..e835c384 --- /dev/null +++ b/framework/mail/mailplugin.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +class MailPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + virtual void registerTypes(const char *uri); +}; \ No newline at end of file diff --git a/framework/mail/qmldir b/framework/mail/qmldir new file mode 100644 index 00000000..7ca3151b --- /dev/null +++ b/framework/mail/qmldir @@ -0,0 +1,3 @@ +module org.kde.akonadi2.mail + +plugin mailplugin \ No newline at end of file -- cgit v1.2.3