From 8bf3d43866ed23edc667b8c64295687e6e4bbc3d Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 3 Aug 2018 14:51:37 +0200 Subject: Calculate indentation --- framework/src/domain/perioddayeventmodel.cpp | 26 +++++++++++++++++++++++--- framework/src/domain/perioddayeventmodel.h | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) (limited to 'framework/src') diff --git a/framework/src/domain/perioddayeventmodel.cpp b/framework/src/domain/perioddayeventmodel.cpp index 4463e252..39cc1bc3 100644 --- a/framework/src/domain/perioddayeventmodel.cpp +++ b/framework/src/domain/perioddayeventmodel.cpp @@ -183,11 +183,29 @@ QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const case Events: { auto result = QVariantList{}; + QMap sorted; for (int i = 0; i < partitionedEvents[day].size(); ++i) { - auto eventId = index(i, 0, id); + const auto eventId = index(i, 0, id); + sorted.insert(data(eventId, StartTime).toDateTime().time(), i); + } + + QMap indentationStack; + for (auto it = sorted.begin(); it != sorted.end(); it++) { + auto eventId = index(it.value(), 0, id); SinkTrace() << "Appending event:" << data(eventId, Summary); - auto startTime = data(eventId, StartTime).toDateTime().time(); + const auto startTime = data(eventId, StartTime).toDateTime().time(); + + //Remove all dates before startTime + for (auto it = indentationStack.begin(); it != indentationStack.end();) { + if (it.key() < startTime) { + it = indentationStack.erase(it); + } else { + ++it; + } + } + const int indentation = indentationStack.size(); + indentationStack.insert(data(eventId, EndTime).toDateTime().time(), 0); result.append(QVariantMap{ {"text", data(eventId, Summary)}, @@ -195,7 +213,7 @@ QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const {"starts", startTime.hour() + startTime.minute() / 60.}, {"duration", data(eventId, Duration)}, {"color", data(eventId, Color)}, - {"indention", 0}, + {"indentation", indentation}, }); } @@ -218,6 +236,8 @@ QVariant PeriodDayEventModel::data(const QModelIndex &id, int role) const return event->getDescription(); case StartTime: return event->getStartTime(); + case EndTime: + return event->getEndTime(); case Duration: { auto start = event->getStartTime(); auto end = event->getEndTime(); diff --git a/framework/src/domain/perioddayeventmodel.h b/framework/src/domain/perioddayeventmodel.h index a0410e2e..2eaa7f1c 100644 --- a/framework/src/domain/perioddayeventmodel.h +++ b/framework/src/domain/perioddayeventmodel.h @@ -98,6 +98,7 @@ public: Summary, Description, StartTime, + EndTime, Duration, Color }; -- cgit v1.2.3