X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/blobdiff_plain/e6ab8a2351ae5a228624dd5de074862ad6a3132d..4147e080e214fad81d1d3bc25e50bd1c11b3c4c7:/src/mvc/delegate.cpp diff --git a/src/mvc/delegate.cpp b/src/mvc/delegate.cpp index 9d4c8df..7e4724c 100644 --- a/src/mvc/delegate.cpp +++ b/src/mvc/delegate.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2010 Ixonos Plc. - * Copyright (C) 2011 Philipp Spitzer, gregor herrmann + * Copyright (C) 2011-2012 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * @@ -51,23 +51,22 @@ Delegate::~Delegate() void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - if(!mViewPtr) + if (!mViewPtr) return; painter->save(); - QColor bkgrColor = Qt::cyan; - //QColor bkgrColor = QColor(0xAA,0xAA,0xAA); - QColor conflictColor = Qt::yellow; - QPen borderPen(bkgrColor.darker()); + QColor textColor = option.palette.color(QPalette::Text); + if(hasParent(index)) { - // entry horisontal layout: + // 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()); + // font SMALL QFont fontSmall = option.font; fontSmall.setBold(false); @@ -76,63 +75,30 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons // font SMALL bold QFont fontSmallB = fontSmall; fontSmallB.setBold(true); - QFontMetrics fmSmallB(fontSmallB); // font BIG QFont fontBig = option.font; fontBig.setBold(false); fontBig.setPixelSize(aux*0.33); QFontMetrics fmBig(fontBig); + // font BIG bold QFont fontBigB = fontBig; fontBigB.setBold(true); QFontMetrics fmBigB(fontBigB); - //int spacer = (fmSmall.boundingRect("999").width() < SPACER) ? SPACER : fmSmall.boundingRect("999").width(); - - //Time conflicts are colored differently - if(event->hasTimeConflict()) - bkgrColor = conflictColor; - - QLinearGradient itemGradient(option.rect.topLeft(), option.rect.bottomLeft()); - itemGradient.setColorAt(0.0, Qt::white); - itemGradient.setColorAt(0.25, bkgrColor); - itemGradient.setColorAt(0.5, bkgrColor); - itemGradient.setColorAt(0.75, bkgrColor); - itemGradient.setColorAt(1.0, Qt::white); - - if(isLast(index)) - { - QPainterPath endPath; - endPath.moveTo(option.rect.topLeft()); - endPath.lineTo(option.rect.bottomLeft()-QPoint(0, RADIUS)); - endPath.arcTo(option.rect.left(), option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 180, 90); - endPath.lineTo(option.rect.bottomRight()-QPoint(RADIUS, 0)); - endPath.arcTo(option.rect.right()-2*RADIUS, option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 270, 90); - endPath.lineTo(option.rect.topRight()); - - //painter->setBrush( bkgrColor ); - painter->setBrush(itemGradient); - painter->setPen(borderPen); - painter->drawPath(endPath); - - painter->setFont(option.font); - } - else // middle elements - { - //painter->setBrush( bkgrColor ); - painter->setBrush(itemGradient); + // background (in case of time conflicts) + if(event->hasTimeConflict()) { + painter->setBrush(Qt::yellow); painter->setPen(Qt::NoPen); painter->drawRect(option.rect); + } - painter->setPen(borderPen); - // vertical lines - painter->drawLine(option.rect.topLeft(), option.rect.bottomLeft()); - painter->drawLine(option.rect.topRight(), option.rect.bottomRight()); - // horizontal lines - painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight()); - - painter->setFont(option.font); + // background (without time conflicts) + else { + QStyleOption styleOption; + styleOption.rect = option.rect; + qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &styleOption, painter, mViewPtr); } // draw Controls @@ -156,11 +122,13 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons // 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)); 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->roomName()); + // title titlePointF.setY(titlePointF.y()+fmBig.height()-fmBig.descent()); painter->setFont(fontBigB); @@ -180,16 +148,33 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons title += "..."; } painter->drawText(titlePointF,title); + // persons titlePointF.setY(titlePointF.y()+fmSmall.height()-fmSmall.descent()); painter->setFont(fontSmall); - painter->drawText(titlePointF,"Presenter(s): " + event->persons().join(" and ")); + QString presenterPrefix = event->persons().count() < 2 ? "Presenter" : "Presenters"; + painter->drawText(titlePointF,presenterPrefix + ": " + event->persons().join(" and ")); + // track titlePointF.setY(titlePointF.y()+fmSmall.height()-fmSmall.descent()); painter->drawText(titlePointF,"Track: " + Track::retrieveTrackName(event->trackId())); } + else // doesn't have parent - time-groups' elements (top items) { + int numFav = numberOfFavourities(index); +#ifdef MAEMO + int numAlarm = numberOfAlarms(index); +#endif + + QStyleOptionButton styleOptionButton; + styleOptionButton.rect = option.rect; + if (isExpanded(index)) styleOptionButton.state = QStyle::State_Sunken; + // styleOptionButton.text = qVariantValue(index.data()); + qApp->style()->drawPrimitive(QStyle::PE_PanelButtonCommand, &styleOptionButton, painter, mViewPtr); + // qApp->style()->drawControl(QStyle::CE_PushButtonLabel, &styleOptionButton, painter, mViewPtr); + // qApp->style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &styleOptionButton, painter, mViewPtr); + QFont fontSmall = option.font; fontSmall.setBold(true); fontSmall.setPixelSize(option.rect.height()*scaleFactor1); @@ -202,43 +187,10 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons int spacer = (fmSmall.boundingRect("999").width() < SPACER) ? SPACER : fmSmall.boundingRect("999").width(); - QLinearGradient titleGradient(option.rect.topLeft(), option.rect.topRight()); - //titleGradient.setColorAt(0.0, Qt::white); - titleGradient.setColorAt(0.0, bkgrColor); - titleGradient.setColorAt(0.5, Qt::white); - titleGradient.setColorAt(1.0, bkgrColor); - - QPainterPath titlePath; - if(isExpanded(index)) - { - titlePath.moveTo(option.rect.bottomLeft()); - titlePath.lineTo(option.rect.topLeft()+QPoint(0, RADIUS)); - titlePath.arcTo(option.rect.left(), option.rect.top(), 2*RADIUS, 2*RADIUS, 180, -90); - titlePath.lineTo(option.rect.topRight()-QPoint(RADIUS, 0)); - titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.top(), 2*RADIUS, 2*RADIUS, 90, -90); - titlePath.lineTo(option.rect.bottomRight()); - titlePath.closeSubpath(); - } - else - { - titlePath.lineTo(option.rect.topLeft()+QPoint(0, RADIUS)); - titlePath.arcTo(option.rect.left(), option.rect.top(), 2*RADIUS, 2*RADIUS, 180, -90); - titlePath.lineTo(option.rect.topRight()-QPoint(RADIUS, 0)); - titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.top(), 2*RADIUS, 2*RADIUS, 90, -90); - titlePath.lineTo(option.rect.bottomRight()-QPoint(0, RADIUS)); - titlePath.arcTo(option.rect.right()-2*RADIUS, option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 0, -90); - titlePath.lineTo(option.rect.bottomLeft()+QPoint(RADIUS, 0)); - titlePath.arcTo(option.rect.left(), option.rect.bottom()-2*RADIUS, 2*RADIUS, 2*RADIUS, 270, -90); - titlePath.closeSubpath(); - } - - painter->setBrush(titleGradient); - painter->setPen(borderPen); - painter->drawPath(titlePath); - - // draw icons + // draw icons + painter->setPen(QPen(textColor)); painter->setFont(fontSmall); - QImage *image = mControls[FavouriteControlOn]->image(); + QImage *image = mControls[numFav ? FavouriteControlOn : FavouriteControlOff]->image(); QPoint drawPoint = option.rect.topRight() - QPoint( @@ -246,12 +198,13 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons - option.rect.height()/2 + image->height()/2); painter->drawImage(drawPoint,*image); painter->drawText(drawPoint+QPoint(image->width()+2, image->height() - 2), - QString::number(numberOfFavourities(index))); + QString::number(numFav)); #ifdef MAEMO drawPoint.setX(drawPoint.x() - spacer - image->width()); - painter->drawImage(drawPoint,*mControls[AlarmControlOn]->image()); + image = mControls[numAlarm ? AlarmControlOn : AlarmControlOff]->image(); + painter->drawImage(drawPoint,*image); painter->drawText(drawPoint+QPoint(image->width()+2, image->height() - 2), - QString::number(numberOfAlarms(index))); + QString::number(numAlarm)); #endif // draw texts QString numEvents = QString::number(index.model()->rowCount(index)).append("/"); @@ -263,14 +216,9 @@ 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())); } - //// HIGHLIGHTING SELECTED ITEM - //if (option.state & QStyle::State_Selected) - //painter->fillRect(option.rect, option.palette.highlight()); - painter->restore(); } @@ -361,23 +309,27 @@ void Delegate::defineControls() { // FAVOURITE ICONs // on - mControls.insert(FavouriteControlOn, new Control(FavouriteControlOn, QString(":icons/emblem-new.png"), NULL)); + mControls.insert(FavouriteControlOn, new Control(FavouriteControlOn, QString(":icons/favourite-on.png"), NULL)); // off - mControls.insert(FavouriteControlOff, new Control(FavouriteControlOff, QString(":icons/emblem-new-off.png"), NULL)); + mControls.insert(FavouriteControlOff, new Control(FavouriteControlOff, QString(":icons/favourite-off.png"), NULL)); #ifdef MAEMO // ALARM ICONs // on mControls.insert(AlarmControlOn, - new Control(AlarmControlOn, QString(":icons/appointment-soon.png"), mControls[FavouriteControlOn])); + new Control(AlarmControlOn, QString(":icons/alarm-on.png"), mControls[FavouriteControlOn])); // off mControls.insert(AlarmControlOff, - new Control(AlarmControlOff, QString(":icons/appointment-soon-off.png"), mControls[FavouriteControlOff])); -#endif - + new Control(AlarmControlOff, QString(":icons/alarm-off.png"), mControls[FavouriteControlOff])); + // WARNING ICON + mControls.insert(WarningControl, + new Control(WarningControl, QString(":icons/dialog-warning.png"), mControls[AlarmControlOff])); +#else // WARNING ICON mControls.insert(WarningControl, new Control(WarningControl, QString(":icons/dialog-warning.png"), mControls[FavouriteControlOn])); +#endif + } bool Delegate::isPointFromRect(const QPoint &aPoint, const QRect &aRect) const