Warning, file /frameworks/kwidgetsaddons/src/kdualaction.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2010 Aurélien Gâteau <agateau@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 #include "kdualaction.h" 0008 #include "kdualaction_p.h" 0009 0010 #include <QIcon> 0011 0012 //--------------------------------------------------------------------- 0013 // KDualActionPrivate 0014 //--------------------------------------------------------------------- 0015 void KDualActionPrivate::init(KDualAction *q_ptr) 0016 { 0017 q = q_ptr; 0018 autoToggle = true; 0019 isActive = false; 0020 0021 QObject::connect(q, &KDualAction::triggered, q, [this]() { 0022 slotTriggered(); 0023 }); 0024 } 0025 0026 void KDualActionPrivate::updateFromCurrentState() 0027 { 0028 KGuiItem ¤tItem = item(isActive); 0029 QAction *qq = static_cast<QAction *>(q); 0030 qq->setIcon(currentItem.icon()); 0031 qq->setText(currentItem.text()); 0032 qq->setToolTip(currentItem.toolTip()); 0033 } 0034 0035 void KDualActionPrivate::slotTriggered() 0036 { 0037 if (!autoToggle) { 0038 return; 0039 } 0040 q->setActive(!isActive); 0041 Q_EMIT q->activeChangedByUser(isActive); 0042 } 0043 0044 //--------------------------------------------------------------------- 0045 // KDualAction 0046 //--------------------------------------------------------------------- 0047 KDualAction::KDualAction(const QString &inactiveText, const QString &activeText, QObject *parent) 0048 : QAction(parent) 0049 , d(new KDualActionPrivate) 0050 { 0051 d->init(this); 0052 d->item(false).setText(inactiveText); 0053 d->item(true).setText(activeText); 0054 d->updateFromCurrentState(); 0055 } 0056 0057 KDualAction::KDualAction(QObject *parent) 0058 : QAction(parent) 0059 , d(new KDualActionPrivate) 0060 { 0061 d->init(this); 0062 } 0063 0064 KDualAction::~KDualAction() = default; 0065 0066 void KDualAction::setActiveGuiItem(const KGuiItem &item) 0067 { 0068 d->setGuiItem(true, item); 0069 } 0070 KGuiItem KDualAction::activeGuiItem() const 0071 { 0072 return d->item(true); 0073 } 0074 void KDualAction::setInactiveGuiItem(const KGuiItem &item) 0075 { 0076 d->setGuiItem(false, item); 0077 } 0078 KGuiItem KDualAction::inactiveGuiItem() const 0079 { 0080 return d->item(false); 0081 } 0082 0083 void KDualAction::setActiveIcon(const QIcon &icon) 0084 { 0085 d->setIcon(true, icon); 0086 } 0087 QIcon KDualAction::activeIcon() const 0088 { 0089 return d->item(true).icon(); 0090 } 0091 void KDualAction::setInactiveIcon(const QIcon &icon) 0092 { 0093 d->setIcon(false, icon); 0094 } 0095 QIcon KDualAction::inactiveIcon() const 0096 { 0097 return d->item(false).icon(); 0098 } 0099 0100 void KDualAction::setActiveText(const QString &text) 0101 { 0102 d->setText(true, text); 0103 } 0104 QString KDualAction::activeText() const 0105 { 0106 return d->item(true).text(); 0107 } 0108 void KDualAction::setInactiveText(const QString &text) 0109 { 0110 d->setText(false, text); 0111 } 0112 QString KDualAction::inactiveText() const 0113 { 0114 return d->item(false).text(); 0115 } 0116 0117 void KDualAction::setActiveToolTip(const QString &toolTip) 0118 { 0119 d->setToolTip(true, toolTip); 0120 } 0121 QString KDualAction::activeToolTip() const 0122 { 0123 return d->item(true).toolTip(); 0124 } 0125 void KDualAction::setInactiveToolTip(const QString &toolTip) 0126 { 0127 d->setToolTip(false, toolTip); 0128 } 0129 QString KDualAction::inactiveToolTip() const 0130 { 0131 return d->item(false).toolTip(); 0132 } 0133 0134 void KDualAction::setIconForStates(const QIcon &icon) 0135 { 0136 setInactiveIcon(icon); 0137 setActiveIcon(icon); 0138 } 0139 0140 void KDualAction::setAutoToggle(bool value) 0141 { 0142 d->autoToggle = value; 0143 } 0144 0145 bool KDualAction::autoToggle() const 0146 { 0147 return d->autoToggle; 0148 } 0149 0150 void KDualAction::setActive(bool active) 0151 { 0152 if (active == d->isActive) { 0153 return; 0154 } 0155 d->isActive = active; 0156 d->updateFromCurrentState(); 0157 Q_EMIT activeChanged(active); 0158 } 0159 0160 bool KDualAction::isActive() const 0161 { 0162 return d->isActive; 0163 } 0164 0165 #include "moc_kdualaction.cpp"