fixing BR #323 - inactive state does no longer overwrite the activity level of queries
[quassel.git] / src / qtui / settingspages / bufferviewsettingspage.cpp
index 00faf0c..65d3229 100644 (file)
@@ -23,6 +23,7 @@
 #include <QMessageBox>
 
 #include "client.h"
+#include "iconloader.h"
 #include "network.h"
 #include "bufferviewconfig.h"
 #include "bufferviewfilter.h"
 
 BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent)
   : SettingsPage(tr("General"), tr("Buffer Views"), parent),
-    _ignoreWidgetChanges(false)
+    _ignoreWidgetChanges(false),
+    _useBufferViewHint(false),
+    _bufferViewHint(0)
 {
   ui.setupUi(this);
+  ui.renameBufferView->setIcon(SmallIcon("edit-rename"));
+  ui.addBufferView->setIcon(SmallIcon("list-add"));
+  ui.deleteBufferView->setIcon(SmallIcon("edit-delete"));
+
   reset();
 
   ui.bufferViewList->setSortingEnabled(true);
@@ -81,11 +88,15 @@ void BufferViewSettingsPage::reset() {
   }
 
   _deleteBufferViews.clear();
-  
+
+  _useBufferViewHint = false;
+
   setChangedState(false);
 }
 
 void BufferViewSettingsPage::load() {
+  bool useBufferViewHint = _useBufferViewHint;
+  int bufferViewHint = _bufferViewHint;
   reset();
 
   if(!Client::bufferViewManager())
@@ -108,12 +119,21 @@ void BufferViewSettingsPage::load() {
     ui.networkSelector->setItemData(ui.networkSelector->count() - 1, qVariantFromValue<NetworkId>(net->networkId()));
   }
   _ignoreWidgetChanges = false;
+
   
-  ui.bufferViewList->setCurrentRow(0);
+  if(!useBufferViewHint || !selectBufferViewById(bufferViewHint))
+    ui.bufferViewList->setCurrentRow(0);
 }
 
 void BufferViewSettingsPage::save() {
   setEnabled(false);
+
+  BufferViewConfig *currentConfig = bufferView(ui.bufferViewList->currentRow());
+  if(currentConfig) {
+    _useBufferViewHint = true;
+    _bufferViewHint = currentConfig->bufferViewId();
+  }
+  
   QVariantList newConfigs;
   QVariantList deleteConfigs;
   QVariantList changedConfigs;
@@ -125,7 +145,7 @@ void BufferViewSettingsPage::save() {
   if(Client::bufferViewManager()) {
     Client::bufferViewManager()->requestDeleteBufferViews(deleteConfigs);
   }
-  
+
   QHash<BufferViewConfig *, BufferViewConfig *>::iterator changedConfigIter = _changedBufferViews.begin();
   QHash<BufferViewConfig *, BufferViewConfig *>::iterator changedConfigIterEnd = _changedBufferViews.end();
   BufferViewConfig *config, *changedConfig;
@@ -171,8 +191,10 @@ void BufferViewSettingsPage::addBufferView(BufferViewConfig *config) {
 }
 
 void BufferViewSettingsPage::addBufferView(int bufferViewId) {
+  // we are informed about a new bufferview from Client::bufferViewManager()
   Q_ASSERT(Client::bufferViewManager());
   addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewId));
+  selectBufferViewById(bufferViewId);
 }
 
 void BufferViewSettingsPage::bufferViewDeleted() {
@@ -193,7 +215,7 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) {
   int fakeId = -1 * (_newBufferViews.count() + 1);
   BufferViewConfig *config = new BufferViewConfig(fakeId);
   config->setBufferViewName(bufferViewName);
-
+  config->setInitialized();
   QList<BufferId> bufferIds;
   if(config->addNewBuffersAutomatically()) {
     bufferIds = Client::networkModel()->allBufferIds();
@@ -206,7 +228,7 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) {
   addBufferView(config);
   ui.bufferViewList->setCurrentRow(listPos(config));
 }
-      
+
 int BufferViewSettingsPage::listPos(BufferViewConfig *config) {
   QObject *obj;
   for(int i = 0; i < ui.bufferViewList->count(); i++) {
@@ -226,6 +248,18 @@ BufferViewConfig *BufferViewSettingsPage::bufferView(int listPos) {
   }
 }
 
+bool BufferViewSettingsPage::selectBufferViewById(int bufferViewId) {
+  BufferViewConfig *config;
+  for(int i = 0; i < ui.bufferViewList->count(); i++) {
+    config = qobject_cast<BufferViewConfig *>(ui.bufferViewList->item(i)->data(Qt::UserRole).value<QObject *>());
+    if(config && config->bufferViewId() == bufferViewId) {
+      ui.bufferViewList->setCurrentRow(i);
+      return true;
+    }
+  }
+  return false;
+}
+
 void BufferViewSettingsPage::updateBufferView() {
   BufferViewConfig *config = qobject_cast<BufferViewConfig *>(sender());
   if(!config)
@@ -244,7 +278,7 @@ void BufferViewSettingsPage::updateBufferView() {
 void BufferViewSettingsPage::on_addBufferView_clicked() {
   if(!Client::bufferViewManager())
     return;
-  
+
   QStringList existing;
   foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) {
     existing << bufferConfig->bufferViewName();
@@ -263,7 +297,7 @@ void BufferViewSettingsPage::on_renameBufferView_clicked() {
 
   if(!Client::bufferViewManager())
     return;
-  
+
   BufferViewConfig *config = bufferView(ui.bufferViewList->currentRow());
   if(!config)
     return;
@@ -319,7 +353,7 @@ void BufferViewSettingsPage::bufferViewSelectionChanged(const QItemSelection &cu
 void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) {
   if(!config)
     return;
-  
+
   _ignoreWidgetChanges = true;
   ui.onlyStatusBuffers->setChecked(BufferInfo::StatusBuffer & config->allowedBufferTypes());
   ui.onlyChannelBuffers->setChecked(BufferInfo::ChannelBuffer & config->allowedBufferTypes());
@@ -346,14 +380,14 @@ void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) {
   ui.minimumActivitySelector->setCurrentIndex(activityIndex);
 
   ui.bufferViewPreview->setFilteredModel(Client::bufferModel(), config);
-  
+
   _ignoreWidgetChanges = false;
 }
 
 void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) {
   if(!config)
     return;
-  
+
   int allowedBufferTypes = 0;
   if(ui.onlyStatusBuffers->isChecked())
     allowedBufferTypes |= BufferInfo::StatusBuffer;
@@ -414,7 +448,7 @@ bool BufferViewSettingsPage::testHasChanged() {
 BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) {
   if(!config || config->bufferViewId() < 0)
     return config;
-  
+
   if(_changedBufferViews.contains(config))
     return _changedBufferViews[config];