X-Git-Url: https://git.toastfreeware.priv.at/debian/fosdem-schedule.git/blobdiff_plain/d24759e40202681c17ff790f6b7b8c3eb20bc277..refs/heads/upstream:/src/mvc/delegate.cpp?ds=sidebyside diff --git a/src/mvc/delegate.cpp b/src/mvc/delegate.cpp index ab0774f..cb7923d 100644 --- a/src/mvc/delegate.cpp +++ b/src/mvc/delegate.cpp @@ -23,6 +23,8 @@ #include #include +#include "room.h" + const int RADIUS = 10; const int SPACER = 10; @@ -59,7 +61,12 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons QPen borderPen(bkgrColor.darker()); if(hasParent(index)) { - int aux = option.rect.height() - mControls[FavouriteControlOn]->drawPoint().y() - mControls[FavouriteControlOn]->image()->height(); + // entry horisontal 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()); // font SMALL QFont fontSmall = option.font; fontSmall.setBold(false); @@ -83,7 +90,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons //int spacer = (fmSmall.boundingRect("999").width() < SPACER) ? SPACER : fmSmall.boundingRect("999").width(); //Time conflicts are colored differently - if(static_cast(index.internalPointer())->hasTimeConflict()) + if(event->hasTimeConflict()) bkgrColor = conflictColor; QLinearGradient itemGradient(option.rect.topLeft(), option.rect.bottomLeft()); @@ -128,32 +135,33 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons } // draw Controls - // favourite - if(static_cast(index.internalPointer())->isFavourite()) - painter->drawImage(mControls[FavouriteControlOn]->drawPoint(option.rect),*mControls[FavouriteControlOn]->image()); + foreach(Control* c, mControls.values()) { + c->setEnabled(false); + } + if(event->isFavourite()) + mControls[FavouriteControlOn]->paint(painter, option.rect); else - painter->drawImage(mControls[FavouriteControlOff]->drawPoint(option.rect),*mControls[FavouriteControlOff]->image()); + mControls[FavouriteControlOff]->paint(painter, option.rect); #ifdef MAEMO - // alarm - if(static_cast(index.internalPointer())->hasAlarm()) - painter->drawImage(mControls[AlarmControlOn]->drawPoint(option.rect),*mControls[AlarmControlOn]->image()); + if(event->hasAlarm()) + mControls[AlarmControlOn]->paint(painter, option.rect); else - painter->drawImage(mControls[AlarmControlOff]->drawPoint(option.rect),*mControls[AlarmControlOff]->image()); + mControls[AlarmControlOff]->paint(painter, option.rect); #endif - // map - painter->drawImage(mControls[MapControl]->drawPoint(option.rect),*mControls[MapControl]->image()); - // Time conflict - if(static_cast(index.internalPointer())->hasTimeConflict()) - painter->drawImage(mControls[WarningControl]->drawPoint(option.rect),*mControls[WarningControl]->image()); + if (event->room()->hasMap()) + mControls[MapControl]->paint(painter, option.rect); + if(event->hasTimeConflict()) + mControls[WarningControl]->paint(painter, option.rect); // draw texts - Event *event = static_cast(index.internalPointer()); - QPointF titlePointF(mControls[FavouriteControlOn]->drawPoint(option.rect)); - titlePointF.setX(option.rect.x()+SPACER); - titlePointF.setY(titlePointF.y()+mControls[FavouriteControlOn]->image()->height()); + // 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) + QPointF titlePointF(option.rect.x() + SPACER, + option.rect.y() + SPACER + mControls[FavouriteControlOn]->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->room()); + painter->drawText(titlePointF,start.toString("hh:mm") + "-" + start.addSecs(event->duration()).toString("hh:mm") + ", " + event->roomName()); // title titlePointF.setY(titlePointF.y()+fmBig.height()-fmBig.descent()); painter->setFont(fontBigB); @@ -317,75 +325,68 @@ Delegate::ControlId Delegate::whichControlClicked(const QModelIndex &aIndex, con while (i.hasNext()) { ControlId id = i.next(); - if(mControls[id]->drawRect(static_cast(parent())->visualRect(aIndex)).contains(aPoint)) + Control *control = mControls[id]; + if (control->enabled() + and control->drawRect(static_cast(parent())->visualRect(aIndex)).contains(aPoint)) { - if(id == WarningControl) - { - if(static_cast(aIndex.internalPointer())->hasTimeConflict()) - return id; - } - else - return id; + return id; } } return ControlNone; } +Delegate::Control::Control(ControlId aControlId, const QString &aImageName, const Control* prev_control) + : mId(aControlId) + , mImage(new QImage(aImageName)) + , mDrawPoint(QPoint(0,0)) + , mEnabled(false) +{ + QPoint p; + if (prev_control == NULL) { + p = QPoint(0, SPACER); + } else { + p = prev_control->drawPoint(); + } + p.setX(p.x()-image()->width()-SPACER); + setDrawPoint(p); +} + +void Delegate::Control::paint(QPainter* painter, const QRect rect) +{ + painter->drawImage(drawPoint(rect),*image()); + setEnabled(true); +} + void Delegate::defineControls() { - Control *control; - QPoint p(0,0); // FAVOURITE ICONs // on - control = new Control(FavouriteControlOn,QString(":icons/favourite-onBig.png")); - p = QPoint(0,SPACER); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(FavouriteControlOn,control); + mControls.insert(FavouriteControlOn, new Control(FavouriteControlOn, QString(":icons/favourite-onBig.png"), NULL)); // off - control = new Control(FavouriteControlOff,QString(":icons/favourite-offBig.png")); - p = QPoint(0,SPACER); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(FavouriteControlOff,control); + mControls.insert(FavouriteControlOff, new Control(FavouriteControlOff, QString(":icons/favourite-offBig.png"), NULL)); #ifdef MAEMO // ALARM ICONs // on - control = new Control(AlarmControlOn,QString(":icons/alarm-onBig.png")); - p = mControls[FavouriteControlOn]->drawPoint(); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(AlarmControlOn,control); + mControls.insert(AlarmControlOn, + new Control(AlarmControlOn, QString(":icons/alarm-onBig.png"), mControls[FavouriteControlOn])); // off - control = new Control(AlarmControlOff,QString(":icons/alarm-offBig.png")); - p = mControls[FavouriteControlOff]->drawPoint(); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(AlarmControlOff,control); + mControls.insert(AlarmControlOff, + new Control(AlarmControlOff, QString(":icons/alarm-offBig.png"), mControls[FavouriteControlOff])); // MAP ICON - control = new Control(MapControl,QString(":icons/compassBig.png")); - p = mControls[AlarmControlOn]->drawPoint(); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(MapControl,control); + mControls.insert(MapControl, + new Control(MapControl, QString(":icons/compassBig.png"), mControls[AlarmControlOn])); #else // MAP ICON - control = new Control(MapControl,QString(":icons/compassBig.png")); - p = mControls[FavouriteControlOn]->drawPoint(); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(MapControl,control); + mControls.insert(MapControl, + new Control(MapControl, QString(":icons/compassBig.png"), mControls[FavouriteControlOn])); #endif // WARNING ICON - control = new Control(WarningControl,QString(":icons/exclamation.png")); - p = mControls[MapControl]->drawPoint(); - p.setX(p.x()-control->image()->width()-SPACER); - control->setDrawPoint(p); - mControls.insert(WarningControl,control); + mControls.insert(WarningControl, + new Control(WarningControl, QString(":icons/exclamation.png"), mControls[MapControl])); } bool Delegate::isPointFromRect(const QPoint &aPoint, const QRect &aRect) const