nick changes and day changes can now be hidden too
[quassel.git] / src / uisupport / bufferview.cpp
index 5f33df4..9ab553c 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "buffermodel.h"
 #include "bufferviewfilter.h"
+#include "buffersettings.h"
 #include "buffersyncer.h"
 #include "client.h"
 #include "iconloader.h"
@@ -59,24 +60,20 @@ BufferView::BufferView(QWidget *parent)
     _removeBufferAction(tr("Delete buffer"), this),
     _ignoreListAction(tr("Ignore list"), this),
 
-    _hideJoinAction(tr("Join Events"), this),
-    _hidePartAction(tr("Part Events"), this),
-    _hideKillAction(tr("Kill Events"), this),
-    _hideQuitAction(tr("Quit Events"), this),
-    _hideModeAction(tr("Mode Events"), this)
-
+    _hideJoinAction(tr("Joins"), this),
+    _hidePartAction(tr("Parts"), this),
+    _hideQuitAction(tr("Quits"), this),
+    _hideNickAction(tr("Nick Changes"), this),
+    _hideModeAction(tr("Mode"), this),
+    _hideDayChangeAction(tr("Day Change"), this)
 {
   _hideJoinAction.setCheckable(true);
   _hidePartAction.setCheckable(true);
-  _hideKillAction.setCheckable(true);
   _hideQuitAction.setCheckable(true);
+  _hideNickAction.setCheckable(true);
   _hideModeAction.setCheckable(true);
-  _hideJoinAction.setEnabled(false);
-  _hidePartAction.setEnabled(false);
+  _hideDayChangeAction.setCheckable(true);
   _ignoreListAction.setEnabled(false);
-  _hideKillAction.setEnabled(false);
-  _hideQuitAction.setEnabled(false);
-  _hideModeAction.setEnabled(false);
 
   showChannelList.setIcon(SmallIcon("format-list-unordered"));
 
@@ -103,12 +100,13 @@ void BufferView::init() {
 
   setSortingEnabled(true);
   sortByColumn(0, Qt::AscendingOrder);
-#ifndef Q_WS_QWS
-  // this is a workaround to not join channels automatically... we need a saner way to navigate for qtopia anyway though,
-  // such as mark first, activate at second click...
-  connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(joinChannel(QModelIndex)));
+
+  // activated() fails on X11 and Qtopia at least
+#if defined Q_WS_QWS or defined Q_WS_X11
+  connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(joinChannel(QModelIndex)));
 #else
-  connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(joinChannel(QModelIndex)));  // Qtopia uses single click for activation
+  // afaik this is better on Mac and Windows
+  connect(this, SIGNAL(activated(QModelIndex)), SLOT(joinChannel(QModelIndex)));
 #endif
 }
 
@@ -389,14 +387,22 @@ void BufferView::addSeparatorToMenu(QMenu &menu, const QModelIndex &index, ItemA
   }
 }
 
-QMenu *BufferView::createHideEventsSubMenu(QMenu &menu) {
-  // QMenu *hideEventsMenu = new QMenu(tr("Hide Events"), &menu);
+QMenu *BufferView::createHideEventsSubMenu(QMenu &menu, BufferId bufferId) {
+  int filter = BufferSettings(bufferId).messageFilter();
+  _hideJoinAction.setChecked(filter & Message::Join);
+  _hidePartAction.setChecked(filter & Message::Part);
+  _hideQuitAction.setChecked(filter & Message::Quit);
+  _hideNickAction.setChecked(filter & Message::Nick);
+  _hideModeAction.setChecked(filter & Message::Mode);
+  _hideDayChangeAction.setChecked(filter & Message::DayChange);
+
   QMenu *hideEventsMenu = menu.addMenu(tr("Hide Events"));
   hideEventsMenu->addAction(&_hideJoinAction);
   hideEventsMenu->addAction(&_hidePartAction);
-  hideEventsMenu->addAction(&_hideKillAction);
   hideEventsMenu->addAction(&_hideQuitAction);
+  hideEventsMenu->addAction(&_hideNickAction);
   hideEventsMenu->addAction(&_hideModeAction);
+  hideEventsMenu->addAction(&_hideDayChangeAction);
   return hideEventsMenu;
 }
 
@@ -445,14 +451,14 @@ void BufferView::contextMenuEvent(QContextMenuEvent *event) {
        addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
        addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
        addItemToMenu(_removeBufferAction, contextMenu, index, InactiveState);
-       createHideEventsSubMenu(contextMenu);
+       createHideEventsSubMenu(contextMenu, bufferInfo.bufferId());
        addItemToMenu(_ignoreListAction, contextMenu);
        break;
       case BufferInfo::QueryBuffer:
        addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
        addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
        addItemToMenu(_removeBufferAction, contextMenu);
-       createHideEventsSubMenu(contextMenu);
+       createHideEventsSubMenu(contextMenu, bufferInfo.bufferId());
        break;
       default:
        addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
@@ -526,6 +532,36 @@ void BufferView::contextMenuEvent(QContextMenuEvent *event) {
     return;
   }
 
+  if(result == & _hideJoinAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::Join, _hideJoinAction.isChecked());
+    return;
+  }
+  if(result == &_hidePartAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::Part, _hidePartAction.isChecked());
+    return;
+  }
+  if(result == &_hideQuitAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::Quit, _hideQuitAction.isChecked());
+    return;
+  }
+  if(result == &_hideNickAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::Nick, _hideNickAction.isChecked());
+    return;
+  }
+  if(result == &_hideModeAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::Mode, _hideModeAction.isChecked());
+    return;
+  }
+  if(result == &_hideDayChangeAction) {
+    BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+    BufferSettings(bufferId).filterMessage(Message::DayChange, _hideDayChangeAction.isChecked());
+    return;
+  }
 }
 
 void BufferView::wheelEvent(QWheelEvent* event) {