/** * @todo enable eliding (use QFontMetrics::elidedText() ) */ void bicItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); // Background QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); const int margin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; const QRect textArea = QRect(opt.rect.x() + margin, opt.rect.y() + margin, opt.rect.width() - 2 * margin, opt.rect.height() - 2 * margin); // Paint name painter->save(); QFont smallFont = getSmallFont(opt); QFontMetrics metrics(opt.font); QFontMetrics smallMetrics(smallFont); QRect nameRect = style->alignedRect(opt.direction, Qt::AlignBottom, QSize(textArea.width(), smallMetrics.lineSpacing()), textArea); painter->setFont(smallFont); style->drawItemText(painter, nameRect, Qt::AlignBottom, QApplication::palette(), true, index.model()->data(index, bicModel::InstitutionNameRole).toString(), option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Mid); painter->restore(); // Paint BIC painter->save(); QFont normal = painter->font(); normal.setBold(true); painter->setFont(normal); QRect bicRect = style->alignedRect(opt.direction, Qt::AlignTop, QSize(textArea.width(), metrics.lineSpacing()), textArea); const QString bic = index.model()->data(index, Qt::DisplayRole).toString(); style->drawItemText(painter, bicRect, Qt::AlignTop, QApplication::palette(), true, bic, option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); }
/** @todo elide texts */ void ibanBicItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); // Background QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); const int margin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; const QRect textArea = QRect(opt.rect.x() + margin, opt.rect.y() + margin, opt.rect.width() - 2 * margin, opt.rect.height() - 2 * margin); // Do not paint text if the edit widget is shown const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(opt.widget); if (view && view->indexWidget(index)) return; // Get data payeeIdentifierTyped<payeeIdentifiers::ibanBic> ibanBic = ibanBicByIndex(index); // Paint Bic painter->save(); const QFont smallFont = painter->font(); const QFontMetrics metrics(opt.font); const QFontMetrics smallMetrics(smallFont); const QRect bicRect = style->alignedRect((opt.direction == Qt::RightToLeft) ? Qt::LeftToRight : Qt::RightToLeft, Qt::AlignTop, QSize(textArea.width(), smallMetrics.lineSpacing()), QRect(textArea.left(), metrics.lineSpacing() + textArea.top(), textArea.width(), smallMetrics.lineSpacing()) ); painter->setFont(smallFont); style->drawItemText(painter, bicRect, Qt::AlignBottom | Qt::AlignRight, QApplication::palette(), true, ibanBic->storedBic(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint Bank name painter->save(); const QRect nameRect = style->alignedRect(opt.direction, Qt::AlignTop, QSize(textArea.width(), smallMetrics.lineSpacing()), QRect(textArea.left(), metrics.lineSpacing() + textArea.top(), textArea.width(), smallMetrics.lineSpacing()) ); style->drawItemText(painter, nameRect, Qt::AlignBottom, QApplication::palette(), true, ibanBic->institutionName(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint IBAN painter->save(); QFont normal = painter->font(); normal.setBold(true); painter->setFont(normal); const QRect ibanRect = style->alignedRect(opt.direction, Qt::AlignTop, QSize(textArea.width(), metrics.lineSpacing()), textArea); const QString bic = index.model()->data(index, Qt::DisplayRole).toString(); style->drawItemText(painter, ibanRect, Qt::AlignTop, QApplication::palette(), true, ibanBic->paperformatIban(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint type painter->save(); QRect typeRect = style->alignedRect(opt.direction, Qt::AlignTop | Qt::AlignRight, QSize(textArea.width() / 5, metrics.lineSpacing()), textArea); style->drawItemText(painter, typeRect, Qt::AlignTop | Qt::AlignRight, QApplication::palette(), true, i18n("IBAN & BIC"), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); }
void K3b::DeviceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& optionOrig, const QModelIndex& index ) const { if ( index.data( K3b::DeviceModel::IsDevice ).toBool() ) { painter->save(); painter->setRenderHint(QPainter::Antialiasing); // HACK: we erase the branch QStyleOptionViewItemV4 option( optionOrig ); option.rect.setLeft( 0 ); painter->fillRect( option.rect, option.palette.base() ); QStyle* style = QApplication::style(); const FontsAndMetrics fam( option.font ); const QPalette::ColorRole textRole = (option.state & QStyle::State_Selected) ? QPalette::HighlightedText : QPalette::Text; const QRect itemRect( option.rect.left() + fam.margin, option.rect.top() + fam.margin, option.rect.width() - 2*fam.margin, option.rect.height() - 2*fam.margin ); const QSize iconSize( itemRect.height(), itemRect.height() ); const QSize mediumSize( itemRect.width() - iconSize.width() - fam.margin, itemRect.height() - fam.spacing - fam.deviceFontM.height() ); const QSize devicemSize( itemRect.width() - iconSize.width() - fam.margin, itemRect.height() - fam.spacing - fam.mediumFontM.height() ); const QRect iconRect = style->alignedRect( option.direction, Qt::AlignLeft | Qt::AlignVCenter, iconSize, itemRect ); const QRect mediumRect = style->alignedRect( option.direction, Qt::AlignRight | Qt::AlignTop, mediumSize, itemRect ); const QRect deviceRect = style->alignedRect( option.direction, Qt::AlignRight | Qt::AlignBottom, devicemSize, itemRect ); // draw background style->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter ); // draw decoration QPixmap pixmap = decoration( option, index, iconSize ); painter->drawPixmap( iconRect, pixmap ); // draw medium text painter->setFont( fam.mediumFont ); QString text = index.data( Qt::DisplayRole ).toString(); style->drawItemText( painter, mediumRect, option.displayAlignment, option.palette, option.state & QStyle::State_Enabled, fam.mediumFontM.elidedText( text, option.textElideMode, mediumRect.width() ), textRole ); // draw fixed device text painter->setFont( fam.deviceFont ); text = index.data( K3b::DeviceModel::Vendor ).toString() + " - " + index.data( K3b::DeviceModel::Description ).toString(); style->drawItemText( painter, deviceRect, option.displayAlignment, option.palette, option.state & QStyle::State_Enabled, fam.deviceFontM.elidedText( text, option.textElideMode, deviceRect.width() ), textRole ); painter->restore(); } else { KFileItemDelegate::paint( painter, optionOrig, index ); } }
void UserDelegate::paint(QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QAbstractItemModel *m = index.model(); const QModelIndex idxc1 = index.sibling(index.row(), 1); QVariant data = m->data(idxc1); QList<QVariant> ql = data.toList(); painter->save(); QStyleOptionViewItemV4 o = option; initStyleOption(&o, index); QStyle *style = o.widget->style(); QIcon::Mode iconMode = QIcon::Normal; QPalette::ColorRole colorRole = ((o.state & QStyle::State_Selected) ? QPalette::HighlightedText : QPalette::Text); #if defined(Q_OS_WIN) // Qt's Vista Style has the wrong highlight color for treeview items // We can't check for QStyleSheetStyle so we have to search the children list search for a QWindowsVistaStyle QList<QObject *> hierarchy = style->findChildren<QObject *>(); hierarchy.insert(0, style); foreach (QObject *obj, hierarchy) { if (QString::fromUtf8(obj->metaObject()->className()) == QString::fromUtf8("QWindowsVistaStyle")) { colorRole = QPalette::Text; break; } } #endif // draw background style->drawPrimitive(QStyle::PE_PanelItemViewItem, &o, painter, o.widget); // resize rect to exclude the flag icons o.rect = option.rect.adjusted(0, 0, -FLAG_DIMENSION * ql.count(), 0); // draw icon QRect decorationRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &o, o.widget); o.icon.paint(painter, decorationRect, o.decorationAlignment, iconMode, QIcon::On); // draw text QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &o, o.widget); QString itemText = o.fontMetrics.elidedText(o.text, o.textElideMode, textRect.width()); painter->setFont(o.font); style->drawItemText(painter, textRect, o.displayAlignment, o.palette, true, itemText, colorRole); // draw flag icons to original rect QRect ps = QRect(option.rect.right() - (ql.size() * FLAG_DIMENSION), option.rect.y(), ql.size() * FLAG_DIMENSION, option.rect.height()); for (int i = 0; i < ql.size(); ++i) { QRect r = ps; r.setSize(QSize(FLAG_ICON_DIMENSION, FLAG_ICON_DIMENSION)); r.translate(i * FLAG_DIMENSION + FLAG_ICON_PADDING, FLAG_ICON_PADDING); QRect p = QStyle::alignedRect(option.direction, option.decorationAlignment, r.size(), r); qvariant_cast<QIcon>(ql[i]).paint(painter, p, option.decorationAlignment, iconMode, QIcon::On); } painter->restore(); }
void NoteItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyle* style = KApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter); QRect rect = option.rect; rect.adjust( m_margin, m_margin, -m_margin, -m_margin ); Nepomuk2::Resource res = index.data( Nepomuk2::Utils::SimpleResourceModel::ResourceRole ).value<Nepomuk2::Resource>(); QString plainTextContent = res.property( NIE::plainTextContent() ).toString(); QDateTime creationDate = res.property( NAO::created() ).toDateTime(); //TODO: Find a way to convert this date into "4 hours ago" format QString dateString = creationDate.toLocalTime().toString(); painter->save(); QFont f = painter->font(); f.setBold( true ); painter->setFont( f ); style->drawItemText( painter, rect, Qt::AlignLeft | Qt::AlignTop, option.palette, true, dateString ); painter->restore(); rect.setY( rect.y() + QFontMetrics(f).height()/* + m_margin */); // // Draw the excerpt // QTextDocument textDocument; textDocument.setTextWidth( rect.width() ); QFont font = textDocument.defaultFont(); font.setItalic( true ); textDocument.setDefaultFont( font ); QFontMetrics fm( font ); int numLines = rect.height() / fm.height(); int charPerLine = rect.width() / fm.averageCharWidth(); int l = (numLines-2) * charPerLine; // one line less for ending, and one line for padding QString text; // FIXME: There may be a case where some part of the text gets repeated before and after the ... if( l < plainTextContent.length() ) { text = plainTextContent.left( l ); text += QLatin1String(" .... "); text += plainTextContent.right( charPerLine-10 ); } else { text = plainTextContent; } textDocument.setPlainText( text.simplified() ); painter->save(); painter->translate( rect.topLeft() ); textDocument.drawContents( painter ); painter->restore(); }
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { int row = index.row(); ItemWidget *w = m_cache[row]; if (w == NULL) return; const QRect &rect = option.rect; bool isSelected = option.state & QStyle::State_Selected; /* render background (selected, alternate, ...) */ QStyle *style = m_view->style(); style->drawControl(QStyle::CE_ItemViewItem, &option, painter, m_view); /* render number */ if (m_showRowNumber) { const QString num = QString::number(row); QPalette::ColorRole role = isSelected ? QPalette::HighlightedText : QPalette::Text; painter->save(); painter->setFont(m_rowNumberFont); style->drawItemText(painter, rect.translated(m_hMargin / 2, m_vMargin), 0, m_rowNumberPalette, true, num, role); painter->restore(); } /* highlight search string */ w->setHighlight(m_re, m_foundFont, m_foundPalette); /* text color for selected/unselected item */ QWidget *ww = w->widget(); if ( ww->property(propertySelectedItem) != isSelected ) { ww->setProperty(propertySelectedItem, isSelected); if ( !ww->property("CopyQ_no_style").toBool() ) { ww->setStyle(style); foreach (QWidget *child, ww->findChildren<QWidget *>()) child->setStyle(style); ww->update(); } } }
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { int row = index.row(); ItemWidget *w = m_cache[row]; if (w == NULL) return; const QRect &rect = option.rect; /* render background (selected, alternate, ...) */ QStyle *style = m_parent->style(); style->drawControl(QStyle::CE_ItemViewItem, &option, painter); QPalette::ColorRole role = option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text; /* render number */ QRect numRect(0, 0, 0, 0); if (m_showNumber) { QString num = QString::number(row) + " "; painter->save(); painter->setFont(m_numberFont); style->drawItemText(painter, rect.translated(4, 4), 0, m_numberPalette, true, num, role); painter->restore(); numRect = style->itemTextRect( QFontMetrics(m_numberFont), rect, 0, true, num ); } /* highlight search string */ w->setHighlight(m_re, m_foundFont, m_foundPalette); /* text color for selected/unselected item */ QPalette palette = w->widget()->palette(); palette.setColor( QPalette::Text, option.palette.color(role) ); w->widget()->setPalette(palette); /* render widget */ w->widget()->show(); }
void QMirrorLabel::paintEvent(QPaintEvent *event) { QStyle *style = QWidget::style(); QPainter painter(this); drawFrame(&painter); QRect cr = contentsRect(); cr.adjust(margin(), margin(), -margin(), -margin()); int align = QStyle::visualAlignment(layoutDirection(), QFlag(alignment())); if(!text().isNull()) { painter.save(); painter.scale(-1.0, 1.0); QPointF translationOffset; translationOffset.setX(qreal(-cr.width())); translationOffset.setY(0.0); painter.translate(translationOffset); style->drawItemText(&painter, cr, align, palette(), isEnabled(), text(), foregroundRole()); painter.restore(); } if(pixmap()) { QPixmap pix = *pixmap(); painter.save(); painter.scale(-1.0, 1.0); QPointF translationOffset; translationOffset.setX(qreal(-cr.width())); translationOffset.setY(0.0); painter.translate(translationOffset); style->drawItemPixmap(&painter, cr, align, pix); painter.restore(); } }
void NQTokenEditItem::paintEvent(QPaintEvent *) { QStyle *style = QWidget::style(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QRect fr = frameRect(); QStyleOption opt; opt.initFrom(this); painter.setPen(Qt::NoPen); painter.setBrush(QBrush(itemColor_.darker())); painter.drawRoundedRect(fr, fr.height()/2, fr.height()/2); QRect fr2; fr2.setX(1); fr2.setY(1); fr2.setWidth(fr.width()-2); fr2.setHeight(fr.height()-2); painter.setBrush(QBrush(itemColor_)); painter.drawRoundedRect(fr2, fr2.height()/2, fr2.height()/2); fr2.setY(verticalMargin_*2); fr2.setHeight(lineHeight_); style->drawItemText(&painter, fr2, Qt::AlignHCenter, opt.palette, true, layout_.text(), foregroundRole()); if (currentCursorPos_!=-1) { QPointF topLeft = fr2.topLeft(); topLeft.setX(topLeft.x() + horizontalMargin_ - 2); topLeft.setY(topLeft.y()); layout_.drawCursor(&painter, topLeft, currentCursorPos_, 1); } }
/*!\reimp */ void QLabel::paintEvent(QPaintEvent *) { Q_D(QLabel); QStyle *style = QWidget::style(); QPainter painter(this); drawFrame(&painter); QRect cr = contentsRect(); cr.adjust(d->margin, d->margin, -d->margin, -d->margin); int align = QStyle::visualAlignment(d->isTextLabel ? d->textDirection() : layoutDirection(), QFlag(d->align)); #if QT_CONFIG(movie) if (d->movie) { if (d->scaledcontents) style->drawItemPixmap(&painter, cr, align, d->movie->currentPixmap().scaled(cr.size())); else style->drawItemPixmap(&painter, cr, align, d->movie->currentPixmap()); } else #endif if (d->isTextLabel) { QRectF lr = d->layoutRect().toAlignedRect(); QStyleOption opt; opt.initFrom(this); #ifndef QT_NO_STYLE_STYLESHEET if (QStyleSheetStyle* cssStyle = qobject_cast<QStyleSheetStyle*>(style)) { cssStyle->styleSheetPalette(this, &opt, &opt.palette); } #endif if (d->control) { #ifndef QT_NO_SHORTCUT const bool underline = (bool)style->styleHint(QStyle::SH_UnderlineShortcut, 0, this, 0); if (d->shortcutId != 0 && underline != d->shortcutCursor.charFormat().fontUnderline()) { QTextCharFormat fmt; fmt.setFontUnderline(underline); d->shortcutCursor.mergeCharFormat(fmt); } #endif d->ensureTextLayouted(); QAbstractTextDocumentLayout::PaintContext context; // Adjust the palette context.palette = opt.palette; if (foregroundRole() != QPalette::Text && isEnabled()) context.palette.setColor(QPalette::Text, context.palette.color(foregroundRole())); painter.save(); painter.translate(lr.topLeft()); painter.setClipRect(lr.translated(-lr.x(), -lr.y())); d->control->setPalette(context.palette); d->control->drawContents(&painter, QRectF(), this); painter.restore(); } else { int flags = align | (d->textDirection() == Qt::LeftToRight ? Qt::TextForceLeftToRight : Qt::TextForceRightToLeft); if (d->hasShortcut) { flags |= Qt::TextShowMnemonic; if (!style->styleHint(QStyle::SH_UnderlineShortcut, &opt, this)) flags |= Qt::TextHideMnemonic; } style->drawItemText(&painter, lr.toRect(), flags, opt.palette, isEnabled(), d->text, foregroundRole()); } } else #ifndef QT_NO_PICTURE if (d->picture) { QRect br = d->picture->boundingRect(); int rw = br.width(); int rh = br.height(); if (d->scaledcontents) { painter.save(); painter.translate(cr.x(), cr.y()); painter.scale((double)cr.width()/rw, (double)cr.height()/rh); painter.drawPicture(-br.x(), -br.y(), *d->picture); painter.restore(); } else { int xo = 0; int yo = 0; if (align & Qt::AlignVCenter) yo = (cr.height()-rh)/2; else if (align & Qt::AlignBottom) yo = cr.height()-rh; if (align & Qt::AlignRight) xo = cr.width()-rw; else if (align & Qt::AlignHCenter) xo = (cr.width()-rw)/2; painter.drawPicture(cr.x()+xo-br.x(), cr.y()+yo-br.y(), *d->picture); } } else #endif if (d->pixmap && !d->pixmap->isNull()) { QPixmap pix; if (d->scaledcontents) { QSize scaledSize = cr.size() * devicePixelRatioF(); if (!d->scaledpixmap || d->scaledpixmap->size() != scaledSize) { if (!d->cachedimage) d->cachedimage = new QImage(d->pixmap->toImage()); delete d->scaledpixmap; QImage scaledImage = d->cachedimage->scaled(scaledSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); d->scaledpixmap = new QPixmap(QPixmap::fromImage(scaledImage)); d->scaledpixmap->setDevicePixelRatio(devicePixelRatioF()); } pix = *d->scaledpixmap; } else pix = *d->pixmap; QStyleOption opt; opt.initFrom(this); if (!isEnabled()) pix = style->generatedIconPixmap(QIcon::Disabled, pix, &opt); style->drawItemPixmap(&painter, cr, align, pix); } }
void BlogListDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { BlogListWidget * listWidget = qobject_cast<BlogListWidget *>(this->parent()); if (listWidget == NULL) return; QStyle * style = listWidget->style(); if (style == NULL) return; painter->save(); QFont itemFont(painter->font()); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, listWidget); QPixmap pixmap = qvariant_cast<QPixmap>(index.data(IconRole)); QString title = index.data(TitleRole).toString(); QString date = index.data(DateRole).toString(); QString author = index.data(AuthorRole).toString(); QString intro = index.data(IntroRole).toString(); // QRect rect; int imageSpace = ImageSpace + 10; // TITLE painter->setPen(listWidget->titleTextColor()); QFont titleFont(listWidget->titleTextFontFamily()); titleFont.setPixelSize(pixelSize(listWidget->titleTextFontSize())); painter->setFont(titleFont); QRect rect = option.rect.adjusted(imageSpace, TopSpace, 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, title); QFontMetrics titleFontMetrics(titleFont); // INTRO painter->setPen(listWidget->introTextColor()); QFont introFont(listWidget->introTextFontFamily()); introFont.setPixelSize(pixelSize(listWidget->introTextFontSize())); painter->setFont(introFont); rect = option.rect.adjusted(imageSpace, TopSpace + titleFontMetrics.lineSpacing() + pixelSize(listWidget->titleTextExtraLeading()) , 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, intro); QFontMetrics introFontMetrics(introFont); // DATE painter->setPen(listWidget->dateTextColor()); QFont font(listWidget->dateTextFontFamily()); font.setPixelSize(pixelSize(listWidget->dateTextFontSize())); painter->setFont(font); rect = option.rect.adjusted(imageSpace, TopSpace + titleFontMetrics.lineSpacing() + introFontMetrics.lineSpacing() + pixelSize(listWidget->introTextExtraLeading()), 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, date); QFontMetrics dateTextFontMetrics(font); // AUTHOR QRect textRect = style->itemTextRect(dateTextFontMetrics, option.rect, Qt::AlignLeft, true, date); rect = option.rect.adjusted(imageSpace + textRect.width() + 7, TopSpace + titleFontMetrics.lineSpacing() + introFontMetrics.lineSpacing() + pixelSize(listWidget->introTextExtraLeading()), 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, author); if (!pixmap.isNull()) { //ic.paint(painter, option.rect, Qt::AlignVCenter|Qt::AlignLeft); style->drawItemPixmap(painter, option.rect.adjusted(0, TopSpace, 0, -TopSpace), Qt::AlignLeft, pixmap); } painter->restore(); }
/** Redefined. */ void PlaylistItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &opt, const QModelIndex &index) const { QStyleOptionViewItem o(opt); initStyleOption(&o, index); QStyle *style = QApplication::style(); QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &o, o.widget); if (_playlist->horizontalHeader()->visualIndex(index.column()) == 0) { textRect = textRect.adjusted(1, 0, 0, 0); o.rect = textRect; } MiamStyledItemDelegate::paint(p, o, index); // Highlight the current playing item QFont font = SettingsPrivate::instance()->font(SettingsPrivate::FF_Playlist); if (_playlist->mediaPlaylist()->currentIndex() == index.row() && _playlist->mediaPlayer()->state() != QMediaPlayer::StoppedState) { font.setBold(true); font.setItalic(true); } p->setFont(font); p->save(); if (o.state.testFlag(QStyle::State_Selected)) { if ((opt.palette.highlight().color().lighter(160).saturation() - opt.palette.highlightedText().color().saturation()) < 128) { p->setPen(opt.palette.text().color()); } else { p->setPen(opt.palette.highlightedText().color()); } } QString text; switch (index.column()) { case Playlist::COL_LENGTH: if (index.data().toInt() >= 0) { text = QDateTime::fromTime_t(index.data().toInt()).toString("m:ss"); text = p->fontMetrics().elidedText(text, o.textElideMode, textRect.width()); style->drawItemText(p, textRect, Qt::AlignCenter, o.palette, true, text); } break; case Playlist::COL_TRACK_NUMBER: case Playlist::COL_YEAR: text = p->fontMetrics().elidedText(index.data().toString(), o.textElideMode, textRect.width()); style->drawItemText(p, textRect, Qt::AlignCenter, o.palette, true, text); break; case Playlist::COL_RATINGS: if (index.data().canConvert<StarRating>() || opt.state.testFlag(QStyle::State_Selected)) { StarRating r = index.data().value<StarRating>(); r.paintStars(p, opt); } break; case Playlist::COL_ICON:{ //QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &o, o.widget); text = p->fontMetrics().elidedText(index.data().toString(), o.textElideMode, textRect.width()); QSize iconSize(textRect.height() * 0.8, textRect.height() * 0.8); /// FIXME //style->drawItemText(p, textRect, Qt::AlignCenter, o.palette, true, text); style->drawItemPixmap(p, o.rect, Qt::AlignCenter, o.icon.pixmap(iconSize)); break; } case Playlist::COL_TITLE: case Playlist::COL_ALBUM: case Playlist::COL_ARTIST: default: text = p->fontMetrics().elidedText(index.data().toString(), o.textElideMode, textRect.width()); if (QApplication::isLeftToRight()) { textRect.adjust(2, 0, 0, 0); } else { textRect.adjust(0, 0, -2, 0); } style->drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter, o.palette, true, text); break; } p->restore(); }
void PlaylistDelegate::PaintTrack (QPainter *painter, const QStyleOptionViewItem& optionOld, const QModelIndex& index) const { QStyleOptionViewItemV4 option = optionOld; const auto& info = index.data (Player::Role::Info).value<MediaInfo> (); QStyle *style = option.widget ? option.widget->style () : QApplication::style (); const bool isSubAlbum = index.parent ().isValid (); QStyleOptionViewItemV4 bgOpt = option; painter->save (); if (index.data (Player::Role::IsCurrent).toBool ()) { const QColor& highlight = bgOpt.palette.color (QPalette::Highlight); QLinearGradient grad (0, 0, 0, bgOpt.rect.height ()); grad.setColorAt (0, highlight.lighter (100)); grad.setColorAt (1, highlight.darker (200)); bgOpt.backgroundBrush = QBrush (grad); QFont font = option.font; font.setItalic (true); painter->setFont (font); painter->setPen (bgOpt.palette.color (QPalette::HighlightedText)); } style->drawPrimitive (QStyle::PE_PanelItemViewItem, &bgOpt, painter, option.widget); QString lengthText = Util::MakeTimeFromLong (info.Length_); if (lengthText.startsWith ("00:")) lengthText = lengthText.mid (3); if (index.data (Player::Role::IsStop).toBool ()) { const auto& icon = Core::Instance ().GetProxy ()->GetIcon ("media-playback-stop"); const auto& px = icon.pixmap (option.rect.size ()); style->drawItemPixmap (painter, option.rect, Qt::AlignLeft | Qt::AlignVCenter, px); option.rect.adjust (px.width () + Padding, 0, 0, 0); } const int width = option.fontMetrics.width (lengthText); style->drawItemText (painter, option.rect, Qt::AlignRight, option.palette, true, lengthText); const auto& itemTextRect = option.rect.adjusted (0, 0, -width, 0); QString itemStr; if (!isSubAlbum) itemStr = index.data ().toString (); else { if (info.TrackNumber_ > 0 && !info.Title_.isEmpty ()) itemStr = QString::fromUtf8 ("%1 — %2").arg (info.TrackNumber_).arg (info.Title_); else if (!info.Title_.isEmpty ()) itemStr = info.Title_; else itemStr = QFileInfo (info.LocalPath_).fileName (); } itemStr = option.fontMetrics.elidedText (itemStr, Qt::ElideRight, itemTextRect.width ()); style->drawItemText (painter, itemTextRect, 0, option.palette, true, itemStr); painter->restore (); }
void PluginItemDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { Q_ASSERT( index.isValid() ); QRect rect = option.rect; QStyle *style = QApplication::style(); painter->save(); // Drawing the background QStyleOption background = option; style->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter ); painter->translate( rect.topLeft() ); // rect is now represented in item coordinates rect.moveTopLeft( QPoint( 0, 0 ) ); // The point at the top left of the available drawing area. QPoint topLeft( 0, 0 ); // The point at the top right of the available drawing area. QPoint topRight( rect.topRight() ); QRect nameRect = rect; // Painting the checkbox QStyleOptionButton checkBox = checkboxOption( option, index, topLeft.x(), Qt::AlignLeft ); painter->save(); style->drawControl( QStyle::CE_CheckBox, &checkBox, painter ); painter->restore(); nameRect.setLeft( checkBox.rect.right() + 1 ); // Painting the About Button if ( index.data( RenderPlugin::AboutDialogAvailable ).toBool() ) { QStyleOptionButton button = buttonOption( option, index, PluginItemDelegate::About, topRight.x(), Qt::AlignRight ); style->drawControl( QStyle::CE_PushButton, &button, painter ); topRight -= QPoint( button.rect.width(), 0 ); } // Painting the Configure Button if ( index.data( RenderPlugin::ConfigurationDialogAvailable ).toBool() ) { QStyleOptionButton button = buttonOption( option, index, PluginItemDelegate::Configure, topRight.x(), Qt::AlignRight ); style->drawControl( QStyle::CE_PushButton, &button, painter ); topRight -= QPoint( button.rect.width(), 0 ); nameRect.setRight( button.rect.left() -1 ); } // Painting the Name string QString name = index.data( Qt::DisplayRole ).toString(); style->drawItemText( painter, nameRect, Qt::AlignLeft | Qt::AlignVCenter, option.palette, true, name ); painter->restore(); }
//----------------------------------------------------------------------------- void qtSqueezedLabel::paintEvent(QPaintEvent* e) { QTE_D(qtSqueezedLabel); // Do nothing if drawing background for cache if (d->cacheBackground) { return; } // If invalid, or text has changed, recalculate portion to elide const QString& text = this->text(); if (!d->isValid(text)) { d->cachedText = text; d->recalculate(this->size(), this->fontMetrics()); } // Check if text fits if (!d->elided) { // If so, let ordinary label handle the painting QLabel::paintEvent(e); return; } e->accept(); // Prepare to paint text QStyle* style = this->style(); QPainter painter(this); const Qt::Alignment align = QStyle::visualAlignment(this->layoutDirection(), this->alignment()); const QPalette::ColorRole role = this->foregroundRole(); QStyleOption opt; opt.initFrom(this); // Paint text if (d->elideMode.testFlag(ElideFade)) { const QRect rect = this->rect(); const int width = rect.width(); const QString elidedText = text.mid(d->offset, d->length); // Draw text style->drawItemText(&painter, rect, align, opt.palette, this->isEnabled(), elidedText, role); // Set up fade gradient int x1, x2; if (align.testFlag(Qt::AlignLeft)) { x1 = qMax(0, width - d->fadeWidth); x2 = width; } else { x1 = qMin(width, d->fadeWidth); x2 = 0; } QLinearGradient grad(x1, 0, x2, 0); grad.setColorAt(0.0, Qt::transparent); grad.setColorAt(0.9, Qt::black); // Fade out background for overpainting QImage fadeImage(d->background); QBrush brush(grad); QPainter imagePainter(&fadeImage); imagePainter.setCompositionMode(QPainter::CompositionMode_DestinationIn); imagePainter.fillRect(0, 0, rect.width(), rect.height(), brush); // Fade out text by overpainting with blended fade image painter.drawImage(rect.topLeft(), fadeImage); } else { const QString elidedText = text.mid(d->offset, d->length) + qtSqueezedLabelPrivate::ellipsis(); style->drawItemText(&painter, this->rect(), align, opt.palette, this->isEnabled(), elidedText, role); } }
void WidgetDiskItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItemV4 opt = *qstyleoption_cast<const QStyleOptionViewItemV4*>(&option); bool selected = opt.state & QStyle::State_Selected; QStyle* style = (opt.widget != NULL ? opt.widget->style() : QApplication::style()); QString text = index.data(Qt::DisplayRole).toString(); QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); QPixmap pixmap = icon.pixmap(opt.decorationSize, (selected == true ? QIcon::Selected : QIcon::Normal)); int alignment = 0; switch (opt.decorationPosition) { case QStyleOptionViewItem::Left: alignment |= Qt::AlignLeft | Qt::AlignVCenter; break; case QStyleOptionViewItem::Right: alignment |= Qt::AlignRight | Qt::AlignVCenter; break; case QStyleOptionViewItem::Top: alignment |= Qt::AlignTop | Qt::AlignHCenter; break; case QStyleOptionViewItem::Bottom: alignment |= Qt::AlignBottom | Qt::AlignHCenter; break; } QRect icon_rect = style->itemPixmapRect(opt.rect.adjusted(adjust_dx, adjust_dy, -adjust_dx, -adjust_dy), alignment, pixmap); style->drawItemPixmap(painter, icon_rect, opt.decorationAlignment, pixmap); QRect free_rect; switch (opt.decorationPosition) { case QStyleOptionViewItem::Left: free_rect = opt.rect.adjusted(icon_rect.width() + adjust_dx * 3, adjust_dy, -adjust_dx, -adjust_dy); break; case QStyleOptionViewItem::Right: free_rect = opt.rect.adjusted(adjust_dx, adjust_dy, -icon_rect.width() - adjust_dx * 3, -adjust_dy); break; case QStyleOptionViewItem::Top: free_rect = opt.rect.adjusted(adjust_dx, icon_rect.height() + adjust_dy * 3, -adjust_dx, -adjust_dy); break; case QStyleOptionViewItem::Bottom: free_rect = opt.rect.adjusted(adjust_dx, adjust_dy, -adjust_dx, -icon_rect.height() - adjust_dy * 3); break; } if (selected == true) { int dr = qMax(adjust_dx, adjust_dy); QRect text_rect = style->itemTextRect(opt.fontMetrics, free_rect, alignment, true, text); QRect high_rect = text_rect.adjusted(-dr, -dr, dr, dr); painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setPen(opt.palette.highlight().color()); painter->setBrush(opt.palette.highlight()); painter->drawRoundedRect(high_rect, dr, dr); painter->restore(); } style->drawItemText(painter, free_rect, alignment, option.palette, true, text, (selected == true ? QPalette::HighlightedText : QPalette::WindowText)); }
void QTorrentItemDelegat::drawTorrent(QPainter* painter, const QStyleOptionViewItem& option, const Torrent& tor, const QModelIndex& index) const { QStyleOptionViewItemV4 opt = option; initStyleOption(&opt, index); QStyle* style; if(opt.widget != NULL) { style = opt.widget->style(); } else { style = QApplication::style(); } const int iconSize(style->pixelMetric(QStyle::PM_LargeIconSize)); QFont nameFont(option.font); nameFont.setWeight(QFont::Bold); const QFontMetrics nameFM(nameFont); const QIcon mimeIcon(tor.GetMimeTypeIcon()); QString nameStr(tor.GetName()); QSize nameSize(nameFM.size(0, nameStr)); QFont statusFont(option.font); statusFont.setPointSize(int (option.font.pointSize() * 0.9)); const QFontMetrics statusFM(statusFont); QString statusStr(GetStatusString(tor)); int statusWidth = statusFM.width(statusStr); QFont progressFont(statusFont); const QFontMetrics progressFM(progressFont); QString progressStr(GetProgressString(tor)); bool isPaused(tor.isPaused()); painter->save(); painter->setRenderHint(QPainter::Antialiasing); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); /* if (option.state & QStyle::State_Selected) { QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Active : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; painter->fillRect(option.rect, opt.backgroundBrush); }*/ //style->drawControl(QStyle::CE_ItemViewItem,&option,painter); QIcon::Mode im; if(isPaused || !(option.state & QStyle::State_Enabled)) { im = QIcon::Disabled; } else if(option.state & QStyle::State_Selected) { im = QIcon::Selected; } else { im = QIcon::Normal; } QIcon::State qs; if(isPaused) { qs = QIcon::Off; } else { qs = QIcon::On; } QPalette::ColorGroup cg = QPalette::Normal; if(isPaused || !(option.state & QStyle::State_Enabled)) { cg = QPalette::Disabled; } if(cg == QPalette::Normal && !(option.state & QStyle::State_Active)) { cg = QPalette::Inactive; } QPalette::ColorRole cr; if(option.state & QStyle::State_Selected) { cr = QPalette::HighlightedText; } cr = QPalette::Text; // layout const QSize m(margin(*style)); QRect fillArea(option.rect); fillArea.adjust(m.width(), m.height(), -m.width(), -m.height()); QRect iconArea(fillArea.x(), fillArea.y() + (fillArea.height() - iconSize) / 2, iconSize, iconSize); QRect nameArea(iconArea.x() + iconArea.width() + GUI_PAD, fillArea.y(), fillArea.width() - GUI_PAD - iconArea.width(), nameSize.height()); if (nameArea.width() + nameArea.x() > opt.rect.width()) { nameArea.setWidth(opt.rect.width() - nameArea.x()); } QRect barArea(nameArea.x(), nameArea.y() + statusFM.lineSpacing() + GUI_PAD / 2, nameArea.width(), BAR_HEIGHT); QRect progArea(nameArea.x(), barArea.y() + barArea.height() + GUI_PAD / 2, barArea.width() - statusWidth, nameArea.height()); QRect statusArea(progArea.x() + progArea.width(), progArea.y(), statusWidth, progArea.height()); if(tor.hasError()) { painter->setPen(QColor("red")); } else { painter->setPen(opt.palette.color(cg, cr)); } mimeIcon.paint(painter, iconArea, Qt::AlignCenter, im, qs); painter->setFont(nameFont); nameStr = nameFM.elidedText(nameStr, Qt::ElideRight, nameArea.width()); style->drawItemText(painter, nameArea, Qt::AlignLeft, opt.palette, option.state & QStyle::State_Enabled, nameStr); painter->setFont(statusFont); statusStr = statusFM.elidedText(statusStr, Qt::ElideRight, statusArea.width()); style->drawItemText(painter, statusArea, Qt::AlignRight, opt.palette, option.state & QStyle::State_Enabled, statusStr); painter->setFont(progressFont); progressStr = statusFM.elidedText(progressStr, Qt::ElideRight, progArea.width()); style->drawItemText(painter, progArea, Qt::AlignLeft, opt.palette, option.state & QStyle::State_Enabled, progressStr); int progressPercentage = tor.GetProgress(); myProgressBarStyle->resize(barArea.size()); myProgressBarStyle->setValue(progressPercentage); //painter->translate(barArea.topLeft()); //myProgressBarStyle->render(painter); QStyleOptionProgressBarV2 pbStyleOpt; myProgressBarStyle->initilizeStyleOption(&pbStyleOpt); pbStyleOpt.rect = barArea; /*myProgressBarStyle->rect = barArea; if ( tor.isDownloading() ) { myProgressBarStyle->palette.setBrush( QPalette::Highlight, blueBrush ); myProgressBarStyle->palette.setColor( QPalette::Base, blueBack ); myProgressBarStyle->palette.setColor( QPalette::Background, blueBack ); } else if ( tor.isSeeding() ) { myProgressBarStyle->palette.setBrush( QPalette::Highlight, greenBrush ); myProgressBarStyle->palette.setColor( QPalette::Base, greenBack ); myProgressBarStyle->palette.setColor( QPalette::Background, greenBack ); } myProgressBarStyle->state = progressBarState; setProgressBarPercentDone( option, tor ); */ style->drawControl(QStyle::CE_ProgressBar, &pbStyleOpt, painter, myProgressBarStyle); painter->restore(); }