/***************************************************************************
- * Copyright (C) 2005-09 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 *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include "toolbaractionprovider.h"
+
#include <QMenu>
#include <QToolBar>
-#include "toolbaractionprovider.h"
-
-#include "iconloader.h"
+#include "icon.h"
-ToolBarActionProvider::ToolBarActionProvider(QObject *parent)
-: NetworkModelController(parent)
+ToolBarActionProvider::ToolBarActionProvider(QObject* parent)
+ : NetworkModelController(parent)
{
- registerAction(NetworkConnectAll, DesktopIcon("network-connect"), tr("Connect"))->setToolTip(tr("Connect to IRC"));
- registerAction(NetworkDisconnectAll, DesktopIcon("network-disconnect"), tr("Disconnect"))->setToolTip(tr("Disconnect from IRC"));
-
- registerAction(BufferPart, DesktopIcon("irc-close-channel"), tr("Part"))->setToolTip(tr("Leave currently selected channel"));
- registerAction(JoinChannel, DesktopIcon("irc-join-channel"), tr("Join"))->setToolTip(tr("Join a channel"));
-
- registerAction(NickQuery, DesktopIcon("mail-message-new"), tr("Query"))->setToolTip(tr("Start a private conversation")); // fix icon
- registerAction(NickWhois, DesktopIcon("im-user"), tr("Whois"))->setToolTip(tr("Request user information")); // fix icon
-
- registerAction(NickOp, DesktopIcon("irc-operator"), tr("Op"))->setToolTip(tr("Give operator privileges to user"));
- registerAction(NickDeop, DesktopIcon("irc-remove-operator"), tr("Deop"))->setToolTip(tr("Take operator privileges from user"));
- registerAction(NickVoice, DesktopIcon("irc-voice"), tr("Voice"))->setToolTip(tr("Give voice to user"));
- registerAction(NickDevoice, DesktopIcon("irc-unvoice"), tr("Devoice"))->setToolTip(tr("Take voice from user"));
- registerAction(NickKick, DesktopIcon("im-kick-user"), tr("Kick"))->setToolTip(tr("Remove user from channel"));
- registerAction(NickBan, DesktopIcon("im-ban-user"), tr("Ban"))->setToolTip(tr("Ban user from channel"));
- registerAction(NickKickBan, DesktopIcon("im-ban-kick-user"), tr("Kick/Ban"))->setToolTip(tr("Remove and ban user from channel"));
-
- _networksConnectMenu = new QMenu();
- _networksConnectMenu->setSeparatorsCollapsible(false);
- _networksConnectMenu->addSeparator();
- _networksConnectMenu->addAction(tr("Connect to all"));
- action(NetworkConnectAll)->setMenu(_networksConnectMenu);
- action(NetworkConnectAll)->setEnabled(false);
-
- _networksDisconnectMenu = new QMenu();
- _networksDisconnectMenu->setSeparatorsCollapsible(false);
- _networksDisconnectMenu->addSeparator();
- _networksDisconnectMenu->addAction(tr("Disconnect from all"));
- action(NetworkDisconnectAll)->setMenu(_networksDisconnectMenu);
- action(NetworkDisconnectAll)->setEnabled(false);
-
- connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(networkCreated(NetworkId)));
- connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(networkRemoved(NetworkId)));
-
- updateStates();
-}
-
-ToolBarActionProvider::~ToolBarActionProvider() {
-
+ registerAction(NetworkConnectAllWithDropdown, icon::get("network-connect"), tr("Connect"))->setToolTip(tr("Connect to IRC"));
+ registerAction(NetworkDisconnectAllWithDropdown, icon::get("network-disconnect"), tr("Disconnect"))->setToolTip(tr("Disconnect from IRC"));
+ registerAction(NetworkConnectAll, tr("Connect to all"));
+ registerAction(NetworkDisconnectAll, tr("Disconnect from all"));
+
+ registerAction(BufferPart, icon::get("irc-close-channel"), tr("Part"))->setToolTip(tr("Leave currently selected channel"));
+ registerAction(JoinChannel, icon::get("irc-join-channel"), tr("Join"))->setToolTip(tr("Join a channel"));
+
+ registerAction(NickQuery, icon::get("mail-message-new"), tr("Query"))->setToolTip(tr("Start a private conversation")); // fix icon
+ registerAction(NickWhois, icon::get("im-user"), tr("Whois"))->setToolTip(tr("Request user information")); // fix icon
+
+ registerAction(NickOp, icon::get("irc-operator"), tr("Op"))->setToolTip(tr("Give operator privileges to user"));
+ registerAction(NickDeop, icon::get("irc-remove-operator"), tr("Deop"))->setToolTip(tr("Take operator privileges from user"));
+ registerAction(NickVoice, icon::get("irc-voice"), tr("Voice"))->setToolTip(tr("Give voice to user"));
+ registerAction(NickDevoice, icon::get("irc-unvoice"), tr("Devoice"))->setToolTip(tr("Take voice from user"));
+ registerAction(NickKick, icon::get("im-kick-user"), tr("Kick"))->setToolTip(tr("Remove user from channel"));
+ registerAction(NickBan, icon::get("im-ban-user"), tr("Ban"))->setToolTip(tr("Ban user from channel"));
+ registerAction(NickKickBan, icon::get("im-ban-kick-user"), tr("Kick/Ban"))->setToolTip(tr("Remove and ban user from channel"));
+
+ _networksConnectMenu = new QMenu();
+ _networksConnectMenu->setSeparatorsCollapsible(false);
+ _networksConnectMenu->addSeparator();
+ _networksConnectMenu->addAction(action(NetworkConnectAll));
+ action(NetworkConnectAllWithDropdown)->setMenu(_networksConnectMenu);
+ action(NetworkConnectAllWithDropdown)->setEnabled(false);
+
+ _networksDisconnectMenu = new QMenu();
+ _networksDisconnectMenu->setSeparatorsCollapsible(false);
+ _networksDisconnectMenu->addSeparator();
+ _networksDisconnectMenu->addAction(action(NetworkDisconnectAll));
+ action(NetworkDisconnectAllWithDropdown)->setMenu(_networksDisconnectMenu);
+ action(NetworkDisconnectAllWithDropdown)->setEnabled(false);
+
+ connect(Client::instance(), &Client::networkCreated, this, &ToolBarActionProvider::networkCreated);
+ connect(Client::instance(), &Client::networkRemoved, this, &ToolBarActionProvider::networkRemoved);
+
+ updateStates();
}
-void ToolBarActionProvider::disconnectedFromCore() {
- _currentBuffer = QModelIndex();
- updateStates();
- NetworkModelController::disconnectedFromCore();
+void ToolBarActionProvider::disconnectedFromCore()
+{
+ _currentBuffer = QModelIndex();
+ updateStates();
+ NetworkModelController::disconnectedFromCore();
}
-void ToolBarActionProvider::updateStates() {
- action(BufferPart)->setEnabled(_currentBuffer.isValid()
- && _currentBuffer.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer
- && _currentBuffer.data(NetworkModel::ItemActiveRole).toBool());
-
+void ToolBarActionProvider::updateStates()
+{
+ action(BufferPart)
+ ->setEnabled(_currentBuffer.isValid() && _currentBuffer.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer
+ && _currentBuffer.data(NetworkModel::ItemActiveRole).toBool());
}
-void ToolBarActionProvider::addActions(QToolBar *bar, ToolBarType type) {
- switch(type) {
+void ToolBarActionProvider::addActions(QToolBar* bar, ToolBarType type)
+{
+ switch (type) {
case MainToolBar:
- bar->addAction(action(NetworkConnectAll));
- bar->addAction(action(NetworkDisconnectAll));
- bar->addAction(action(JoinChannel));
- bar->addAction(action(BufferPart));
- break;
+ bar->addAction(action(NetworkConnectAllWithDropdown));
+ bar->addAction(action(NetworkDisconnectAllWithDropdown));
+ bar->addAction(action(JoinChannel));
+ bar->addAction(action(BufferPart));
+ break;
case NickToolBar:
- bar->addAction(action(NickQuery));
- bar->addAction(action(NickWhois));
- bar->addSeparator();
- bar->addAction(action(NickOp));
- bar->addAction(action(NickDeop));
- bar->addAction(action(NickVoice));
- bar->addAction(action(NickDevoice));
- bar->addAction(action(NickKick));
- bar->addAction(action(NickBan));
- bar->addAction(action(NickKickBan));
- break;
+ bar->addAction(action(NickQuery));
+ bar->addAction(action(NickWhois));
+ bar->addSeparator();
+ bar->addAction(action(NickOp));
+ bar->addAction(action(NickDeop));
+ bar->addAction(action(NickVoice));
+ bar->addAction(action(NickDevoice));
+ bar->addAction(action(NickKick));
+ bar->addAction(action(NickBan));
+ bar->addAction(action(NickKickBan));
+ break;
default:
- return;
- }
+ return;
+ }
}
-void ToolBarActionProvider::currentBufferChanged(const QModelIndex &index) {
- _currentBuffer = index;
- updateStates();
+void ToolBarActionProvider::onCurrentBufferChanged(const QModelIndex& index)
+{
+ _currentBuffer = index;
+ updateStates();
}
-void ToolBarActionProvider::nickSelectionChanged(const QModelIndexList &indexList) {
- _selectedNicks = indexList;
- updateStates();
+void ToolBarActionProvider::onNickSelectionChanged(const QModelIndexList& indexList)
+{
+ _selectedNicks = indexList;
+ updateStates();
}
// override those to set indexes right
-void ToolBarActionProvider::handleNetworkAction(ActionType type, QAction *action) {
- setIndexList(_currentBuffer);
- NetworkModelController::handleNetworkAction(type, action);
+void ToolBarActionProvider::handleNetworkAction(ActionType type, QAction* action)
+{
+ setIndexList(_currentBuffer);
+ NetworkModelController::handleNetworkAction(type, action);
}
-void ToolBarActionProvider::handleBufferAction(ActionType type, QAction *action) {
- setIndexList(_currentBuffer);
- NetworkModelController::handleBufferAction(type, action);
+void ToolBarActionProvider::handleBufferAction(ActionType type, QAction* action)
+{
+ setIndexList(_currentBuffer);
+ NetworkModelController::handleBufferAction(type, action);
}
-void ToolBarActionProvider::handleNickAction(ActionType type, QAction *action) {
- setIndexList(_selectedNicks);
- NetworkModelController::handleNickAction(type, action);
+void ToolBarActionProvider::handleNickAction(ActionType type, QAction* action)
+{
+ setIndexList(_selectedNicks);
+ NetworkModelController::handleNickAction(type, action);
}
-void ToolBarActionProvider::handleGeneralAction(ActionType type, QAction *action) {
- setIndexList(_currentBuffer);
- NetworkModelController::handleGeneralAction(type, action);
+void ToolBarActionProvider::handleGeneralAction(ActionType type, QAction* action)
+{
+ setIndexList(_currentBuffer);
+ NetworkModelController::handleGeneralAction(type, action);
}
-void ToolBarActionProvider::networkCreated(NetworkId id) {
- const Network *net = Client::network(id);
- Action *act = new Action(net->networkName(), this);
- _networkActions[id] = act;
- act->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
- act->setData(QVariant::fromValue<NetworkId>(id));
- connect(net, SIGNAL(updatedRemotely()), SLOT(networkUpdated()));
- connect(act, SIGNAL(triggered()), SLOT(connectOrDisconnectNet()));
- networkUpdated(net);
+void ToolBarActionProvider::networkCreated(NetworkId id)
+{
+ const Network* net = Client::network(id);
+ Action* act = new Action(net->networkName(), this);
+ _networkActions[id] = act;
+ act->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
+ act->setData(QVariant::fromValue(id));
+ connect(net, &Network::updatedRemotely, this, [this]() { networkUpdated(); });
+ connect(act, &QAction::triggered, this, &ToolBarActionProvider::connectOrDisconnectNet);
+ networkUpdated(net);
}
-void ToolBarActionProvider::networkRemoved(NetworkId id) {
- Action *act = _networkActions.take(id);
- if(act)
- act->deleteLater();
+void ToolBarActionProvider::networkRemoved(NetworkId id)
+{
+ Action* act = _networkActions.take(id);
+ if (act)
+ act->deleteLater();
}
-void ToolBarActionProvider::networkUpdated(const Network *net) {
- if(!net)
- net = qobject_cast<const Network *>(sender());
- if(!net)
- return;
- Action *act = _networkActions.value(net->networkId());
- if(!act)
- return;
-
- _networksConnectMenu->removeAction(act);
- _networksDisconnectMenu->removeAction(act);
-
- QMenu *newMenu = net->connectionState() != Network::Disconnected ? _networksDisconnectMenu : _networksConnectMenu;
- act->setText(net->networkName());
-
- const int lastidx = newMenu->actions().count() - 2;
- QAction *beforeAction = newMenu->actions().at(lastidx);
- for(int i = 0; i < newMenu->actions().count() - 2; i++) {
- QAction *action = newMenu->actions().at(i);
- if(net->networkName().localeAwareCompare(action->text()) < 0) {
- beforeAction = action;
- break;
+void ToolBarActionProvider::networkUpdated(const Network* net)
+{
+ if (!net)
+ net = qobject_cast<const Network*>(sender());
+ if (!net)
+ return;
+ Action* act = _networkActions.value(net->networkId());
+ if (!act)
+ return;
+
+ _networksConnectMenu->removeAction(act);
+ _networksDisconnectMenu->removeAction(act);
+
+ QMenu* newMenu = net->connectionState() != Network::Disconnected ? _networksDisconnectMenu : _networksConnectMenu;
+ act->setText(net->networkName());
+
+ const int lastidx = newMenu->actions().count() - 2;
+ QAction* beforeAction = newMenu->actions().at(lastidx);
+ for (int i = 0; i < newMenu->actions().count() - 2; i++) {
+ QAction* action = newMenu->actions().at(i);
+ if (net->networkName().localeAwareCompare(action->text()) < 0) {
+ beforeAction = action;
+ break;
+ }
}
- }
- newMenu->insertAction(beforeAction, act);
+ newMenu->insertAction(beforeAction, act);
- action(NetworkConnectAll)->setEnabled(_networksConnectMenu->actions().count() > 2);
- action(NetworkDisconnectAll)->setEnabled(_networksDisconnectMenu->actions().count() > 2);
- action(JoinChannel)->setEnabled(_networksDisconnectMenu->actions().count() > 2);
+ action(NetworkConnectAllWithDropdown)->setEnabled(_networksConnectMenu->actions().count() > 2);
+ action(NetworkDisconnectAllWithDropdown)->setEnabled(_networksDisconnectMenu->actions().count() > 2);
+ action(JoinChannel)->setEnabled(_networksDisconnectMenu->actions().count() > 2);
}
-void ToolBarActionProvider::connectOrDisconnectNet() {
- QAction *act = qobject_cast<QAction *>(sender());
- if(!act)
- return;
- const Network *net = Client::network(act->data().value<NetworkId>());
- if(!net)
- return;
-
- if(net->connectionState() == Network::Disconnected) net->requestConnect();
- else net->requestDisconnect();
+void ToolBarActionProvider::connectOrDisconnectNet()
+{
+ auto* act = qobject_cast<QAction*>(sender());
+ if (!act)
+ return;
+ const Network* net = Client::network(act->data().value<NetworkId>());
+ if (!net)
+ return;
+
+ if (net->connectionState() == Network::Disconnected)
+ net->requestConnect();
+ else
+ net->requestDisconnect();
}
-//void ToolBarActionProvider::
+// void ToolBarActionProvider::