Fix compiler warnings
[quassel.git] / src / uisupport / bufferviewfilter.cpp
index 0b9f80a..3732d2d 100644 (file)
@@ -47,8 +47,9 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *
   : QSortFilterProxyModel(model),
     _config(0),
     _sortOrder(Qt::AscendingOrder),
+    _showServerQueries(false),
     _editMode(false),
-    _enableEditMode(tr("Show / Hide buffers"), this)
+    _enableEditMode(tr("Show / Hide Chats"), this)
 {
   setConfig(config);
   setSourceModel(model);
@@ -56,12 +57,15 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *
   setDynamicSortFilter(true);
 
   connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)),
-         this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
+          this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
 
   _enableEditMode.setCheckable(true);
   _enableEditMode.setChecked(_editMode);
   connect(&_enableEditMode, SIGNAL(toggled(bool)), this, SLOT(enableEditMode(bool)));
 
+  BufferSettings defaultSettings;
+  defaultSettings.notify("ServerNoticesTarget", this, SLOT(showServerQueriesChanged()));
+  showServerQueriesChanged();
 }
 
 void BufferViewFilter::setConfig(BufferViewConfig *config) {
@@ -83,7 +87,9 @@ void BufferViewFilter::setConfig(BufferViewConfig *config) {
   if(config->isInitialized()) {
     configInitialized();
   } else {
-    connect(config, SIGNAL(initDone()), this, SLOT(configInitialized()));
+    // we use a queued connection here since manipulating the connection list of a sending object
+    // doesn't seem to be such a good idea while executing a connected slots.
+    connect(config, SIGNAL(initDone()), this, SLOT(configInitialized()), Qt::QueuedConnection);
     invalidate();
   }
 }
@@ -92,18 +98,19 @@ void BufferViewFilter::configInitialized() {
   if(!config())
     return;
 
-  connect(config(), SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(addNewBuffersAutomaticallySet(bool)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(sortAlphabeticallySet(bool)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(hideInactiveBuffersSet(bool)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(allowedBufferTypesSet(int)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(minimumActivitySet(int)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(bufferListSet()), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(bufferAdded(const BufferId &, int)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(bufferMoved(const BufferId &, int)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(bufferRemoved(const BufferId &)), this, SLOT(invalidate()));
-  connect(config(), SIGNAL(bufferPermanentlyRemoved(const BufferId &)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(invalidate()));
+  connect(config(), SIGNAL(configChanged()), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(addNewBuffersAutomaticallySet(bool)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(sortAlphabeticallySet(bool)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(hideInactiveBuffersSet(bool)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(allowedBufferTypesSet(int)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(minimumActivitySet(int)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferListSet()), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferAdded(const BufferId &, int)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferMoved(const BufferId &, int)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferRemoved(const BufferId &)), this, SLOT(invalidate()));
+//   connect(config(), SIGNAL(bufferPermanentlyRemoved(const BufferId &)), this, SLOT(invalidate()));
 
   disconnect(config(), SIGNAL(initDone()), this, SLOT(configInitialized()));
 
@@ -113,6 +120,16 @@ void BufferViewFilter::configInitialized() {
   emit configChanged();
 }
 
+void BufferViewFilter::showServerQueriesChanged() {
+  BufferSettings bufferSettings;
+
+  bool showQueries = (bufferSettings.serverNoticesTarget() & BufferSettings::DefaultBuffer);
+  if(_showServerQueries != showQueries) {
+    _showServerQueries = showQueries;
+    invalidate();
+  }
+}
+
 QList<QAction *> BufferViewFilter::actions(const QModelIndex &index) {
   Q_UNUSED(index)
   QList<QAction *> actionList;
@@ -134,12 +151,12 @@ void BufferViewFilter::enableEditMode(bool enable) {
     QSet<BufferId>::const_iterator iter;
     for(iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); iter++) {
       if(config()->temporarilyRemovedBuffers().contains(*iter))
-        continue;
+         continue;
       config()->requestRemoveBuffer(*iter);
     }
     for(iter = _toRemove.constBegin(); iter != _toRemove.constEnd(); iter++) {
       if(config()->removedBuffers().contains(*iter))
-        continue;
+         continue;
       config()->requestRemoveBufferPermanently(*iter);
     }
   }
@@ -168,7 +185,7 @@ Qt::ItemFlags BufferViewFilter::flags(const QModelIndex &index) const {
     if(bufferType != BufferInfo::QueryBuffer) {
       ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
       if(clientConf && clientConf->isLocked()) {
-       flags &= ~(Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled);
+        flags &= ~(Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled);
       }
     }
   }
@@ -193,29 +210,29 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action
     bufferId = bufferList[i].second;
     if(droppedNetworkId == networkId) {
       if(row < 0)
-       row = 0;
+        row = 0;
 
       if(row < rowCount(parent)) {
-       QModelIndex source_child = mapToSource(index(row, 0, parent));
-       BufferId beforeBufferId = sourceModel()->data(source_child, NetworkModel::BufferIdRole).value<BufferId>();
-       pos = config()->bufferList().indexOf(beforeBufferId);
-       if(_sortOrder == Qt::DescendingOrder)
-         pos++;
+        QModelIndex source_child = mapToSource(index(row, 0, parent));
+        BufferId beforeBufferId = sourceModel()->data(source_child, NetworkModel::BufferIdRole).value<BufferId>();
+        pos = config()->bufferList().indexOf(beforeBufferId);
+        if(_sortOrder == Qt::DescendingOrder)
+          pos++;
       } else {
-       if(_sortOrder == Qt::AscendingOrder)
-         pos = config()->bufferList().count();
-       else
-         pos = 0;
+        if(_sortOrder == Qt::AscendingOrder)
+          pos = config()->bufferList().count();
+        else
+          pos = 0;
       }
 
       if(config()->bufferList().contains(bufferId) && !config()->sortAlphabetically()) {
-       if(config()->bufferList().indexOf(bufferId) < pos)
-         pos--;
-       ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
-       if(!clientConf || !clientConf->isLocked())
-         config()->requestMoveBuffer(bufferId, pos);
+        if(config()->bufferList().indexOf(bufferId) < pos)
+          pos--;
+        ClientBufferViewConfig *clientConf = qobject_cast<ClientBufferViewConfig *>(config());
+        if(!clientConf || !clientConf->isLocked())
+          config()->requestMoveBuffer(bufferId, pos);
       } else {
-       config()->requestAddBuffer(bufferId, pos);
+        config()->requestAddBuffer(bufferId, pos);
       }
 
     } else {
@@ -263,14 +280,14 @@ void BufferViewFilter::addBuffers(const QList<BufferId> &bufferIds) const {
     bool lt;
     for(int i = 0; i < bufferList.count(); i++) {
       if(config() && config()->sortAlphabetically())
-       lt = bufferIdLessThan(bufferId, bufferList[i]);
+        lt = bufferIdLessThan(bufferId, bufferList[i]);
       else
-       lt = bufferId < config()->bufferList()[i];
+        lt = bufferId < config()->bufferList()[i];
 
       if(lt) {
-       pos = i;
-       bufferList.insert(pos, bufferId);
-       break;
+        pos = i;
+        bufferList.insert(pos, bufferId);
+        break;
       }
     }
     config()->requestAddBuffer(bufferId, pos);
@@ -292,7 +309,7 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex)
     if(config()->isInitialized()
        && !config()->removedBuffers().contains(bufferId) // it hasn't been manually removed and either
        && ((config()->addNewBuffersAutomatically() && !config()->temporarilyRemovedBuffers().contains(bufferId)) // is totally unknown to us (a new buffer)...
-          || (config()->temporarilyRemovedBuffers().contains(bufferId) && activityLevel > BufferInfo::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us.
+           || (config()->temporarilyRemovedBuffers().contains(bufferId) && activityLevel > BufferInfo::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us.
       addBuffer(bufferId);
     }
     // note: adding the buffer to the valid list does not temper with the following filters ("show only channels" and stuff)
@@ -305,9 +322,14 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex)
   int allowedBufferTypes = config()->allowedBufferTypes();
   if(!config()->networkId().isValid())
     allowedBufferTypes &= ~BufferInfo::StatusBuffer;
-  if(!(allowedBufferTypes & sourceModel()->data(source_bufferIndex, NetworkModel::BufferTypeRole).toInt()))
+  int bufferType = sourceModel()->data(source_bufferIndex, NetworkModel::BufferTypeRole).toInt();
+  if(!(allowedBufferTypes & bufferType))
     return false;
 
+  if(bufferType & BufferInfo::QueryBuffer && !_showServerQueries && sourceModel()->data(source_bufferIndex, Qt::DisplayRole).toString().contains('.')) {
+    return false;
+  }
+
   // the following dynamic filters may not trigger if the buffer is currently selected.
   QModelIndex currentIndex = Client::bufferModel()->standardSelectionModel()->currentIndex();
   if(bufferId == Client::bufferModel()->data(currentIndex, NetworkModel::BufferIdRole).value<BufferId>())
@@ -382,8 +404,8 @@ bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QMod
 }
 
 bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
-  NetworkId leftNetworkId = sourceModel()->data(source_left, NetworkModel::NetworkIdRole).value<NetworkId>();
-  NetworkId rightNetworkId = sourceModel()->data(source_right, NetworkModel::NetworkIdRole).value<NetworkId>();
+  // NetworkId leftNetworkId = sourceModel()->data(source_left, NetworkModel::NetworkIdRole).value<NetworkId>();
+  // NetworkId rightNetworkId = sourceModel()->data(source_right, NetworkModel::NetworkIdRole).value<NetworkId>();
 
   return QSortFilterProxyModel::lessThan(source_left, source_right);
 }
@@ -508,3 +530,4 @@ bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &ri
     return QString::compare(Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString(), Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(), Qt::CaseInsensitive) < 0;
 }
 
+