20QSettings openSettings() {
21 return QSettings(QSettings::NativeFormat, QSettings::UserScope,
32QString Settings::normalizeText(
const QString& value) {
33 return value.trimmed();
36int Settings::normalizeArchiveFormat(
int value)
noexcept {
37 return value == 1 ? 1 : 0;
40int Settings::normalizeAutosaveIntervalMinutes(
int value)
noexcept {
53QString Settings::normalizeThemeMode(
const QString& value) {
54 const QString normalized = value.trimmed().toLower();
55 return normalized == QStringLiteral(
"dark") ? QStringLiteral(
"dark")
56 : QStringLiteral(
"light");
60 const QString normalized = value.trimmed().toLower();
61 return normalized == QStringLiteral(
"range") ? QStringLiteral(
"range")
62 : QStringLiteral(
"year");
66 return value > 0 ? value : (QDate::currentDate().year() - 1);
69void Settings::emitStateChanged() {
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;
99Settings::Values Settings::defaultValues() {
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;
111void Settings::applyDefaults() {
112 values_ = defaultValues();
115void Settings::loadFromPersistentStore() {
116 auto settings = openSettings();
117 values_.language = normalizeText(
118 settings.value(preferenceKeys::kLanguage, languages::kEnglish)
120 if (values_.language.isEmpty())
121 values_.language = languages::kEnglish;
122 values_.themeMode = normalizeThemeMode(
123 settings.value(preferenceKeys::kThemeMode, QStringLiteral(
"light"))
125 values_.autosaveOnClose =
126 settings.value(preferenceKeys::kAutosaveOnClose,
true).toBool();
127 values_.autosaveIntervalMinutes = normalizeAutosaveIntervalMinutes(
129 .value(preferenceKeys::kAutosaveIntervalMinutes,
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();
152 .value(preferenceKeys::kAnalysisDefaultDateMode,
153 QStringLiteral(
"year"))
155 values_.analysisDefaultYear =
157 .value(preferenceKeys::kAnalysisDefaultYear,
158 QDate::currentDate().year() - 1)
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();
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);
225void Settings::captureSavedState() {
226 savedValues_ = values_;
229void Settings::emitAllValueChanged() {
257 const QString normalized = normalizeText(value).toLower();
258 const QString nextValue =
259 normalized.isEmpty() ? languages::kEnglish : normalized;
264 updateSetting(values_.themeMode, normalizeThemeMode(value),
269 updateSetting(values_.autosaveOnClose, value,
274 updateSetting(values_.autosaveIntervalMinutes,
275 normalizeAutosaveIntervalMinutes(value),
280 updateSetting(values_.importDefaultPath, normalizeText(value),
293 updateSetting(values_.importTesseract, value,
306 updateSetting(values_.exportDefaultDirectory, normalizeText(value),
311 updateSetting(values_.exportArchiveFormat, normalizeArchiveFormat(value),
316 updateSetting(values_.exportIncludeFormulas, value,
321 updateSetting(values_.analysisDefaultDateMode,
332 updateSetting(values_.toolbarShowBooking, value,
337 updateSetting(values_.toolbarShowActors, value,
342 updateSetting(values_.toolbarShowProperties, value,
347 updateSetting(values_.toolbarShowContracts, value,
352 updateSetting(values_.toolbarShowImport, value,
357 updateSetting(values_.toolbarShowExport, value,
362 updateSetting(values_.toolbarShowAnalysis, value,
367 updateSetting(values_.toolbarShowAnnual, value,
372 updateSetting(values_.toolbarShowSettings, value,
378 loadFromPersistentStore();
392 emitAllValueChanged();
398 return values_ != savedValues_;
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)
void stateChanged()
Emitted when any settings value changes.
void importTesseractChanged()
bool hasChanges() const noexcept
Returns whether current values differ from the last saved state.
void setToolbarShowBooking(bool value)
void setAnalysisDefaultDateMode(const QString &value)
void analysisDefaultYearChanged()
void toolbarShowActorsChanged()
void setImportOpenCv(const QString &value)
void setToolbarShowAnalysis(bool value)
void save()
Saves current settings to the platform settings store.
void importOpenCvChanged()
void setThemeMode(const QString &value)
void importDefaultPathChanged()
void setImportTesseract(const QString &value)
void setAnalysisDefaultYear(int value)
void analysisDefaultDateModeChanged()
void toolbarShowPropertiesChanged()
void autosaveOnCloseChanged()
void setExportArchiveFormat(int value)
void toolbarShowContractsChanged()
void setImportPoppler(const QString &value)
void toolbarShowExportChanged()
void load()
Loads persisted settings from the platform settings store.
void importParserChanged()
void setToolbarShowImport(bool value)
void reset()
Emitted after settings have been reset to defaults.
void setAutosaveOnClose(bool value)
void importMatcherChanged()
void toolbarShowBookingChanged()
void toolbarShowImportChanged()
void setToolbarShowActors(bool value)
void setImportDefaultPath(const QString &value)
void setImportParser(const QString &value)
void setToolbarShowSettings(bool value)
void resetToDefaults()
Restores default settings values in memory.
void saved()
Emitted after settings have been persisted.
void autosaveIntervalMinutesChanged()
Settings(QObject *parent=nullptr)
Creates the settings store exposed to QML.
void setLanguage(const QString &value)
void exportDefaultDirectoryChanged()
void setExportDefaultDirectory(const QString &value)
void setToolbarShowProperties(bool value)
void exportArchiveFormatChanged()
void toolbarShowSettingsChanged()
void setAutosaveIntervalMinutes(int value)
void setToolbarShowContracts(bool value)
void toolbarShowAnalysisChanged()
void setExportIncludeFormulas(bool value)
void setToolbarShowAnnual(bool value)
void importPopplerChanged()
void exportIncludeFormulasChanged()
void setImportMatcher(const QString &value)
constexpr int kInterval5Minutes
constexpr int kIntervalOff
Allowed periodic autosave intervals in minutes; 0 means disabled.
constexpr int kInterval15Minutes
constexpr int kInterval1Minute
constexpr int kInterval30Minutes
constexpr int kInterval10Minutes
const auto kSettingsApplicationName
Application name used for the UI's QSettings store.
const auto kSettingsOrganizationName
Organization name used for the UI's QSettings store.
int normalizeAnalysisYear(int value) noexcept
QString normalizeAnalysisDateMode(const QString &value)