Fixes #481 - Sort buffer views alphabetically.
authorMarcus Eggenberger <egs@quassel-irc.org>
Wed, 11 Feb 2009 00:07:25 +0000 (01:07 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Wed, 11 Feb 2009 00:07:25 +0000 (01:07 +0100)
Selecting sort alphabetically prohibits now reordering the buffer view.
If you edit an existing buffer view in the settings page checking
"sort alphabetically" will cause a resort. Unchecking doesn't
"randomize" (or whatever) the view and leaves it in the sorted state,
but you can now reorder it again.

src/qtui/mainwin.cpp
src/qtui/settingspages/bufferviewsettingspage.cpp
src/uisupport/bufferviewfilter.cpp

index 2343b8a..590126b 100644 (file)
@@ -326,6 +326,7 @@ void MainWin::addBufferView(ClientBufferViewConfig *config) {
   if(!config)
     return;
 
+  config->setLocked(QtUiSettings().value("LockLayout", false).toBool());
   BufferViewDock *dock = new BufferViewDock(config, this);
 
   //create the view and initialize it's filter
@@ -388,8 +389,10 @@ void MainWin::on_actionLockLayout_toggled(bool lock) {
   foreach(VerticalDock *dock, docks) {
     dock->showTitle(!lock);
   }
-  foreach(ClientBufferViewConfig *config, Client::bufferViewManager()->clientBufferViewConfigs()) {
-    config->setLocked(lock);
+  if(Client::bufferViewManager()) {
+    foreach(ClientBufferViewConfig *config, Client::bufferViewManager()->clientBufferViewConfigs()) {
+      config->setLocked(lock);
+    }
   }
   QtUiSettings().setValue("LockLayout", lock);
 }
index e10386c..4b41da4 100644 (file)
@@ -30,6 +30,7 @@
 #include "buffermodel.h"
 #include "clientbufferviewmanager.h"
 #include "networkmodel.h"
+#include "util.h"
 
 BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent)
   : SettingsPage(tr("General"), tr("Buffer Views"), parent),
@@ -123,7 +124,7 @@ void BufferViewSettingsPage::load() {
   }
   _ignoreWidgetChanges = false;
 
-  
+
   if(!useBufferViewHint || !selectBufferViewById(bufferViewHint))
     ui.bufferViewList->setCurrentRow(0);
 }
@@ -136,7 +137,7 @@ void BufferViewSettingsPage::save() {
     _useBufferViewHint = true;
     _bufferViewHint = currentConfig->bufferViewId();
   }
-  
+
   QVariantList newConfigs;
   QVariantList deleteConfigs;
   QVariantList changedConfigs;
@@ -223,10 +224,13 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) {
   config->setInitialized();
   QList<BufferId> bufferIds;
   if(config->addNewBuffersAutomatically()) {
-    if(config->sortAlphabetically())
+    if(config->sortAlphabetically()) {
       bufferIds = Client::networkModel()->allBufferIdsSorted();
-    else
+    } else {
       bufferIds = Client::networkModel()->allBufferIds();
+      qSort(bufferIds);
+      config->setProperty("OriginalBufferList", toVariantList<BufferId>(bufferIds));
+    }
   }
   config->initSetBufferList(bufferIds);
 
@@ -434,16 +438,12 @@ void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) {
     minimumActivity = 1 << (ui.minimumActivitySelector->currentIndex() - 1);
   config->setMinimumActivity(minimumActivity);
 
-  if(_newBufferViews.contains(config)) {
-    QList<BufferId> bufferIds;
-    if(config->addNewBuffersAutomatically()) {
-      if(config->sortAlphabetically())
-       bufferIds = Client::networkModel()->allBufferIdsSorted();
-      else
-       bufferIds = Client::networkModel()->allBufferIds();
-    }
+  QList<BufferId> bufferIds = fromVariantList<BufferId>(config->property("OriginalBufferList").toList());
+  if(config->sortAlphabetically())
+    Client::networkModel()->sortBufferIds(bufferIds);
+
+  if(!_newBufferViews.contains(config) || config->addNewBuffersAutomatically())
     config->initSetBufferList(bufferIds);
-  }
 }
 
 void BufferViewSettingsPage::widgetHasChanged() {
@@ -491,6 +491,7 @@ BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config)
   connect(config, SIGNAL(moveBufferRequested(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int)));
   connect(config, SIGNAL(removeBufferRequested(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &)));
 
+  changedConfig->setProperty("OriginalBufferList", toVariantList<BufferId>(config->bufferList()));
   // if this is the currently displayed view we have to change the config of the preview filter
   BufferViewFilter *filter = qobject_cast<BufferViewFilter *>(ui.bufferViewPreview->model());
   if(filter && filter->config() == config)
index 51dfe15..4ef0ec8 100644 (file)
@@ -363,10 +363,7 @@ bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QMo
   NetworkId leftNetworkId = sourceModel()->data(source_left, NetworkModel::NetworkIdRole).value<NetworkId>();
   NetworkId rightNetworkId = sourceModel()->data(source_right, NetworkModel::NetworkIdRole).value<NetworkId>();
 
-  if(config() && config()->sortAlphabetically())
-    return QSortFilterProxyModel::lessThan(source_left, source_right);
-  else
-    return leftNetworkId < rightNetworkId;
+  return QSortFilterProxyModel::lessThan(source_left, source_right);
 }
 
 QVariant BufferViewFilter::data(const QModelIndex &index, int role) const {