X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingsdlg.cpp;h=bde95b7e17ecb8b8edbf57b97c2b396bf81fa1ac;hp=eb0731934d00aba70532c98ecaf0d7abeaf7d5ba;hb=0fe27b9f3c35b979eed0eaa1a89ffea57aeb52b8;hpb=f18d7db990cb23c87fa3586e19b2f8aa5509a66c diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index eb073193..bde95b7e 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -20,15 +20,16 @@ #include "settingsdlg.h" -SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { - ui.setupUi(this); - _currentPage = 0; - - //recommendedSize = layout()->minimumSize(); +#include "iconloader.h" - // make the scrollarea behave sanely - ui.settingsFrame->setWidgetResizable(true); - ui.settingsFrame->setWidget(ui.settingsStack); +SettingsDlg::SettingsDlg(QWidget *parent) + : QDialog(parent), + _currentPage(0) +{ + ui.setupUi(this); + setModal(true); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowIcon(SmallIcon("configure")); updateGeometry(); @@ -36,23 +37,14 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); -} -/* -QSize SettingsDlg::sizeHint() const { - return recommendedSize; -} -*/ - -SettingsPage *SettingsDlg::currentPage() const { - return _currentPage; + setButtonStates(); } void SettingsDlg::registerSettingsPage(SettingsPage *sp) { sp->setParent(ui.settingsStack); ui.settingsStack->addWidget(sp); - //recommendedSize = recommendedSize.expandedTo(sp->sizeHint()); - //updateGeometry(); + connect(sp, SIGNAL(changed(bool)), this, SLOT(setButtonStates())); QTreeWidgetItem *cat; @@ -61,23 +53,27 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category())); cat->setExpanded(true); cat->setFlags(Qt::ItemIsEnabled); - } else cat = cats[0]; + } else { + cat = cats[0]; + } QTreeWidgetItem *item = new QTreeWidgetItem(cat, QStringList(sp->title())); - treeItems[sp] = item; - pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp; - sp->load(); - // TESTING - selectPage(sp->category(), sp->title()); + item->setData(0, SettingsPageRole, qVariantFromValue(sp)); + pageIsLoaded[sp] = false; } -void SettingsDlg::selectPage(const QString &cat, const QString &title) { - SettingsPage *sp = pages[QString("%1$%2").arg(cat, title)]; +void SettingsDlg::selectPage(SettingsPage *sp) { if(!sp) { _currentPage = 0; ui.settingsStack->setCurrentIndex(0); - ui.settingsTree->setCurrentItem(0); + ui.pageTitle->setText(tr("Settings")); return; } + + if(!pageIsLoaded[sp]) { + sp->load(); + pageIsLoaded[sp] = true; + } + if(sp != currentPage() && currentPage() != 0 && currentPage()->hasChanged()) { int ret = QMessageBox::warning(this, tr("Save changes"), tr("There are unsaved changes on the current configuration page. Would you like to apply your changes now?"), @@ -88,32 +84,27 @@ void SettingsDlg::selectPage(const QString &cat, const QString &title) { undoChanges(); } else sp = currentPage(); } + if(sp != currentPage()) { ui.pageTitle->setText(sp->title()); + setWindowTitle(tr("Configure %1").arg(sp->title())); ui.settingsStack->setCurrentWidget(sp); - ui.settingsStack->setMinimumSize(sp->minimumSizeHint()); // we don't want our page shrinked, use scrollbars instead... _currentPage = sp; } - ui.settingsTree->setCurrentItem(treeItems[sp]); setButtonStates(); } void SettingsDlg::itemSelected() { QList items = ui.settingsTree->selectedItems(); - if(!items.count()) { - return; - } else { - QTreeWidgetItem *parent = items[0]->parent(); - if(!parent) return; - QString cat = parent->text(0); - QString title = items[0]->text(0); - selectPage(cat, title); + SettingsPage *sp = 0; + if(!items.isEmpty()) { + sp = qobject_cast(items[0]->data(0, SettingsPageRole).value()); } + selectPage(sp); } 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()); ui.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(sp && sp->hasDefaults()); @@ -122,7 +113,9 @@ void SettingsDlg::setButtonStates() { void SettingsDlg::buttonClicked(QAbstractButton *button) { switch(ui.buttonBox->standardButton(button)) { case QDialogButtonBox::Ok: - if(applyChanges()) accept(); + if(currentPage() && currentPage()->hasChanged()) { + if(applyChanges()) accept(); + } else accept(); break; case QDialogButtonBox::Apply: applyChanges(); @@ -170,7 +163,7 @@ void SettingsDlg::loadDefaults() { if(!currentPage()) return; int ret = QMessageBox::question(this, tr("Restore Defaults"), tr("Do you like to restore the default values for this page?"), QMessageBox::RestoreDefaults|QMessageBox::Cancel, QMessageBox::Cancel); - if(ret == QMessageBox::Yes) { + if(ret == QMessageBox::RestoreDefaults) { currentPage()->defaults(); } }