/***************************************************************************
- * Copyright (C) 2005-2015 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 *
* 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"));
+ registerAction(HideJoinPartQuit, tr("Joins/Parts/Quits"));
registerAction(HideJoin, tr("Joins"), true);
registerAction(HidePart, tr("Parts"), true);
registerAction(HideQuit, tr("Quits"), true);
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"));
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));
hideEventsMenu->addAction(action(HidePart));
hideEventsMenu->addAction(action(HideQuit));
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
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
}
-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;
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
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();
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
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
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());
ignoreMenu->addAction(act);
}
counter++;
- ruleIter++;
+ ++ruleIter;
}
if (counter)
ignoreMenu->addSeparator();