Implement Apply / Close without Saving for preferences

This hooks up the buttons correctly

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2013-06-03 05:58:50 +09:00 committed by Dirk Hohndel
parent de8395e09e
commit 77c4b8ef87
2 changed files with 42 additions and 8 deletions

View file

@ -13,12 +13,22 @@ PreferencesDialog* PreferencesDialog::instance()
#define D(V, P) s.value(#V, default_prefs.P).toDouble()
#define I(V, P) s.value(#V, default_prefs.P).toInt()
PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f)
, ui(new Ui::PreferencesDialog())
PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f),
ui(new Ui::PreferencesDialog())
{
ui->setupUi(this);
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(syncSettings()));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(resetSettings()));
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*)));
reloadPrefs();
}
void PreferencesDialog::showEvent(QShowEvent *event)
{
reloadPrefs();
QDialog::showEvent(event);
}
void PreferencesDialog::reloadPrefs()
{
oldPrefs = prefs;
@ -140,8 +150,30 @@ void PreferencesDialog::syncSettings()
s.endGroup();
s.sync();
oldPrefs = prefs;
emit settingsChanged();
}
void PreferencesDialog::buttonClicked(QAbstractButton* button)
{
switch(ui->buttonBox->standardButton(button)){
case QDialogButtonBox::Discard:
prefs = oldPrefs;
close();
break;
case QDialogButtonBox::Apply:
syncSettings();
emit settingsChanged();
break;
case QDialogButtonBox::FirstButton:
syncSettings();
oldPrefs = prefs;
emit settingsChanged();
close();
break;
default:
break; // ignore warnings.
}
}
#undef SB

View file

@ -6,23 +6,25 @@
#include "../pref.h"
namespace Ui{
class PreferencesDialog;
class PreferencesDialog;
}
class QAbstractButton;
class PreferencesDialog :public QDialog{
Q_OBJECT
public:
static PreferencesDialog* instance();
void showEvent(QShowEvent* );
signals:
void settingsChanged();
public slots:
void buttonClicked(QAbstractButton* button);
void syncSettings();
void resetSettings();
private:
explicit PreferencesDialog(QWidget* parent = 0, Qt::WindowFlags f = 0);
void reloadPrefs();
Ui::PreferencesDialog* ui;
struct preferences oldPrefs;
};