void TaskItemDelegate::paintTask(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex& index) const { QRect rect = option.rect; QFontMetrics fm = QApplication::fontMetrics(); // Painting Order: // Background wash // Mouseover highlight // Priority Tab on left // Bounding Box // Task name // If not small, other task information painter->save(); if (smallTasks) { // Paint the background for a small task painter->save(); painter->setOpacity(0.7); painter->setBrush(itemPriorityColor(index)); painter->setPen(Qt::NoPen); painter->drawRect(rect.adjusted(leftMargin, MARGIN, -MARGIN, -MARGIN)); painter->restore(); } else { // Paint the background for a two row task painter->save(); painter->setOpacity(0.7); painter->setBrush(Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor)); painter->drawRect(option.rect.adjusted(leftMargin, MARGIN, -MARGIN, -MARGIN)); painter->restore(); painter->drawRect(QRectF(option.rect.topLeft()+QPointF(leftMargin, MARGIN), option.rect.bottomLeft()+QPointF(COLORTAB, -MARGIN))); } if (option.state & QStyle::State_MouseOver) { painter->save(); painter->setBrush(Plasma::Theme::defaultTheme()->color(Plasma::Theme::HighlightColor)); painter->setPen(Qt::NoPen); if (smallTasks) painter->drawRect(rect.adjusted(leftMargin, MARGIN, -MARGIN, -MARGIN)); else painter->drawRect(rect.adjusted(leftMargin, MARGIN, -MARGIN, -MARGIN)); painter->restore(); } // Draw Task information painter->setPen(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor)); QString task = index.data(Qt::RTMNameRole).toString(); QString due = index.data(Qt::RTMDueRole).toDate().toString("MMM d"); QString tags = index.data(Qt::RTMTagsRole).toStringList().join(", "); if (!tags.isEmpty()) tags.prepend(tagsPrefix); QFont font = painter->font(); font.setPointSize(font.pointSize()); QFontMetrics largerFM(font); QDate date = index.data(Qt::RTMDueRole).toDate(); if (smallTasks && date.isValid() && date < QDate::currentDate()) { // Elide (text with dots like th...) if wider than view and draw font.setBold(true); QFontMetrics boldLargerFM(font); due = due.append(" "); // So that we have a space after the date before the task name task = largerFM.elidedText(task, Qt::ElideRight, option.rect.width()-COLORTAB-3*MARGIN - boldLargerFM.width(due)); painter->setFont(font); painter->drawText(option.rect.topLeft()+QPoint(COLORTAB+MARGIN,largerFM.height()),due); font.setBold(false); painter->setFont(font); painter->drawText(option.rect.topLeft()+QPoint(COLORTAB+3*MARGIN + boldLargerFM.width(due),boldLargerFM.height()),task); } else { // Elide (text with dots like th...) if wider than view and draw task = largerFM.elidedText(task, Qt::ElideRight, option.rect.width()-COLORTAB-3*MARGIN); painter->setFont(font); painter->drawText(option.rect.topLeft()+QPoint(COLORTAB+MARGIN,largerFM.height()),task); } if (smallTasks) { painter->restore(); return; } // Set our smaller attributes and blue hue for additional text font.setPointSize(font.pointSize()-1); font.setItalic(true); painter->setFont(font); fm = QFontMetrics(font); QColor moreText(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor)); qreal red = moreText.redF(); qreal green = moreText.greenF(); qreal blue = moreText.blueF(); qreal colorChangeMult = 0.85; if (blue < colorChangeMult) blue /= colorChangeMult; else { red *= colorChangeMult; green *= colorChangeMult; } moreText.setRgbF(red, green, blue); painter->setPen(moreText); // Elide the due from the front because "Due on" isn't necessary due = fm.elidedText(due, Qt::ElideLeft, option.rect.width() - COLORTAB+3*MARGIN - fm.width(tags)); painter->drawText(option.rect.bottomLeft()+QPoint(COLORTAB+MARGIN, -MARGINH), tags); painter->drawText(option.rect.bottomRight()+QPoint(-COLORTAB+MARGIN-fm.width(due), -MARGINH), due); painter->restore(); }
void expandOperand(operandKindType addressMode, char *buffer) { switch (addressMode) { case IMMEDIATE_OPND: moreText("#"); break; case INDIRECT_OPND: moreText("@"); break; case POST_INDEXED_Y_OPND: moreText("y[@"); break; case PRE_INDEXED_X_OPND: moreText("@x["); break; case X_INDEXED_OPND: moreText("x["); break; case Y_INDEXED_OPND: moreText("y["); break; case A_REGISTER_OPND: moreText("a"); break; case X_REGISTER_OPND: moreText("x"); break; case Y_REGISTER_OPND: moreText("y"); break; case X_SELECTED_OPND: moreText("x"); break; case Y_SELECTED_OPND: moreText("y"); break; case PRE_SELECTED_X_OPND: moreText("@x"); break; default: break; } expandExpression(NULL, NULL); if (addressMode == POST_INDEXED_Y_OPND || addressMode == PRE_INDEXED_X_OPND || addressMode == X_INDEXED_OPND || addressMode == Y_INDEXED_OPND) moreText("]"); }