modernize: Migrate action-related things to PMF connects
[quassel.git] / src / uisupport / actioncollection.cpp
index 58a6348..af5c924 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  * Parts of this implementation are based on KDE's KActionCollection.      *
  ***************************************************************************/
 
-#ifndef HAVE_KDE
-
 #include <QAction>
 #include <QDebug>
+#include <QMetaMethod>
 
 #include "actioncollection.h"
 
 #include "action.h"
 #include "uisettings.h"
 
-ActionCollection::ActionCollection(QObject *parent) : QObject(parent)
+void ActionCollection::addActions(const std::vector<std::pair<QString, Action *>> &actions)
 {
-    _connectTriggered = _connectHovered = false;
+    for (auto &&p : actions) {
+        addAction(p.first, p.second);
+    }
 }
 
 
-ActionCollection::~ActionCollection()
+#ifndef HAVE_KDE
+
+int ActionCollection::count() const
 {
+    return actions().count();
 }
 
 
+bool ActionCollection::isEmpty() const
+{
+    return actions().count();
+}
+
 void ActionCollection::clear()
 {
     _actionByName.clear();
@@ -60,25 +69,6 @@ QList<QAction *> ActionCollection::actions() const
     return _actions;
 }
 
-
-Action *ActionCollection::addAction(const QString &name, Action *action)
-{
-    QAction *act = addAction(name, static_cast<QAction *>(action));
-    Q_UNUSED(act);
-    Q_ASSERT(act == action);
-    return action;
-}
-
-
-Action *ActionCollection::addAction(const QString &name, const QObject *receiver, const char *member)
-{
-    Action *a = new Action(this);
-    if (receiver && member)
-        connect(a, SIGNAL(triggered(bool)), receiver, member);
-    return addAction(name, a);
-}
-
-
 QAction *ActionCollection::addAction(const QString &name, QAction *action)
 {
     if (!action)
@@ -116,11 +106,11 @@ QAction *ActionCollection::addAction(const QString &name, QAction *action)
         widget->addAction(action);
     }
 
-    connect(action, SIGNAL(destroyed(QObject *)), SLOT(actionDestroyed(QObject *)));
+    connect(action, &QObject::destroyed, this, &ActionCollection::actionDestroyed);
     if (_connectHovered)
-        connect(action, SIGNAL(hovered()), SLOT(slotActionHovered()));
+        connect(action, &QAction::hovered, this, &ActionCollection::slotActionHovered);
     if (_connectTriggered)
-        connect(action, SIGNAL(triggered(bool)), SLOT(slotActionTriggered()));
+        connect(action, &QAction::triggered, this, &ActionCollection::slotActionTriggered);
 
     emit inserted(action);
     return action;
@@ -136,7 +126,7 @@ void ActionCollection::removeAction(QAction *action)
 QAction *ActionCollection::takeAction(QAction *action)
 {
     if (!unlistAction(action))
-        return 0;
+        return nullptr;
 
     foreach(QWidget *widget, _associatedWidgets) {
         widget->removeAction(action);
@@ -155,7 +145,7 @@ void ActionCollection::readSettings()
     foreach(const QString &name, _actionByName.keys()) {
         if (!savedShortcuts.contains(name))
             continue;
-        Action *action = qobject_cast<Action *>(_actionByName.value(name));
+        auto *action = qobject_cast<Action *>(_actionByName.value(name));
         if (action)
             action->setShortcut(s.loadShortcut(name), Action::ActiveShortcut);
     }
@@ -166,7 +156,7 @@ void ActionCollection::writeSettings() const
 {
     ShortcutSettings s;
     foreach(const QString &name, _actionByName.keys()) {
-        Action *action = qobject_cast<Action *>(_actionByName.value(name));
+        auto *action = qobject_cast<Action *>(_actionByName.value(name));
         if (!action)
             continue;
         if (!action->isShortcutConfigurable())
@@ -180,7 +170,7 @@ void ActionCollection::writeSettings() const
 
 void ActionCollection::slotActionTriggered()
 {
-    QAction *action = qobject_cast<QAction *>(sender());
+    auto *action = qobject_cast<QAction *>(sender());
     if (action)
         emit actionTriggered(action);
 }
@@ -188,7 +178,7 @@ void ActionCollection::slotActionTriggered()
 
 void ActionCollection::slotActionHovered()
 {
-    QAction *action = qobject_cast<QAction *>(sender());
+    auto *action = qobject_cast<QAction *>(sender());
     if (action)
         emit actionHovered(action);
 }
@@ -197,29 +187,28 @@ void ActionCollection::slotActionHovered()
 void ActionCollection::actionDestroyed(QObject *obj)
 {
     // remember that this is not an QAction anymore at this point
-    QAction *action = static_cast<QAction *>(obj);
+    auto *action = static_cast<QAction *>(obj);
 
     unlistAction(action);
 }
 
-
-void ActionCollection::connectNotify(const char *signal)
+void ActionCollection::connectNotify(const QMetaMethod &signal)
 {
     if (_connectHovered && _connectTriggered)
         return;
 
-    if (QMetaObject::normalizedSignature(SIGNAL(actionHovered(QAction *))) == signal) {
+    if (QMetaMethod::fromSignal(&ActionCollection::actionHovered) == signal) {
         if (!_connectHovered) {
             _connectHovered = true;
             foreach(QAction* action, actions())
-            connect(action, SIGNAL(hovered()), SLOT(slotActionHovered()));
+            connect(action, &QAction::hovered, this, &ActionCollection::slotActionHovered);
         }
     }
-    else if (QMetaObject::normalizedSignature(SIGNAL(actionTriggered(QAction *))) == signal) {
+    else if (QMetaMethod::fromSignal(&ActionCollection::actionTriggered) == signal) {
         if (!_connectTriggered) {
             _connectTriggered = true;
             foreach(QAction* action, actions())
-            connect(action, SIGNAL(triggered(bool)), SLOT(slotActionTriggered()));
+            connect(action, &QAction::triggered, this, &ActionCollection::slotActionTriggered);
         }
     }
 
@@ -241,7 +230,7 @@ void ActionCollection::addAssociatedWidget(QWidget *widget)
     if (!_associatedWidgets.contains(widget)) {
         widget->addActions(actions());
         _associatedWidgets.append(widget);
-        connect(widget, SIGNAL(destroyed(QObject *)), SLOT(associatedWidgetDestroyed(QObject *)));
+        connect(widget, &QObject::destroyed, this, &ActionCollection::associatedWidgetDestroyed);
     }
 }
 
@@ -251,7 +240,7 @@ void ActionCollection::removeAssociatedWidget(QWidget *widget)
     foreach(QAction *action, actions())
     widget->removeAction(action);
     _associatedWidgets.removeAll(widget);
-    disconnect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(associatedWidgetDestroyed(QObject *)));
+    disconnect(widget, &QObject::destroyed, this, &ActionCollection::associatedWidgetDestroyed);
 }
 
 
@@ -293,5 +282,4 @@ bool ActionCollection::unlistAction(QAction *action)
     return true;
 }
 
-
 #endif /* HAVE_KDE */