style button is smaller now
[quassel.git] / src / uisupport / networkmodelcontroller.cpp
index 8a1d90a..be1db92 100644 (file)
@@ -35,6 +35,8 @@
 #include "clientidentity.h"
 #include "network.h"
 #include "util.h"
+#include "clientignorelistmanager.h"
+#include "client.h"
 
 NetworkModelController::NetworkModelController(QObject *parent)
 : QObject(parent),
@@ -115,7 +117,7 @@ QString NetworkModelController::nickName(const QModelIndex &index) const {
   BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
   if(!bufferInfo.isValid())
     return QString();
-  if(!bufferInfo.type() == BufferInfo::QueryBuffer)
+  if(bufferInfo.type() != BufferInfo::QueryBuffer)
     return QString();
 
   return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe
@@ -232,11 +234,14 @@ void NetworkModelController::handleBufferAction(ActionType type, QAction *) {
     removeBuffers(indexList());
   } else {
 
+    QList<BufferInfo> bufferList; // create temp list because model indexes might change
     foreach(QModelIndex index, indexList()) {
       BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
-      if(!bufferInfo.isValid())
-        continue;
+      if(bufferInfo.isValid())
+        bufferList << bufferInfo;
+    }
 
+    foreach(BufferInfo bufferInfo, bufferList) {
       switch(type) {
         case BufferJoin:
           Client::userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName()));
@@ -262,17 +267,19 @@ void NetworkModelController::handleHideAction(ActionType type, QAction *action)
 
   int filter = 0;
   if(NetworkModelController::action(HideJoin)->isChecked())
-    filter |= Message::Join;
+    filter |= Message::Join | Message::NetsplitJoin;
   if(NetworkModelController::action(HidePart)->isChecked())
     filter |= Message::Part;
   if(NetworkModelController::action(HideQuit)->isChecked())
-    filter |= Message::Quit;
+    filter |= Message::Quit | Message::NetsplitQuit;
   if(NetworkModelController::action(HideNick)->isChecked())
     filter |= Message::Nick;
   if(NetworkModelController::action(HideMode)->isChecked())
     filter |= Message::Mode;
   if(NetworkModelController::action(HideDayChange)->isChecked())
     filter |= Message::DayChange;
+  if(NetworkModelController::action(HideTopic)->isChecked())
+    filter |= Message::Topic;
 
   switch(type) {
   case HideJoin:
@@ -281,6 +288,7 @@ void NetworkModelController::handleHideAction(ActionType type, QAction *action)
   case HideNick:
   case HideMode:
   case HideDayChange:
+  case HideTopic:
     if(_messageFilter)
       BufferSettings(_messageFilter->idString()).setMessageFilter(filter);
     else {
@@ -339,14 +347,14 @@ void NetworkModelController::handleGeneralAction(ActionType type, QAction *actio
       break;
     case ShowIgnoreList:
       if(networkId.isValid())
-        emit showIgnoreList(networkId);
+        emit showIgnoreList(QString());
       break;
     default:
       break;
   }
 }
 
-void NetworkModelController::handleNickAction(ActionType type, QAction *) {
+void NetworkModelController::handleNickAction(ActionType type, QAction *action) {
   foreach(QModelIndex index, indexList()) {
     NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>();
     if(!networkId.isValid())
@@ -397,10 +405,55 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *) {
         Client::userInput(bufferInfo, QString("/KICK %1").arg(nick));
         break;
       case NickSwitchTo:
-        Client::bufferModel()->switchToBuffer(findQueryBuffer(networkId, nick));
-        break;
       case NickQuery:
-        Client::userInput(bufferInfo, QString("/QUERY %1").arg(nick));
+        Client::bufferModel()->switchToOrStartQuery(networkId, nick);
+        break;
+      case NickIgnoreUser:
+      {
+        IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+        if(!ircUser)
+          break;
+        Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+                                                       action->property("ignoreRule").toString(),
+                                                       false, IgnoreListManager::SoftStrictness,
+                                                       IgnoreListManager::NetworkScope,
+                                                       ircUser->network()->networkName(), true);
+        break;
+      }
+      case NickIgnoreHost:
+      {
+        IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+        if(!ircUser)
+          break;
+        Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+                                                       action->property("ignoreRule").toString(),
+                                                       false, IgnoreListManager::SoftStrictness,
+                                                       IgnoreListManager::NetworkScope,
+                                                       ircUser->network()->networkName(), true);
+        break;
+      }
+      case NickIgnoreDomain:
+      {
+        IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+        if(!ircUser)
+          break;
+        Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+                                                       action->property("ignoreRule").toString(),
+                                                       false, IgnoreListManager::SoftStrictness,
+                                                       IgnoreListManager::NetworkScope,
+                                                       ircUser->network()->networkName(), true);
+        break;
+      }
+      case NickIgnoreCustom:
+        // forward that to mainwin since we can access the settingspage only from there
+        emit showIgnoreList(action->property("ignoreRule").toString());
+        break;
+      case NickIgnoreToggleEnabled0:
+      case NickIgnoreToggleEnabled1:
+      case NickIgnoreToggleEnabled2:
+      case NickIgnoreToggleEnabled3:
+      case NickIgnoreToggleEnabled4:
+        Client::ignoreListManager()->requestToggleIgnoreRule(action->property("ignoreRule").toString());
         break;
       default:
         qWarning() << "Unhandled nick action";