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 <KIconLoader>
26 KItemListSelectionToggle::KItemListSelectionToggle(QGraphicsItem
* parent
) :
27 QGraphicsWidget(parent
, nullptr),
33 KItemListSelectionToggle::~KItemListSelectionToggle()
37 void KItemListSelectionToggle::setChecked(bool checked
)
39 if (m_checked
!= checked
) {
46 bool KItemListSelectionToggle::isChecked() const
51 void KItemListSelectionToggle::setHovered(bool hovered
)
53 if (m_hovered
!= hovered
) {
60 void KItemListSelectionToggle::paint(QPainter
* painter
, const QStyleOptionGraphicsItem
* option
, QWidget
* widget
)
65 if (m_pixmap
.isNull()) {
69 const qreal x
= (size().width() - qreal(m_pixmap
.width())) / 2;
70 const qreal y
= (size().height() - qreal(m_pixmap
.height())) / 2;
71 painter
->drawPixmap(x
, y
, m_pixmap
);
74 void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent
* event
)
76 QGraphicsWidget::resizeEvent(event
);
78 if (!m_pixmap
.isNull()) {
79 const int pixmapSize
= m_pixmap
.size().width(); // Pixmap width is always equal pixmap height
81 if (pixmapSize
!= iconSize()) {
82 // If the required icon size is different from the actual pixmap size,
83 // overwrite the m_pixmap with an empty pixmap and reload the new
84 // icon on next re-painting.
90 void KItemListSelectionToggle::updatePixmap()
92 const QString icon
= m_checked
? QStringLiteral("emblem-remove") : QStringLiteral("emblem-added");
93 const KIconLoader::States state
= m_hovered
? KIconLoader::ActiveState
: KIconLoader::DisabledState
;
94 m_pixmap
= KIconLoader::global()->loadIcon(icon
, KIconLoader::Desktop
, iconSize(), state
);
97 int KItemListSelectionToggle::iconSize() const
99 const int iconSize
= qMin(size().width(), size().height());
101 if (iconSize
< KIconLoader::SizeSmallMedium
) {
102 return KIconLoader::SizeSmall
;
103 } else if (iconSize
< KIconLoader::SizeMedium
) {
104 return KIconLoader::SizeSmallMedium
;
105 } else if (iconSize
< KIconLoader::SizeLarge
) {
106 return KIconLoader::SizeMedium
;
107 } else if (iconSize
< KIconLoader::SizeHuge
) {
108 return KIconLoader::SizeLarge
;
109 } else if (iconSize
< KIconLoader::SizeEnormous
) {
110 return KIconLoader::SizeHuge
;