X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fcontextmenuactionprovider.cpp;h=e5837f6979551c8577cdcbb2ddfdd29975e78a81;hp=62d7aac1c97f7d50b18e2e35e7b287733887e288;hb=cc6e7c08709c4e761e2fd9c2e322751015497003;hpb=b50541ba6d7c58322846cc2eb9f023a117d8c47d diff --git a/src/uisupport/contextmenuactionprovider.cpp b/src/uisupport/contextmenuactionprovider.cpp index 62d7aac1..e5837f69 100644 --- a/src/uisupport/contextmenuactionprovider.cpp +++ b/src/uisupport/contextmenuactionprovider.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,29 +18,29 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include +#include "contextmenuactionprovider.h" + #include +#include #include #include -#include - -#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) +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 +55,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,22 +77,23 @@ 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")); registerAction(ShowChannelList, tr("Show Channel List")); + 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)); @@ -105,18 +106,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 @@ -128,22 +129,21 @@ 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 // They don't need any of the Action fancyness so we use plain QActions _ignoreDescriptions << new QAction(tr("Add Ignore Rule"), this); _ignoreDescriptions << new QAction(tr("Existing Rules"), this); - foreach(QAction *act, _ignoreDescriptions) - act->setEnabled(false); + foreach (QAction* act, _ignoreDescriptions) + act->setEnabled(false); } - ContextMenuActionProvider::~ContextMenuActionProvider() { _hideEventsMenuAction->menu()->deleteLater(); @@ -158,51 +158,44 @@ ContextMenuActionProvider::~ContextMenuActionProvider() _ignoreDescriptions.clear(); } - -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() << index, 0, QString(), receiver, method, isCustomBufferView); + addActions(menu, QList() << 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() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, receiver, method, false); + addActions(menu, QList() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, std::move(slot), false); } - -void ContextMenuActionProvider::addActions(QMenu *menu, const QList &indexList, QObject *receiver, const char *method, bool isCustomBufferView) +void ContextMenuActionProvider::addActions(QMenu* menu, const QList& 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 &indexList_, - MessageFilter *filter_, - const QString &contextItem_, - QObject *receiver_, - const char *method_, - bool isCustomBufferView) +void ContextMenuActionProvider::addActions(QMenu* menu, + const QList& indexList_, + MessageFilter* filter_, + const QString& contextItem_, + ActionSlot actionSlot, + bool isCustomBufferView) { if (!indexList_.count()) return; @@ -210,7 +203,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 @@ -274,17 +267,18 @@ void ContextMenuActionProvider::addActions(QMenu *menu, } } - -void ContextMenuActionProvider::addNetworkItemActions(QMenu *menu, const QModelIndex &index) +void ContextMenuActionProvider::addNetworkItemActions(QMenu* menu, const QModelIndex& index) { NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); if (!networkId.isValid()) return; - const Network *network = Client::network(networkId); + const Network* network = Client::network(networkId); Q_CHECK_PTR(network); if (!network) return; + addAction(ShowNetworkConfig, menu, index); + menu->addSeparator(); addAction(NetworkConnect, menu, network->connectionState() == Network::Disconnected); addAction(NetworkDisconnect, menu, network->connectionState() != Network::Disconnected); menu->addSeparator(); @@ -292,8 +286,7 @@ void ContextMenuActionProvider::addNetworkItemActions(QMenu *menu, const QModelI addAction(JoinChannel, menu, index, ActiveState); } - -void ContextMenuActionProvider::addBufferItemActions(QMenu *menu, const QModelIndex &index, bool isCustomBufferView) +void ContextMenuActionProvider::addBufferItemActions(QMenu* menu, const QModelIndex& index, bool isCustomBufferView) { BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); @@ -310,10 +303,9 @@ void ContextMenuActionProvider::addBufferItemActions(QMenu *menu, const QModelIn addAction(BufferRemove, menu, index, InactiveState); break; - case BufferInfo::QueryBuffer: - { - //IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); - //if(ircUser) { + case BufferInfo::QueryBuffer: { + // IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); + // if(ircUser) { addIrcUserActions(menu, index); menu->addSeparator(); //} @@ -331,8 +323,7 @@ void ContextMenuActionProvider::addBufferItemActions(QMenu *menu, const QModelIn } } - -void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex &index) +void ContextMenuActionProvider::addIrcUserActions(QMenu* menu, const QModelIndex& index) { // this can be called: a) as a nicklist context menu (index has IrcUserItemType) // b) as a query buffer context menu (index has BufferItemType and is a QueryBufferItem) @@ -346,9 +337,9 @@ void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex addAction(_nickModeMenuAction, menu, itemType == NetworkModel::IrcUserItemType); addAction(_nickCtcpMenuAction, menu); - IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); + auto* ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); if (ircUser) { - Network *network = ircUser->network(); + Network* network = ircUser->network(); // only show entries for usermode +h if server supports it if (network && network->prefixModes().contains('h')) { action(NickHalfop)->setVisible(true); @@ -363,7 +354,9 @@ void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); if (bufferInfo.type() == BufferInfo::ChannelBuffer) bufferName = bufferInfo.bufferName(); - QMap ignoreMap = Client::ignoreListManager()->matchingRulesForHostmask(ircUser->hostmask(), ircUser->network()->networkName(), bufferName); + QMap ignoreMap = Client::ignoreListManager()->matchingRulesForHostmask(ircUser->hostmask(), + ircUser->network()->networkName(), + bufferName); addIgnoreMenu(menu, ircUser->hostmask(), ignoreMap); // end of ignoreliststuff } @@ -379,26 +372,22 @@ void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex } } - -Action *ContextMenuActionProvider::addAction(ActionType type, QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) +Action* ContextMenuActionProvider::addAction(ActionType type, QMenu* menu, const QModelIndex& index, ItemActiveStates requiredActiveState) { return addAction(action(type), menu, checkRequirements(index, requiredActiveState)); } - -Action *ContextMenuActionProvider::addAction(Action *action, QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) +Action* ContextMenuActionProvider::addAction(Action* action, QMenu* menu, const QModelIndex& index, ItemActiveStates requiredActiveState) { return addAction(action, menu, checkRequirements(index, requiredActiveState)); } - -Action *ContextMenuActionProvider::addAction(ActionType type, QMenu *menu, bool condition) +Action* ContextMenuActionProvider::addAction(ActionType type, QMenu* menu, bool condition) { return addAction(action(type), menu, condition); } - -Action *ContextMenuActionProvider::addAction(Action *action, QMenu *menu, bool condition) +Action* ContextMenuActionProvider::addAction(Action* action, QMenu* menu, bool condition) { if (condition) { menu->addAction(action); @@ -410,8 +399,7 @@ Action *ContextMenuActionProvider::addAction(Action *action, QMenu *menu, bool c return action; } - -void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId) +void ContextMenuActionProvider::addHideEventsMenu(QMenu* menu, BufferId bufferId) { if (BufferSettings(bufferId).hasFilter()) addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter()); @@ -419,8 +407,7 @@ void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId addHideEventsMenu(menu); } - -void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *msgFilter) +void ContextMenuActionProvider::addHideEventsMenu(QMenu* menu, MessageFilter* msgFilter) { if (BufferSettings(msgFilter->idString()).hasFilter()) addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter()); @@ -428,8 +415,7 @@ void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *ms addHideEventsMenu(menu); } - -void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, int filter) +void ContextMenuActionProvider::addHideEventsMenu(QMenu* menu, int filter) { action(HideApplyToAll)->setEnabled(filter != -1); action(HideUseDefaults)->setEnabled(filter != -1); @@ -447,16 +433,15 @@ void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, int filter) menu->addAction(_hideEventsMenuAction); } - -void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostmask, const QMap &ignoreMap) +void ContextMenuActionProvider::addIgnoreMenu(QMenu* menu, const QString& hostmask, const QMap& ignoreMap) { - QMenu *ignoreMenu = _nickIgnoreMenuAction->menu(); + QMenu* ignoreMenu = _nickIgnoreMenuAction->menu(); ignoreMenu->clear(); QString nick = nickFromMask(hostmask); 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 @@ -476,8 +461,7 @@ void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostma action(NickIgnoreHost)->setText(text); action(NickIgnoreHost)->setProperty("ignoreRule", text); - text = domain.at(0) == '.' ? QString("*!%1@*%2").arg(ident, domain) - : QString("*!%1@%2").arg(ident, domain); + text = domain.at(0) == '.' ? QString("*!%1@*%2").arg(ident, domain) : QString("*!%1@%2").arg(ident, domain); action(NickIgnoreDomain)->setText(text); action(NickIgnoreDomain)->setProperty("ignoreRule", text); @@ -506,8 +490,8 @@ void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostma ignoreMenu->addAction(_ignoreDescriptions.at(1)); while (ruleIter != ignoreMap.constEnd()) { if (counter < 5) { - ActionType type = static_cast(NickIgnoreToggleEnabled0 + counter*0x100000); - Action *act = action(type); + auto type = static_cast(NickIgnoreToggleEnabled0 + counter * 0x100000); + Action* act = action(type); act->setText(ruleIter.key()); act->setProperty("ignoreRule", ruleIter.key()); act->setChecked(ruleIter.value());