1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "kitemlistselectiontoggle.h"
22 #include <KIconEffect>
23 #include <KIconLoader>
28 KItemListSelectionToggle::KItemListSelectionToggle(QGraphicsItem
* parent
) :
29 QGraphicsWidget(parent
, 0),
35 KItemListSelectionToggle::~KItemListSelectionToggle()
39 void KItemListSelectionToggle::setChecked(bool checked
)
41 if (m_checked
!= checked
) {
48 bool KItemListSelectionToggle::isChecked() const
53 void KItemListSelectionToggle::setHovered(bool hovered
)
55 if (m_hovered
!= hovered
) {
62 void KItemListSelectionToggle::paint(QPainter
* painter
, const QStyleOptionGraphicsItem
* option
, QWidget
* widget
)
67 if (m_pixmap
.isNull()) {
71 const qreal x
= (size().width() - qreal(m_pixmap
.width())) / 2;
72 const qreal y
= (size().height() - qreal(m_pixmap
.height())) / 2;
73 painter
->drawPixmap(x
, y
, m_pixmap
);
76 void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent
* event
)
78 QGraphicsWidget::resizeEvent(event
);
80 if (!m_pixmap
.isNull()) {
81 const int pixmapSize
= m_pixmap
.size().width(); // Pixmap width is always equal pixmap height
83 if (pixmapSize
!= iconSize()) {
84 // If the required icon size is different from the actual pixmap size,
85 // overwrite the m_pixmap with an empty pixmap and reload the new
86 // icon on next re-painting.
92 void KItemListSelectionToggle::updatePixmap()
94 const QString icon
= m_checked
? "list-remove" : "list-add";
95 const KIconLoader::States state
= m_hovered
? KIconLoader::ActiveState
: KIconLoader::DisabledState
;
96 m_pixmap
= KIconLoader::global()->loadIcon(icon
, KIconLoader::Desktop
, iconSize(), state
);
99 int KItemListSelectionToggle::iconSize() const
101 const int iconSize
= qMin(size().width(), size().height());
103 if (iconSize
< KIconLoader::SizeSmallMedium
) {
104 return KIconLoader::SizeSmall
;
105 } else if (iconSize
< KIconLoader::SizeMedium
) {
106 return KIconLoader::SizeSmallMedium
;
107 } else if (iconSize
< KIconLoader::SizeLarge
) {
108 return KIconLoader::SizeMedium
;
109 } else if (iconSize
< KIconLoader::SizeHuge
) {
110 return KIconLoader::SizeLarge
;
111 } else if (iconSize
< KIconLoader::SizeEnormous
) {
112 return KIconLoader::SizeHuge
;