aboutsummaryrefslogtreecommitdiffstats
path: root/core/pref.h
blob: 3443085495a95f54dae09ef9096cf0e43c181081 (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
// SPDX-License-Identifier: GPL-2.0
#ifndef PREF_H
#define PREF_H

#ifdef __cplusplus
extern "C" {
#else
#include <stdbool.h>
#endif

#include "units.h"
#include "taxonomy.h"

typedef struct
{
	bool po2;
	bool pn2;
	bool phe;
	double po2_threshold_min;
	double po2_threshold_max;
	double pn2_threshold;
	double phe_threshold;
} partial_pressure_graphs_t;

typedef struct {
	enum taxonomy_category category[3];
} geocoding_prefs_t;

typedef struct {
	const char *language;
	const char *lang_locale;
	bool use_system_language;
} locale_prefs_t;

enum deco_mode {
	BUEHLMANN,
	RECREATIONAL,
	VPMB
};

enum def_file_behavior {
	UNDEFINED_DEFAULT_FILE,
	LOCAL_DEFAULT_FILE,
	NO_DEFAULT_FILE,
	CLOUD_DEFAULT_FILE
};

typedef struct {
	bool dont_check_for_updates;
	bool dont_check_exists;
	const char *last_version_used;
	int next_check;
} update_manager_prefs_t;

typedef struct {
	const char *vendor;
	const char *product;
	const char *device;
	const char *device_name;
} dive_computer_prefs_t;

// NOTE: these enums are duplicated in mobile-widgets/qmlinterface.h
enum unit_system_values {
	METRIC,
	IMPERIAL,
	PERSONALIZE
};

// ********** PREFERENCES **********
// This struct is kept global for all of ssrf
// most of the fields are loaded from git as
// part of the dives, but some fields are loaded
// from local storage (QSettings)
// The struct is divided in groups (sorted)
// and elements within the group is sorted
//
// When adding items to this list, please keep
// the list sorted (easier to find something)
struct preferences {
	// ********** Animations **********
	int animation_speed;

	// ********** CloudStorage **********
	bool       cloud_auto_sync;
	const char *cloud_base_url;
	const char *cloud_git_url;
	const char *cloud_storage_email;
	const char *cloud_storage_email_encoded;
	const char *cloud_storage_password;
	const char *cloud_storage_pin;
	int         cloud_timeout;
	int         cloud_verification_status;
	bool        save_password_local;

	// ********** DiveComputer **********
	dive_computer_prefs_t dive_computer;
	dive_computer_prefs_t dive_computer1;
	dive_computer_prefs_t dive_computer2;
	dive_computer_prefs_t dive_computer3;
	dive_computer_prefs_t dive_computer4;

	// ********** Display *************
	bool        display_invalid_dives;
	const char *divelist_font;
	double      font_size;
	double      mobile_scale;
	bool        show_developer;

	// ********** Equipment tab *******
	const char *default_cylinder;
	bool        display_unused_tanks;

	// ********** General **********
	bool        auto_recalculate_thumbnails;
	bool	    extract_video_thumbnails;
	int	    extract_video_thumbnails_position; // position in stream: 0=first 100=last second
	const char *ffmpeg_executable; // path of ffmpeg binary
	int         defaultsetpoint; // default setpoint in mbar
	const char *default_filename;
	enum def_file_behavior default_file_behavior;
	int         o2consumption; // ml per min
	int         pscr_ratio; // dump ratio times 1000
	bool        use_default_file;
	bool        extraEnvironmentalDefault;
	bool        salinityEditDefault;

	// ********** Geocoding **********
	geocoding_prefs_t geocoding;

	// ********** Language **********
	const char *    date_format;
	bool            date_format_override;
	const char *    date_format_short;
	locale_prefs_t  locale; //: TODO: move the rest of locale based info here.
	const char *    time_format;
	bool            time_format_override;

	// ********** LocationService **********
	int time_threshold;
	int distance_threshold;

	// ********** Network **********
	bool        proxy_auth;
	const char *proxy_host;
	int         proxy_port;
	int         proxy_type;
	const char *proxy_user;
	const char *proxy_pass;

	// ********** Planner **********
	int             ascratelast6m;
	int             ascratestops;
	int             ascrate50;
	int             ascrate75; // All rates in mm / sec
	depth_t         bestmixend;
	int             bottompo2;
	int             bottomsac;
	int             decopo2;
	int             decosac;
	int             descrate;
	bool            display_duration;
	bool            display_runtime;
	bool            display_transitions;
	bool            display_variations;
	bool            doo2breaks;
	bool            dobailout;
	bool		o2narcotic;
	bool            drop_stone_mode;
	bool            last_stop;   // At 6m?
	int             min_switch_duration; // seconds
	int             surface_segment; // seconds at the surface after planned dive
	enum deco_mode  planner_deco_mode;
	int             problemsolvingtime;
	int             reserve_gas;
	int             sacfactor;
	bool            safetystop;
	bool            switch_at_req_stop;
	bool            verbatim_plan;

	// ********** TecDetails **********
	bool                        calcalltissues;
	bool                        calcceiling;
	bool                        calcceiling3m;
	bool                        calcndltts;
	bool                        decoinfo; // Show deco info in infobox
	bool                        dcceiling;
	enum deco_mode              display_deco_mode;
	bool                        ead;
	int                         gfhigh;
	int                         gflow;
	bool                        gf_low_at_maxdepth;
	bool                        hrgraph;
	bool                        mod;
	double                      modpO2;
	bool                        percentagegraph;
	partial_pressure_graphs_t   pp_graphs;
	bool                        redceiling;
	bool                        rulergraph;
	bool                        show_average_depth;
	bool                        show_ccr_sensors;
	bool                        show_ccr_setpoint;
	bool                        show_icd;
	bool                        show_pictures_in_profile;
	bool                        show_sac;
	bool                        show_scr_ocpo2;
	bool                        tankbar;
	int                         vpmb_conservatism;
	bool                        zoomed_plot;

	// ********** Units **********
	bool                    coordinates_traditional;
	enum unit_system_values unit_system;
	struct units            units;

	// ********** UpdateManager **********
	update_manager_prefs_t update_manager;
};

extern struct preferences prefs, default_prefs, git_prefs;

extern const char *system_divelist_default_font;
extern double system_divelist_default_font_size;

extern const char *system_default_directory(void);
extern const char *system_default_filename();
extern bool subsurface_ignore_font(const char *font);
extern void subsurface_OS_pref_setup();
extern void copy_prefs(struct preferences *src, struct preferences *dest);

#ifdef __cplusplus
}
#endif

#endif // PREF_H