/***************************************************************************
- * Copyright (C) 2005-2018 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "contextmenuactionprovider.h"
#include <QInputDialog>
+#include <QMap>
#include <QMenu>
#include <QMessageBox>
-#include <QMap>
#include "buffermodel.h"
#include "buffersettings.h"
#include "network.h"
#include "util.h"
-ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkModelController(parent)
+ContextMenuActionProvider::ContextMenuActionProvider(QObject* parent)
+ : NetworkModelController(parent)
{
registerAction(NetworkConnect, icon::get("network-connect"), tr("Connect"));
registerAction(NetworkDisconnect, icon::get("network-disconnect"), tr("Disconnect"));
registerAction(ShowNetworkConfig, tr("Configure"));
registerAction(ShowIgnoreList, tr("Show Ignore List"));
- auto *hideEventsMenu = new QMenu();
+ auto* hideEventsMenu = new QMenu();
hideEventsMenu->addAction(action(HideJoinPartQuit));
hideEventsMenu->addSeparator();
hideEventsMenu->addAction(action(HideJoin));
_hideEventsMenuAction = new Action(tr("Hide Events"), nullptr);
_hideEventsMenuAction->setMenu(hideEventsMenu);
- auto *nickCtcpMenu = new QMenu();
+ auto* nickCtcpMenu = new QMenu();
nickCtcpMenu->addAction(action(NickCtcpPing));
nickCtcpMenu->addAction(action(NickCtcpVersion));
nickCtcpMenu->addAction(action(NickCtcpTime));
_nickCtcpMenuAction = new Action(tr("CTCP"), nullptr);
_nickCtcpMenuAction->setMenu(nickCtcpMenu);
- auto *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
_nickModeMenuAction = new Action(tr("Actions"), nullptr);
_nickModeMenuAction->setMenu(nickModeMenu);
- auto *ignoreMenu = new QMenu();
+ auto* ignoreMenu = new QMenu();
_nickIgnoreMenuAction = new Action(tr("Ignore"), nullptr);
_nickIgnoreMenuAction->setMenu(ignoreMenu);
// 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();
_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<QModelIndex>() << index, nullptr, 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, nullptr, 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)
+void ContextMenuActionProvider::addActions(QMenu* menu,
+ 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
}
}
-
-void ContextMenuActionProvider::addNetworkItemActions(QMenu *menu, const QModelIndex &index)
+void ContextMenuActionProvider::addNetworkItemActions(QMenu* menu, const QModelIndex& index)
{
NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>();
if (!networkId.isValid())
return;
- const Network *network = Client::network(networkId);
+ const Network* network = Client::network(networkId);
Q_CHECK_PTR(network);
if (!network)
return;
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<BufferInfo>();
addAction(BufferRemove, menu, index, InactiveState);
break;
- case BufferInfo::QueryBuffer:
- {
- //IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
- //if(ircUser) {
+ case BufferInfo::QueryBuffer: {
+ // IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ // if(ircUser) {
addIrcUserActions(menu, index);
menu->addSeparator();
//}
}
}
-
-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)
addAction(_nickModeMenuAction, menu, itemType == NetworkModel::IrcUserItemType);
addAction(_nickCtcpMenuAction, menu);
- auto *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();
+ Network* network = ircUser->network();
// only show entries for usermode +h if server supports it
if (network && network->prefixModes().contains('h')) {
action(NickHalfop)->setVisible(true);
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
if (bufferInfo.type() == BufferInfo::ChannelBuffer)
bufferName = bufferInfo.bufferName();
- QMap<QString, bool> ignoreMap = Client::ignoreListManager()->matchingRulesForHostmask(ircUser->hostmask(), ircUser->network()->networkName(), bufferName);
+ QMap<QString, bool> ignoreMap = Client::ignoreListManager()->matchingRulesForHostmask(ircUser->hostmask(),
+ ircUser->network()->networkName(),
+ bufferName);
addIgnoreMenu(menu, ircUser->hostmask(), ignoreMap);
// end of ignoreliststuff
}
}
}
-
-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);
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());
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());
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);
menu->addAction(_hideEventsMenuAction);
}
-
-void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostmask, const QMap<QString, bool> &ignoreMap)
+void ContextMenuActionProvider::addIgnoreMenu(QMenu* menu, const QString& hostmask, const QMap<QString, bool>& ignoreMap)
{
- QMenu *ignoreMenu = _nickIgnoreMenuAction->menu();
+ QMenu* ignoreMenu = _nickIgnoreMenuAction->menu();
ignoreMenu->clear();
QString nick = nickFromMask(hostmask);
QString ident = userFromMask(hostmask);
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);
ignoreMenu->addAction(_ignoreDescriptions.at(1));
while (ruleIter != ignoreMap.constEnd()) {
if (counter < 5) {
- auto type = static_cast<ActionType>(NickIgnoreToggleEnabled0 + counter*0x100000);
- Action *act = action(type);
+ auto type = static_cast<ActionType>(NickIgnoreToggleEnabled0 + counter * 0x100000);
+ Action* act = action(type);
act->setText(ruleIter.key());
act->setProperty("ignoreRule", ruleIter.key());
act->setChecked(ruleIter.value());