Branch data Line data Source code
1 : : /*
2 : : * gnc-prefs.c:
3 : : *
4 : : * Copyright (C) 2006 Chris Shoemaker <c.shoemaker@cox.net>
5 : : *
6 : : * This program is free software; you can redistribute it and/or
7 : : * modify it under the terms of the GNU General Public License as
8 : : * published by the Free Software Foundation; either version 2 of
9 : : * the License, or (at your option) any later version.
10 : : *
11 : : * This program is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this program; if not, contact:
18 : : *
19 : : * Free Software Foundation Voice: +1-617-542-5942
20 : : * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
21 : : * Boston, MA 02110-1301, USA gnu@gnu.org
22 : : */
23 : :
24 : : #include <stdlib.h>
25 : : #include <glib.h>
26 : : #include <config.h>
27 : : #include "gnc-prefs.h"
28 : : #include "gnc-prefs-p.h"
29 : : #include "gnc-version.h"
30 : :
31 : : static gchar *namespace_regexp = NULL;
32 : : static gboolean is_debugging = FALSE;
33 : : static gboolean extras_enabled = FALSE;
34 : : static gboolean use_compression = TRUE; // This is also the default in the prefs backend
35 : : static gint file_retention_policy = 1; // 1 = "days", the default in the prefs backend
36 : : static gint file_retention_days = 30; // This is also the default in the prefs backend
37 : :
38 : :
39 : : /* Global variables used to remove the preference registered callbacks
40 : : * that were setup via a g_once. */
41 : : static gulong reg_auto_raise_lists_id;
42 : : static gulong reg_negative_color_pref_id;
43 : :
44 : : PrefsBackend *prefsbackend = NULL;
45 : :
46 : : const gchar *
47 : 4 : gnc_prefs_get_namespace_regexp(void)
48 : : {
49 : 4 : return namespace_regexp;
50 : : }
51 : :
52 : : void
53 : 0 : gnc_prefs_set_namespace_regexp(const gchar *str)
54 : : {
55 : 0 : if (namespace_regexp)
56 : 0 : g_free(namespace_regexp);
57 : :
58 : 0 : if (str)
59 : 0 : namespace_regexp = g_strdup(str);
60 : 0 : }
61 : :
62 : : gboolean
63 : 0 : gnc_prefs_is_debugging_enabled(void)
64 : : {
65 : 0 : return is_debugging;
66 : : }
67 : :
68 : : void
69 : 0 : gnc_prefs_set_debugging(gboolean d)
70 : : {
71 : 0 : is_debugging = d;
72 : 0 : }
73 : :
74 : : gboolean
75 : 4 : gnc_prefs_is_extra_enabled(void)
76 : : {
77 : 4 : return extras_enabled;
78 : : }
79 : :
80 : : void
81 : 0 : gnc_prefs_set_extra(gboolean enabled)
82 : : {
83 : 0 : extras_enabled = enabled;
84 : 0 : }
85 : :
86 : : gboolean
87 : 4 : gnc_prefs_get_file_save_compressed(void)
88 : : {
89 : 4 : return use_compression;
90 : : }
91 : :
92 : : void
93 : 4 : gnc_prefs_set_file_save_compressed(gboolean compressed)
94 : : {
95 : 4 : use_compression = compressed;
96 : 4 : }
97 : :
98 : : gint
99 : 1 : gnc_prefs_get_file_retention_policy(void)
100 : : {
101 : 1 : return file_retention_policy;
102 : : }
103 : :
104 : : void
105 : 0 : gnc_prefs_set_file_retention_policy(gint policy)
106 : : {
107 : 0 : file_retention_policy = policy;
108 : 0 : }
109 : :
110 : : gint
111 : 1 : gnc_prefs_get_file_retention_days(void)
112 : : {
113 : 1 : return file_retention_days;
114 : : }
115 : :
116 : : void
117 : 0 : gnc_prefs_set_file_retention_days(gint days)
118 : : {
119 : 0 : file_retention_days = days;
120 : 0 : }
121 : :
122 : : guint
123 : 6 : gnc_prefs_get_long_version()
124 : : {
125 : 6 : return PROJECT_VERSION_MAJOR * 1000000 + PROJECT_VERSION_MINOR;
126 : : }
127 : :
128 : 5 : gulong gnc_prefs_register_cb (const char *group,
129 : : const gchar *pref_name,
130 : : gpointer func,
131 : : gpointer user_data)
132 : : {
133 : 5 : if (prefsbackend && prefsbackend->register_cb)
134 : 0 : return (prefsbackend->register_cb) (group, pref_name, func, user_data);
135 : : else
136 : : {
137 : 5 : g_warning ("no preferences backend loaded, or the backend doesn't define register_cb, returning 0");
138 : 5 : return 0;
139 : : }
140 : : }
141 : :
142 : :
143 : 0 : void gnc_prefs_remove_cb_by_func (const gchar *group,
144 : : const gchar *pref_name,
145 : : gpointer func,
146 : : gpointer user_data)
147 : : {
148 : 0 : if (prefsbackend && prefsbackend->remove_cb_by_func)
149 : 0 : (prefsbackend->remove_cb_by_func) (group, pref_name, func, user_data);
150 : 0 : }
151 : :
152 : :
153 : 0 : void gnc_prefs_remove_cb_by_id (const gchar *group,
154 : : guint id)
155 : : {
156 : 0 : if (prefsbackend && prefsbackend->remove_cb_by_id)
157 : 0 : (prefsbackend->remove_cb_by_id) (group, id);
158 : 0 : }
159 : :
160 : :
161 : 0 : guint gnc_prefs_register_group_cb (const gchar *group,
162 : : gpointer func,
163 : : gpointer user_data)
164 : : {
165 : 0 : if (prefsbackend && prefsbackend->register_group_cb)
166 : 0 : return (prefsbackend->register_group_cb) (group, func, user_data);
167 : : else
168 : 0 : return 0;
169 : : }
170 : :
171 : :
172 : 0 : void gnc_prefs_remove_group_cb_by_func (const gchar *group,
173 : : gpointer func,
174 : : gpointer user_data)
175 : : {
176 : 0 : if (prefsbackend && prefsbackend->remove_group_cb_by_func)
177 : 0 : (prefsbackend->remove_group_cb_by_func) (group, func, user_data);
178 : 0 : }
179 : :
180 : :
181 : 0 : void gnc_prefs_bind (const gchar *group,
182 : : /*@ null @*/ const gchar *pref_name,
183 : : /*@ null @*/ const gchar *pref_value,
184 : : gpointer object,
185 : : const gchar *property)
186 : : {
187 : 0 : if (prefsbackend && prefsbackend->bind)
188 : 0 : (prefsbackend->bind) (group, pref_name, pref_value, object, property);
189 : 0 : }
190 : :
191 : :
192 : 5103 : gboolean gnc_prefs_get_bool (const gchar *group,
193 : : /*@ null @*/ const gchar *pref_name)
194 : : {
195 : 5103 : if (prefsbackend && prefsbackend->get_bool)
196 : 48 : return (prefsbackend->get_bool) (group, pref_name);
197 : : else
198 : 5055 : return FALSE;
199 : : }
200 : :
201 : :
202 : 543 : gint gnc_prefs_get_int (const gchar *group,
203 : : const gchar *pref_name)
204 : : {
205 : 543 : if (prefsbackend && prefsbackend->get_int)
206 : 24 : return (prefsbackend->get_int) (group, pref_name);
207 : : else
208 : 519 : return 0;
209 : : }
210 : :
211 : :
212 : 24 : gint64 gnc_prefs_get_int64 (const gchar *group,
213 : : const gchar *pref_name)
214 : : {
215 : 24 : gint64 result = 0;
216 : 24 : GVariant *var = gnc_prefs_get_value(group, pref_name);
217 : 24 : result = g_variant_get_int64 (var);
218 : 24 : g_variant_unref (var);
219 : 24 : return result;
220 : : }
221 : :
222 : :
223 : 0 : gdouble gnc_prefs_get_float (const gchar *group,
224 : : const gchar *pref_name)
225 : : {
226 : 0 : if (prefsbackend && prefsbackend->get_float)
227 : 0 : return (prefsbackend->get_float) (group, pref_name);
228 : : else
229 : 0 : return 0.0;
230 : : }
231 : :
232 : :
233 : 0 : gchar *gnc_prefs_get_string (const gchar *group,
234 : : const gchar *pref_name)
235 : : {
236 : 0 : if (prefsbackend && prefsbackend->get_string)
237 : 0 : return (prefsbackend->get_string) (group, pref_name);
238 : : else
239 : 0 : return NULL;
240 : : }
241 : :
242 : :
243 : 0 : gint gnc_prefs_get_enum (const gchar *group,
244 : : const gchar *pref_name)
245 : : {
246 : 0 : if (prefsbackend && prefsbackend->get_enum)
247 : 0 : return (prefsbackend->get_enum) (group, pref_name);
248 : : else
249 : 0 : return 0;
250 : : }
251 : :
252 : : void
253 : 0 : gnc_prefs_get_coords (const gchar *group,
254 : : const gchar *pref_name,
255 : : gdouble *x, gdouble *y)
256 : : {
257 : 0 : GVariant *coords = gnc_prefs_get_value (group, pref_name);
258 : :
259 : 0 : *x = 0;
260 : 0 : *y = 0;
261 : :
262 : 0 : if (g_variant_is_of_type (coords, (const GVariantType *) "(dd)") )
263 : 0 : g_variant_get (coords, "(dd)", x, y);
264 : 0 : g_variant_unref (coords);
265 : 0 : }
266 : :
267 : :
268 : 24 : GVariant *gnc_prefs_get_value (const gchar *group,
269 : : const gchar *pref_name)
270 : : {
271 : 24 : if (prefsbackend && prefsbackend->get_value)
272 : 24 : return (prefsbackend->get_value) (group,pref_name);
273 : : else
274 : 0 : return NULL;
275 : : }
276 : :
277 : :
278 : 0 : gboolean gnc_prefs_set_bool (const gchar *group,
279 : : const gchar *pref_name,
280 : : gboolean value)
281 : : {
282 : 0 : if (prefsbackend && prefsbackend->set_bool)
283 : 0 : return (prefsbackend->set_bool) (group, pref_name, value);
284 : : else
285 : 0 : return FALSE;
286 : : }
287 : :
288 : :
289 : 0 : gboolean gnc_prefs_set_int (const gchar *group,
290 : : const gchar *pref_name,
291 : : gint value)
292 : : {
293 : 0 : if (prefsbackend && prefsbackend->set_int)
294 : 0 : return (prefsbackend->set_int) (group, pref_name, value);
295 : : else
296 : 0 : return FALSE;
297 : : }
298 : :
299 : :
300 : 0 : gboolean gnc_prefs_set_int64 (const gchar *group,
301 : : const gchar *pref_name,
302 : : gint64 value)
303 : : {
304 : 0 : GVariant *var = g_variant_new ("x",value);
305 : 0 : return gnc_prefs_set_value (group, pref_name, var);
306 : : }
307 : :
308 : :
309 : 0 : gboolean gnc_prefs_set_float (const gchar *group,
310 : : const gchar *pref_name,
311 : : gdouble value)
312 : : {
313 : 0 : if (prefsbackend && prefsbackend->set_float)
314 : 0 : return (prefsbackend->set_float) (group, pref_name, value);
315 : : else
316 : 0 : return FALSE;
317 : : }
318 : :
319 : :
320 : 0 : gboolean gnc_prefs_set_string (const gchar *group,
321 : : const gchar *pref_name,
322 : : const gchar *value)
323 : : {
324 : 0 : if (prefsbackend && prefsbackend->set_string)
325 : 0 : return (prefsbackend->set_string) (group, pref_name, value);
326 : : else
327 : 0 : return FALSE;
328 : : }
329 : :
330 : :
331 : 0 : gboolean gnc_prefs_set_enum (const gchar *group,
332 : : const gchar *pref_name,
333 : : gint value)
334 : : {
335 : 0 : if (prefsbackend && prefsbackend->set_enum)
336 : 0 : return (prefsbackend->set_enum) (group, pref_name, value);
337 : : else
338 : 0 : return FALSE;
339 : : }
340 : :
341 : :
342 : 0 : gboolean gnc_prefs_set_coords (const gchar *group,
343 : : const gchar *pref_name,
344 : : gdouble x, gdouble y)
345 : : {
346 : 0 : GVariant *var = g_variant_new ("(dd)",x, y);
347 : 0 : return gnc_prefs_set_value (group, pref_name, var);
348 : : }
349 : :
350 : :
351 : 0 : gboolean gnc_prefs_set_value (const gchar *group,
352 : : const gchar *pref_name,
353 : : GVariant *value)
354 : : {
355 : 0 : if (prefsbackend && prefsbackend->set_value)
356 : 0 : return (prefsbackend->set_value) (group, pref_name, value);
357 : : else
358 : 0 : return FALSE;
359 : : }
360 : :
361 : :
362 : 0 : void gnc_prefs_reset (const gchar *group,
363 : : const gchar *pref_name)
364 : : {
365 : 0 : if (prefsbackend && prefsbackend->reset)
366 : 0 : (prefsbackend->reset) (group, pref_name);
367 : 0 : }
368 : :
369 : 0 : void gnc_prefs_reset_group (const gchar *group)
370 : : {
371 : 0 : if (prefsbackend && prefsbackend->reset_group)
372 : 0 : (prefsbackend->reset_group) (group);
373 : 0 : }
374 : :
375 : 3 : gboolean gnc_prefs_is_set_up (void)
376 : : {
377 : 3 : return (prefsbackend !=NULL);
378 : : }
379 : :
380 : 0 : void gnc_prefs_block_all (void)
381 : : {
382 : 0 : if (prefsbackend && prefsbackend->block_all)
383 : 0 : (prefsbackend->block_all) ();
384 : 0 : }
385 : :
386 : 0 : void gnc_prefs_unblock_all (void)
387 : : {
388 : 0 : if (prefsbackend && prefsbackend->unblock_all)
389 : 0 : (prefsbackend->unblock_all) ();
390 : 0 : }
391 : :
392 : 0 : gulong gnc_prefs_get_reg_auto_raise_lists_id (void)
393 : : {
394 : 0 : return reg_auto_raise_lists_id;
395 : : }
396 : :
397 : 0 : void gnc_prefs_set_reg_auto_raise_lists_id (gulong id)
398 : : {
399 : 0 : reg_auto_raise_lists_id = id;
400 : 0 : }
401 : :
402 : 0 : gulong gnc_prefs_get_reg_negative_color_pref_id (void)
403 : : {
404 : 0 : return reg_negative_color_pref_id;
405 : : }
406 : :
407 : 0 : void gnc_prefs_set_reg_negative_color_pref_id (gulong id)
408 : : {
409 : 0 : reg_negative_color_pref_id = id;
410 : 0 : }
411 : :
|