diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-08-03 16:39:07 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-08-03 16:39:07 +0200 |
commit | cf716e2b12bcb871ab79886501822e569dab9a4c (patch) | |
tree | ebdf999a7a8776d13ac8a4a271601a574ed19b65 /framework | |
parent | c45ac2847fccc6f7699330a183a7514ff4ca609a (diff) | |
download | kube-cf716e2b12bcb871ab79886501822e569dab9a4c.tar.gz kube-cf716e2b12bcb871ab79886501822e569dab9a4c.zip |
Support for events spanning days
Diffstat (limited to 'framework')
-rw-r--r-- | framework/src/domain/perioddayeventmodel.cpp | 38 | ||||
-rw-r--r-- | framework/src/domain/perioddayeventmodel.h | 2 |
2 files changed, 34 insertions, 6 deletions
diff --git a/framework/src/domain/perioddayeventmodel.cpp b/framework/src/domain/perioddayeventmodel.cpp index 39cc1bc3..ed853129 100644 --- a/framework/src/domain/perioddayeventmodel.cpp +++ b/framework/src/domain/perioddayeventmodel.cpp | |||
@@ -85,9 +85,19 @@ void PeriodDayEventModel::partitionData() | |||
85 | } | 85 | } |
86 | 86 | ||
87 | int bucket = bucketOf(eventDate); | 87 | int bucket = bucketOf(eventDate); |
88 | |||
89 | SinkTrace() << "Adding event:" << event->getSummary() << "in bucket #" << bucket; | 88 | SinkTrace() << "Adding event:" << event->getSummary() << "in bucket #" << bucket; |
90 | partitionedEvents[bucket].append(event); | 89 | partitionedEvents[bucket].append(event); |
90 | |||
91 | //Also add the event to all other days it spans | ||
92 | QDate endDate = event->getEndTime().date(); | ||
93 | if (endDate.isValid()) { | ||
94 | const int endBucket = qMin(bucketOf(endDate), periodLength()); | ||
95 | for (int i = bucket + 1; i <= endBucket; i++) { | ||
96 | partitionedEvents[i].append(event); | ||
97 | } | ||
98 | |||
99 | } | ||
100 | |||
91 | } | 101 | } |
92 | 102 | ||
93 | endResetModel(); | 103 | endResetModel(); |
@@ -167,6 +177,22 @@ QByteArray PeriodDayEventModel::getColor(const QByteArray &calendar) const | |||
167 | return mCalendarCache->getProperty(calendar, "color").toByteArray(); | 177 | return mCalendarCache->getProperty(calendar, "color").toByteArray(); |
168 | } | 178 | } |
169 | 179 | ||
180 | QDateTime PeriodDayEventModel::getStartTimeOfDay(const QDateTime &dateTime, int day) const | ||
181 | { | ||
182 | if (bucketOf(dateTime.date()) < day) { | ||
183 | return QDateTime{mPeriodStart.addDays(day), QTime{0,0}}; | ||
184 | } | ||
185 | return dateTime; | ||
186 | } | ||
187 | |||
188 | QDateTime PeriodDayEventModel::getEndTimeOfDay(const QDateTime &dateTime, int day) const | ||
189 | { | ||
190 | if (bucketOf(dateTime.date()) > day) { | ||
191 | return QDateTime{mPeriodStart.addDays(day), QTime{23, 59, 59}}; | ||
192 | } | ||
193 | return dateTime; | ||
194 | } | ||
195 | |||
170 | QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const | 196 | QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const |
171 | { | 197 | { |
172 | if (id.internalId() == DAY_ID) { | 198 | if (id.internalId() == DAY_ID) { |
@@ -235,13 +261,13 @@ QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const | |||
235 | case Description: | 261 | case Description: |
236 | return event->getDescription(); | 262 | return event->getDescription(); |
237 | case StartTime: | 263 | case StartTime: |
238 | return event->getStartTime(); | 264 | return getStartTimeOfDay(event->getStartTime(), day); |
239 | case EndTime: | 265 | case EndTime: |
240 | return event->getEndTime(); | 266 | return getEndTimeOfDay(event->getEndTime(), day); |
241 | case Duration: { | 267 | case Duration: { |
242 | auto start = event->getStartTime(); | 268 | auto start = getStartTimeOfDay(event->getStartTime(), day); |
243 | auto end = event->getEndTime(); | 269 | auto end = getEndTimeOfDay(event->getEndTime(), day); |
244 | return start.secsTo(end) / 3600; | 270 | return qRound(start.secsTo(end) / 3600.0); |
245 | } | 271 | } |
246 | case Color: | 272 | case Color: |
247 | return getColor(event->getCalendar()); | 273 | return getColor(event->getCalendar()); |
diff --git a/framework/src/domain/perioddayeventmodel.h b/framework/src/domain/perioddayeventmodel.h index 2eaa7f1c..2d1d0177 100644 --- a/framework/src/domain/perioddayeventmodel.h +++ b/framework/src/domain/perioddayeventmodel.h | |||
@@ -126,6 +126,8 @@ private: | |||
126 | void updateQuery(); | 126 | void updateQuery(); |
127 | void partitionData(); | 127 | void partitionData(); |
128 | QByteArray getColor(const QByteArray &calendar) const; | 128 | QByteArray getColor(const QByteArray &calendar) const; |
129 | QDateTime getStartTimeOfDay(const QDateTime &dateTime, int day) const; | ||
130 | QDateTime getEndTimeOfDay(const QDateTime &dateTime, int day) const; | ||
129 | 131 | ||
130 | int bucketOf(const QDate &candidate) const; | 132 | int bucketOf(const QDate &candidate) const; |
131 | 133 | ||