File indexing completed on 2024-04-21 16:33:16
0001 /* 0002 SPDX-FileCopyrightText: 2010 Jan Lepper <dehtris@yahoo.de> 0003 SPDX-FileCopyrightText: 2010-2022 Krusader Krew <https://krusader.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "actionsbase.h" 0009 0010 #include "icon.h" 0011 #include "krmainwindow.h" 0012 0013 // QtWidgets 0014 #include <QAction> 0015 0016 #include <KWidgetsAddons/KToggleAction> 0017 #include <KXmlGui/KActionCollection> 0018 #include <utility> 0019 0020 void ActionsBase::ActionGroup::reconnect(QObject *recv) 0021 { 0022 foreach (QAction *action, _slots.keys()) { 0023 disconnect(action, nullptr, nullptr, nullptr); 0024 connect(action, SIGNAL(triggered(bool)), recv, _slots[action]); 0025 } 0026 } 0027 0028 void ActionsBase::ActionGroup::addAction(QAction *action, const char *slot) 0029 { 0030 _slots.insert(action, slot); 0031 } 0032 0033 QAction *ActionsBase::createAction(const QString &text, const QString &icon, bool isToggleAction) 0034 { 0035 if (isToggleAction) { 0036 if (icon == nullptr) 0037 return (QAction *)(new KToggleAction(text, this)); 0038 else 0039 return (QAction *)(new KToggleAction(Icon(icon), text, this)); 0040 } else { 0041 if (icon == nullptr) 0042 return new QAction(text, this); 0043 else 0044 return new QAction(Icon(icon), text, this); 0045 } 0046 } 0047 0048 QAction * 0049 ActionsBase::action(QString text, QString icon, const QKeySequence &shortcut, QObject *recv, const char *slot, const QString &name, bool isToggleAction) 0050 { 0051 QAction *a = createAction(std::move(text), std::move(icon), isToggleAction); 0052 0053 connect(a, SIGNAL(triggered(bool)), recv, slot); 0054 _mainWindow->actions()->addAction(name, a); 0055 _mainWindow->actions()->setDefaultShortcut(a, shortcut); 0056 0057 return a; 0058 } 0059 0060 QAction * 0061 ActionsBase::action(QString text, QString icon, const QList<QKeySequence> &shortcuts, QObject *recv, const char *slot, const QString &name, bool isToggleAction) 0062 { 0063 QAction *a = createAction(std::move(text), std::move(icon), isToggleAction); 0064 0065 connect(a, SIGNAL(triggered(bool)), recv, slot); 0066 _mainWindow->actions()->addAction(name, a); 0067 _mainWindow->actions()->setDefaultShortcuts(a, shortcuts); 0068 0069 return a; 0070 } 0071 0072 QAction * 0073 ActionsBase::action(QString text, QString icon, const QKeySequence &shortcut, ActionGroup &group, const char *slot, const QString &name, bool isToggleAction) 0074 { 0075 QAction *action = createAction(std::move(text), std::move(icon), isToggleAction); 0076 0077 group.addAction(action, slot); 0078 _mainWindow->actions()->addAction(name, action); 0079 _mainWindow->actions()->setDefaultShortcut(action, shortcut); 0080 0081 return action; 0082 } 0083 0084 KToggleAction *ActionsBase::toggleAction(QString text, QString icon, const QKeySequence &shortcut, QObject *recv, const char *slot, QString name) 0085 { 0086 return qobject_cast<KToggleAction *>(action(std::move(text), std::move(icon), shortcut, recv, slot, std::move(name), true)); 0087 } 0088 0089 KToggleAction *ActionsBase::toggleAction(QString text, QString icon, const QKeySequence &shortcut, ActionGroup &group, const char *slot, QString name) 0090 { 0091 return qobject_cast<KToggleAction *>(action(std::move(text), std::move(icon), shortcut, group, slot, std::move(name), true)); 0092 } 0093 0094 QAction *ActionsBase::stdAction(KStandardAction::StandardAction id, QObject *recv, const char *slot) 0095 { 0096 return KStandardAction::create(id, recv, slot, _mainWindow->actions()); 0097 } 0098 0099 QAction *ActionsBase::stdAction(KStandardAction::StandardAction id, ActionGroup &group, const char *slot) 0100 { 0101 QAction *action = KStandardAction::create(id, nullptr, nullptr, _mainWindow->actions()); 0102 group.addAction(action, slot); 0103 return action; 0104 }