2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
4 * Based on the Itemviews NG project from Trolltech Labs
6 * SPDX-License-Identifier: GPL-2.0-or-later
9 #include "kstandarditemlistgroupheader.h"
11 #include <KRatingPainter>
14 KStandardItemListGroupHeader::KStandardItemListGroupHeader(QGraphicsWidget
* parent
) :
15 KItemListGroupHeader(parent
),
20 m_text
.setTextFormat(Qt::PlainText
);
21 m_text
.setPerformanceHint(QStaticText::AggressiveCaching
);
24 KStandardItemListGroupHeader::~KStandardItemListGroupHeader()
28 void KStandardItemListGroupHeader::paint(QPainter
* painter
, const QStyleOptionGraphicsItem
* option
, QWidget
* widget
)
33 KItemListGroupHeader::paint(painter
, option
, widget
);
36 void KStandardItemListGroupHeader::paintRole(QPainter
* painter
, const QRectF
& roleBounds
, const QColor
& color
)
38 if (m_pixmap
.isNull()) {
39 painter
->setPen(color
);
40 painter
->drawStaticText(roleBounds
.topLeft(), m_text
);
42 painter
->drawPixmap(roleBounds
.topLeft(), m_pixmap
);
46 void KStandardItemListGroupHeader::paintSeparator(QPainter
* painter
, const QColor
& color
)
48 if (itemIndex() == 0) {
49 // No top- or left-line should be drawn for the first group-header
53 painter
->setPen(color
);
55 if (scrollOrientation() == Qt::Horizontal
) {
56 painter
->drawLine(0, 0, 0, size().height() - 1);
58 painter
->drawLine(0, 0, size().width() - 1, 0);
62 void KStandardItemListGroupHeader::roleChanged(const QByteArray
¤t
, const QByteArray
&previous
)
69 void KStandardItemListGroupHeader::dataChanged(const QVariant
& current
, const QVariant
& previous
)
76 void KStandardItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent
* event
)
78 QGraphicsWidget::resizeEvent(event
);
82 void KStandardItemListGroupHeader::updateCache()
84 Q_ASSERT(m_dirtyCache
);
87 const qreal maxWidth
= size().width() - 4 * styleOption().padding
;
89 if (role() == "rating") {
90 m_text
.setText(QString());
92 const qreal height
= styleOption().fontMetrics
.ascent();
93 const QSizeF
pixmapSize(qMin(height
* 5, maxWidth
), height
);
95 m_pixmap
= QPixmap(pixmapSize
.toSize());
96 m_pixmap
.fill(Qt::transparent
);
98 QPainter
painter(&m_pixmap
);
99 const QRect
rect(0, 0, m_pixmap
.width(), m_pixmap
.height());
100 const int rating
= data().toInt();
101 KRatingPainter::paintRating(&painter
, rect
, Qt::AlignJustify
| Qt::AlignVCenter
, rating
);
103 m_pixmap
= QPixmap();
105 QFontMetricsF
fontMetrics(font());
106 const QString text
= fontMetrics
.elidedText(data().toString(), Qt::ElideRight
, maxWidth
);
107 m_text
.setText(text
);