File indexing completed on 2024-05-12 16:01:24
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Sven Langkamp <sven.langkamp@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 0008 #include "kis_action.h" 0009 #include "kis_action_manager.h" 0010 #include <QEvent> 0011 0012 class Q_DECL_HIDDEN KisAction::Private { 0013 0014 public: 0015 Private() : flags(NONE), conditions(NO_CONDITION), actionManager(0) {} 0016 0017 ActivationFlags flags; 0018 ActivationConditions conditions; 0019 QStringList excludedNodeTypes; 0020 QString operationID; 0021 KisActionManager* actionManager; 0022 }; 0023 0024 KisAction::KisAction(QObject* parent) 0025 : QWidgetAction(parent) 0026 , d(new Private) 0027 { 0028 connect(this, SIGNAL(changed()), SLOT(slotChanged())); 0029 } 0030 0031 KisAction::KisAction(const QString& text, QObject* parent) 0032 : QWidgetAction(parent) 0033 , d(new KisAction::Private) 0034 { 0035 QAction::setText(text); 0036 connect(this, SIGNAL(changed()), SLOT(slotChanged())); 0037 } 0038 0039 KisAction::KisAction(const QIcon &icon, const QString& text, QObject* parent) 0040 : QWidgetAction(parent) 0041 , d(new Private) 0042 { 0043 QAction::setIcon(icon); 0044 QAction::setText(text); 0045 connect(this, SIGNAL(changed()), SLOT(slotChanged())); 0046 } 0047 0048 KisAction::~KisAction() 0049 { 0050 delete d; 0051 } 0052 0053 // Using a dynamic QObject property is done for compatibility with KAction and 0054 // XmlGui. We may merge KisAction into the XmlGui code to make this unnecessary, 0055 // but that is probably a lot of work for little benefit. We currently store a 0056 // single default shortcut, but the old system used a list (to store default 0057 // primary/alternate shortcuts for local and global settings) so we marshal it 0058 // for compatibility. 0059 void KisAction::setDefaultShortcut(const QKeySequence &shortcut) 0060 { 0061 QList<QKeySequence> listifiedShortcut; 0062 // Use the empty list to represent no shortcut 0063 if (shortcut != QKeySequence("")) { 0064 listifiedShortcut.append(shortcut); 0065 } 0066 setProperty("defaultShortcuts", QVariant::fromValue(listifiedShortcut)); 0067 } 0068 0069 QKeySequence KisAction::defaultShortcut() const 0070 { 0071 auto listifiedShortcut = property("defaultShortcuts").value<QList<QKeySequence> >(); 0072 if (listifiedShortcut.isEmpty()) { 0073 return QKeySequence(); 0074 } else { 0075 return listifiedShortcut.first(); 0076 } 0077 } 0078 0079 void KisAction::setActivationFlags(KisAction::ActivationFlags flags) 0080 { 0081 d->flags = flags; 0082 } 0083 0084 KisAction::ActivationFlags KisAction::activationFlags() 0085 { 0086 return d->flags; 0087 } 0088 0089 void KisAction::setActivationConditions(KisAction::ActivationConditions conditions) 0090 { 0091 d->conditions = conditions; 0092 } 0093 0094 KisAction::ActivationConditions KisAction::activationConditions() 0095 { 0096 return d->conditions; 0097 } 0098 0099 void KisAction::setExcludedNodeTypes(const QStringList &nodeTypes) 0100 { 0101 d->excludedNodeTypes = nodeTypes; 0102 } 0103 0104 const QStringList& KisAction::excludedNodeTypes() const 0105 { 0106 return d->excludedNodeTypes; 0107 } 0108 0109 void KisAction::setActionEnabled(bool enabled) 0110 { 0111 setEnabled(enabled); 0112 } 0113 0114 void KisAction::setActionManager(KisActionManager* actionManager) 0115 { 0116 d->actionManager = actionManager; 0117 } 0118 0119 void KisAction::setOperationID(const QString& id) 0120 { 0121 d->operationID = id; 0122 connect(this, SIGNAL(triggered()), this, SLOT(slotTriggered())); 0123 } 0124 0125 void KisAction::slotTriggered() 0126 { 0127 if (d->actionManager && !d->operationID.isEmpty()) { 0128 d->actionManager->runOperation(d->operationID); 0129 } 0130 } 0131 0132 void KisAction::slotChanged() 0133 { 0134 emit sigEnableSlaves(isEnabled()); 0135 }