summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--applications/kmail-quick/MailListView.qml64
-rw-r--r--framework/CMakeLists.txt29
-rw-r--r--framework/mail/CMakeLists.txt12
-rw-r--r--framework/mail/maillistcontroller.cpp35
-rw-r--r--framework/mail/maillistcontroller.h31
-rw-r--r--framework/mail/maillistmodel.cpp73
-rw-r--r--framework/mail/maillistmodel.h29
-rw-r--r--framework/mail/mailplugin.cpp13
-rw-r--r--framework/mail/mailplugin.h13
-rw-r--r--framework/mail/qmldir3
10 files changed, 302 insertions, 0 deletions
diff --git a/applications/kmail-quick/MailListView.qml b/applications/kmail-quick/MailListView.qml
new file mode 100644
index 00000000..a968bc72
--- /dev/null
+++ b/applications/kmail-quick/MailListView.qml
@@ -0,0 +1,64 @@
1/*
2 * Copyright (C) 2015 Michael Bohlender <michael.bohlender@kdemail.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, see <http://www.gnu.org/licenses/>.
16 */
17
18import QtQuick 2.4
19import QtQuick.Controls 1.3
20import QtQuick.Layouts 1.1
21
22import org.kde.akonadi2.mail 1.0
23
24Item {
25 id: root
26
27 MailList {
28 id: mailList
29
30 query: "Some Query"
31
32 }
33
34 Button {
35 id: button
36
37 anchors {
38 top: parent.top
39 right: parent.right
40 left: parent.left
41 }
42
43 text: "add mail"
44
45 onClicked: mailList.addMail("test test test");
46 }
47
48 ListView {
49
50 anchors {
51 top: button.bottom
52 left: parent.left
53 right: parent.right
54 bottom: parent.bottom
55 }
56
57 model: mailList.model
58
59 delegate: Label {
60
61 text: model.subject
62 }
63 }
64} \ No newline at end of file
diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt
new file mode 100644
index 00000000..37c15e16
--- /dev/null
+++ b/framework/CMakeLists.txt
@@ -0,0 +1,29 @@
1cmake_minimum_required(VERSION 2.8.12)
2
3
4# ECM setup
5find_package(ECM 0.0.10 REQUIRED NO_MODULE)
6set(CMAKE_MODULE_PATH
7 ${ECM_MODULE_PATH}
8 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules
9 ${CMAKE_MODULE_PATH})
10
11include(FeatureSummary)
12include(GenerateExportHeader)
13include(ECMGenerateHeaders)
14include(ECMPackageConfigHelpers)
15include(KDEInstallDirs)
16
17find_package(Qt5 COMPONENTS REQUIRED Core Qml)
18
19set(CMAKE_AUTOMOC ON)
20add_definitions("-Wall -std=c++0x -g")
21include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/common)
22
23enable_testing()
24
25set(AKONADI2_RESOURCE_PLUGINS_PATH ${QT_PLUGIN_INSTALL_DIR}/akonadi2/resources)
26
27add_subdirectory(mail)
28
29feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
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 @@
1set(mailplugin_SRCS
2 mailplugin.cpp
3 maillistcontroller.cpp
4 maillistmodel.cpp
5)
6
7add_library(mailplugin SHARED ${mailplugin_SRCS})
8
9qt5_use_modules(mailplugin Core Quick Qml)
10
11install(TARGETS mailplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/akonadi2/mail)
12install(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 @@
1#include "maillistcontroller.h"
2
3#include <QStringList>
4
5MailListController::MailListController(QObject *parent) : QObject(parent), m_model(new MailListModel)
6{
7}
8
9MailListModel *MailListController::model() const
10{
11 return m_model.data();
12}
13
14QString MailListController::query() const
15{
16 return m_query;
17}
18
19void MailListController::setQuery(const QString &query)
20{
21 if ( m_query != query) {
22 m_query = query;
23 m_model->runQuery(query);
24 emit queryChanged();
25 }
26}
27
28void MailListController::addMail(QString subject)
29{
30 QStringList list;
31
32 list << subject;
33
34 m_model->addMails(list);
35}
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 @@
1#pragma once
2
3#include "maillistmodel.h"
4
5#include <QObject>
6#include <QScopedPointer>
7#include <QString>
8
9class MailListController : public QObject
10{
11 Q_OBJECT
12 Q_PROPERTY (QString query READ query WRITE setQuery NOTIFY queryChanged)
13 Q_PROPERTY (MailListModel *model READ model CONSTANT)
14
15public:
16 explicit MailListController(QObject *parent = Q_NULLPTR);
17
18 QString query() const;
19 void setQuery(const QString &query);
20 MailListModel *model() const;
21
22signals:
23 void queryChanged();
24
25public slots:
26 void addMail(QString subject);
27
28private:
29 QString m_query;
30 QScopedPointer<MailListModel> m_model;
31}; \ 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 @@
1#include "maillistmodel.h"
2
3#include <QDateTime>
4
5MailListModel::MailListModel(QObject *parent) : QAbstractListModel(parent), m_msgs()
6{
7
8}
9
10MailListModel::~MailListModel()
11{
12
13}
14
15QHash< int, QByteArray > MailListModel::roleNames() const
16{
17 QHash<int, QByteArray> roles;
18
19 roles[Subject] = "subject";
20
21 return roles;
22}
23
24
25QVariant MailListModel::data(const QModelIndex &index, int role) const
26{
27 if (!index.isValid()) {
28 return QVariant();
29 }
30
31 if (index.row() >= m_msgs.count() || index.row() < 0) {
32 return QVariant();
33 }
34 switch (role) {
35 case Subject:
36 return m_msgs.at(index.row());
37 }
38 return QVariant();
39}
40
41int MailListModel::rowCount(const QModelIndex &parent) const
42{
43 return m_msgs.size();
44}
45
46bool MailListModel::addMails(const QStringList &items)
47{
48 beginInsertRows(QModelIndex(), rowCount(), rowCount() + items.size() - 1);
49
50 m_msgs += items;
51
52 endInsertRows();
53
54 return true;
55}
56
57void MailListModel::clearMails()
58{
59 if (!m_msgs.isEmpty()) {
60 beginResetModel();
61 m_msgs.clear();
62 endResetModel();
63 }
64}
65
66void MailListModel::runQuery(const QString& query)
67{
68 clearMails();
69 QStringList itemlist;
70 itemlist << "I feel tiny" << "Big News!" << "[FUN] lets do things";
71 addMails(itemlist);
72}
73
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 @@
1#pragma once
2
3#include <QAbstractListModel>
4#include <QStringList>
5
6class MailListModel : public QAbstractListModel
7{
8 Q_OBJECT
9
10public:
11 MailListModel(QObject *parent = Q_NULLPTR);
12 ~MailListModel();
13
14 enum Roles {
15 Subject = Qt::UserRole + 1
16 };
17
18 QHash<int, QByteArray> roleNames() const;
19 QVariant data(const QModelIndex &index, int role) const;
20 int rowCount(const QModelIndex &parent = QModelIndex()) const;
21
22 bool addMails(const QStringList &items);
23 void clearMails();
24
25 void runQuery(const QString &query);
26
27private:
28 QStringList m_msgs;
29}; \ 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 @@
1#include "mailplugin.h"
2
3#include "maillistcontroller.h"
4#include "maillistmodel.h"
5
6#include <QtQml>
7
8void MailPlugin::registerTypes (const char *uri)
9{
10 Q_ASSERT(uri == QLatin1String("org.kde.akonadi2.mail"));
11 qmlRegisterType<MailListController>(uri, 1, 0, "MailList");
12 qmlRegisterType<MailListModel>(uri, 1, 0, "MailListModel");
13} \ 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 @@
1#pragma once
2
3#include <QQmlEngine>
4#include <QQmlExtensionPlugin>
5
6class MailPlugin : public QQmlExtensionPlugin
7{
8 Q_OBJECT
9 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
10
11public:
12 virtual void registerTypes(const char *uri);
13}; \ 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 @@
1module org.kde.akonadi2.mail
2
3plugin mailplugin \ No newline at end of file