X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingsdlg.cpp;h=6c7d24a420ab7cfd6feeb1e211d43246d6a3be4e;hp=66a646bc29b31a80fac5c358cc76b7fb440e0927;hb=21d8d7f0a79eeeb541664aa80ce481fdbfc41f09;hpb=7500eaafd4aa510c758eabd8c835c0c05b2587cd diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 66a646bc..6c7d24a4 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -22,6 +22,7 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { ui.setupUi(this); + _currentPage = 0; //ui.settingsFrame->setWidgetResizable(true); //ui.settingsFrame->setWidget(ui.settingsStack); @@ -31,10 +32,14 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } +SettingsPage *SettingsDlg::currentPage() const { + return _currentPage; +} void SettingsDlg::registerSettingsPage(SettingsPage *sp) { sp->setParent(ui.settingsStack); ui.settingsStack->addWidget(sp); + connect(sp, SIGNAL(changed(bool)), this, SLOT(setButtonStates())); QTreeWidgetItem *cat; QList cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly); @@ -51,12 +56,17 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { } void SettingsDlg::selectPage(const QString &cat, const QString &title) { - QWidget *w = pages[QString("%1$%2").arg(cat, title)]; - Q_ASSERT(w); - ui.settingsStack->setCurrentWidget(w); + SettingsPage *sp = pages[QString("%1$%2").arg(cat, title)]; + Q_ASSERT(sp); // FIXME allow for invalid settings pages + ui.settingsStack->setCurrentWidget(sp); + _currentPage = sp; + setButtonStates(); } void SettingsDlg::itemSelected() { + // Check if we have changed anything... + // TODO + QList items = ui.settingsTree->selectedItems(); if(!items.count()) { return; @@ -70,11 +80,17 @@ void SettingsDlg::itemSelected() { } } +void SettingsDlg::setButtonStates() { + SettingsPage *sp = currentPage(); + ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::Reset)->setEnabled(sp && sp->hasChanged()); +} + void SettingsDlg::buttonClicked(QAbstractButton *button) { switch(ui.buttonBox->standardButton(button)) { case QDialogButtonBox::Ok: - applyChanges(); - accept(); + if(applyChanges()) accept(); break; case QDialogButtonBox::Apply: applyChanges(); @@ -93,12 +109,16 @@ void SettingsDlg::buttonClicked(QAbstractButton *button) { } } -void SettingsDlg::applyChanges() { - foreach(SettingsPage *page, pages.values()) { - page->save(); +bool SettingsDlg::applyChanges() { + if(!currentPage()) return false; + if(currentPage()->aboutToSave()) { + currentPage()->save(); + return true; } + return false; } +// TODO add messagebox void SettingsDlg::reload() { SettingsPage *page = qobject_cast(ui.settingsStack->currentWidget()); if(page) page->load();