1 /************************************************************************
2  **
3  **  @file   vsettings.cpp
4  **  @author Roman Telezhynskyi <dismine(at)gmail.com>
5  **  @date   22 11, 2014
6  **
7  **  @brief
8  **  @copyright
9  **  This source code is part of the Valentina project, a pattern making
10  **  program, whose allow create and modeling patterns of clothing.
11  **  Copyright (C) 2013-2015 Valentina project
12  **  <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
13  **
14  **  Valentina is free software: you can redistribute it and/or modify
15  **  it under the terms of the GNU General Public License as published by
16  **  the Free Software Foundation, either version 3 of the License, or
17  **  (at your option) any later version.
18  **
19  **  Valentina is distributed in the hope that it will be useful,
20  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  **  GNU General Public License for more details.
23  **
24  **  You should have received a copy of the GNU General Public License
25  **  along with Valentina.  If not, see <http://www.gnu.org/licenses/>.
26  **
27  *************************************************************************/
28 
29 #include "vsettings.h"
30 
31 #include <QDir>
32 #include <QLocale>
33 #include <QMetaType>
34 #include <QPrinter>
35 #include <QSharedPointer>
36 #include <QStaticStringData>
37 #include <QStringData>
38 #include <QStringDataPtr>
39 #include <QVariant>
40 #include <QPrinterInfo>
41 #include <QtDebug>
42 #include <QGlobalStatic>
43 
44 #include "../vmisc/def.h"
45 #include "../vmisc/vmath.h"
46 #include "../vlayout/vbank.h"
47 
48 Q_DECLARE_METATYPE(QMarginsF)
49 
50 const int VSettings::defaultScrollingDuration = 300;
51 const int VSettings::scrollingDurationMin = 100;
52 const int VSettings::scrollingDurationMax = 1000;
53 
54 const int VSettings::defaultScrollingUpdateInterval = 30;
55 const int VSettings::scrollingUpdateIntervalMin = 10;
56 const int VSettings::scrollingUpdateIntervalMax = 100;
57 
58 const qreal VSettings::defaultSensorMouseScale = 2.0;
59 const qreal VSettings::sensorMouseScaleMin = 1.0;
60 const qreal VSettings::sensorMouseScaleMax = 10.0;
61 
62 const qreal VSettings::defaultWheelMouseScale = 45.0;
63 const qreal VSettings::wheelMouseScaleMin = 1.0;
64 const qreal VSettings::wheelMouseScaleMax = 100.0;
65 
66 const qreal VSettings::defaultScrollingAcceleration = 1.3;
67 const qreal VSettings::scrollingAccelerationMin = 1.0;
68 const qreal VSettings::scrollingAccelerationMax = 10.0;
69 
70 namespace
71 {
72 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationLabelLanguage,
73                           (QLatin1String("configuration/label_language")))
74 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingAutoRefreshPatternMessage,
75                           (QLatin1String("configuration/autoRefreshPatternMessage")))
76 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingToolPanelScaling,
77                           (QLatin1String("configuration/toolPanelScaling")))
78 
79 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsLayout, (QLatin1String("paths/layout")))
80 
81 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternGraphicalOutput, (QLatin1String("pattern/graphicalOutput")))
82 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUseOpenGLRender, (QLatin1String("pattern/useOpenGLRender")))
83 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternKnownMaterials, (QLatin1String("pattern/knownMaterials")))
84 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternRememberMaterials, (QLatin1String("pattern/rememberMaterials")))
85 
86 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutWidth, (QLatin1String("layout/width")))
87 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutSorting, (QLatin1String("layout/sorting")))
88 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutPaperHeight, (QLatin1String("layout/paperHeight")))
89 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutPaperWidth, (QLatin1String("layout/paperWidth")))
90 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutFollowGrainline, (QLatin1String("layout/followGrainline")))
91 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutManualPriority, (QLatin1String("layout/manualPriority")))
92 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutNestQuantity, (QLatin1String("layout/nestQuantity")))
93 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutAutoCropLength, (QLatin1String("layout/autoCropLength")))
94 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutAutoCropWidth, (QLatin1String("layout/autoCropWidth")))
95 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutSaveLength, (QLatin1String("layout/saveLength")))
96 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutPreferOneSheetSolution,
97                           (QLatin1String("layout/preferOneSheetSolution")))
98 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutUnitePages, (QLatin1String("layout/unitePages")))
99 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingFields, (QLatin1String("layout/fields")))
100 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingIgnoreFields, (QLatin1String("layout/ignoreFields")))
101 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingStripOptimization, (QLatin1String("layout/stripOptimization")))
102 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingMultiplier, (QLatin1String("layout/multiplier")))
103 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTextAsPaths, (QLatin1String("layout/textAsPaths")))
104 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingNestingTime, (QLatin1String("layout/time")))
105 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingEfficiencyCoefficient, (QLatin1String("layout/efficiencyCoefficient")))
106 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutExportFormat, (QLatin1String("layout/exportFormat")))
107 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDetailExportFormat, (QLatin1String("detail/exportFormat")))
108 
109 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFPaperHeight, (QLatin1String("tiledPDF/paperHeight")))
110 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFPaperWidth, (QLatin1String("tiledPDF/paperWidth")))
111 
112 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingDuration, (QLatin1String("scrolling/duration")))
113 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingUpdateInterval, (QLatin1String("scrolling/updateInterval")))
114 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingSensorMouseScale,
115                           (QLatin1String("scrolling/sensorMouseScale")))
116 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingWheelMouseScale, (QLatin1String("scrolling/wheelMouseScale")))
117 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingAcceleration, (QLatin1String("scrolling/acceleration")))
118 
119 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingdockWidgetGroupsActive, (QLatin1String("dockWidget/groupsActive")))
120 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDockWidgetToolOptionsActive,
121                           (QLatin1String("dockWidget/toolOptionsActive")))
122 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDockWidgetPatternMessagesActive,
123                           (QLatin1String("dockWidget/patternMessagesActive")))
124 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternMessagesFontSize, (QLatin1String("font/patternMessagesSize")))
125 
126 Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingWatermarkEditorSize, (QLatin1String("watermarkEditorSize")))
127 
128 // Reading settings file is very expensive, cache values to speed up getting a value
129 int scrollingDurationCached = -1;
130 int scrollingUpdateIntervalCached = -1;
131 qreal scrollingSensorMouseScaleCached = -1;
132 qreal scrollingWheelMouseScaleCached = -1;
133 qreal scrollingAccelerationCached = -1;
134 }
135 
136 //---------------------------------------------------------------------------------------------------------------------
VSettings(Format format,Scope scope,const QString & organization,const QString & application,QObject * parent)137 VSettings::VSettings(Format format, Scope scope, const QString &organization, const QString &application,
138                      QObject *parent)
139     :VCommonSettings(format, scope, organization, application, parent)
140 {
141     qRegisterMetaTypeStreamOperators<QMarginsF>("QMarginsF");
142 }
143 
144 //---------------------------------------------------------------------------------------------------------------------
VSettings(const QString & fileName,QSettings::Format format,QObject * parent)145 VSettings::VSettings(const QString &fileName, QSettings::Format format, QObject *parent)
146     :VCommonSettings(fileName, format, parent)
147 {
148     qRegisterMetaTypeStreamOperators<QMarginsF>("QMarginsF");
149 }
150 
151 //---------------------------------------------------------------------------------------------------------------------
GetLabelLanguage() const152 QString VSettings::GetLabelLanguage() const
153 {
154     return value(*settingConfigurationLabelLanguage, QLocale().bcp47Name()).toString();
155 }
156 
157 //---------------------------------------------------------------------------------------------------------------------
SetLabelLanguage(const QString & value)158 void VSettings::SetLabelLanguage(const QString &value)
159 {
160     setValue(*settingConfigurationLabelLanguage, value);
161 }
162 
163 //---------------------------------------------------------------------------------------------------------------------
GetDefPathLayout()164 QString VSettings::GetDefPathLayout()
165 {
166     return QDir::homePath() + QStringLiteral("/valentina/") + tr("layouts");
167 }
168 
169 //---------------------------------------------------------------------------------------------------------------------
GetPathLayout() const170 QString VSettings::GetPathLayout() const
171 {
172     QSettings settings(this->format(), this->scope(), this->organizationName(), this->applicationName());
173     return settings.value(*settingPathsLayout, GetDefPathLayout()).toString();
174 }
175 
176 //---------------------------------------------------------------------------------------------------------------------
SetPathLayout(const QString & value)177 void VSettings::SetPathLayout(const QString &value)
178 {
179     QSettings settings(this->format(), this->scope(), this->organizationName(), this->applicationName());
180     settings.setValue(*settingPathsLayout, value);
181     settings.sync();
182 }
183 
184 //---------------------------------------------------------------------------------------------------------------------
GetGraphicalOutput() const185 bool VSettings::GetGraphicalOutput() const
186 {
187     return value(*settingPatternGraphicalOutput, 1).toBool();
188 }
189 
190 //---------------------------------------------------------------------------------------------------------------------
SetGraphicalOutput(const bool & value)191 void VSettings::SetGraphicalOutput(const bool &value)
192 {
193     setValue(*settingPatternGraphicalOutput, value);
194 }
195 
196 //---------------------------------------------------------------------------------------------------------------------
IsOpenGLRender() const197 bool VSettings::IsOpenGLRender() const
198 {
199     return value(*settingPatternUseOpenGLRender, 0).toBool();
200 }
201 
202 //---------------------------------------------------------------------------------------------------------------------
SetOpenGLRender(bool value)203 void VSettings::SetOpenGLRender(bool value)
204 {
205     setValue(*settingPatternUseOpenGLRender, value);
206 }
207 
208 //---------------------------------------------------------------------------------------------------------------------
GetLayoutPaperHeight() const209 qreal VSettings::GetLayoutPaperHeight() const
210 {
211     return ValueOrDef<qreal>(*settingLayoutPaperHeight, UnitConvertor(1189/*A0*/, Unit::Mm, Unit::Px));
212 }
213 
214 //---------------------------------------------------------------------------------------------------------------------
SetLayoutPaperHeight(qreal value)215 void VSettings::SetLayoutPaperHeight(qreal value)
216 {
217     setValue(*settingLayoutPaperHeight, value);
218 }
219 
220 //---------------------------------------------------------------------------------------------------------------------
GetLayoutPaperWidth() const221 qreal VSettings::GetLayoutPaperWidth() const
222 {
223     return ValueOrDef<qreal>(*settingLayoutPaperWidth, UnitConvertor(841/*A0*/, Unit::Mm, Unit::Px));
224 }
225 
226 //---------------------------------------------------------------------------------------------------------------------
SetLayoutPaperWidth(qreal value)227 void VSettings::SetLayoutPaperWidth(qreal value)
228 {
229     setValue(*settingLayoutPaperWidth, value);
230 }
231 
232 //---------------------------------------------------------------------------------------------------------------------
GetLayoutWidth() const233 qreal VSettings::GetLayoutWidth() const
234 {
235     return ValueOrDef<qreal>(*settingLayoutWidth, GetDefLayoutWidth());
236 }
237 
238 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutWidth()239 qreal VSettings::GetDefLayoutWidth()
240 {
241     return UnitConvertor(2.5, Unit::Mm, Unit::Px);
242 }
243 
244 //---------------------------------------------------------------------------------------------------------------------
SetLayoutWidth(qreal value)245 void VSettings::SetLayoutWidth(qreal value)
246 {
247     setValue(*settingLayoutWidth, value);
248 }
249 
250 //---------------------------------------------------------------------------------------------------------------------
GetNestingTime() const251 int VSettings::GetNestingTime() const
252 {
253     return ValueOrDef<int>(*settingNestingTime, GetDefNestingTime());
254 }
255 
256 //---------------------------------------------------------------------------------------------------------------------
SetNestingTime(int value)257 void VSettings::SetNestingTime(int value)
258 {
259     setValue(*settingNestingTime, value);
260 }
261 
262 //---------------------------------------------------------------------------------------------------------------------
GetEfficiencyCoefficient() const263 qreal VSettings::GetEfficiencyCoefficient() const
264 {
265     return ValueOrDef<qreal>(*settingEfficiencyCoefficient, GetDefEfficiencyCoefficient());
266 }
267 
268 //---------------------------------------------------------------------------------------------------------------------
SetEfficiencyCoefficient(qreal value)269 void VSettings::SetEfficiencyCoefficient(qreal value)
270 {
271     setValue(*settingEfficiencyCoefficient, value);
272 }
273 
274 //---------------------------------------------------------------------------------------------------------------------
GetFields(const QMarginsF & def) const275 QMarginsF VSettings::GetFields(const QMarginsF &def) const
276 {
277     return ValueOrDef<QMarginsF>(*settingFields, def);
278 }
279 
280 //---------------------------------------------------------------------------------------------------------------------
SetFields(const QMarginsF & value)281 void VSettings::SetFields(const QMarginsF &value)
282 {
283     setValue(*settingFields, QVariant::fromValue(value));
284 }
285 
286 //---------------------------------------------------------------------------------------------------------------------
GetLayoutGroup() const287 Cases VSettings::GetLayoutGroup() const
288 {
289     return ValueOrDef<Cases>(*settingLayoutSorting, GetDefLayoutGroup());
290 }
291 
292 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutGroup()293 Cases VSettings::GetDefLayoutGroup()
294 {
295     return Cases::CaseDesc;
296 }
297 
298 //---------------------------------------------------------------------------------------------------------------------
SetLayoutGroup(const Cases & value)299 void VSettings::SetLayoutGroup(const Cases &value)
300 {
301     setValue(*settingLayoutSorting, static_cast<int>(value));
302 }
303 
304 //---------------------------------------------------------------------------------------------------------------------
GetLayoutFollowGrainline() const305 bool VSettings::GetLayoutFollowGrainline() const
306 {
307     return value(*settingLayoutFollowGrainline, GetDefLayoutFollowGrainline()).toBool();
308 }
309 
310 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutFollowGrainline()311 bool VSettings::GetDefLayoutFollowGrainline()
312 {
313     return false;
314 }
315 
316 //---------------------------------------------------------------------------------------------------------------------
SetLayoutFollowGrainline(bool value)317 void VSettings::SetLayoutFollowGrainline(bool value)
318 {
319     setValue(*settingLayoutFollowGrainline, value);
320 }
321 
322 //---------------------------------------------------------------------------------------------------------------------
GetLayoutManualPriority() const323 bool VSettings::GetLayoutManualPriority() const
324 {
325     return value(*settingLayoutManualPriority, GetDefLayoutManualPriority()).toBool();
326 }
327 
328 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutManualPriority()329 bool VSettings::GetDefLayoutManualPriority()
330 {
331     return false;
332 }
333 
334 //---------------------------------------------------------------------------------------------------------------------
SetLayoutManualPriority(bool value)335 void VSettings::SetLayoutManualPriority(bool value)
336 {
337     setValue(*settingLayoutManualPriority, value);
338 }
339 
340 //---------------------------------------------------------------------------------------------------------------------
GetLayoutNestQuantity() const341 bool VSettings::GetLayoutNestQuantity() const
342 {
343     return value(*settingLayoutNestQuantity, GetDefLayoutNestQuantity()).toBool();
344 }
345 
346 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutNestQuantity()347 bool VSettings::GetDefLayoutNestQuantity()
348 {
349     return false;
350 }
351 
352 //---------------------------------------------------------------------------------------------------------------------
SetLayoutNestQuantity(bool value)353 void VSettings::SetLayoutNestQuantity(bool value)
354 {
355     setValue(*settingLayoutNestQuantity, value);
356 }
357 
358 //---------------------------------------------------------------------------------------------------------------------
GetLayoutAutoCropLength() const359 bool VSettings::GetLayoutAutoCropLength() const
360 {
361     return value(*settingLayoutAutoCropLength, GetDefLayoutAutoCropLength()).toBool();
362 }
363 
364 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutAutoCropLength()365 bool VSettings::GetDefLayoutAutoCropLength()
366 {
367     return false;
368 }
369 //---------------------------------------------------------------------------------------------------------------------
SetLayoutAutoCropLength(bool value)370 void VSettings::SetLayoutAutoCropLength(bool value)
371 {
372     setValue(*settingLayoutAutoCropLength, value);
373 }
374 //---------------------------------------------------------------------------------------------------------------------
GetLayoutAutoCropWidth() const375 bool VSettings::GetLayoutAutoCropWidth() const
376 {
377     return value(*settingLayoutAutoCropWidth, GetDefLayoutAutoCropWidth()).toBool();
378 }
379 
380 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutAutoCropWidth()381 bool VSettings::GetDefLayoutAutoCropWidth()
382 {
383     return false;
384 }
385 
386 //---------------------------------------------------------------------------------------------------------------------
SetLayoutAutoCropWidth(bool value)387 void VSettings::SetLayoutAutoCropWidth(bool value)
388 {
389     setValue(*settingLayoutAutoCropWidth, value);
390 }
391 //---------------------------------------------------------------------------------------------------------------------
GetLayoutSaveLength() const392 bool VSettings::GetLayoutSaveLength() const
393 {
394     return value(*settingLayoutSaveLength, GetDefLayoutSaveLength()).toBool();
395 }
396 
397 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutSaveLength()398 bool VSettings::GetDefLayoutSaveLength()
399 {
400     return false;
401 }
402 
403 //---------------------------------------------------------------------------------------------------------------------
SetLayoutSaveLength(bool value)404 void VSettings::SetLayoutSaveLength(bool value)
405 {
406     setValue(*settingLayoutSaveLength, value);
407 }
408 
409 //---------------------------------------------------------------------------------------------------------------------
GetLayoutPreferOneSheetSolution() const410 bool VSettings::GetLayoutPreferOneSheetSolution() const
411 {
412     return value(*settingLayoutPreferOneSheetSolution, GetDefLayoutPreferOneSheetSolution()).toBool();
413 }
414 
415 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutPreferOneSheetSolution()416 bool VSettings::GetDefLayoutPreferOneSheetSolution()
417 {
418     return false;
419 }
420 
421 //---------------------------------------------------------------------------------------------------------------------
SetLayoutPreferOneSheetSolution(bool value)422 void VSettings::SetLayoutPreferOneSheetSolution(bool value)
423 {
424     setValue(*settingLayoutPreferOneSheetSolution, value);
425 }
426 
427 //---------------------------------------------------------------------------------------------------------------------
GetLayoutUnitePages() const428 bool VSettings::GetLayoutUnitePages() const
429 {
430     return value(*settingLayoutUnitePages, GetDefLayoutUnitePages()).toBool();
431 }
432 
433 //---------------------------------------------------------------------------------------------------------------------
GetDefLayoutUnitePages()434 bool VSettings::GetDefLayoutUnitePages()
435 {
436     return false;
437 }
438 
439 //---------------------------------------------------------------------------------------------------------------------
SetLayoutUnitePages(bool value)440 void VSettings::SetLayoutUnitePages(bool value)
441 {
442     setValue(*settingLayoutUnitePages, value);
443 }
444 
445 //---------------------------------------------------------------------------------------------------------------------
GetIgnoreAllFields() const446 bool VSettings::GetIgnoreAllFields() const
447 {
448     return value(*settingIgnoreFields, GetDefIgnoreAllFields()).toBool();
449 }
450 
451 //---------------------------------------------------------------------------------------------------------------------
GetDefIgnoreAllFields()452 bool VSettings::GetDefIgnoreAllFields()
453 {
454     return false;
455 }
456 
457 //---------------------------------------------------------------------------------------------------------------------
SetIgnoreAllFields(bool value)458 void VSettings::SetIgnoreAllFields(bool value)
459 {
460     setValue(*settingIgnoreFields, value);
461 }
462 
463 //---------------------------------------------------------------------------------------------------------------------
GetStripOptimization() const464 bool VSettings::GetStripOptimization() const
465 {
466     return value(*settingStripOptimization, GetDefStripOptimization()).toBool();
467 }
468 
469 //---------------------------------------------------------------------------------------------------------------------
GetDefStripOptimization()470 bool VSettings::GetDefStripOptimization()
471 {
472     return false;
473 }
474 
475 //---------------------------------------------------------------------------------------------------------------------
SetStripOptimization(bool value)476 void VSettings::SetStripOptimization(bool value)
477 {
478     setValue(*settingStripOptimization, value);
479 }
480 
481 //---------------------------------------------------------------------------------------------------------------------
GetMultiplier() const482 quint8 VSettings::GetMultiplier() const
483 {
484     return static_cast<quint8>(value(*settingMultiplier, GetDefMultiplier()).toUInt());
485 }
486 
487 //---------------------------------------------------------------------------------------------------------------------
GetDefMultiplier()488 quint8 VSettings::GetDefMultiplier()
489 {
490     return 1;
491 }
492 
493 //---------------------------------------------------------------------------------------------------------------------
SetMultiplier(quint8 value)494 void VSettings::SetMultiplier(quint8 value)
495 {
496     setValue(*settingMultiplier, value);
497 }
498 
499 //---------------------------------------------------------------------------------------------------------------------
GetTextAsPaths() const500 bool VSettings::GetTextAsPaths() const
501 {
502     return value(*settingTextAsPaths, GetDefTextAsPaths()).toBool();
503 }
504 
505 //---------------------------------------------------------------------------------------------------------------------
GetDefTextAsPaths()506 bool VSettings::GetDefTextAsPaths()
507 {
508     return false;
509 }
510 
511 //---------------------------------------------------------------------------------------------------------------------
SetTextAsPaths(bool value)512 void VSettings::SetTextAsPaths(bool value)
513 {
514     setValue(*settingTextAsPaths, value);
515 }
516 
517 //---------------------------------------------------------------------------------------------------------------------
GetKnownMaterials() const518 QStringList VSettings::GetKnownMaterials() const
519 {
520     return value(*settingPatternKnownMaterials, QStringList()).toStringList();
521 }
522 
523 //---------------------------------------------------------------------------------------------------------------------
SetKnownMaterials(const QStringList & list)524 void VSettings::SetKnownMaterials(const QStringList &list)
525 {
526     setValue(*settingPatternKnownMaterials, list);
527 }
528 
529 //---------------------------------------------------------------------------------------------------------------------
IsRememberPatternMaterials() const530 bool VSettings::IsRememberPatternMaterials() const
531 {
532     return value(*settingPatternRememberMaterials, true).toBool();
533 }
534 
535 //---------------------------------------------------------------------------------------------------------------------
SetRememberPatternMaterials(bool value)536 void VSettings::SetRememberPatternMaterials(bool value)
537 {
538     setValue(*settingPatternRememberMaterials, value);
539 }
540 
541 // settings for the tiled PDFs
542 //---------------------------------------------------------------------------------------------------------------------
543 /**
544  * @brief GetTiledPDFPaperHeight returns the paper height of tiled pdf in the desired unit.
545  * @param unit the unit in which are the value. Necessary because we save the values
546  * internaly as mm so there is conversion beeing made.
547  * @return tiled pdf paper height
548  */
GetTiledPDFPaperHeight(const Unit & unit) const549 qreal VSettings::GetTiledPDFPaperHeight(const Unit &unit) const
550 {
551     return UnitConvertor(ValueOrDef<qreal>(*settingTiledPDFPaperHeight, 297 /*A4*/), Unit::Mm, unit);
552 }
553 
554 //---------------------------------------------------------------------------------------------------------------------
555 /**
556  * @brief SetTiledPDFPaperHeight sets the tiled pdf paper height
557  * @param value in mm
558  * @param unit unit of the given value
559  */
SetTiledPDFPaperHeight(qreal value,const Unit & unit)560 void VSettings::SetTiledPDFPaperHeight(qreal value, const Unit &unit)
561 {
562     setValue(*settingTiledPDFPaperHeight, UnitConvertor(value, unit, Unit::Mm));
563 }
564 
565 //---------------------------------------------------------------------------------------------------------------------
566 /**
567  * @brief GetTiledPDFPaperWidth returns the paper height of tiled pdf in the desired unit.
568  * @param unit the unit in which are the value. Necessary because we save the values
569  * internaly as mm so there is conversion beeing made.
570  * @return tiled pdf paper width
571  */
GetTiledPDFPaperWidth(const Unit & unit) const572 qreal VSettings::GetTiledPDFPaperWidth(const Unit &unit) const
573 {
574     return UnitConvertor(ValueOrDef<qreal>(*settingTiledPDFPaperWidth, 210 /*A4*/), Unit::Mm, unit);
575 }
576 
577 //---------------------------------------------------------------------------------------------------------------------
578 /**
579  * @brief SetTiledPDFPaperWidth sets the tiled pdf paper width
580  * @param unit unit of the given value
581  * @param value in mm
582  */
SetTiledPDFPaperWidth(qreal value,const Unit & unit)583 void VSettings::SetTiledPDFPaperWidth(qreal value, const Unit &unit)
584 {
585     setValue(*settingTiledPDFPaperWidth, UnitConvertor(value,unit, Unit::Mm));
586 }
587 
588 //---------------------------------------------------------------------------------------------------------------------
GetScrollingDuration() const589 int VSettings::GetScrollingDuration() const
590 {
591     return GetCachedValue(scrollingDurationCached, *settingScrollingDuration, defaultScrollingDuration,
592                           scrollingDurationMin, scrollingDurationMax);
593 }
594 
595 //---------------------------------------------------------------------------------------------------------------------
SetScrollingDuration(int duration)596 void VSettings::SetScrollingDuration(int duration)
597 {
598     scrollingDurationCached = qBound(scrollingDurationMin, duration, scrollingDurationMax);
599     setValue(*settingScrollingDuration, scrollingDurationCached);
600 }
601 
602 //---------------------------------------------------------------------------------------------------------------------
GetScrollingUpdateInterval() const603 int VSettings::GetScrollingUpdateInterval() const
604 {
605     return GetCachedValue(scrollingUpdateIntervalCached, *settingScrollingUpdateInterval,
606                           defaultScrollingUpdateInterval, scrollingUpdateIntervalMin, scrollingUpdateIntervalMax);
607 }
608 
609 //---------------------------------------------------------------------------------------------------------------------
SetScrollingUpdateInterval(int updateInterval)610 void VSettings::SetScrollingUpdateInterval(int updateInterval)
611 {
612     scrollingUpdateIntervalCached = qBound(scrollingUpdateIntervalMin, updateInterval, scrollingUpdateIntervalMax);
613     setValue(*settingScrollingUpdateInterval, scrollingUpdateIntervalCached);
614 }
615 
616 //---------------------------------------------------------------------------------------------------------------------
GetSensorMouseScale() const617 qreal VSettings::GetSensorMouseScale() const
618 {
619     return GetCachedValue(scrollingSensorMouseScaleCached, *settingScrollingSensorMouseScale, defaultSensorMouseScale,
620                           sensorMouseScaleMin, sensorMouseScaleMax);
621 }
622 
623 //---------------------------------------------------------------------------------------------------------------------
SetSensorMouseScale(qreal scale)624 void VSettings::SetSensorMouseScale(qreal scale)
625 {
626     scrollingSensorMouseScaleCached = qBound(sensorMouseScaleMin, scale, sensorMouseScaleMax);
627     setValue(*settingScrollingSensorMouseScale, scrollingSensorMouseScaleCached);
628 }
629 
630 //---------------------------------------------------------------------------------------------------------------------
GetWheelMouseScale() const631 qreal VSettings::GetWheelMouseScale() const
632 {
633     return GetCachedValue(scrollingWheelMouseScaleCached, *settingScrollingWheelMouseScale, defaultWheelMouseScale,
634                           wheelMouseScaleMin, wheelMouseScaleMax);
635 }
636 
637 //---------------------------------------------------------------------------------------------------------------------
SetWheelMouseScale(qreal scale)638 void VSettings::SetWheelMouseScale(qreal scale)
639 {
640     scrollingWheelMouseScaleCached = qBound(wheelMouseScaleMin, scale, wheelMouseScaleMax);
641     setValue(*settingScrollingWheelMouseScale, scrollingWheelMouseScaleCached);
642 }
643 
644 //---------------------------------------------------------------------------------------------------------------------
GetScrollingAcceleration() const645 qreal VSettings::GetScrollingAcceleration() const
646 {
647     return GetCachedValue(scrollingAccelerationCached, *settingScrollingAcceleration, defaultScrollingAcceleration,
648                           scrollingAccelerationMin, scrollingAccelerationMax);
649 }
650 
651 //---------------------------------------------------------------------------------------------------------------------
SetScrollingAcceleration(qreal acceleration)652 void VSettings::SetScrollingAcceleration(qreal acceleration)
653 {
654     scrollingAccelerationCached = qBound(scrollingAccelerationMin, acceleration, scrollingAccelerationMax);
655     setValue(*settingScrollingAcceleration, scrollingAccelerationCached);
656 }
657 
658 //---------------------------------------------------------------------------------------------------------------------
IsDockWidgetGroupsActive() const659 bool VSettings::IsDockWidgetGroupsActive() const
660 {
661     return value(*settingdockWidgetGroupsActive, GetDefDockWidgetGroupsActive()).toBool();
662 }
663 
664 //---------------------------------------------------------------------------------------------------------------------
GetDefDockWidgetGroupsActive()665 bool VSettings::GetDefDockWidgetGroupsActive()
666 {
667     return true;
668 }
669 
670 //---------------------------------------------------------------------------------------------------------------------
SetDockWidgetGroupsActive(bool value)671 void VSettings::SetDockWidgetGroupsActive(bool value)
672 {
673     setValue(*settingdockWidgetGroupsActive, value);
674 }
675 
676 //---------------------------------------------------------------------------------------------------------------------
IsDockWidgetToolOptionsActive() const677 bool VSettings::IsDockWidgetToolOptionsActive() const
678 {
679     return value(*settingDockWidgetToolOptionsActive, GetDefDockWidgetToolOptionsActive()).toBool();
680 }
681 
682 //---------------------------------------------------------------------------------------------------------------------
GetDefDockWidgetToolOptionsActive()683 bool VSettings::GetDefDockWidgetToolOptionsActive()
684 {
685     return true;
686 }
687 
688 //---------------------------------------------------------------------------------------------------------------------
SetDockWidgetToolOptionsActive(bool value)689 void VSettings::SetDockWidgetToolOptionsActive(bool value)
690 {
691     setValue(*settingDockWidgetToolOptionsActive, value);
692 }
693 
694 //---------------------------------------------------------------------------------------------------------------------
IsDockWidgetPatternMessagesActive() const695 bool VSettings::IsDockWidgetPatternMessagesActive() const
696 {
697     return value(*settingDockWidgetPatternMessagesActive, GetDefDockWidgetPatternMessagesActive()).toBool();
698 }
699 
700 //---------------------------------------------------------------------------------------------------------------------
GetDefDockWidgetPatternMessagesActive()701 bool VSettings::GetDefDockWidgetPatternMessagesActive()
702 {
703     return true;
704 }
705 
706 //---------------------------------------------------------------------------------------------------------------------
SetDockWidgetPatternMessagesActive(bool value)707 void VSettings::SetDockWidgetPatternMessagesActive(bool value)
708 {
709     setValue(*settingDockWidgetPatternMessagesActive, value);
710 }
711 
712 //---------------------------------------------------------------------------------------------------------------------
GetPatternMessageFontSize(int fontSizeDef) const713 int VSettings::GetPatternMessageFontSize(int fontSizeDef) const
714 {
715     fontSizeDef = qBound(GetDefMinPatternMessageFontSize(), fontSizeDef, GetDefMaxPatternMessageFontSize());
716     const int fontSize = value(*settingPatternMessagesFontSize, fontSizeDef).toInt();
717     return qBound(GetDefMinPatternMessageFontSize(), fontSize, GetDefMaxPatternMessageFontSize());
718 }
719 
720 //---------------------------------------------------------------------------------------------------------------------
GetDefMinPatternMessageFontSize()721 int VSettings::GetDefMinPatternMessageFontSize()
722 {
723     return 5;
724 }
725 
726 //---------------------------------------------------------------------------------------------------------------------
GetDefMaxPatternMessageFontSize()727 int VSettings::GetDefMaxPatternMessageFontSize()
728 {
729     return 40;
730 }
731 
732 //---------------------------------------------------------------------------------------------------------------------
SetPatternMessageFontSize(int size)733 void VSettings::SetPatternMessageFontSize(int size)
734 {
735     setValue(*settingPatternMessagesFontSize, qBound(GetDefMinPatternMessageFontSize(), size,
736                                                      GetDefMaxPatternMessageFontSize()));
737 }
738 
739 //---------------------------------------------------------------------------------------------------------------------
GetAutoRefreshPatternMessage() const740 bool VSettings::GetAutoRefreshPatternMessage() const
741 {
742     return value(*settingAutoRefreshPatternMessage, true).toBool();
743 }
744 
745 //---------------------------------------------------------------------------------------------------------------------
SetAutoRefreshPatternMessage(bool value)746 void VSettings::SetAutoRefreshPatternMessage(bool value)
747 {
748     setValue(*settingAutoRefreshPatternMessage, value);
749 }
750 
751 //---------------------------------------------------------------------------------------------------------------------
GetWatermarkEditorSize() const752 QSize VSettings::GetWatermarkEditorSize() const
753 {
754     return value(*settingWatermarkEditorSize, QSize(0, 0)).toSize();
755 }
756 
757 //---------------------------------------------------------------------------------------------------------------------
SetWatermarkEditorSize(const QSize & sz)758 void VSettings::SetWatermarkEditorSize(const QSize &sz)
759 {
760     setValue(*settingWatermarkEditorSize, sz);
761 }
762 
763 //---------------------------------------------------------------------------------------------------------------------
GetToolPanelScaling() const764 bool VSettings::GetToolPanelScaling() const
765 {
766     return value(*settingToolPanelScaling, false).toBool();
767 }
768 
769 //---------------------------------------------------------------------------------------------------------------------
SetToolPanelScaling(const bool & value)770 void VSettings::SetToolPanelScaling(const bool &value)
771 {
772     setValue(*settingToolPanelScaling, value);
773 }
774 
775 //---------------------------------------------------------------------------------------------------------------------
GetLayoutExportFormat() const776 auto VSettings::GetLayoutExportFormat() const -> qint8
777 {
778     return qvariant_cast<qint8>(value(*settingLayoutExportFormat, 0));
779 }
780 
781 //---------------------------------------------------------------------------------------------------------------------
SetLayoutExportFormat(qint8 format)782 void VSettings::SetLayoutExportFormat(qint8 format)
783 {
784     setValue(*settingLayoutExportFormat, format);
785 }
786 
787 //---------------------------------------------------------------------------------------------------------------------
GetDetailExportFormat() const788 qint8 VSettings::GetDetailExportFormat() const
789 {
790     return qvariant_cast<qint8>(value(*settingDetailExportFormat, 0));
791 }
792 
793 //---------------------------------------------------------------------------------------------------------------------
SetDetailExportFormat(qint8 format)794 void VSettings::SetDetailExportFormat(qint8 format)
795 {
796     setValue(*settingDetailExportFormat, format);
797 }
798 
799 //---------------------------------------------------------------------------------------------------------------------
800 template<typename T>
GetCachedValue(T & cache,const QString & setting,T defValue,T valueMin,T valueMax) const801 T VSettings::GetCachedValue(T &cache, const QString &setting, T defValue, T valueMin, T valueMax) const
802 {
803     if (cache < 0)
804     {
805         cache = qBound(valueMin, ValueOrDef(setting, defValue), valueMax);
806     }
807 
808     return cache;
809 }
810