The new 'All Buffers' view is no properly presorted.
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 5 Jan 2009 13:18:07 +0000 (14:18 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 5 Jan 2009 13:18:16 +0000 (14:18 +0100)
If you have a randomly sorted 'All Buffers' view, then create a new
one in the buffer view settings and delete the incorrectly sorted one.

src/client/client.cpp
src/client/networkmodel.cpp
src/client/networkmodel.h
src/common/bufferviewconfig.cpp
src/qtui/settingspages/bufferviewsettingspage.cpp
src/qtui/settingspages/chatmonitorsettingspage.cpp
src/uisupport/bufferviewfilter.cpp
src/uisupport/bufferviewfilter.h

index b89b83b..64d228d 100644 (file)
@@ -314,6 +314,7 @@ void Client::createDefautBufferView() {
   if(bufferViewManager()->bufferViewConfigs().isEmpty()) {
     BufferViewConfig config(-1);
     config.setBufferViewName(tr("All Buffers"));
+    config.initSetBufferList(networkModel()->allBufferIdsSorted());
     bufferViewManager()->requestCreateBufferView(config.toVariantMap());
   }
 }
index 962c9f8..840a10a 100644 (file)
@@ -1041,3 +1041,35 @@ BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName,
   }
   return BufferId();
 }
+
+void NetworkModel::sortBufferIds(QList<BufferId> &bufferIds) const {
+  QList<BufferItem *> bufferItems;
+  foreach(BufferId bufferId, bufferIds) {
+    if(_bufferItemCache.contains(bufferId))
+      bufferItems << _bufferItemCache[bufferId];
+  }
+
+  qSort(bufferItems.begin(), bufferItems.end(), bufferItemLessThan);
+
+  bufferIds.clear();
+  foreach(BufferItem *bufferItem, bufferItems) {
+    bufferIds << bufferItem->bufferId();
+  }
+}
+
+QList<BufferId> NetworkModel::allBufferIdsSorted() const {
+  QList<BufferId> bufferIds = allBufferIds();
+  sortBufferIds(bufferIds);
+  return bufferIds;
+}
+
+bool NetworkModel::bufferItemLessThan(const BufferItem *left, const BufferItem *right) {
+  int leftType = left->bufferType();
+  int rightType = right->bufferType();
+
+  if(leftType != rightType)
+    return leftType < rightType;
+  else
+    return QString::compare(left->bufferName(), right->bufferName(), Qt::CaseInsensitive) < 0;
+}
+
index 7412d13..4c78878 100644 (file)
@@ -306,6 +306,8 @@ public:
   QString networkName(BufferId bufferId) const;
 
   inline QList<BufferId> allBufferIds() const { return _bufferItemCache.keys(); }
+  QList<BufferId> allBufferIdsSorted() const;
+  void sortBufferIds(QList<BufferId> &bufferIds) const;
 
 public slots:
   void bufferUpdated(BufferInfo bufferInfo);
@@ -331,6 +333,8 @@ private:
   BufferItem *findBufferItem(BufferId bufferId) const;
   BufferItem *bufferItem(const BufferInfo &bufferInfo);
 
+  static bool bufferItemLessThan(const BufferItem *left, const BufferItem *right);
+
   QHash<BufferId, BufferItem *> _bufferItemCache;
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::ItemTypes)
index 935d175..0b9ab96 100644 (file)
@@ -37,8 +37,7 @@ BufferViewConfig::BufferViewConfig(int bufferViewId, QObject *parent)
 
 BufferViewConfig::BufferViewConfig(int bufferViewId, const QVariantMap &properties, QObject *parent)
   : SyncableObject(parent),
-    _bufferViewId(bufferViewId),
-    _disableDecoration(false)  // FIXME remove as soon as we have bumped the protocol version to v8
+    _bufferViewId(bufferViewId)
 {
   fromVariantMap(properties);
   setObjectName(QString::number(bufferViewId));
index f8133de..e839292 100644 (file)
@@ -221,9 +221,10 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) {
   config->setInitialized();
   QList<BufferId> bufferIds;
   if(config->addNewBuffersAutomatically()) {
-    bufferIds = Client::networkModel()->allBufferIds();
     if(config->sortAlphabetically())
-      qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan);
+      bufferIds = Client::networkModel()->allBufferIdsSorted();
+    else
+      bufferIds = Client::networkModel()->allBufferIds();
   }
   config->initSetBufferList(bufferIds);
 
@@ -427,9 +428,10 @@ void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) {
   if(_newBufferViews.contains(config)) {
     QList<BufferId> bufferIds;
     if(config->addNewBuffersAutomatically()) {
-      bufferIds = Client::networkModel()->allBufferIds();
       if(config->sortAlphabetically())
-       qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan);
+       bufferIds = Client::networkModel()->allBufferIdsSorted();
+      else
+       bufferIds = Client::networkModel()->allBufferIds();
     }
     config->initSetBufferList(bufferIds);
   }
index 0170e87..b9a0738 100644 (file)
@@ -99,12 +99,12 @@ void ChatMonitorSettingsPage::load() {
       bufferIdsFromConfig << v.value<BufferId>();
       allBufferIds.removeAll(v.value<BufferId>());
     }
-    qSort(bufferIdsFromConfig.begin(), bufferIdsFromConfig.end(), bufferIdLessThan);
+    Client::networkModel()->sortBufferIds(bufferIdsFromConfig);
     _configActive->initSetBufferList(bufferIdsFromConfig);
   }
   ui.activeBuffers->setFilteredModel(Client::bufferModel(), _configActive);
 
-  qSort(allBufferIds.begin(), allBufferIds.end(), bufferIdLessThan);
+  Client::networkModel()->sortBufferIds(allBufferIds);
   _configAvailable->initSetBufferList(allBufferIds);
   ui.availableBuffers->setFilteredModel(Client::bufferModel(), _configAvailable);
 
index 7c85dfd..0cd749a 100644 (file)
@@ -496,10 +496,7 @@ void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QM
   emit _dataChanged(source_topLeft, source_bottomRight);
 }
 
-// ******************************
-//  Helper
-// ******************************
-bool bufferIdLessThan(const BufferId &left, const BufferId &right) {
+bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &right) {
   Q_CHECK_PTR(Client::networkModel());
   if(!Client::networkModel())
     return true;
index b4bcb7b..b2f47e3 100644 (file)
@@ -119,9 +119,8 @@ private:
   bool filterAcceptBuffer(const QModelIndex &) const;
   bool filterAcceptNetwork(const QModelIndex &) const;
   void addBuffer(const BufferId &) const;
+  static bool bufferIdLessThan(const BufferId &, const BufferId &);
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(BufferViewFilter::Modes)
 
-bool bufferIdLessThan(const BufferId &, const BufferId &);
-
 #endif // BUFFERVIEWFILTER_H_