Connect preferences to the rest of the code

The biggest problem here was that bool has different sizes in C and C++
code. So using this in a structure shared between the two sides wasn't a
smart idea.

Instead I went with 'short', but that caused problems with Qt being to
smart for its own good and not doing the right thing when dealing with
'boolean' settings and a short value. This may be something in the way I
implemented things (as I doubt that something this fundamental would be
broken) but the workaround implemented here (explicitly using 0 or 1
depending on the value of the boolean) seems to work.

I also decided to get rid of the confusion of where gflow/gfhigh are
floating point (0..1) and when they are integers (0..100). We now use
integers anywhere outside of deco.c.

I also applied some serious spelling corrections to the preferences
dialog's ui file.

Finally, this enables the code that selects which partial pressure graph
to show.

Still to do: font size, metric/imperial logic

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-05-28 11:21:27 -07:00
parent 8394828806
commit 4f53ad736d
10 changed files with 120 additions and 92 deletions

54
pref.h
View file

@ -5,42 +5,46 @@
extern "C" {
#endif
/* can't use 'bool' for the boolean values - different size in C and C++ */
typedef struct {
gboolean cylinder;
gboolean temperature;
gboolean totalweight;
gboolean suit;
gboolean nitrox;
gboolean sac;
gboolean otu;
gboolean maxcns;
short cylinder;
short temperature;
short totalweight;
short suit;
short nitrox;
short sac;
short otu;
short maxcns;
} visible_cols_t;
typedef struct {
gboolean po2;
gboolean pn2;
gboolean phe;
short po2;
short pn2;
short phe;
double po2_threshold;
double pn2_threshold;
double phe_threshold;
} partial_pressure_graphs_t;
struct preferences {
struct units units;
visible_cols_t visible_cols;
partial_pressure_graphs_t pp_graphs;
gboolean mod;
double mod_ppO2;
gboolean ead;
gboolean profile_red_ceiling;
gboolean profile_calc_ceiling;
gboolean calc_ceiling_3m_incr;
double gflow;
double gfhigh;
int map_provider;
const char *divelist_font;
const char *default_filename;
short display_invalid_dives;
double font_size;
visible_cols_t visible_cols;
partial_pressure_graphs_t pp_graphs;
short mod;
double mod_ppO2;
short ead;
short profile_dc_ceiling;
short profile_red_ceiling;
short profile_calc_ceiling;
short calc_ceiling_3m_incr;
short gflow;
short gfhigh;
int map_provider;
short display_invalid_dives;
short show_invalid;
struct units units;
};
extern struct preferences prefs, default_prefs;
@ -49,7 +53,7 @@ extern struct preferences prefs, default_prefs;
extern void subsurface_open_conf(void);
extern void subsurface_set_conf(const char *name, const char *value);
extern void subsurface_set_conf_bool(const char *name, gboolean value);
extern void subsurface_set_conf_bool(const char *name, bool value);
extern void subsurface_set_conf_int(const char *name, int value);
extern void subsurface_unset_conf(const char *name);
extern const char *subsurface_get_conf(const char *name);