/***************************************************************************
- * Copyright (C) 2005-2014 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 "networkmodelcontroller.h"
+
#include <QComboBox>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QMessageBox>
#include <QPushButton>
-#include "networkmodelcontroller.h"
-
#include "buffermodel.h"
#include "buffersettings.h"
+#include "client.h"
#include "clientidentity.h"
+#include "clientignorelistmanager.h"
+#include "icon.h"
#include "network.h"
#include "util.h"
-#include "clientignorelistmanager.h"
-#include "client.h"
NetworkModelController::NetworkModelController(QObject *parent)
: QObject(parent),
- _actionCollection(new ActionCollection(this)),
- _messageFilter(0),
- _receiver(0)
-{
- connect(_actionCollection, SIGNAL(actionTriggered(QAction *)), SLOT(actionTriggered(QAction *)));
-}
-
-
-NetworkModelController::~NetworkModelController()
+ _actionCollection(new ActionCollection(this))
{
+ connect(_actionCollection, &ActionCollection::actionTriggered, this, &NetworkModelController::actionTriggered);
}
}
-void NetworkModelController::setSlot(QObject *receiver, const char *method)
+void NetworkModelController::setSlot(ActionSlot slot)
{
- _receiver = receiver;
- _method = method;
+ _actionSlot = std::move(slot);
}
QString NetworkModelController::nickName(const QModelIndex &index) const
{
- IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ auto *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if (ircUser)
return ircUser->nick();
{
NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>();
if (!networkId.isValid())
- return BufferId();
+ return {};
QString nick = predefinedNick.isEmpty() ? nickName(index) : predefinedNick;
if (nick.isEmpty())
- return BufferId();
+ return {};
return findQueryBuffer(networkId, nick);
}
}
QString msg;
if (inactive.count()) {
- msg = tr("Do you want to delete the following buffer(s) permanently?", 0, inactive.count());
+ msg = tr("Do you want to delete the following buffer(s) permanently?", "", inactive.count());
msg += "<ul>";
int count = 0;
foreach(BufferInfo info, inactive) {
if (inactive.count() != indexList.count())
msg += tr("<br>Active channel buffers cannot be deleted, please part the channel first.");
- if (QMessageBox::question(0, tr("Remove buffers permanently?"), msg, QMessageBox::Yes|QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
+ if (QMessageBox::question(nullptr, tr("Remove buffers permanently?"), msg, QMessageBox::Yes|QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
foreach(BufferInfo info, inactive)
Client::removeBuffer(info.bufferId());
}
void NetworkModelController::handleExternalAction(ActionType type, QAction *action)
{
Q_UNUSED(type);
- if (receiver() && method()) {
- if (!QMetaObject::invokeMethod(receiver(), method(), Q_ARG(QAction *, action)))
- qWarning() << "NetworkModelActionController::handleExternalAction(): Could not invoke slot" << receiver() << method();
+ if (_actionSlot) {
+ _actionSlot(action);
}
}
void NetworkModelController::handleNetworkAction(ActionType type, QAction *)
{
- if (type == NetworkConnectAll || type == NetworkDisconnectAll) {
+ if (type == NetworkConnectAllWithDropdown || type == NetworkDisconnectAllWithDropdown || type == NetworkConnectAll || type == NetworkDisconnectAll) {
+ if (type == NetworkConnectAllWithDropdown && QMessageBox::question(nullptr, tr("Question"), tr("Really Connect to all IRC Networks?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::No)
+ return;
+ if (type == NetworkDisconnectAllWithDropdown && QMessageBox::question(nullptr, tr("Question"), tr("Really disconnect from all IRC Networks?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No)
+ return;
foreach(NetworkId id, Client::networkIds()) {
const Network *net = Client::network(id);
- if (type == NetworkConnectAll && net->connectionState() == Network::Disconnected)
+ if ((type == NetworkConnectAllWithDropdown || type == NetworkConnectAll) && net->connectionState() == Network::Disconnected)
net->requestConnect();
- if (type == NetworkDisconnectAll && net->connectionState() != Network::Disconnected)
+ if ((type == NetworkDisconnectAllWithDropdown || type == NetworkDisconnectAll) && net->connectionState() != Network::Disconnected)
net->requestDisconnect();
}
return;
{
Q_UNUSED(action)
+ if (type == HideJoinPartQuit) {
+ bool anyChecked = NetworkModelController::action(HideJoin)->isChecked();
+ anyChecked |= NetworkModelController::action(HidePart)->isChecked();
+ anyChecked |= NetworkModelController::action(HideQuit)->isChecked();
+
+ // If any are checked, uncheck them all.
+ // If none are checked, check them all.
+ bool newCheckedState = !anyChecked;
+ NetworkModelController::action(HideJoin)->setChecked(newCheckedState);
+ NetworkModelController::action(HidePart)->setChecked(newCheckedState);
+ NetworkModelController::action(HideQuit)->setChecked(newCheckedState);
+ }
+
int filter = 0;
if (NetworkModelController::action(HideJoin)->isChecked())
filter |= Message::Join | Message::NetsplitJoin;
filter |= Message::Topic;
switch (type) {
+ case HideJoinPartQuit:
case HideJoin:
case HidePart:
case HideQuit:
return;
case HideApplyToAll:
BufferSettings().setMessageFilter(filter);
+ // fallthrough
case HideUseDefaults:
if (_messageFilter)
BufferSettings(_messageFilter->idString()).removeFilter();
break;
}
case ShowChannelList:
+ if (networkId.isValid()) {
+ // Don't immediately list channels, allowing customization of filter first
+ emit showChannelList(networkId, {}, false);
+ }
+ break;
+ case ShowNetworkConfig:
if (networkId.isValid())
- emit showChannelList(networkId);
+ emit showNetworkConfig(networkId);
break;
case ShowIgnoreList:
if (networkId.isValid())
break;
case NickIgnoreUser:
{
- IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ auto *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if (!ircUser)
break;
Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
}
case NickIgnoreHost:
{
- IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ auto *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if (!ircUser)
break;
Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
}
case NickIgnoreDomain:
{
- IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ auto *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
if (!ircUser)
break;
Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
NetworkModelController::JoinDlg::JoinDlg(const QModelIndex &index, QWidget *parent) : QDialog(parent)
{
- setWindowIcon(QIcon::fromTheme("irc-join-channel"));
+ setWindowIcon(icon::get("irc-join-channel"));
setWindowTitle(tr("Join Channel"));
- QGridLayout *layout = new QGridLayout(this);
+ auto *layout = new QGridLayout(this);
layout->addWidget(new QLabel(tr("Network:")), 0, 0);
layout->addWidget(networks = new QComboBox, 0, 1);
layout->addWidget(new QLabel(tr("Channel:")), 1, 0);
networks->setInsertPolicy(QComboBox::InsertAlphabetically);
password->setEchoMode(QLineEdit::Password);
- connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
- connect(buttonBox, SIGNAL(rejected()), SLOT(reject()));
- connect(channel, SIGNAL(textChanged(QString)), SLOT(on_channel_textChanged(QString)));
+ connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+ connect(channel, &QLineEdit::textChanged, this, &JoinDlg::on_channel_textChanged);
foreach(NetworkId id, Client::networkIds()) {
const Network *net = Client::network(id);