diff options
| author | Peter Penz <[email protected]> | 2012-04-07 20:59:06 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-04-07 20:59:54 +0200 |
| commit | 1ea1f351d63dcbeb047d0658f415ac63a6e8091a (patch) | |
| tree | f8a9ca3b01a647a03e4b6d580bcd2948bbcb685e /src/kitemviews/kfileitemlistgroupheader.cpp | |
| parent | 305ecd86f9cdfd7d4e3e96fb5b7f3daab72c6ba5 (diff) | |
Use stars for showing the rating in the group headers
Diffstat (limited to 'src/kitemviews/kfileitemlistgroupheader.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemlistgroupheader.cpp | 61 |
1 files changed, 48 insertions, 13 deletions
diff --git a/src/kitemviews/kfileitemlistgroupheader.cpp b/src/kitemviews/kfileitemlistgroupheader.cpp index dd90a838c..0c940ed28 100644 --- a/src/kitemviews/kfileitemlistgroupheader.cpp +++ b/src/kitemviews/kfileitemlistgroupheader.cpp @@ -22,12 +22,14 @@ #include "kfileitemlistgroupheader.h" +#include <kratingpainter.h> #include <QPainter> KFileItemListGroupHeader::KFileItemListGroupHeader(QGraphicsWidget* parent) : KItemListGroupHeader(parent), - m_font(), - m_text() + m_dirtyCache(true), + m_text(), + m_pixmap() { m_text.setTextFormat(Qt::PlainText); m_text.setPerformanceHint(QStaticText::AggressiveCaching); @@ -41,32 +43,65 @@ void KFileItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphi { KItemListGroupHeader::paint(painter, option, widget); - painter->setPen(roleColor()); - painter->setFont(m_font); - painter->drawStaticText(roleBounds().topLeft(), m_text); + if (m_dirtyCache) { + updateCache(); + } + + if (m_pixmap.isNull()) { + painter->setPen(roleColor()); + painter->drawStaticText(roleBounds().topLeft(), m_text); + } else { + painter->drawPixmap(roleBounds().topLeft(), m_pixmap); + } +} + +void KFileItemListGroupHeader::roleChanged(const QByteArray ¤t, const QByteArray &previous) +{ + Q_UNUSED(current); + Q_UNUSED(previous); + m_dirtyCache = true; } void KFileItemListGroupHeader::dataChanged(const QVariant& current, const QVariant& previous) { Q_UNUSED(current); Q_UNUSED(previous); - updateText(); + m_dirtyCache = true; } void KFileItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event) { QGraphicsWidget::resizeEvent(event); - updateText(); + m_dirtyCache = true; } -void KFileItemListGroupHeader::updateText() +void KFileItemListGroupHeader::updateCache() { - const qreal width = size().width() - 4 * styleOption().padding; - m_font = font(); // TODO: Most probably the font size will be slightly shrinked in future + Q_ASSERT(m_dirtyCache); + m_dirtyCache = false; + + const qreal maxWidth = size().width() - 4 * styleOption().padding; + + if (role() == "rating") { + m_text = QString(); + + const qreal height = styleOption().fontMetrics.ascent(); + const QSizeF pixmapSize(qMin(height * 5, maxWidth), height); + + m_pixmap = QPixmap(pixmapSize.toSize()); + m_pixmap.fill(Qt::transparent); + + QPainter painter(&m_pixmap); + const QRect rect(0, 0, m_pixmap.width(), m_pixmap.height()); + const int rating = data().toInt(); + KRatingPainter::paintRating(&painter, rect, Qt::AlignJustify | Qt::AlignVCenter, rating); + } else { + m_pixmap = QPixmap(); - QFontMetricsF fontMetrics(m_font); - const QString text = fontMetrics.elidedText(data().toString(), Qt::ElideRight, width); - m_text.setText(text); + QFontMetricsF fontMetrics(font()); + const QString text = fontMetrics.elidedText(data().toString(), Qt::ElideRight, maxWidth); + m_text.setText(text); + } } #include "kfileitemlistgroupheader.moc" |
