refs #741, allow to discard settings

(not saving, but continue closing)
This commit is contained in:
Klaus Basan
2016-08-23 23:22:37 +02:00
committed by Mathew Sutcliffe
parent 8b1bdbdcf8
commit 231bfea566
4 changed files with 30 additions and 3 deletions

View File

@@ -182,7 +182,7 @@ namespace BlackCore
//! Automatically and always save settings //! Automatically and always save settings
void setSettingsAutoSave(bool autoSave); void setSettingsAutoSave(bool autoSave);
//! All unsave settings //! All unsaved settings
QStringList getAllUnsavedSettings() const; QStringList getAllUnsavedSettings() const;
//! Save all settings //! Save all settings

View File

@@ -15,6 +15,8 @@
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include <QStringListModel> #include <QStringListModel>
#include <QModelIndexList> #include <QModelIndexList>
#include <QDialogButtonBox>
#include <QPushButton>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackGui; using namespace BlackGui;
@@ -30,7 +32,11 @@ namespace BlackGui
ui->setupUi(this); ui->setupUi(this);
this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
this->initSettingsView(); this->initSettingsView();
ui->bb_ApplicationCloseDialog->button(QDialogButtonBox::Save)->setDefault(true);
connect(this, &CApplicationCloseDialog::accepted, this, &CApplicationCloseDialog::ps_onAccepted); connect(this, &CApplicationCloseDialog::accepted, this, &CApplicationCloseDialog::ps_onAccepted);
connect(this, &CApplicationCloseDialog::rejected, this, &CApplicationCloseDialog::ps_onRejected);
connect(ui->bb_ApplicationCloseDialog, &QDialogButtonBox::clicked, this, &CApplicationCloseDialog::ps_buttonClicked);
} }
CApplicationCloseDialog::~CApplicationCloseDialog() CApplicationCloseDialog::~CApplicationCloseDialog()
@@ -38,7 +44,7 @@ namespace BlackGui
void CApplicationCloseDialog::ps_onAccepted() void CApplicationCloseDialog::ps_onAccepted()
{ {
QModelIndexList indexes = ui->lv_UnsavedSettings->selectionModel()->selectedIndexes(); const QModelIndexList indexes = ui->lv_UnsavedSettings->selectionModel()->selectedIndexes();
if (indexes.isEmpty()) { return; } if (indexes.isEmpty()) { return; }
const QList<int> rows = CGuiUtility::indexToUniqueRows(indexes); const QList<int> rows = CGuiUtility::indexToUniqueRows(indexes);
QStringList saveKeys; QStringList saveKeys;
@@ -51,6 +57,20 @@ namespace BlackGui
if (msg.isFailure()) { CLogMessage::preformatted(msg); } if (msg.isFailure()) { CLogMessage::preformatted(msg); }
} }
void CApplicationCloseDialog::ps_onRejected()
{
// void
}
void CApplicationCloseDialog::ps_buttonClicked(QAbstractButton *button)
{
if (button == ui->bb_ApplicationCloseDialog->button(QDialogButtonBox::Discard))
{
ui->lv_UnsavedSettings->clearSelection();
this->accept(); // fake accept with unselected items
}
}
void CApplicationCloseDialog::initSettingsView() void CApplicationCloseDialog::initSettingsView()
{ {
QStringList settings(CSettingsCache::instance()->getAllUnsavedKeys()); QStringList settings(CSettingsCache::instance()->getAllUnsavedKeys());

View File

@@ -14,6 +14,7 @@
#include <QDialog> #include <QDialog>
#include <QScopedPointer> #include <QScopedPointer>
#include <QAbstractButton>
namespace Ui { class CApplicationCloseDialog; } namespace Ui { class CApplicationCloseDialog; }
namespace BlackGui namespace BlackGui
@@ -38,6 +39,12 @@ namespace BlackGui
//! Accepted //! Accepted
void ps_onAccepted(); void ps_onAccepted();
//! Rejected
void ps_onRejected();
//! Button pressed
void ps_buttonClicked(QAbstractButton *button);
private: private:
QScopedPointer<Ui::CApplicationCloseDialog> ui; QScopedPointer<Ui::CApplicationCloseDialog> ui;
QStringList m_settingskeys; QStringList m_settingskeys;

View File

@@ -49,7 +49,7 @@
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Abort|QDialogButtonBox::Discard|QDialogButtonBox::Save</set>
</property> </property>
</widget> </widget>
</item> </item>