+
+ int allowedBufferTypes = 0;
+ if(ui.onlyStatusBuffers->isChecked())
+ allowedBufferTypes |= BufferInfo::StatusBuffer;
+ if(ui.onlyChannelBuffers->isChecked())
+ allowedBufferTypes |= BufferInfo::ChannelBuffer;
+ if(ui.onlyQueryBuffers->isChecked())
+ allowedBufferTypes |= BufferInfo::QueryBuffer;
+ config->setAllowedBufferTypes(allowedBufferTypes);
+
+ config->setAddNewBuffersAutomatically(ui.addNewBuffersAutomatically->isChecked());
+ config->setSortAlphabetically(ui.sortAlphabetically->isChecked());
+ config->setHideInactiveBuffers(ui.hideInactiveBuffers->isChecked());
+ config->setNetworkId(ui.networkSelector->itemData(ui.networkSelector->currentIndex()).value<NetworkId>());
+
+ int minimumActivity = 0;
+ if(ui.minimumActivitySelector->currentIndex() > 0)
+ minimumActivity = 1 << (ui.minimumActivitySelector->currentIndex() - 1);
+ config->setMinimumActivity(minimumActivity);
+
+ 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() {
+ if(_ignoreWidgetChanges)
+ return;
+ setChangedState(testHasChanged());
+}
+
+bool BufferViewSettingsPage::testHasChanged() {
+ saveConfig(cloneConfig(bufferView(ui.bufferViewList->currentRow())));
+
+ if(!_newBufferViews.isEmpty())
+ return true;
+
+ bool changed = false;
+ QHash<BufferViewConfig *, BufferViewConfig *>::iterator iter = _changedBufferViews.begin();
+ QHash<BufferViewConfig *, BufferViewConfig *>::iterator iterEnd = _changedBufferViews.end();
+ while(iter != iterEnd) {
+ if(&(iter.key()) == &(iter.value())) {
+ iter.value()->deleteLater();
+ iter = _changedBufferViews.erase(iter);
+ } else {
+ changed = true;
+ iter++;
+ }
+ }
+ return changed;
+}
+
+BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) {
+ if(!config || config->bufferViewId() < 0)
+ return config;
+
+ if(_changedBufferViews.contains(config))
+ return _changedBufferViews[config];
+
+ BufferViewConfig *changedConfig = new BufferViewConfig(-1, this);
+ changedConfig->fromVariantMap(config->toVariantMap());
+ changedConfig->setInitialized();
+ _changedBufferViews[config] = changedConfig;
+ connect(config, SIGNAL(bufferAdded(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int)));
+ connect(config, SIGNAL(bufferMoved(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int)));
+ connect(config, SIGNAL(bufferRemoved(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &)));
+ connect(config, SIGNAL(addBufferRequested(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int)));
+ 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)
+ filter->setConfig(changedConfig);
+ ui.bufferViewPreview->setConfig(changedConfig);
+
+ return changedConfig;
+}
+
+BufferViewConfig *BufferViewSettingsPage::configForDisplay(BufferViewConfig *config) {
+ if(_changedBufferViews.contains(config))
+ return _changedBufferViews[config];
+ else
+ return config;