+ if (eventStartTime >= groupStartTime.addSecs(timeSpan)) {
+ // a new group could be necessary
+ if (mGroups.last().mChildCount < minChildCount) {
+ // too few events in the group => no new group
+ // except a gap in time would occur that is longer than minTimeSpan
+ if (i > 0 && qMax(mEvents.at(i-1).start().time().addSecs(mEvents.at(i-1).duration()), groupEndTime).secsTo(eventStartTime) < minTimeSpan) {
+ timeSpan += minTimeSpan;
+ --i;
+ continue; // repeat with the same event
+ }
+ }
+
+ // a new group is necessary
+ mGroups.last().setTitle(mEvents);
+ groupStartTime = groupStartTime.addSecs(timeSpan);
+ groupEndTime = groupStartTime.addSecs(mEvents.at(i).duration());
+ mGroups << EventModel::Group("", i);
+ timeSpan = minTimeSpan;
+ }
+
+ // insert event into current group
+ mParents[mEvents.at(i).id()] = mGroups.count() - 1;
+ mGroups.last().mChildCount += 1;
+ groupEndTime = qMax(eventEndTime, groupEndTime);
+ }
+
+ // the last group needs a title as well
+ mGroups.last().setTitle(mEvents);
+
+ reset();
+}
+
+void EventModel::createTrackGroups() {
+ mGroups.clear();
+ mParents.clear();