X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtgui%2Fsettingsdlg.cpp;fp=src%2Fqtgui%2Fsettingsdlg.cpp;h=33a6e4107407a7edf205fc6bda35153e7d4ea9c4;hb=f53a40aa9d3e0f2c1f15191b665780595d52348a;hp=06aeb0b60eae3b791c9cebb66586911787674929;hpb=51dc042dd59b491e45951cb9d8371a1f62857945;p=quassel.git diff --git a/src/qtgui/settingsdlg.cpp b/src/qtgui/settingsdlg.cpp index 06aeb0b6..33a6e410 100644 --- a/src/qtgui/settingsdlg.cpp +++ b/src/qtgui/settingsdlg.cpp @@ -23,16 +23,18 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { ui.setupUi(this); - currentWidget = 0; - ui.settingsFrame->setWidgetResizable(true); + ui.settingsFrame->setWidget(ui.settingsStack); ui.settingsTree->setRootIsDecorated(false); + + connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(pageSelected())); + connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } void SettingsDlg::registerSettingsPage(SettingsInterface *sp) { QWidget *w = sp->settingsWidget(); w->setParent(this); - ui.settingsFrame->setWidget(w); + ui.settingsStack->addWidget(w); QTreeWidgetItem *cat; QList cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly); @@ -41,6 +43,39 @@ void SettingsDlg::registerSettingsPage(SettingsInterface *sp) { cat->setExpanded(true); cat->setFlags(Qt::ItemIsEnabled); } else cat = cats[0]; - new QTreeWidgetItem(cat, QStringList(sp->title())); + QTreeWidgetItem *p = new QTreeWidgetItem(cat, QStringList(sp->title())); + p->setData(0, Qt::UserRole, QVariant::fromValue(w)); +} + +void SettingsDlg::pageSelected() { + QList items = ui.settingsTree->selectedItems(); + if(!items.count()) { + return; + } else { + QWidget *sp = items[0]->data(0, Qt::UserRole).value(); + Q_ASSERT(sp); + ui.settingsStack->setCurrentWidget(sp); + } +} + +void SettingsDlg::buttonClicked(QAbstractButton *button) { + switch(ui.buttonBox->buttonRole(button)) { + case QDialogButtonBox::AcceptRole: + applyChanges(); + accept(); + break; + case QDialogButtonBox::ApplyRole: + applyChanges(); + break; + case QDialogButtonBox::RejectRole: + reject(); + break; + default: + break; + } +} +void SettingsDlg::applyChanges() { + SettingsInterface *sp = qobject_cast(ui.settingsStack->currentWidget()); + if(sp) sp->applyChanges(); }