FOSSredder 0.5.0
Loading...
Searching...
No Matches
Settings.cpp
Go to the documentation of this file.
1
5
6#include "ui/shell/Settings.h"
7
8#include <QDate>
9#include <QSettings>
10
11#include "ui/shell/Defaults.h"
12
13namespace ui {
14
17
18namespace {
19
20QSettings openSettings() {
21 return QSettings(QSettings::NativeFormat, QSettings::UserScope,
24}
25
26} // namespace
27
28Settings::Settings(QObject* parent) : QObject(parent) {
29 load();
30}
31
32QString Settings::normalizeText(const QString& value) {
33 return value.trimmed();
34}
35
36int Settings::normalizeArchiveFormat(int value) noexcept {
37 return value == 1 ? 1 : 0;
38}
39
40int Settings::normalizeAutosaveIntervalMinutes(int value) noexcept {
41 switch (value) {
47 return value;
48 default:
50 }
51}
52
53QString Settings::normalizeThemeMode(const QString& value) {
54 const QString normalized = value.trimmed().toLower();
55 return normalized == QStringLiteral("dark") ? QStringLiteral("dark")
56 : QStringLiteral("light");
57}
58
59QString normalizeAnalysisDateMode(const QString& value) {
60 const QString normalized = value.trimmed().toLower();
61 return normalized == QStringLiteral("range") ? QStringLiteral("range")
62 : QStringLiteral("year");
63}
64
65int normalizeAnalysisYear(int value) noexcept {
66 return value > 0 ? value : (QDate::currentDate().year() - 1);
67}
68
69void Settings::emitStateChanged() {
70 emit stateChanged();
71}
72
73bool Settings::Values::operator==(const Values& other) const {
74 return language == other.language && themeMode == other.themeMode &&
75 autosaveOnClose == other.autosaveOnClose &&
76 autosaveIntervalMinutes == other.autosaveIntervalMinutes &&
77 importDefaultPath == other.importDefaultPath &&
78 importPoppler == other.importPoppler &&
79 importOpenCv == other.importOpenCv &&
80 importTesseract == other.importTesseract &&
81 importParser == other.importParser &&
82 importMatcher == other.importMatcher &&
83 exportDefaultDirectory == other.exportDefaultDirectory &&
84 exportArchiveFormat == other.exportArchiveFormat &&
85 exportIncludeFormulas == other.exportIncludeFormulas &&
86 analysisDefaultDateMode == other.analysisDefaultDateMode &&
87 analysisDefaultYear == other.analysisDefaultYear &&
88 toolbarShowBooking == other.toolbarShowBooking &&
89 toolbarShowActors == other.toolbarShowActors &&
90 toolbarShowProperties == other.toolbarShowProperties &&
91 toolbarShowContracts == other.toolbarShowContracts &&
92 toolbarShowImport == other.toolbarShowImport &&
93 toolbarShowExport == other.toolbarShowExport &&
94 toolbarShowAnalysis == other.toolbarShowAnalysis &&
95 toolbarShowAnnual == other.toolbarShowAnnual &&
96 toolbarShowSettings == other.toolbarShowSettings;
97}
98
99Settings::Values Settings::defaultValues() {
100 Values out;
101 out.language = languages::kEnglish;
102 out.themeMode = QStringLiteral("light");
103 out.exportIncludeFormulas = true;
104 out.analysisDefaultDateMode = QStringLiteral("year");
105 out.analysisDefaultYear = QDate::currentDate().year() - 1;
106 out.autosaveOnClose = true;
107 out.autosaveIntervalMinutes = config::autosave::kIntervalOff;
108 return out;
109}
110
111void Settings::applyDefaults() {
112 values_ = defaultValues();
113}
114
115void Settings::loadFromPersistentStore() {
116 auto settings = openSettings();
117 values_.language = normalizeText(
118 settings.value(preferenceKeys::kLanguage, languages::kEnglish)
119 .toString());
120 if (values_.language.isEmpty())
121 values_.language = languages::kEnglish;
122 values_.themeMode = normalizeThemeMode(
123 settings.value(preferenceKeys::kThemeMode, QStringLiteral("light"))
124 .toString());
125 values_.autosaveOnClose =
126 settings.value(preferenceKeys::kAutosaveOnClose, true).toBool();
127 values_.autosaveIntervalMinutes = normalizeAutosaveIntervalMinutes(
128 settings
129 .value(preferenceKeys::kAutosaveIntervalMinutes,
131 .toInt());
132 values_.importDefaultPath = normalizeText(
133 settings.value(preferenceKeys::kImportDefaultPath).toString());
134 values_.importPoppler =
135 settings.value(preferenceKeys::kImportPoppler).toString();
136 values_.importOpenCv =
137 settings.value(preferenceKeys::kImportOpenCv).toString();
138 values_.importTesseract =
139 settings.value(preferenceKeys::kImportTesseract).toString();
140 values_.importParser =
141 settings.value(preferenceKeys::kImportParser).toString();
142 values_.importMatcher =
143 settings.value(preferenceKeys::kImportMatcher).toString();
144 values_.exportDefaultDirectory = normalizeText(
145 settings.value(preferenceKeys::kExportDefaultDirectory).toString());
146 values_.exportArchiveFormat = normalizeArchiveFormat(
147 settings.value(preferenceKeys::kExportArchiveFormat, 0).toInt());
148 values_.exportIncludeFormulas =
149 settings.value(preferenceKeys::kExportIncludeFormulas, true).toBool();
150 values_.analysisDefaultDateMode = normalizeAnalysisDateMode(
151 settings
152 .value(preferenceKeys::kAnalysisDefaultDateMode,
153 QStringLiteral("year"))
154 .toString());
155 values_.analysisDefaultYear =
156 normalizeAnalysisYear(settings
157 .value(preferenceKeys::kAnalysisDefaultYear,
158 QDate::currentDate().year() - 1)
159 .toInt());
160 values_.toolbarShowBooking =
161 settings.value(preferenceKeys::kToolbarShowBooking, true).toBool();
162 values_.toolbarShowActors =
163 settings.value(preferenceKeys::kToolbarShowActors, true).toBool();
164 values_.toolbarShowProperties =
165 settings.value(preferenceKeys::kToolbarShowProperties, true).toBool();
166 values_.toolbarShowContracts =
167 settings.value(preferenceKeys::kToolbarShowContracts, true).toBool();
168 values_.toolbarShowImport =
169 settings.value(preferenceKeys::kToolbarShowImport, true).toBool();
170 values_.toolbarShowExport =
171 settings.value(preferenceKeys::kToolbarShowExport, true).toBool();
172 values_.toolbarShowAnalysis =
173 settings.value(preferenceKeys::kToolbarShowAnalysis, true).toBool();
174 values_.toolbarShowAnnual =
175 settings.value(preferenceKeys::kToolbarShowAnnual, true).toBool();
176 values_.toolbarShowSettings =
177 settings.value(preferenceKeys::kToolbarShowSettings, true).toBool();
178}
179
180void Settings::persistToStore() const {
181 auto settings = openSettings();
182 settings.setValue(preferenceKeys::kLanguage, values_.language);
183 settings.setValue(preferenceKeys::kThemeMode, values_.themeMode);
184 settings.setValue(preferenceKeys::kAutosaveOnClose, values_.autosaveOnClose);
185 settings.setValue(preferenceKeys::kAutosaveIntervalMinutes,
186 values_.autosaveIntervalMinutes);
187 settings.setValue(preferenceKeys::kImportDefaultPath,
188 values_.importDefaultPath);
189 settings.setValue(preferenceKeys::kImportPoppler, values_.importPoppler);
190 settings.setValue(preferenceKeys::kImportOpenCv, values_.importOpenCv);
191 settings.setValue(preferenceKeys::kImportTesseract, values_.importTesseract);
192 settings.setValue(preferenceKeys::kImportParser, values_.importParser);
193 settings.setValue(preferenceKeys::kImportMatcher, values_.importMatcher);
194 settings.setValue(preferenceKeys::kExportDefaultDirectory,
195 values_.exportDefaultDirectory);
196 settings.setValue(preferenceKeys::kExportArchiveFormat,
197 values_.exportArchiveFormat);
198 settings.setValue(preferenceKeys::kExportIncludeFormulas,
199 values_.exportIncludeFormulas);
200 settings.setValue(preferenceKeys::kAnalysisDefaultDateMode,
201 values_.analysisDefaultDateMode);
202 settings.setValue(preferenceKeys::kAnalysisDefaultYear,
203 values_.analysisDefaultYear);
204 settings.setValue(preferenceKeys::kToolbarShowBooking,
205 values_.toolbarShowBooking);
206 settings.setValue(preferenceKeys::kToolbarShowActors,
207 values_.toolbarShowActors);
208 settings.setValue(preferenceKeys::kToolbarShowProperties,
209 values_.toolbarShowProperties);
210 settings.setValue(preferenceKeys::kToolbarShowContracts,
211 values_.toolbarShowContracts);
212 settings.setValue(preferenceKeys::kToolbarShowImport,
213 values_.toolbarShowImport);
214 settings.setValue(preferenceKeys::kToolbarShowExport,
215 values_.toolbarShowExport);
216 settings.setValue(preferenceKeys::kToolbarShowAnalysis,
217 values_.toolbarShowAnalysis);
218 settings.setValue(preferenceKeys::kToolbarShowAnnual,
219 values_.toolbarShowAnnual);
220 settings.setValue(preferenceKeys::kToolbarShowSettings,
221 values_.toolbarShowSettings);
222 settings.sync();
223}
224
225void Settings::captureSavedState() {
226 savedValues_ = values_;
227}
228
229void Settings::emitAllValueChanged() {
230 emit languageChanged();
231 emit themeModeChanged();
236 emit importOpenCvChanged();
238 emit importParserChanged();
254}
255
256void Settings::setLanguage(const QString& value) {
257 const QString normalized = normalizeText(value).toLower();
258 const QString nextValue =
259 normalized.isEmpty() ? languages::kEnglish : normalized;
260 updateSetting(values_.language, nextValue, &Settings::languageChanged);
261}
262
263void Settings::setThemeMode(const QString& value) {
264 updateSetting(values_.themeMode, normalizeThemeMode(value),
266}
267
269 updateSetting(values_.autosaveOnClose, value,
271}
272
274 updateSetting(values_.autosaveIntervalMinutes,
275 normalizeAutosaveIntervalMinutes(value),
277}
278
279void Settings::setImportDefaultPath(const QString& value) {
280 updateSetting(values_.importDefaultPath, normalizeText(value),
282}
283
284void Settings::setImportPoppler(const QString& value) {
285 updateSetting(values_.importPoppler, value, &Settings::importPopplerChanged);
286}
287
288void Settings::setImportOpenCv(const QString& value) {
289 updateSetting(values_.importOpenCv, value, &Settings::importOpenCvChanged);
290}
291
292void Settings::setImportTesseract(const QString& value) {
293 updateSetting(values_.importTesseract, value,
295}
296
297void Settings::setImportParser(const QString& value) {
298 updateSetting(values_.importParser, value, &Settings::importParserChanged);
299}
300
301void Settings::setImportMatcher(const QString& value) {
302 updateSetting(values_.importMatcher, value, &Settings::importMatcherChanged);
303}
304
305void Settings::setExportDefaultDirectory(const QString& value) {
306 updateSetting(values_.exportDefaultDirectory, normalizeText(value),
308}
309
311 updateSetting(values_.exportArchiveFormat, normalizeArchiveFormat(value),
313}
314
316 updateSetting(values_.exportIncludeFormulas, value,
318}
319
320void Settings::setAnalysisDefaultDateMode(const QString& value) {
321 updateSetting(values_.analysisDefaultDateMode,
324}
325
327 updateSetting(values_.analysisDefaultYear, normalizeAnalysisYear(value),
329}
330
332 updateSetting(values_.toolbarShowBooking, value,
334}
335
337 updateSetting(values_.toolbarShowActors, value,
339}
340
342 updateSetting(values_.toolbarShowProperties, value,
344}
345
347 updateSetting(values_.toolbarShowContracts, value,
349}
350
352 updateSetting(values_.toolbarShowImport, value,
354}
355
357 updateSetting(values_.toolbarShowExport, value,
359}
360
362 updateSetting(values_.toolbarShowAnalysis, value,
364}
365
367 updateSetting(values_.toolbarShowAnnual, value,
369}
370
372 updateSetting(values_.toolbarShowSettings, value,
374}
375
377 applyDefaults();
378 loadFromPersistentStore();
379 captureSavedState();
380 emit stateChanged();
381}
382
384 persistToStore();
385 captureSavedState();
386 emit saved();
387 emit stateChanged();
388}
389
391 applyDefaults();
392 emitAllValueChanged();
393 emit reset();
394 emitStateChanged();
395}
396
397bool Settings::hasChanges() const noexcept {
398 return values_ != savedValues_;
399}
400
401} // namespace ui
Defines UI-specific runtime constants that are not shared with core.
Declares the centralized UI settings view model exposed to QML.
void toolbarShowAnnualChanged()
void setToolbarShowExport(bool value)
Definition Settings.cpp:356
void stateChanged()
Emitted when any settings value changes.
void importTesseractChanged()
bool hasChanges() const noexcept
Returns whether current values differ from the last saved state.
Definition Settings.cpp:397
void setToolbarShowBooking(bool value)
Definition Settings.cpp:331
void setAnalysisDefaultDateMode(const QString &value)
Definition Settings.cpp:320
void analysisDefaultYearChanged()
void toolbarShowActorsChanged()
void setImportOpenCv(const QString &value)
Definition Settings.cpp:288
void setToolbarShowAnalysis(bool value)
Definition Settings.cpp:361
void save()
Saves current settings to the platform settings store.
Definition Settings.cpp:383
void importOpenCvChanged()
void setThemeMode(const QString &value)
Definition Settings.cpp:263
void importDefaultPathChanged()
void setImportTesseract(const QString &value)
Definition Settings.cpp:292
void setAnalysisDefaultYear(int value)
Definition Settings.cpp:326
void analysisDefaultDateModeChanged()
void toolbarShowPropertiesChanged()
void autosaveOnCloseChanged()
void setExportArchiveFormat(int value)
Definition Settings.cpp:310
void toolbarShowContractsChanged()
void setImportPoppler(const QString &value)
Definition Settings.cpp:284
void toolbarShowExportChanged()
void load()
Loads persisted settings from the platform settings store.
Definition Settings.cpp:376
void importParserChanged()
void setToolbarShowImport(bool value)
Definition Settings.cpp:351
void reset()
Emitted after settings have been reset to defaults.
void setAutosaveOnClose(bool value)
Definition Settings.cpp:268
void importMatcherChanged()
void toolbarShowBookingChanged()
void toolbarShowImportChanged()
void languageChanged()
void setToolbarShowActors(bool value)
Definition Settings.cpp:336
void setImportDefaultPath(const QString &value)
Definition Settings.cpp:279
void themeModeChanged()
void setImportParser(const QString &value)
Definition Settings.cpp:297
void setToolbarShowSettings(bool value)
Definition Settings.cpp:371
void resetToDefaults()
Restores default settings values in memory.
Definition Settings.cpp:390
void saved()
Emitted after settings have been persisted.
void autosaveIntervalMinutesChanged()
Settings(QObject *parent=nullptr)
Creates the settings store exposed to QML.
Definition Settings.cpp:28
void setLanguage(const QString &value)
Definition Settings.cpp:256
void exportDefaultDirectoryChanged()
void setExportDefaultDirectory(const QString &value)
Definition Settings.cpp:305
void setToolbarShowProperties(bool value)
Definition Settings.cpp:341
void exportArchiveFormatChanged()
void toolbarShowSettingsChanged()
void setAutosaveIntervalMinutes(int value)
Definition Settings.cpp:273
void setToolbarShowContracts(bool value)
Definition Settings.cpp:346
void toolbarShowAnalysisChanged()
void setExportIncludeFormulas(bool value)
Definition Settings.cpp:315
void setToolbarShowAnnual(bool value)
Definition Settings.cpp:366
void importPopplerChanged()
void exportIncludeFormulasChanged()
void setImportMatcher(const QString &value)
Definition Settings.cpp:301
constexpr int kInterval5Minutes
Definition Defaults.h:129
constexpr int kIntervalOff
Allowed periodic autosave intervals in minutes; 0 means disabled.
Definition Defaults.h:127
constexpr int kInterval15Minutes
Definition Defaults.h:131
constexpr int kInterval1Minute
Definition Defaults.h:128
constexpr int kInterval30Minutes
Definition Defaults.h:132
constexpr int kInterval10Minutes
Definition Defaults.h:130
const auto kSettingsApplicationName
Application name used for the UI's QSettings store.
Definition Defaults.h:45
const auto kSettingsOrganizationName
Organization name used for the UI's QSettings store.
Definition Defaults.h:43
int normalizeAnalysisYear(int value) noexcept
Definition Settings.cpp:65
QString normalizeAnalysisDateMode(const QString &value)
Definition Settings.cpp:59