blob: e9098a9dde05d648d69b6df4e0c0de21e8d9c094 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# Short explanation of how qPref works
## System startup:
### core/qt-init.cpp init_qt_late()
does
```
qPref::load();
```
to load all properties from all qPref* classes
## System shutdown:
### subsurface-mobile-main.cpp and subsurface-desktop-main.cpp main()
calls
```
call qPref::sync()
```
to save all changes to disk, this is needed because part of the program
modifies struct preferences instead of calling the set method.
#### EXCEPTION:
Variables not present in struct preferences (local static variables in the class
are not written, see later.
## System startup/shutdown common handling:
```
qPref::load() calls qPref::doSync(false)
qPref::sync() calls qPref::doSync(true)
```
### qPrefDoSync()
qPref::doSync() calls qPref<xyz>::doSync() for all qPref* classes
Meaning qPref knows which classes exist, but not which variables
### qPref*::doSync() calls
```
disk_<variable name>() for each variable
```
#### EXCEPTION:
some variables are not in struct preferences, but local static variables
which can only be accessed through the set/get functions, therefore there
are no need to sync them
```
if (!doSync) // meaining load
load_<variable_name>()
```
### qPref*::disk_*()
qPref*::disk_*() calls qPrefPrivate::propSetValue to save a property,
and qPrefPrivate::propValue() to read a property. The function also
keeps struct preferences in sync.
### qPrefPrivate::propSetValue()
qPrefPrivate::propSetValue() is static and calls QSettings to write property
### qPrefPrivate::propValue()
qPrefPrivate::propValue() is static and calls QSettings to read property
### macros
the macros are defined in qPrefPrivate.h
the macros are used in qPref*cpp
## Reading properties
Reading a property is done through an inline function, and thus no more expensive
than accessing the variable directly.
```
qPref*::<variable_name>()
```
## Setting properties
Setting a property is done through a dedicated set function which are static to
simplify the call:
```
qPref<class>::set_<variable_name>(value)
```
like:
```
qPrefDisplay::animation_speed(500);
```
the set function updates struct preferences (if not a local variable), and saves
the property to disk, however save is only done if the variable is changed.
## Updating struct preferences
When a program part updates struct preferences directly, changes are NOT saved to disk
if the programm crashes, otherwise all variables are saved to disk with the program exists.
|