X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtgui%2Fsettingsdlg.cpp;h=420648223536f1ec1b65bc8f9097d0091ee419e2;hp=06aeb0b60eae3b791c9cebb66586911787674929;hb=2ee32e7f7707349d12c98181bbe6842f6d19f60e;hpb=077d44f36d2f5c730283ef6be839aea7dd073d56 diff --git a/src/qtgui/settingsdlg.cpp b/src/qtgui/settingsdlg.cpp index 06aeb0b6..42064822 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(itemSelected())); + connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } -void SettingsDlg::registerSettingsPage(SettingsInterface *sp) { - QWidget *w = sp->settingsWidget(); +void SettingsDlg::registerSettingsPage(SettingsPage *sp) { + QWidget *w = sp->widget(); 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,47 @@ 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())); + pages[QString("%1$%2").arg(sp->category()).arg(sp->title())] = sp; +} + +void SettingsDlg::selectPage(const QString &cat, const QString &title) { + QWidget *w = pages[QString("%1$%2").arg(cat).arg(title)]->widget(); + Q_ASSERT(w); + ui.settingsStack->setCurrentWidget(w); +} + +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); + } +} + +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(); }