From 1343ea42bdec8f70936ea4e41586993260e2d265 Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Fri, 20 Jan 2017 23:04:17 +0100 Subject: [PATCH] Now the conflict severity is drawn. --- src/mvc/delegate.cpp | 26 +++++++++++++++++++++----- src/mvc/event.cpp | 21 ++++++++++++++++----- src/mvc/event.h | 2 +- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/mvc/delegate.cpp b/src/mvc/delegate.cpp index 065d21d..c2dd111 100644 --- a/src/mvc/delegate.cpp +++ b/src/mvc/delegate.cpp @@ -60,12 +60,28 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons if(hasParent(index)) { + Event *event = static_cast(index.internalPointer()); + + // determine severity of conflict + Favourite eventTimeConflict = event->timeConflict(); // cache value as event->timeConflict is expensive + enum ConflictSeverity {csNone, csWeak, csStrong} conflictSeverity; + switch (event->favourite()) { + case Favourite_strong: + conflictSeverity = (eventTimeConflict == Favourite_strong) ? csStrong : csNone; + break; + case Favourite_weak: + conflictSeverity = (eventTimeConflict == Favourite_no) ? csNone : csWeak; + break; + case Favourite_no: + conflictSeverity = csNone; + break; + } + // entry horizontal layout: // * spacer (aka y position of image) // * image // * rest is text, which is 1 line of title with big letters and 2 lines of Presenter and Track int aux = option.rect.height() - SPACER - mControls[FavouriteControlStrong]->image()->height(); - Event *event = static_cast(index.internalPointer()); // font SMALL QFont fontSmall = option.font; @@ -88,8 +104,8 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons QFontMetrics fmBigB(fontBigB); // background (in case of time conflicts) - if(event->hasTimeConflict()) { - painter->setBrush(Qt::yellow); + if (conflictSeverity != csNone) { + painter->setBrush(conflictSeverity == csStrong ? Qt::yellow : QColor("lightyellow")); painter->setPen(Qt::NoPen); painter->drawRect(option.rect); } @@ -122,14 +138,14 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons else mControls[AlarmControlOff]->paint(painter, option.rect); - if(event->hasTimeConflict()) + if(eventTimeConflict != Favourite_no) mControls[WarningControl]->paint(painter, option.rect); // draw texts // it starts just below the image // ("position of text" is lower-left angle of the first letter, // so the first line is actually at the same height as the image) - painter->setPen(QPen(event->hasTimeConflict() ? Qt::black : textColor)); + painter->setPen(QPen(conflictSeverity != csNone ? Qt::black : textColor)); QPointF titlePointF(option.rect.x() + SPACER, option.rect.y() + SPACER + mControls[FavouriteControlStrong]->image()->height()); QTime start = event->start().time(); diff --git a/src/mvc/event.cpp b/src/mvc/event.cpp index 47a7494..35fb3c7 100644 --- a/src/mvc/event.cpp +++ b/src/mvc/event.cpp @@ -192,12 +192,23 @@ QMap Event::links() return mLinksList; } -bool Event::hasTimeConflict() const -{ - if(favourite() == Favourite_no) // if it's not favourite, it can't have time-conflict - return false; +Favourite Event::timeConflict() const { + if (favourite() == Favourite_no) // if it's not favourite, it can't have time-conflict + return Favourite_no; + + QList events = conflictEvents(id(),conferenceId()); + + // find "strongest" conflict + Favourite f = Favourite_no; + for (int i = 0; i != events.size(); ++i) { + switch (events[i].favourite()) { + case Favourite_strong: f = Favourite_strong; break; + case Favourite_weak: if (f == Favourite_no) f = Favourite_weak; break; + case Favourite_no: break; + } + } + return f; - return conflictEvents(id(),conferenceId()).count() > 0; } void Event::cycleFavourite() { diff --git a/src/mvc/event.h b/src/mvc/event.h index bb0cc34..5451989 100644 --- a/src/mvc/event.h +++ b/src/mvc/event.h @@ -65,7 +65,7 @@ public: QString language() const { return value("language").toString(); } Favourite favourite() const { return static_cast(value("favourite").toInt()); } bool hasAlarm() const { return value("alarm").toBool(); } - bool hasTimeConflict() const; + Favourite timeConflict() const; QString tag() const { return value("tag").toString(); } QString title() const { return value("title").toString(); } QString subtitle() const { return value("subtitle").toString(); } -- 2.39.5