+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];
+
+ auto* changedConfig = new BufferViewConfig(-1, this);
+ changedConfig->fromVariantMap(config->toVariantMap());
+ changedConfig->setInitialized();
+ _changedBufferViews[config] = changedConfig;
+ connect(config, &BufferViewConfig::bufferAdded, changedConfig, &BufferViewConfig::addBuffer);
+ connect(config, &BufferViewConfig::bufferMoved, changedConfig, &BufferViewConfig::moveBuffer);
+ connect(config, &BufferViewConfig::bufferRemoved, changedConfig, &BufferViewConfig::removeBuffer);
+ // connect(config, &BufferViewConfig::addBufferRequested, changedConfig, &BufferViewConfig::addBuffer);
+ // connect(config, &BufferViewConfig::moveBufferRequested, changedConfig, &BufferViewConfig::moveBuffer);
+ // connect(config, &BufferViewconfig::removeBufferRequested, changedConfig, &BufferViewConfig::removeBuffer);
+
+ changedConfig->setProperty("OriginalBufferList", toVariantList<BufferId>(config->bufferList()));
+ // if this is the currently displayed view we have to change the config of the preview filter
+ auto* 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;
+}