Show warning when closing unsaved. (#16)

This commit is contained in:
Martin Rotter 2016-08-02 09:44:38 +02:00
parent 9a057bb7b2
commit 0201c7c647
4 changed files with 34 additions and 17 deletions

View File

@ -45,6 +45,7 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_panels(QList<Se
// Establish needed connections.
connect(m_ui->m_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);

View File

@ -41,6 +41,7 @@ class FormSettings : public QDialog {
// Saves settings into global configuration.
void saveSettings();
void applySettings();
void cancelSettings();
private:
void addSettingsPanel(SettingsPanel *panel);

View File

@ -69,22 +69,6 @@
</tabstops>
<resources/>
<connections>
<connection>
<sender>m_buttonBox</sender>
<signal>rejected()</signal>
<receiver>FormSettings</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>334</x>
<y>400</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_listSettings</sender>
<signal>currentRowChanged(int)</signal>

View File

@ -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);