modernize: Require member function pointers for Settings::notify()
[quassel.git] / src / uisupport / contextmenuactionprovider.cpp
index 8a0ca82..6cdc9fb 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#include <QIcon>
+#include "contextmenuactionprovider.h"
+
 #include <QInputDialog>
 #include <QMenu>
 #include <QMessageBox>
 #include <QMap>
 
-#include "contextmenuactionprovider.h"
-
 #include "buffermodel.h"
 #include "buffersettings.h"
-#include "clientidentity.h"
-#include "network.h"
-#include "util.h"
 #include "client.h"
 #include "clientignorelistmanager.h"
+#include "icon.h"
+#include "network.h"
+#include "util.h"
 
 ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkModelController(parent)
 {
-    registerAction(NetworkConnect, QIcon::fromTheme("network-connect"), tr("Connect"));
-    registerAction(NetworkDisconnect, QIcon::fromTheme("network-disconnect"), tr("Disconnect"));
+    registerAction(NetworkConnect, icon::get("network-connect"), tr("Connect"));
+    registerAction(NetworkDisconnect, icon::get("network-disconnect"), tr("Disconnect"));
 
-    registerAction(BufferJoin, QIcon::fromTheme("irc-join-channel"), tr("Join"));
-    registerAction(BufferPart, QIcon::fromTheme("irc-close-channel"), tr("Part"));
+    registerAction(BufferJoin, icon::get("irc-join-channel"), tr("Join"));
+    registerAction(BufferPart, icon::get("irc-close-channel"), tr("Part"));
     registerAction(BufferRemove, tr("Delete Chat(s)..."));
     registerAction(BufferSwitchTo, tr("Go to Chat"));
 
@@ -55,7 +54,7 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM
     registerAction(HideApplyToAll, tr("Set as Default..."));
     registerAction(HideUseDefaults, tr("Use Defaults..."));
 
-    registerAction(JoinChannel, QIcon::fromTheme("irc-join-channel"), tr("Join Channel..."));
+    registerAction(JoinChannel, icon::get("irc-join-channel"), tr("Join Channel..."));
 
     registerAction(NickQuery, tr("Start Query"));
     registerAction(NickSwitchTo, tr("Show Query"));
@@ -77,15 +76,15 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM
     registerAction(NickIgnoreToggleEnabled3, "Enable", true);
     registerAction(NickIgnoreToggleEnabled4, "Enable", true);
 
-    registerAction(NickOp, QIcon::fromTheme("irc-operator"), tr("Give Operator Status"));
-    registerAction(NickDeop, QIcon::fromTheme("irc-remove-operator"), tr("Take Operator Status"));
-    registerAction(NickHalfop, QIcon::fromTheme("irc-voice"), tr("Give Half-Operator Status"));
-    registerAction(NickDehalfop, QIcon::fromTheme("irc-unvoice"), tr("Take Half-Operator Status"));
-    registerAction(NickVoice, QIcon::fromTheme("irc-voice"), tr("Give Voice"));
-    registerAction(NickDevoice, QIcon::fromTheme("irc-unvoice"), tr("Take Voice"));
-    registerAction(NickKick, QIcon::fromTheme("im-kick-user"), tr("Kick From Channel"));
-    registerAction(NickBan, QIcon::fromTheme("im-ban-user"), tr("Ban From Channel"));
-    registerAction(NickKickBan, QIcon::fromTheme("im-ban-kick-user"), tr("Kick && Ban"));
+    registerAction(NickOp, icon::get("irc-operator"), tr("Give Operator Status"));
+    registerAction(NickDeop, icon::get("irc-remove-operator"), tr("Take Operator Status"));
+    registerAction(NickHalfop, icon::get("irc-voice"), tr("Give Half-Operator Status"));
+    registerAction(NickDehalfop, icon::get("irc-unvoice"), tr("Take Half-Operator Status"));
+    registerAction(NickVoice, icon::get("irc-voice"), tr("Give Voice"));
+    registerAction(NickDevoice, icon::get("irc-unvoice"), tr("Take Voice"));
+    registerAction(NickKick, icon::get("im-kick-user"), tr("Kick From Channel"));
+    registerAction(NickBan, icon::get("im-ban-user"), tr("Ban From Channel"));
+    registerAction(NickKickBan, icon::get("im-ban-kick-user"), tr("Kick && Ban"));
 
     registerAction(HideBufferTemporarily, tr("Hide Chat(s) Temporarily"));
     registerAction(HideBufferPermanently, tr("Hide Chat(s) Permanently"));
@@ -93,7 +92,7 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM
     registerAction(ShowNetworkConfig, tr("Configure"));
     registerAction(ShowIgnoreList, tr("Show Ignore List"));
 
-    QMenu *hideEventsMenu = new QMenu();
+    auto *hideEventsMenu = new QMenu();
     hideEventsMenu->addAction(action(HideJoinPartQuit));
     hideEventsMenu->addSeparator();
     hideEventsMenu->addAction(action(HideJoin));
@@ -106,18 +105,18 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM
     hideEventsMenu->addSeparator();
     hideEventsMenu->addAction(action(HideApplyToAll));
     hideEventsMenu->addAction(action(HideUseDefaults));
-    _hideEventsMenuAction = new Action(tr("Hide Events"), 0);
+    _hideEventsMenuAction = new Action(tr("Hide Events"), nullptr);
     _hideEventsMenuAction->setMenu(hideEventsMenu);
 
-    QMenu *nickCtcpMenu = new QMenu();
+    auto *nickCtcpMenu = new QMenu();
     nickCtcpMenu->addAction(action(NickCtcpPing));
     nickCtcpMenu->addAction(action(NickCtcpVersion));
     nickCtcpMenu->addAction(action(NickCtcpTime));
     nickCtcpMenu->addAction(action(NickCtcpClientinfo));
-    _nickCtcpMenuAction = new Action(tr("CTCP"), 0);
+    _nickCtcpMenuAction = new Action(tr("CTCP"), nullptr);
     _nickCtcpMenuAction->setMenu(nickCtcpMenu);
 
-    QMenu *nickModeMenu = new QMenu();
+    auto *nickModeMenu = new QMenu();
     nickModeMenu->addAction(action(NickOp));
     nickModeMenu->addAction(action(NickDeop));
     // this is where the halfops will be placed if available
@@ -129,11 +128,11 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM
     nickModeMenu->addAction(action(NickKick));
     nickModeMenu->addAction(action(NickBan));
     nickModeMenu->addAction(action(NickKickBan));
-    _nickModeMenuAction = new Action(tr("Actions"), 0);
+    _nickModeMenuAction = new Action(tr("Actions"), nullptr);
     _nickModeMenuAction->setMenu(nickModeMenu);
 
-    QMenu *ignoreMenu = new QMenu();
-    _nickIgnoreMenuAction = new Action(tr("Ignore"), 0);
+    auto *ignoreMenu = new QMenu();
+    _nickIgnoreMenuAction = new Action(tr("Ignore"), nullptr);
     _nickIgnoreMenuAction->setMenu(ignoreMenu);
 
     // These are disabled actions used as descriptions
@@ -160,50 +159,49 @@ ContextMenuActionProvider::~ContextMenuActionProvider()
 }
 
 
-void ContextMenuActionProvider::addActions(QMenu *menu, BufferId bufId, QObject *receiver, const char *method)
+void ContextMenuActionProvider::addActions(QMenu *menu, BufferId bufId, ActionSlot slot)
 {
     if (!bufId.isValid())
         return;
-    addActions(menu, Client::networkModel()->bufferIndex(bufId), receiver, method);
+    addActions(menu, Client::networkModel()->bufferIndex(bufId), std::move(slot));
 }
 
 
-void ContextMenuActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView)
+void ContextMenuActionProvider::addActions(QMenu *menu, const QModelIndex &index, ActionSlot slot, bool isCustomBufferView)
 {
     if (!index.isValid())
         return;
-    addActions(menu, QList<QModelIndex>() << index, 0, QString(), receiver, method, isCustomBufferView);
+    addActions(menu, QList<QModelIndex>() << index, nullptr, QString(), std::move(slot), isCustomBufferView);
 }
 
 
-void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot)
+void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, ActionSlot slot)
 {
-    addActions(menu, filter, msgBuffer, QString(), receiver, slot);
+    addActions(menu, filter, msgBuffer, QString(), std::move(slot));
 }
 
 
-void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method)
+void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, ActionSlot slot)
 {
     if (!filter)
         return;
-    addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, receiver, method, false);
+    addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, std::move(slot), false);
 }
 
 
-void ContextMenuActionProvider::addActions(QMenu *menu, const QList<QModelIndex> &indexList, QObject *receiver,  const char *method, bool isCustomBufferView)
+void ContextMenuActionProvider::addActions(QMenu *menu, const QList<QModelIndex> &indexList, ActionSlot slot, bool isCustomBufferView)
 {
-    addActions(menu, indexList, 0, QString(), receiver, method, isCustomBufferView);
+    addActions(menu, indexList, nullptr, QString(), std::move(slot), isCustomBufferView);
 }
 
 
 // add a list of actions sensible for the current item(s)
 void ContextMenuActionProvider::addActions(QMenu *menu,
-    const QList<QModelIndex> &indexList_,
-    MessageFilter *filter_,
-    const QString &contextItem_,
-    QObject *receiver_,
-    const char *method_,
-    bool isCustomBufferView)
+                                           const QList<QModelIndex> &indexList_,
+                                           MessageFilter *filter_,
+                                           const QString &contextItem_,
+                                           ActionSlot actionSlot,
+                                           bool isCustomBufferView)
 {
     if (!indexList_.count())
         return;
@@ -211,7 +209,7 @@ void ContextMenuActionProvider::addActions(QMenu *menu,
     setIndexList(indexList_);
     setMessageFilter(filter_);
     setContextItem(contextItem_);
-    setSlot(receiver_, method_);
+    setSlot(std::move(actionSlot));
 
     if (!messageFilter()) {
         // this means we are in a BufferView (or NickView) rather than a ChatView
@@ -349,7 +347,7 @@ void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex
         addAction(_nickModeMenuAction, menu, itemType == NetworkModel::IrcUserItemType);
         addAction(_nickCtcpMenuAction, menu);
 
-        IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+        auto *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
         if (ircUser) {
             Network *network = ircUser->network();
             // only show entries for usermode +h if server supports it
@@ -459,7 +457,7 @@ void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostma
     QString ident = userFromMask(hostmask);
     QString host = hostFromMask(hostmask);
     QString domain = host;
-    QRegExp domainRx = QRegExp("(\\.[^.]+\\.\\w+\\D)$");
+    QRegExp domainRx = QRegExp(R"((\.[^.]+\.\w+\D)$)");
     if (domainRx.indexIn(host) != -1)
         domain = domainRx.cap(1);
     // we can't rely on who-data
@@ -509,7 +507,7 @@ void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostma
             ignoreMenu->addAction(_ignoreDescriptions.at(1));
         while (ruleIter != ignoreMap.constEnd()) {
             if (counter < 5) {
-                ActionType type = static_cast<ActionType>(NickIgnoreToggleEnabled0 + counter*0x100000);
+                auto type = static_cast<ActionType>(NickIgnoreToggleEnabled0 + counter*0x100000);
                 Action *act = action(type);
                 act->setText(ruleIter.key());
                 act->setProperty("ignoreRule", ruleIter.key());