diff options
Diffstat (limited to 'framework/src/domain/perioddayeventmodel.cpp')
-rw-r--r-- | framework/src/domain/perioddayeventmodel.cpp | 38 |
1 files changed, 32 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()); |