test: Add build system support and a main function for unit tests
[quassel.git] / src / uisupport / networkmodelcontroller.cpp
index 6a96ba6..c33e030 100644 (file)
 
 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);
 }
 
 
@@ -103,10 +96,9 @@ void NetworkModelController::setContextItem(const QString &contextItem)
 }
 
 
-void NetworkModelController::setSlot(QObject *receiver, const char *method)
+void NetworkModelController::setSlot(ActionSlot slot)
 {
-    _receiver = receiver;
-    _method = method;
+    _actionSlot = std::move(slot);
 }
 
 
@@ -128,7 +120,7 @@ bool NetworkModelController::checkRequirements(const QModelIndex &index, ItemAct
 
 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();
 
@@ -146,11 +138,11 @@ BufferId NetworkModelController::findQueryBuffer(const QModelIndex &index, const
 {
     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);
 }
@@ -175,7 +167,7 @@ void NetworkModelController::removeBuffers(const QModelIndexList &indexList)
     }
     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) {
@@ -193,7 +185,7 @@ void NetworkModelController::removeBuffers(const QModelIndexList &indexList)
         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());
         }
@@ -204,9 +196,8 @@ void NetworkModelController::removeBuffers(const QModelIndexList &indexList)
 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);
     }
 }
 
@@ -238,9 +229,9 @@ void NetworkModelController::actionTriggered(QAction *action)
 void NetworkModelController::handleNetworkAction(ActionType type, QAction *)
 {
     if (type == NetworkConnectAllWithDropdown || type == NetworkDisconnectAllWithDropdown || type == NetworkConnectAll || type == NetworkDisconnectAll) {
-        if (type == NetworkConnectAllWithDropdown && QMessageBox::question(0, tr("Question"), tr("Really Connect to all IRC Networks?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::No)
+        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(0, tr("Question"), tr("Really disconnect from all IRC Networks?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No)
+        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);
@@ -363,7 +354,7 @@ void NetworkModelController::handleHideAction(ActionType type, QAction *action)
         return;
     case HideApplyToAll:
         BufferSettings().setMessageFilter(filter);
-        [[clang::fallthrough]];
+        // fallthrough
     case HideUseDefaults:
         if (_messageFilter)
             BufferSettings(_messageFilter->idString()).removeFilter();
@@ -412,8 +403,10 @@ void NetworkModelController::handleGeneralAction(ActionType type, QAction *actio
         break;
     }
     case ShowChannelList:
-        if (networkId.isValid())
-            emit showChannelList(networkId);
+        if (networkId.isValid()) {
+            // Don't immediately list channels, allowing customization of filter first
+            emit showChannelList(networkId, {}, false);
+        }
         break;
     case ShowNetworkConfig:
         if (networkId.isValid())
@@ -492,7 +485,7 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *action)
             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,
@@ -504,7 +497,7 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *action)
         }
         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,
@@ -516,7 +509,7 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *action)
         }
         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,
@@ -553,7 +546,7 @@ NetworkModelController::JoinDlg::JoinDlg(const QModelIndex &index, QWidget *pare
     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);
@@ -568,9 +561,9 @@ NetworkModelController::JoinDlg::JoinDlg(const QModelIndex &index, QWidget *pare
     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);