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/?)
virtual QString category() = 0;
virtual QString title() = 0;
virtual QWidget *settingsWidget() = 0;
+ virtual void applyChanges() = 0;
};
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();
}
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<QTreeWidgetItem *> cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly);
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<QTreeWidgetItem *> items = ui.settingsTree->selectedItems();
+ if(!items.count()) {
+ return;
+ } else {
+ QWidget *sp = items[0]->data(0, Qt::UserRole).value<QWidget *>();
+ 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<SettingsInterface *>(ui.settingsStack->currentWidget());
+ if(sp) sp->applyChanges();
}
void registerSettingsPage(SettingsInterface *);
void unregisterSettingsPage(SettingsInterface *);
+ private slots:
+ void pageSelected();
+ void buttonClicked(QAbstractButton *);
+ void applyChanges();
private:
Ui::SettingsDlg ui;
- QWidget *currentWidget;
-
};
/*
settingsDlg->setVisible(false);
settingsDlg->registerSettingsPage(new BufferManagementSettingsPage());
- //settingsDlg->registerSettingsPage(new ConnectionSettingsPage());
+ settingsDlg->registerSettingsPage(new ConnectionSettingsPage());
}
setEnabled(false);
}
+void BufferManagementSettingsPage::applyChanges() {
+
+
+}
+
ConnectionSettingsPage::ConnectionSettingsPage() {
ui.setupUi(this);
}
+void ConnectionSettingsPage::applyChanges() {
+
+
+}
class BufferManagementSettingsPage : public QWidget, public SettingsInterface {
Q_OBJECT
+ Q_INTERFACES(SettingsInterface)
public:
QString category() { return tr("Buffers"); }
BufferManagementSettingsPage();
+ void applyChanges();
+
private:
Ui::BufferManagementSettingsPage ui;
class ConnectionSettingsPage : public QWidget, public SettingsInterface {
Q_OBJECT
+ Q_INTERFACES(SettingsInterface)
public:
QString category() { return tr("Behavior"); }
ConnectionSettingsPage();
+ void applyChanges();
private:
Ui::ConnectionSettingsPage ui;
<rect>
<x>0</x>
<y>0</y>
- <width>808</width>
- <height>568</height>
+ <width>784</width>
+ <height>558</height>
</rect>
</property>
<property name="windowTitle" >
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
<item>
<widget class="QSplitter" name="splitter" >
<property name="orientation" >
</property>
<widget class="QTreeWidget" name="settingsTree" >
<property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>7</vsizetype>
+ <sizepolicy vsizetype="Expanding" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</widget>
<widget class="QScrollArea" name="settingsFrame" >
<property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
+ <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
+ <enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow" >
- <enum>QFrame::Raised</enum>
+ <enum>QFrame::Plain</enum>
</property>
+ <layout class="QVBoxLayout" >
+ <item>
+ <widget class="QStackedWidget" name="settingsStack" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget" name="page" />
+ </widget>
+ </item>
+ </layout>
</widget>
</widget>
</item>
<class>QScrollArea</class>
<extends>QFrame</extends>
<header>QScrollArea</header>
+ <container>1</container>
</customwidget>
</customwidgets>
<resources/>