]> cloud.milkyroute.net Git - dolphin.git/blob - src/kcategorydrawer.cpp
As requested by Peter: upgrade version to 1.0
[dolphin.git] / src / kcategorydrawer.cpp
1 /**
2 * This file is part of the KDE project
3 * Copyright (C) 2007 Rafael Fernández López <ereslibre@kde.org>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21 #include "kcategorydrawer.h"
22
23 #include <QPainter>
24 #include <QStyleOption>
25
26 #include <kiconloader.h>
27 #include <kcategorizedsortfilterproxymodel.h>
28
29 KCategoryDrawer::KCategoryDrawer()
30 {
31 }
32
33 KCategoryDrawer::~KCategoryDrawer()
34 {
35 }
36
37 void KCategoryDrawer::drawCategory(const QModelIndex &index,
38 int /*sortRole*/,
39 const QStyleOption &option,
40 QPainter *painter) const
41 {
42 const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
43
44 QColor color;
45
46 if (option.state & QStyle::State_Selected)
47 {
48 color = option.palette.color(QPalette::HighlightedText);
49 }
50 else
51 {
52 color = option.palette.color(QPalette::Text);
53 }
54
55 painter->save();
56 painter->setRenderHint(QPainter::Antialiasing);
57
58 if (option.state & QStyle::State_Selected)
59 {
60 QColor selected = option.palette.color(QPalette::Highlight);
61
62 QLinearGradient gradient(option.rect.topLeft(),
63 option.rect.bottomRight());
64 gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
65 : 1, selected);
66 gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
67 : 0, Qt::transparent);
68
69 painter->fillRect(option.rect, gradient);
70 }
71 else if (option.state & QStyle::State_MouseOver)
72 {
73 QColor hover = option.palette.color(QPalette::Highlight).light();
74 hover.setAlpha(88);
75
76 QLinearGradient gradient(option.rect.topLeft(),
77 option.rect.bottomRight());
78 gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
79 : 1, hover);
80 gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
81 : 0, Qt::transparent);
82
83 painter->fillRect(option.rect, gradient);
84 }
85
86 QFont painterFont = painter->font();
87 painterFont.setWeight(QFont::Bold);
88 QFontMetrics metrics(painterFont);
89 painter->setFont(painterFont);
90
91 QRect lineRect(option.rect.left(),
92 option.rect.bottom() - 1,
93 option.rect.width(),
94 1);
95
96 QLinearGradient gradient(option.rect.topLeft(),
97 option.rect.bottomRight());
98 gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
99 : 1, color);
100 gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
101 : 0, Qt::transparent);
102
103 painter->fillRect(lineRect, gradient);
104
105 painter->setPen(color);
106
107 painter->drawText(option.rect, Qt::AlignVCenter | Qt::AlignLeft,
108 metrics.elidedText(category, Qt::ElideRight, option.rect.width()));
109
110 painter->restore();
111 }
112
113 int KCategoryDrawer::categoryHeight(const QModelIndex &index, const QStyleOption &option) const
114 {
115 Q_UNUSED(index);
116
117 return option.fontMetrics.height() + 4 /* 3 separator; 1 gradient */;
118 }