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 }