summaryrefslogtreecommitdiffstats
path: root/framework
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2018-05-14 16:19:43 +0200
committerMinijackson <minijackson@riseup.net>2018-05-15 11:36:32 +0200
commitb234c6c74ba76e8d58ab9a55ab1054eb761697e1 (patch)
tree116d2ec96bb51919ae7c1c274b31178f1faf059b /framework
parentd353ec997f06891455dce9b51333687da670a03e (diff)
downloadkube-b234c6c74ba76e8d58ab9a55ab1054eb761697e1.tar.gz
kube-b234c6c74ba76e8d58ab9a55ab1054eb761697e1.zip
Implement DayLongEventModel and integrate it to calendar
Diffstat (limited to 'framework')
-rw-r--r--framework/src/CMakeLists.txt1
-rw-r--r--framework/src/domain/daylongeventmodel.cpp123
-rw-r--r--framework/src/domain/daylongeventmodel.h69
-rw-r--r--framework/src/domain/perioddayeventmodel.cpp2
-rw-r--r--framework/src/domain/perioddayeventmodel.h2
-rw-r--r--framework/src/frameworkplugin.cpp2
6 files changed, 199 insertions, 0 deletions
diff --git a/framework/src/CMakeLists.txt b/framework/src/CMakeLists.txt
index d80fe284..fab7bf20 100644
--- a/framework/src/CMakeLists.txt
+++ b/framework/src/CMakeLists.txt
@@ -20,6 +20,7 @@ add_library(kubeframework SHARED
20 domain/maillistmodel.cpp 20 domain/maillistmodel.cpp
21 domain/folderlistmodel.cpp 21 domain/folderlistmodel.cpp
22 domain/perioddayeventmodel.cpp 22 domain/perioddayeventmodel.cpp
23 domain/daylongeventmodel.cpp
23 domain/composercontroller.cpp 24 domain/composercontroller.cpp
24 domain/modeltest.cpp 25 domain/modeltest.cpp
25 domain/retriever.cpp 26 domain/retriever.cpp
diff --git a/framework/src/domain/daylongeventmodel.cpp b/framework/src/domain/daylongeventmodel.cpp
new file mode 100644
index 00000000..c6d5776e
--- /dev/null
+++ b/framework/src/domain/daylongeventmodel.cpp
@@ -0,0 +1,123 @@
1/*
2 Copyright (c) 2018 Michael Bohlender <michael.bohlender@kdemail.net>
3 Copyright (c) 2018 Christian Mollekopf <mollekopf@kolabsys.com>
4 Copyright (c) 2018 Rémi Nicole <minijackson@riseup.net>
5
6 This library is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Library General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or (at your
9 option) any later version.
10
11 This library is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14 License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301, USA.
20*/
21
22#include "daylongeventmodel.h"
23
24#include <sink/log.h>
25#include <sink/query.h>
26#include <sink/store.h>
27
28DayLongEventModel::DayLongEventModel(QObject *parent) : QSortFilterProxyModel(parent)
29{
30 Sink::Query query;
31 query.setFlags(Sink::Query::LiveQuery);
32 query.request<Event::Summary>();
33 query.request<Event::Description>();
34 query.request<Event::StartTime>();
35 query.request<Event::EndTime>();
36
37 query.filter<Event::AllDay>(true);
38
39 eventModel = Sink::Store::loadModel<Event>(query);
40
41 setSourceModel(eventModel.data());
42}
43
44QHash<int, QByteArray> DayLongEventModel::roleNames() const
45{
46 return {
47 {Summary, "summary"},
48 {Description, "description"},
49 {StartDate, "starts"},
50 {Duration, "duration"},
51 };
52}
53
54QVariant DayLongEventModel::data(const QModelIndex &idx, int role) const
55{
56 auto srcIdx = mapToSource(idx);
57 auto event = srcIdx.data(Sink::Store::DomainObjectRole).value<Event::Ptr>();
58
59 switch (role) {
60 case Summary:
61 return event->getSummary();
62 case Description:
63 return event->getDescription();
64 case StartDate: {
65 auto dayIndex = mPeriodStart.daysTo(event->getStartTime().date());
66 if (dayIndex < 0) {
67 return 0;
68 }
69
70 return dayIndex;
71 }
72 case Duration:
73 return event->getStartTime().date().daysTo(event->getEndTime().date());
74 }
75
76 return QSortFilterProxyModel::data(idx, role);
77}
78
79bool DayLongEventModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
80{
81 auto idx = sourceModel()->index(sourceRow, 0, sourceParent);
82 auto event = idx.data(Sink::Store::DomainObjectRole).value<Event::Ptr>();
83
84 auto eventStart = event->getStartTime().date();
85 auto eventEnd = event->getEndTime().date();
86
87 if (!eventStart.isValid() || !eventEnd.isValid()) {
88 SinkWarning() << "Invalid date in the eventModel, ignoring...";
89 return false;
90 }
91
92 return eventStart < mPeriodStart.addDays(mPeriodLength) && eventEnd >= mPeriodStart;
93}
94
95QDate DayLongEventModel::periodStart() const
96{
97 return mPeriodStart;
98}
99
100void DayLongEventModel::setPeriodStart(const QDate &start)
101{
102 if (!start.isValid()) {
103 SinkWarning() << "Passed an invalid starting date in setPeriodStart, ignoring...";
104 return;
105 }
106
107 mPeriodStart = start;
108}
109
110void DayLongEventModel::setPeriodStart(const QVariant &start)
111{
112 setPeriodStart(start.toDate());
113}
114
115int DayLongEventModel::periodLength() const
116{
117 return mPeriodLength;
118}
119
120void DayLongEventModel::setPeriodLength(int length)
121{
122 mPeriodLength = length;
123}
diff --git a/framework/src/domain/daylongeventmodel.h b/framework/src/domain/daylongeventmodel.h
new file mode 100644
index 00000000..a4a291df
--- /dev/null
+++ b/framework/src/domain/daylongeventmodel.h
@@ -0,0 +1,69 @@
1/*
2 Copyright (c) 2018 Michael Bohlender <michael.bohlender@kdemail.net>
3 Copyright (c) 2018 Christian Mollekopf <mollekopf@kolabsys.com>
4 Copyright (c) 2018 Rémi Nicole <minijackson@riseup.net>
5
6 This library is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Library General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or (at your
9 option) any later version.
10
11 This library is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14 License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301, USA.
20*/
21
22#pragma once
23#include "kube_export.h"
24#include <sink/applicationdomaintype.h>
25
26#include <QList>
27#include <QSharedPointer>
28#include <QSortFilterProxyModel>
29#include <QVector>
30
31class KUBE_EXPORT DayLongEventModel : public QSortFilterProxyModel
32{
33 Q_OBJECT
34
35 Q_PROPERTY(QVariant start READ periodStart WRITE setPeriodStart)
36 Q_PROPERTY(int length READ periodLength WRITE setPeriodLength)
37
38public:
39 using Event = Sink::ApplicationDomain::Event;
40
41 enum Roles
42 {
43 Summary = Qt::UserRole + 1,
44 Description,
45 StartDate,
46 Duration,
47 };
48 Q_ENUM(Roles);
49
50 DayLongEventModel(QObject *parent = nullptr);
51 ~DayLongEventModel() = default;
52
53 QHash<int, QByteArray> roleNames() const override;
54 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
55
56 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
57
58 QDate periodStart() const;
59 void setPeriodStart(const QDate &);
60 void setPeriodStart(const QVariant &);
61 int periodLength() const;
62 void setPeriodLength(int);
63
64private:
65 QSharedPointer<QAbstractItemModel> eventModel;
66
67 QDate mPeriodStart;
68 int mPeriodLength = 7;
69};
diff --git a/framework/src/domain/perioddayeventmodel.cpp b/framework/src/domain/perioddayeventmodel.cpp
index 637e5584..827b4d4f 100644
--- a/framework/src/domain/perioddayeventmodel.cpp
+++ b/framework/src/domain/perioddayeventmodel.cpp
@@ -39,6 +39,8 @@ PeriodDayEventModel::PeriodDayEventModel(QObject *parent)
39 query.request<Event::StartTime>(); 39 query.request<Event::StartTime>();
40 query.request<Event::EndTime>(); 40 query.request<Event::EndTime>();
41 41
42 query.filter<Event::AllDay>(false);
43
42 eventModel = Sink::Store::loadModel<Event>(query); 44 eventModel = Sink::Store::loadModel<Event>(query);
43 45
44 QObject::connect(eventModel.data(), &QAbstractItemModel::dataChanged, this, &PeriodDayEventModel::partitionData); 46 QObject::connect(eventModel.data(), &QAbstractItemModel::dataChanged, this, &PeriodDayEventModel::partitionData);
diff --git a/framework/src/domain/perioddayeventmodel.h b/framework/src/domain/perioddayeventmodel.h
index ab04df50..9458fc03 100644
--- a/framework/src/domain/perioddayeventmodel.h
+++ b/framework/src/domain/perioddayeventmodel.h
@@ -33,6 +33,8 @@
33// Facility used to get a restricted period into a Sink model comprised of 33// Facility used to get a restricted period into a Sink model comprised of
34// events, partitioned according to the day the events take place. 34// events, partitioned according to the day the events take place.
35// 35//
36// Day-long events are filtered out.
37//
36// Model Format 38// Model Format
37// ============ 39// ============
38// 40//
diff --git a/framework/src/frameworkplugin.cpp b/framework/src/frameworkplugin.cpp
index 2eb53237..91d7a5dd 100644
--- a/framework/src/frameworkplugin.cpp
+++ b/framework/src/frameworkplugin.cpp
@@ -23,6 +23,7 @@
23#include "domain/maillistmodel.h" 23#include "domain/maillistmodel.h"
24#include "domain/folderlistmodel.h" 24#include "domain/folderlistmodel.h"
25#include "domain/perioddayeventmodel.h" 25#include "domain/perioddayeventmodel.h"
26#include "domain/daylongeventmodel.h"
26#include "domain/composercontroller.h" 27#include "domain/composercontroller.h"
27#include "domain/mime/messageparser.h" 28#include "domain/mime/messageparser.h"
28#include "domain/retriever.h" 29#include "domain/retriever.h"
@@ -122,6 +123,7 @@ void FrameworkPlugin::registerTypes (const char *uri)
122 qmlRegisterType<FolderListModel>(uri, 1, 0, "FolderListModel"); 123 qmlRegisterType<FolderListModel>(uri, 1, 0, "FolderListModel");
123 qmlRegisterType<MailListModel>(uri, 1, 0, "MailListModel"); 124 qmlRegisterType<MailListModel>(uri, 1, 0, "MailListModel");
124 qmlRegisterType<PeriodDayEventModel>(uri, 1, 0, "PeriodDayEventModel"); 125 qmlRegisterType<PeriodDayEventModel>(uri, 1, 0, "PeriodDayEventModel");
126 qmlRegisterType<DayLongEventModel>(uri, 1, 0, "DayLongEventModel");
125 qmlRegisterType<ComposerController>(uri, 1, 0, "ComposerController"); 127 qmlRegisterType<ComposerController>(uri, 1, 0, "ComposerController");
126 qmlRegisterType<Kube::ControllerAction>(uri, 1, 0, "ControllerAction"); 128 qmlRegisterType<Kube::ControllerAction>(uri, 1, 0, "ControllerAction");
127 qmlRegisterType<MessageParser>(uri, 1, 0, "MessageParser"); 129 qmlRegisterType<MessageParser>(uri, 1, 0, "MessageParser");