From f53a40aa9d3e0f2c1f15191b665780595d52348a Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sun, 5 Aug 2007 21:24:58 +0000 Subject: [PATCH] Tuned the settings dialog a bit, mostly fixing the layout problems we had and adding functionality. It should now be possible to register settings pages and use them in the settings dialog. A settings page is a QWidget implementing the SettingsInterface as defined in plugin.h. Currently, these are defined in settingspages.* (which may change... maybe it'd be a good idea to put all settings related stuff in an extra dir below qtgui/?) --- src/plugins/plugin.h | 1 + src/qtgui/mainwin.cpp | 8 +++---- src/qtgui/settingsdlg.cpp | 43 +++++++++++++++++++++++++++++++++---- src/qtgui/settingsdlg.h | 6 ++++-- src/qtgui/settingspages.cpp | 11 +++++++++- src/qtgui/settingspages.h | 5 +++++ src/qtgui/ui/settingsdlg.ui | 36 +++++++++++++++++-------------- 7 files changed, 83 insertions(+), 27 deletions(-) diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h index 826748c7..b8c0d135 100644 --- a/src/plugins/plugin.h +++ b/src/plugins/plugin.h @@ -67,6 +67,7 @@ class SettingsInterface { virtual QString category() = 0; virtual QString title() = 0; virtual QWidget *settingsWidget() = 0; + virtual void applyChanges() = 0; }; diff --git a/src/qtgui/mainwin.cpp b/src/qtgui/mainwin.cpp index 451e82a2..5b196143 100644 --- a/src/qtgui/mainwin.cpp +++ b/src/qtgui/mainwin.cpp @@ -117,10 +117,10 @@ void MainWin::setupViews() { connect(model, SIGNAL(bufferSelected(Buffer *)), this, SLOT(showBuffer(Buffer *))); addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QStringList()); - //addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QStringList()); - //addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QStringList()); - //addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QStringList()); - //addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QStringList()); + addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QStringList()); + addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QStringList()); + addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QStringList()); + addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QStringList()); ui.menuViews->addSeparator(); } 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(); } diff --git a/src/qtgui/settingsdlg.h b/src/qtgui/settingsdlg.h index 12fac466..a52cbb64 100644 --- a/src/qtgui/settingsdlg.h +++ b/src/qtgui/settingsdlg.h @@ -33,12 +33,14 @@ class SettingsDlg : public QDialog { void registerSettingsPage(SettingsInterface *); void unregisterSettingsPage(SettingsInterface *); + private slots: + void pageSelected(); + void buttonClicked(QAbstractButton *); + void applyChanges(); private: Ui::SettingsDlg ui; - QWidget *currentWidget; - }; /* diff --git a/src/qtgui/settingspages.cpp b/src/qtgui/settingspages.cpp index b67fd3ae..9d550ca1 100644 --- a/src/qtgui/settingspages.cpp +++ b/src/qtgui/settingspages.cpp @@ -26,7 +26,7 @@ void MainWin::setupSettingsDlg() { settingsDlg->setVisible(false); settingsDlg->registerSettingsPage(new BufferManagementSettingsPage()); - //settingsDlg->registerSettingsPage(new ConnectionSettingsPage()); + settingsDlg->registerSettingsPage(new ConnectionSettingsPage()); } @@ -38,8 +38,17 @@ BufferManagementSettingsPage::BufferManagementSettingsPage() { setEnabled(false); } +void BufferManagementSettingsPage::applyChanges() { + + +} + ConnectionSettingsPage::ConnectionSettingsPage() { ui.setupUi(this); } +void ConnectionSettingsPage::applyChanges() { + + +} diff --git a/src/qtgui/settingspages.h b/src/qtgui/settingspages.h index f7d0f855..4e169b5a 100644 --- a/src/qtgui/settingspages.h +++ b/src/qtgui/settingspages.h @@ -31,6 +31,7 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface { Q_OBJECT + Q_INTERFACES(SettingsInterface) public: QString category() { return tr("Buffers"); } @@ -39,6 +40,8 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface { BufferManagementSettingsPage(); + void applyChanges(); + private: Ui::BufferManagementSettingsPage ui; @@ -47,6 +50,7 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface { class ConnectionSettingsPage : public QWidget, public SettingsInterface { Q_OBJECT + Q_INTERFACES(SettingsInterface) public: QString category() { return tr("Behavior"); } @@ -55,6 +59,7 @@ class ConnectionSettingsPage : public QWidget, public SettingsInterface { ConnectionSettingsPage(); + void applyChanges(); private: Ui::ConnectionSettingsPage ui; diff --git a/src/qtgui/ui/settingsdlg.ui b/src/qtgui/ui/settingsdlg.ui index a2097a4b..86499993 100644 --- a/src/qtgui/ui/settingsdlg.ui +++ b/src/qtgui/ui/settingsdlg.ui @@ -5,20 +5,14 @@ 0 0 - 808 - 568 + 784 + 558 Dialog - - 9 - - - 6 - @@ -26,9 +20,7 @@ - - 5 - 7 + 0 0 @@ -41,19 +33,30 @@ - - 5 - 5 + 0 0 - QFrame::StyledPanel + QFrame::NoFrame - QFrame::Raised + QFrame::Plain + + + + + + 0 + 0 + + + + + + @@ -74,6 +77,7 @@ QScrollArea QFrame
QScrollArea
+ 1 -- 2.20.1