X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/blobdiff_plain/4a87a3b569b03e6e3ccb9a2004e31ddc43d4df5d..102d186c946286839819bc3623fdddfcf5216877:/src/mvc/delegate.cpp diff --git a/src/mvc/delegate.cpp b/src/mvc/delegate.cpp index ef7dc7a..ae44cf6 100644 --- a/src/mvc/delegate.cpp +++ b/src/mvc/delegate.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2010 Ixonos Plc. - * Copyright (C) 2011-2015 Philipp Spitzer, gregor herrmann, Stefan Stahl + * Copyright (C) 2011-2017 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * @@ -26,7 +26,6 @@ #include "room.h" -const int RADIUS = 10; const int SPACER = 10; const double scaleFactor1 = 0.4; @@ -60,12 +59,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 = csNone; + 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[FavouriteControlOn]->image()->height(); - Event *event = static_cast(index.internalPointer()); + int aux = option.rect.height() - SPACER - mControls[FavouriteControlStrong]->image()->height(); // font SMALL QFont fontSmall = option.font; @@ -88,8 +103,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); } @@ -105,26 +120,33 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons foreach(Control* c, mControls.values()) { c->setEnabled(false); } - if(event->isFavourite()) - mControls[FavouriteControlOn]->paint(painter, option.rect); - else - mControls[FavouriteControlOff]->paint(painter, option.rect); + switch (event->favourite()) { + case Favourite_strong: + mControls[FavouriteControlStrong]->paint(painter, option.rect); + break; + case Favourite_weak: + mControls[FavouriteControlWeak]->paint(painter, option.rect); + break; + case Favourite_no: + mControls[FavouriteControlNo]->paint(painter, option.rect); + break; + } if(event->hasAlarm()) mControls[AlarmControlOn]->paint(painter, option.rect); 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[FavouriteControlOn]->image()->height()); + option.rect.y() + SPACER + mControls[FavouriteControlStrong]->image()->height()); QTime start = event->start().time(); painter->setFont(fontBig); painter->drawText(titlePointF,start.toString("hh:mm") + "-" + start.addSecs(event->duration()).toString("hh:mm") + ", " + event->roomName()); @@ -188,7 +210,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons // draw icons painter->setPen(QPen(textColor)); painter->setFont(fontSmall); - QImage *image = mControls[numFav ? FavouriteControlOn : FavouriteControlOff]->image(); + QImage *image = mControls[numFav ? FavouriteControlStrong : FavouriteControlNo]->image(); QPoint drawPoint = option.rect.topRight() - QPoint( @@ -214,7 +236,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons option.rect.x()+SPACER, option.rect.y()+option.rect.height()-fmBig.descent()); painter->setFont(fontBig); - painter->drawText(titlePointF,qVariantValue(index.data())); + painter->drawText(titlePointF,index.data().value()); } painter->restore(); @@ -306,18 +328,20 @@ void Delegate::Control::paint(QPainter* painter, const QRect rect) void Delegate::defineControls() { // FAVOURITE ICONs - // on - mControls.insert(FavouriteControlOn, new Control(FavouriteControlOn, QString(":icons/favourite-on.png"), NULL)); - // off - mControls.insert(FavouriteControlOff, new Control(FavouriteControlOff, QString(":icons/favourite-off.png"), NULL)); + // strong + mControls.insert(FavouriteControlStrong, new Control(FavouriteControlStrong, QString(":icons/favourite-strong.png"), NULL)); + // weak + mControls.insert(FavouriteControlWeak, new Control(FavouriteControlWeak, QString(":icons/favourite-weak.png"), NULL)); + // no + mControls.insert(FavouriteControlNo, new Control(FavouriteControlNo, QString(":icons/favourite-no.png"), NULL)); // ALARM ICONs // on mControls.insert(AlarmControlOn, - new Control(AlarmControlOn, QString(":icons/alarm-on.png"), mControls[FavouriteControlOn])); + new Control(AlarmControlOn, QString(":icons/alarm-on.png"), mControls[FavouriteControlStrong])); // off mControls.insert(AlarmControlOff, - new Control(AlarmControlOff, QString(":icons/alarm-off.png"), mControls[FavouriteControlOff])); + new Control(AlarmControlOff, QString(":icons/alarm-off.png"), mControls[FavouriteControlNo])); // WARNING ICON mControls.insert(WarningControl, new Control(WarningControl, QString(":icons/dialog-warning.png"), mControls[AlarmControlOff])); @@ -338,7 +362,7 @@ int Delegate::numberOfFavourities(const QModelIndex &index) const int nrofFavs = 0; for(int i=0; irowCount(index); i++) - if(static_cast(index.child(i,0).internalPointer())->isFavourite()) + if(static_cast(index.model()->index(i, 0, index).internalPointer())->favourite() != Favourite_no) nrofFavs++; return nrofFavs; @@ -351,7 +375,7 @@ int Delegate::numberOfAlarms(const QModelIndex &index) const int nrofAlarms = 0; for(int i=0; irowCount(index); i++) - if(static_cast(index.child(i,0).internalPointer())->hasAlarm()) + if(static_cast(index.model()->index(i, 0, index).internalPointer())->hasAlarm()) nrofAlarms++; return nrofAlarms;