File indexing completed on 2024-05-12 05:47:30
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kitemlistselectiontoggle.h" 0008 0009 #include <KIconLoader> 0010 0011 #include <QIcon> 0012 #include <QPainter> 0013 0014 KItemListSelectionToggle::KItemListSelectionToggle(QGraphicsItem *parent) 0015 : QGraphicsWidget(parent) 0016 , m_checked(false) 0017 , m_hovered(false) 0018 { 0019 } 0020 0021 KItemListSelectionToggle::~KItemListSelectionToggle() 0022 { 0023 } 0024 0025 void KItemListSelectionToggle::setChecked(bool checked) 0026 { 0027 if (m_checked != checked) { 0028 m_checked = checked; 0029 m_pixmap = QPixmap(); 0030 update(); 0031 } 0032 } 0033 0034 bool KItemListSelectionToggle::isChecked() const 0035 { 0036 return m_checked; 0037 } 0038 0039 void KItemListSelectionToggle::setHovered(bool hovered) 0040 { 0041 if (m_hovered != hovered) { 0042 m_hovered = hovered; 0043 m_pixmap = QPixmap(); 0044 update(); 0045 } 0046 } 0047 0048 void KItemListSelectionToggle::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 0049 { 0050 Q_UNUSED(option) 0051 Q_UNUSED(widget) 0052 0053 if (m_pixmap.isNull()) { 0054 updatePixmap(); 0055 } 0056 0057 const qreal x = (size().width() - qreal(m_pixmap.width() / m_pixmap.devicePixelRatioF())) / 2; 0058 const qreal y = (size().height() - qreal(m_pixmap.height() / m_pixmap.devicePixelRatioF())) / 2; 0059 painter->drawPixmap(x, y, m_pixmap); 0060 } 0061 0062 void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent *event) 0063 { 0064 QGraphicsWidget::resizeEvent(event); 0065 0066 if (!m_pixmap.isNull()) { 0067 const int pixmapSize = m_pixmap.size().width() / m_pixmap.devicePixelRatioF(); // Pixmap width is always equal pixmap height 0068 0069 if (pixmapSize != iconSize()) { 0070 // If the required icon size is different from the actual pixmap size, 0071 // overwrite the m_pixmap with an empty pixmap and reload the new 0072 // icon on next re-painting. 0073 m_pixmap = QPixmap(); 0074 } 0075 } 0076 } 0077 0078 void KItemListSelectionToggle::updatePixmap() 0079 { 0080 const QString icon = m_checked ? QStringLiteral("emblem-remove") : QStringLiteral("emblem-added"); 0081 m_pixmap = QIcon::fromTheme(icon).pixmap(iconSize(), m_hovered ? QIcon::Active : QIcon::Disabled); 0082 } 0083 0084 int KItemListSelectionToggle::iconSize() const 0085 { 0086 const int iconSize = qMin(size().width(), size().height()); 0087 0088 if (iconSize < KIconLoader::SizeSmallMedium) { 0089 return KIconLoader::SizeSmall; 0090 } else if (iconSize < KIconLoader::SizeMedium) { 0091 return KIconLoader::SizeSmallMedium; 0092 } else if (iconSize < KIconLoader::SizeLarge) { 0093 return KIconLoader::SizeMedium; 0094 } else if (iconSize < KIconLoader::SizeHuge) { 0095 return KIconLoader::SizeLarge; 0096 } else if (iconSize < KIconLoader::SizeEnormous) { 0097 return KIconLoader::SizeHuge; 0098 } 0099 0100 return iconSize; 0101 } 0102 0103 #include "moc_kitemlistselectiontoggle.cpp"