X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingsdlg.cpp;fp=src%2Fqtui%2Fsettingsdlg.cpp;h=7b26e069ba7472aaaa9301eaa90a7cfb3ea170ed;hp=96ae5fa97d3aace71a1341b52ddf6d278b6284e6;hb=694f9bfbf7f1af19108461c7e00d133e55082bce;hpb=61c8d84d1c849373e0f115dc748ed45cff95287d diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 96ae5fa9..7b26e069 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -27,184 +27,210 @@ #include "iconloader.h" SettingsDlg::SettingsDlg(QWidget *parent) - : QDialog(parent), + : QDialog(parent), _currentPage(0) { - ui.setupUi(this); - setModal(true); - setAttribute(Qt::WA_DeleteOnClose, true); - setWindowIcon(SmallIcon("configure")); + ui.setupUi(this); + setModal(true); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowIcon(SmallIcon("configure")); - updateGeometry(); + updateGeometry(); - ui.settingsTree->setRootIsDecorated(false); + ui.settingsTree->setRootIsDecorated(false); - connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); - connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); + connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); + connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); - connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), SLOT(coreConnectionStateChanged())); + connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), SLOT(coreConnectionStateChanged())); - setButtonStates(); + setButtonStates(); } -void SettingsDlg::coreConnectionStateChanged() { - for(int i = 0; i < ui.settingsTree->topLevelItemCount(); i++) { - QTreeWidgetItem *catItem = ui.settingsTree->topLevelItem(i); - for(int j = 0; j < catItem->childCount(); j++) { - QTreeWidgetItem *item = catItem->child(j); - setItemState(item); + +void SettingsDlg::coreConnectionStateChanged() +{ + for (int i = 0; i < ui.settingsTree->topLevelItemCount(); i++) { + QTreeWidgetItem *catItem = ui.settingsTree->topLevelItem(i); + for (int j = 0; j < catItem->childCount(); j++) { + QTreeWidgetItem *item = catItem->child(j); + setItemState(item); + } + setItemState(catItem); } - setItemState(catItem); - } } -void SettingsDlg::setItemState(QTreeWidgetItem *item) { - SettingsPage *sp = qobject_cast(item->data(0, SettingsPageRole).value()); - Q_ASSERT(sp); - item->setDisabled(!Client::isConnected() && sp->needsCoreConnection()); -} -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); - if(!cats.count()) { - cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category())); - cat->setExpanded(true); - cat->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); - } else { - cat = cats[0]; - } - - QTreeWidgetItem *item; - if(sp->title().isEmpty()) - item = cat; - else - item = new QTreeWidgetItem(cat, QStringList(sp->title())); - - item->setData(0, SettingsPageRole, QVariant::fromValue(sp)); - ui.settingsTree->setMinimumWidth(ui.settingsTree->header()->sectionSizeHint(0) + 5); - pageIsLoaded[sp] = false; - if(!ui.settingsTree->selectedItems().count()) - ui.settingsTree->setCurrentItem(item); - - setItemState(item); +void SettingsDlg::setItemState(QTreeWidgetItem *item) +{ + SettingsPage *sp = qobject_cast(item->data(0, SettingsPageRole).value()); + Q_ASSERT(sp); + item->setDisabled(!Client::isConnected() && sp->needsCoreConnection()); } -void SettingsDlg::selectPage(SettingsPage *sp) { - if(!sp) { - _currentPage = 0; - ui.settingsStack->setCurrentIndex(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?"), - QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel); - if(ret == QMessageBox::Save) { - if(!applyChanges()) sp = currentPage(); - } else if(ret == QMessageBox::Discard) { - undoChanges(); - } else sp = currentPage(); - } - - if(sp != currentPage()) { - if(sp->title().isEmpty()) { - ui.pageTitle->setText(sp->category()); - setWindowTitle(tr("Configure %1").arg(sp->category())); + +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); + if (!cats.count()) { + cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category())); + cat->setExpanded(true); + cat->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); } else { - ui.pageTitle->setText(sp->title()); - setWindowTitle(tr("Configure %1").arg(sp->title())); + cat = cats[0]; } - ui.settingsStack->setCurrentWidget(sp); - _currentPage = sp; - } - setButtonStates(); + QTreeWidgetItem *item; + if (sp->title().isEmpty()) + item = cat; + else + item = new QTreeWidgetItem(cat, QStringList(sp->title())); + + item->setData(0, SettingsPageRole, QVariant::fromValue(sp)); + ui.settingsTree->setMinimumWidth(ui.settingsTree->header()->sectionSizeHint(0) + 5); + pageIsLoaded[sp] = false; + if (!ui.settingsTree->selectedItems().count()) + ui.settingsTree->setCurrentItem(item); + + setItemState(item); } -void SettingsDlg::itemSelected() { - QList items = ui.settingsTree->selectedItems(); - SettingsPage *sp = 0; - if(!items.isEmpty()) { - sp = qobject_cast(items[0]->data(0, SettingsPageRole).value()); - } - selectPage(sp); + +void SettingsDlg::selectPage(SettingsPage *sp) +{ + if (!sp) { + _currentPage = 0; + ui.settingsStack->setCurrentIndex(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?"), + QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel); + if (ret == QMessageBox::Save) { + if (!applyChanges()) sp = currentPage(); + } + else if (ret == QMessageBox::Discard) { + undoChanges(); + } + else sp = currentPage(); + } + + if (sp != currentPage()) { + if (sp->title().isEmpty()) { + ui.pageTitle->setText(sp->category()); + setWindowTitle(tr("Configure %1").arg(sp->category())); + } + else { + ui.pageTitle->setText(sp->title()); + setWindowTitle(tr("Configure %1").arg(sp->title())); + } + + ui.settingsStack->setCurrentWidget(sp); + _currentPage = sp; + } + setButtonStates(); } -void SettingsDlg::setButtonStates() { - SettingsPage *sp = currentPage(); - 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()); + +void SettingsDlg::itemSelected() +{ + QList items = ui.settingsTree->selectedItems(); + 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::Apply)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::Reset)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(sp && sp->hasDefaults()); } -void SettingsDlg::buttonClicked(QAbstractButton *button) { - switch(ui.buttonBox->standardButton(button)) { + +void SettingsDlg::buttonClicked(QAbstractButton *button) +{ + switch (ui.buttonBox->standardButton(button)) { case QDialogButtonBox::Ok: - if(currentPage() && currentPage()->hasChanged()) { - if(applyChanges()) accept(); - } else accept(); - break; + if (currentPage() && currentPage()->hasChanged()) { + if (applyChanges()) accept(); + } + else accept(); + break; case QDialogButtonBox::Apply: - applyChanges(); - break; + applyChanges(); + break; case QDialogButtonBox::Cancel: - undoChanges(); - reject(); - break; + undoChanges(); + reject(); + break; case QDialogButtonBox::Reset: - reload(); - break; + reload(); + break; case QDialogButtonBox::RestoreDefaults: - loadDefaults(); - break; + loadDefaults(); + break; default: - break; - } + break; + } } -bool SettingsDlg::applyChanges() { - if(!currentPage()) return false; - if(currentPage()->aboutToSave()) { - currentPage()->save(); - return true; - } - return false; + +bool SettingsDlg::applyChanges() +{ + if (!currentPage()) return false; + if (currentPage()->aboutToSave()) { + currentPage()->save(); + return true; + } + return false; } -void SettingsDlg::undoChanges() { - if(currentPage()) { - currentPage()->load(); - } + +void SettingsDlg::undoChanges() +{ + if (currentPage()) { + currentPage()->load(); + } } -void SettingsDlg::reload() { - if(!currentPage()) return; - int ret = QMessageBox::question(this, tr("Reload Settings"), tr("Do you like to reload the settings, undoing your changes on this page?"), - QMessageBox::Yes|QMessageBox::No, QMessageBox::No); - if(ret == QMessageBox::Yes) { - currentPage()->load(); - } + +void SettingsDlg::reload() +{ + if (!currentPage()) return; + int ret = QMessageBox::question(this, tr("Reload Settings"), tr("Do you like to reload the settings, undoing your changes on this page?"), + QMessageBox::Yes|QMessageBox::No, QMessageBox::No); + if (ret == QMessageBox::Yes) { + currentPage()->load(); + } } -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::RestoreDefaults) { - currentPage()->defaults(); - } + +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::RestoreDefaults) { + currentPage()->defaults(); + } }