]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kstandarditemlistgroupheader.cpp
Merge branch 'release/20.08' into master
[dolphin.git] / src / kitemviews / kstandarditemlistgroupheader.cpp
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * Based on the Itemviews NG project from Trolltech Labs
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9 #include "kstandarditemlistgroupheader.h"
10
11 #include <KRatingPainter>
12 #include <QPainter>
13
14 KStandardItemListGroupHeader::KStandardItemListGroupHeader(QGraphicsWidget* parent) :
15 KItemListGroupHeader(parent),
16 m_dirtyCache(true),
17 m_text(),
18 m_pixmap()
19 {
20 m_text.setTextFormat(Qt::PlainText);
21 m_text.setPerformanceHint(QStaticText::AggressiveCaching);
22 }
23
24 KStandardItemListGroupHeader::~KStandardItemListGroupHeader()
25 {
26 }
27
28 void KStandardItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
29 {
30 if (m_dirtyCache) {
31 updateCache();
32 }
33 KItemListGroupHeader::paint(painter, option, widget);
34 }
35
36 void KStandardItemListGroupHeader::paintRole(QPainter* painter, const QRectF& roleBounds, const QColor& color)
37 {
38 if (m_pixmap.isNull()) {
39 painter->setPen(color);
40 painter->drawStaticText(roleBounds.topLeft(), m_text);
41 } else {
42 painter->drawPixmap(roleBounds.topLeft(), m_pixmap);
43 }
44 }
45
46 void KStandardItemListGroupHeader::paintSeparator(QPainter* painter, const QColor& color)
47 {
48 if (itemIndex() == 0) {
49 // No top- or left-line should be drawn for the first group-header
50 return;
51 }
52
53 painter->setPen(color);
54
55 if (scrollOrientation() == Qt::Horizontal) {
56 painter->drawLine(0, 0, 0, size().height() - 1);
57 } else {
58 painter->drawLine(0, 0, size().width() - 1, 0);
59 }
60 }
61
62 void KStandardItemListGroupHeader::roleChanged(const QByteArray &current, const QByteArray &previous)
63 {
64 Q_UNUSED(current)
65 Q_UNUSED(previous)
66 m_dirtyCache = true;
67 }
68
69 void KStandardItemListGroupHeader::dataChanged(const QVariant& current, const QVariant& previous)
70 {
71 Q_UNUSED(current)
72 Q_UNUSED(previous)
73 m_dirtyCache = true;
74 }
75
76 void KStandardItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event)
77 {
78 QGraphicsWidget::resizeEvent(event);
79 m_dirtyCache = true;
80 }
81
82 void KStandardItemListGroupHeader::updateCache()
83 {
84 Q_ASSERT(m_dirtyCache);
85 m_dirtyCache = false;
86
87 const qreal maxWidth = size().width() - 4 * styleOption().padding;
88
89 if (role() == "rating") {
90 m_text.setText(QString());
91
92 const qreal height = styleOption().fontMetrics.ascent();
93 const QSizeF pixmapSize(qMin(height * 5, maxWidth), height);
94
95 m_pixmap = QPixmap(pixmapSize.toSize());
96 m_pixmap.fill(Qt::transparent);
97
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);
102 } else {
103 m_pixmap = QPixmap();
104
105 QFontMetricsF fontMetrics(font());
106 const QString text = fontMetrics.elidedText(data().toString(), Qt::ElideRight, maxWidth);
107 m_text.setText(text);
108 }
109 }
110