From 0201c7c647e327a47aff4dd68fc3204e4cec789b Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 2 Aug 2016 09:44:38 +0200 Subject: [PATCH] Show warning when closing unsaved. (#16) --- src/gui/dialogs/formsettings.cpp | 32 ++++++++++++++++++++++++++- src/gui/dialogs/formsettings.h | 1 + src/gui/dialogs/formsettings.ui | 16 -------------- src/gui/settings/settingsdatabase.cpp | 2 ++ 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/gui/dialogs/formsettings.cpp b/src/gui/dialogs/formsettings.cpp index cb7351ff7..2271bfb7c 100755 --- a/src/gui/dialogs/formsettings.cpp +++ b/src/gui/dialogs/formsettings.cpp @@ -45,6 +45,7 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_panels(QListm_buttonBox, &QDialogButtonBox::accepted, this, &FormSettings::saveSettings); + connect(m_ui->m_buttonBox, &QDialogButtonBox::rejected, this, &FormSettings::cancelSettings); connect(m_btnApply, &QPushButton::clicked, this, &FormSettings::applySettings); addSettingsPanel(new SettingsGeneral(m_settings, this)); @@ -104,7 +105,7 @@ void FormSettings::applySettings() { MessageBox::show(this, QMessageBox::Question, tr("Critical settings were changed"), - tr("Some critical settings were changed and will be applied after the application gets restarted. " + tr("Some critical settings were changed and will be applied after the application gets restarted." "\n\nYou have to restart manually."), QString(), tr("Changed categories of settings:\n%1.").arg(changed_settings_description .join(QSL(",\n"))), @@ -114,6 +115,35 @@ void FormSettings::applySettings() { m_btnApply->setEnabled(false); } +void FormSettings::cancelSettings() { + QStringList changed_panels; + + foreach (SettingsPanel *panel, m_panels) { + if (panel->isDirty()) { + changed_panels.append(panel->title().toLower()); + } + } + + if (changed_panels.isEmpty()) { + reject(); + } + else { + const QStringList changed_settings_description = changed_panels.replaceInStrings(QRegExp(QSL("^")), QString::fromUtf8(" • ")); + + if (MessageBox::show(this, + QMessageBox::Critical, + tr("Some settings are changed and will be lost"), + tr("Some settings were changed and by cancelling this dialog, you would lose these changes." + "\n\nYou have to restart manually."), + tr("Do you really want to close this dialog without saving settings?"), + tr("Changed categories of settings:\n%1.").arg(changed_settings_description .join(QSL(",\n"))), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == + QMessageBox::Yes) { + reject(); + } + } +} + void FormSettings::addSettingsPanel(SettingsPanel *panel) { m_ui->m_listSettings->addItem(panel->title()); m_panels.append(panel); diff --git a/src/gui/dialogs/formsettings.h b/src/gui/dialogs/formsettings.h index c03ab9b4e..ba799b428 100755 --- a/src/gui/dialogs/formsettings.h +++ b/src/gui/dialogs/formsettings.h @@ -41,6 +41,7 @@ class FormSettings : public QDialog { // Saves settings into global configuration. void saveSettings(); void applySettings(); + void cancelSettings(); private: void addSettingsPanel(SettingsPanel *panel); diff --git a/src/gui/dialogs/formsettings.ui b/src/gui/dialogs/formsettings.ui index 38a367bfa..c06e691e3 100755 --- a/src/gui/dialogs/formsettings.ui +++ b/src/gui/dialogs/formsettings.ui @@ -69,22 +69,6 @@ - - m_buttonBox - rejected() - FormSettings - reject() - - - 334 - 400 - - - 286 - 274 - - - m_listSettings currentRowChanged(int) diff --git a/src/gui/settings/settingsdatabase.cpp b/src/gui/settings/settingsdatabase.cpp index 0231e0a09..ff77894e4 100755 --- a/src/gui/settings/settingsdatabase.cpp +++ b/src/gui/settings/settingsdatabase.cpp @@ -42,6 +42,8 @@ SettingsDatabase::SettingsDatabase(Settings *settings, QWidget *parent) connect(m_ui->m_txtMysqlPassword->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlPasswordChanged); connect(m_ui->m_txtMysqlDatabase->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlDatabaseChanged); connect(m_ui->m_btnMysqlTestSetup, &QPushButton::clicked, this, &SettingsDatabase::mysqlTestConnection); + + connect(m_ui->m_checkSqliteUseInMemoryDatabase, &QCheckBox::toggled, this, &SettingsDatabase::requireRestart); connect(m_ui->m_spinMysqlPort, &QSpinBox::editingFinished, this, &SettingsDatabase::requireRestart); connect(m_ui->m_txtMysqlHostname->lineEdit(), &BaseLineEdit::textEdited, this, &SettingsDatabase::requireRestart); connect(m_ui->m_txtMysqlPassword->lineEdit(), &BaseLineEdit::textEdited, this, &SettingsDatabase::requireRestart);