diff --git a/gui/include/optionsdialog.h b/gui/include/optionsdialog.h index c064b0a93..ff8542d41 100644 --- a/gui/include/optionsdialog.h +++ b/gui/include/optionsdialog.h @@ -8,6 +8,7 @@ class QStackedWidget; class QListWidget; class QListWidgetItem; class QDataWidgetMapper; +class QPushButton; QT_END_NAMESPACE class OptionsModel; class MainOptionsPage; @@ -24,12 +25,18 @@ signals: public slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); +private slots: + void okClicked(); + void cancelClicked(); + void applyClicked(); + void enableApply(); private: QListWidget *contents_widget; QStackedWidget *pages_widget; MainOptionsPage *main_options_page; OptionsModel *model; QDataWidgetMapper *mapper; + QPushButton *apply_button; void setupMainPage(); }; diff --git a/gui/src/optionsdialog.cpp b/gui/src/optionsdialog.cpp index e1f3d67dd..4d0493a26 100644 --- a/gui/src/optionsdialog.cpp +++ b/gui/src/optionsdialog.cpp @@ -8,6 +8,7 @@ #include #include #include +#include OptionsDialog::OptionsDialog(QWidget *parent): QDialog(parent), contents_widget(0), pages_widget(0), @@ -39,7 +40,8 @@ OptionsDialog::OptionsDialog(QWidget *parent): buttons->addWidget(ok_button); QPushButton *cancel_button = new QPushButton(tr("Cancel")); buttons->addWidget(cancel_button); - QPushButton *apply_button = new QPushButton(tr("Apply")); + apply_button = new QPushButton(tr("Apply")); + apply_button->setEnabled(false); buttons->addWidget(apply_button); layout->addLayout(buttons); @@ -47,9 +49,16 @@ OptionsDialog::OptionsDialog(QWidget *parent): setLayout(layout); setWindowTitle(tr("Options")); + /* Widget-to-option mapper */ mapper = new QDataWidgetMapper(); mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); mapper->setOrientation(Qt::Vertical); + connect(mapper->itemDelegate(), SIGNAL(commitData(QWidget*)), this, SLOT(enableApply())); + + /* Event bindings */ + connect(ok_button, SIGNAL(clicked()), this, SLOT(okClicked())); + connect(cancel_button, SIGNAL(clicked()), this, SLOT(cancelClicked())); + connect(apply_button, SIGNAL(clicked()), this, SLOT(applyClicked())); } void OptionsDialog::setModel(OptionsModel *model) @@ -70,3 +79,25 @@ void OptionsDialog::changePage(QListWidgetItem *current, QListWidgetItem *previo pages_widget->setCurrentIndex(contents_widget->row(current)); } } + +void OptionsDialog::okClicked() +{ + mapper->submit(); + accept(); +} + +void OptionsDialog::cancelClicked() +{ + reject(); +} + +void OptionsDialog::applyClicked() +{ + mapper->submit(); + apply_button->setEnabled(false); +} + +void OptionsDialog::enableApply() +{ + apply_button->setEnabled(true); +}