/***************************************************************************
- * Copyright (C) 2005-2014 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();
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)
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;
QAction *ActionCollection::takeAction(QAction *action)
{
if (!unlistAction(action))
- return 0;
+ return nullptr;
foreach(QWidget *widget, _associatedWidgets) {
widget->removeAction(action);
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);
}
{
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())
void ActionCollection::slotActionTriggered()
{
- QAction *action = qobject_cast<QAction *>(sender());
+ auto *action = qobject_cast<QAction *>(sender());
if (action)
emit actionTriggered(action);
}
void ActionCollection::slotActionHovered()
{
- QAction *action = qobject_cast<QAction *>(sender());
+ auto *action = qobject_cast<QAction *>(sender());
if (action)
emit actionHovered(action);
}
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);
}
-#if QT_VERSION >= 0x050000
-void ActionCollection::connectNotify(const QMetaMethod &method)
-#else
-void ActionCollection::connectNotify(const char *signal)
-#endif
+void ActionCollection::connectNotify(const QMetaMethod &signal)
{
if (_connectHovered && _connectTriggered)
return;
-#if QT_VERSION >= 0x050000
- QByteArray signal = method.methodSignature();
-#endif
-
- 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);
}
}
-#if QT_VERSION >= 0x050000
- QObject::connectNotify(method);
-#else
QObject::connectNotify(signal);
-#endif
}
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);
}
}
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);
}
return true;
}
-
#endif /* HAVE_KDE */