swift
applicationclosedialog.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QDialogButtonBox>
7 #include <QModelIndexList>
8 #include <QPushButton>
9 #include <QStringListModel>
10 
11 #include "ui_applicationclosedialog.h"
12 
14 #include "gui/guiapplication.h"
15 #include "gui/guiutility.h"
16 #include "misc/logmessage.h"
17 #include "misc/settingscache.h"
18 
19 using namespace swift::misc;
20 using namespace swift::gui;
21 using namespace swift::core::context;
22 
23 namespace swift::gui::components
24 {
25  CApplicationCloseDialog::CApplicationCloseDialog(QWidget *parent)
26  : QDialog(parent), ui(new Ui::CApplicationCloseDialog)
27  {
28  Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui");
29 
30  ui->setupUi(this);
31  this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
32  this->initSettingsView();
33  ui->bb_ApplicationCloseDialog->button(QDialogButtonBox::Save)->setDefault(true);
34 
35  connect(this, &CApplicationCloseDialog::accepted, this, &CApplicationCloseDialog::onAccepted);
36  connect(this, &CApplicationCloseDialog::rejected, this, &CApplicationCloseDialog::onRejected);
37  connect(ui->bb_ApplicationCloseDialog, &QDialogButtonBox::clicked, this,
38  &CApplicationCloseDialog::buttonClicked);
39  }
40 
42 
43  void CApplicationCloseDialog::onAccepted()
44  {
45  const QModelIndexList indexes = ui->lv_UnsavedSettings->selectionModel()->selectedIndexes();
46  if (indexes.isEmpty()) { return; }
47  QStringList saveKeys;
48  const QList<int> rows = CGuiUtility::indexToUniqueRows(indexes);
49  for (int r : rows)
50  {
51  const QString description = m_settingsDescriptions[r];
52  const QString key = m_settingsDictionary.key(description);
53  if (!key.isEmpty()) { saveKeys.append(key); }
54  }
55  if (saveKeys.isEmpty()) { return; }
56  const CStatusMessage msg = sApp->saveSettingsByKey(saveKeys);
57  if (msg.isFailure()) { CLogMessage::preformatted(msg); }
58  }
59 
60  void CApplicationCloseDialog::onRejected()
61  {
62  // void
63  }
64 
65  void CApplicationCloseDialog::buttonClicked(QAbstractButton *button)
66  {
67  if (button == ui->bb_ApplicationCloseDialog->button(QDialogButtonBox::Discard))
68  {
69  ui->lv_UnsavedSettings->clearSelection();
70  this->accept(); // fake accept with unselected items
71  }
72  }
73 
74  void CApplicationCloseDialog::initSettingsView()
75  {
77  QStringList descriptions = settingsDictionary.values();
78  descriptions.sort();
79  QStringListModel *model = new QStringListModel(descriptions, this);
80  ui->lv_UnsavedSettings->setModel(model);
81  ui->lv_UnsavedSettings->selectAll();
82 
83  m_settingsDictionary = settingsDictionary;
84  m_settingsDescriptions = descriptions;
85  }
86 } // namespace swift::gui::components
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
Definition: application.cpp:71
const context::IContextApplication * getIContextApplication() const
Direct access to contexts if a CCoreFacade has been initialized.
swift::misc::CStatusMessage saveSettingsByKey(const QStringList &keys)
Save all settings.
virtual CSettingsDictionary getUnsavedSettingsKeysDescribed() const =0
Get keys and descriptions of all unsaved settings currently in core settings cache.
static QList< int > indexToUniqueRows(const QModelIndexList &indexes)
Only the row part and unique (so no rows is twice in the list)
Definition: guiutility.cpp:639
const Key key(const Value &value) const
Return key assigned to value.
Definition: dictionary.h:386
Streamable status message, e.g.
bool isFailure() const
Operation considered unsuccessful.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
Free functions in swift::misc.