X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fbufferviewsettingspage.cpp;h=3fe64dff7a1d1daa0c49746b7d11ff816c3a84d8;hb=52cba0963e0714f4d58296a20d02164b57f9f4ba;hp=861bdb66477c86c88a4778f71ba1e277ef931cf6;hpb=4e0445e459c690cfa6013c5ad574e94f9214827b;p=quassel.git diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index 861bdb66..3fe64dff 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.cpp +++ b/src/qtui/settingspages/bufferviewsettingspage.cpp @@ -33,11 +33,33 @@ BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent) connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); } +BufferViewSettingsPage::~BufferViewSettingsPage() { + reset(); +} + void BufferViewSettingsPage::reset() { - // currentId = 0; ui.bufferViewList->clear(); _viewToListPos.clear(); _listPosToView.clear(); + + QHash::iterator changedConfigIter = _changedBufferViews.begin(); + QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); + BufferViewConfig *config; + while(changedConfigIter != changedConfigIterEnd) { + config = (*changedConfigIter); + changedConfigIter = _changedBufferViews.erase(changedConfigIter); + config->deleteLater(); + } + + QList::iterator newConfigIter = _newBufferViews.begin(); + QList::iterator newConfigIterEnd = _newBufferViews.end(); + while(newConfigIter != newConfigIterEnd) { + config = *newConfigIter; + newConfigIter = _newBufferViews.erase(newConfigIter); + config->deleteLater(); + } + + setChangedState(false); } void BufferViewSettingsPage::load() { @@ -80,7 +102,10 @@ void BufferViewSettingsPage::addBufferView(int bufferViewId) { void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { // id's of newly created bufferviews are negative (-1, -2... -n) int fakeId = -1 * (_newBufferViews.count() + 1); - addBufferView(new BufferViewConfig(fakeId)); + BufferViewConfig *config = new BufferViewConfig(fakeId); + config->setBufferViewName(bufferViewName); + _newBufferViews << config; + addBufferView(config); } int BufferViewSettingsPage::listPos(BufferViewConfig *config) { @@ -122,6 +147,7 @@ void BufferViewSettingsPage::on_addBufferView_clicked() { BufferViewEditDlg dlg(QString(), existing, this); if(dlg.exec() == QDialog::Accepted) { newBufferView(dlg.bufferViewName()); + changed(); } } @@ -142,18 +168,27 @@ void BufferViewSettingsPage::on_renameBufferView_clicked() { } BufferViewEditDlg dlg(config->bufferViewName(), existing, this); - if(dlg.exec() != QDialog::Accepted) - return; - - BufferViewConfig *changedConfig; - if(!_changedBufferViews.contains(config)) { - _changedBufferViews[config] = new BufferViewConfig(-1); - _changedBufferViews[config]->fromVariantMap(config->toVariantMap()); + if(dlg.exec() == QDialog::Accepted) { + BufferViewConfig *changedConfig = cloneConfig(config); + changedConfig->setBufferViewName(dlg.bufferViewName()); + changed(); } - - changedConfig = _changedBufferViews[config]; - changedConfig->setBufferViewName(dlg.bufferViewName()); - changed(); +} + +BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) { + if(_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + + BufferViewConfig *changedConfig = new BufferViewConfig(-1, this); + changedConfig->fromVariantMap(config->toVariantMap()); + return changedConfig; +} + +BufferViewConfig *BufferViewSettingsPage::configForDisplay(BufferViewConfig *config) { + if(_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + else + return config; }