GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
gnc-prefs.c
1 /*
2  * gnc-prefs.c:
3  *
4  * Copyright (C) 2006 Chris Shoemaker <[email protected]>
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 [email protected]
22  */
23 
24 #include <stdlib.h>
25 #include "config.h"
26 #include "gnc-prefs.h"
27 #include "gnc-prefs-p.h"
28 #include "gnc-version.h"
29 #include "libqof/qof/qof.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 PrefsBackend *prefsbackend = NULL;
39 
40 /* This static indicates the debugging module that this .o belongs to. */
41 static QofLogModule log_module = G_LOG_DOMAIN;
42 
43 const gchar *
44 gnc_prefs_get_namespace_regexp(void)
45 {
46  return namespace_regexp;
47 }
48 
49 void
50 gnc_prefs_set_namespace_regexp(const gchar *str)
51 {
52  if (namespace_regexp)
53  g_free(namespace_regexp);
54 
55  if (str)
56  namespace_regexp = g_strdup(str);
57 }
58 
59 gboolean
60 gnc_prefs_is_debugging_enabled(void)
61 {
62  return is_debugging;
63 }
64 
65 void
66 gnc_prefs_set_debugging(gboolean d)
67 {
68  is_debugging = d;
69 }
70 
71 gboolean
72 gnc_prefs_is_extra_enabled(void)
73 {
74  return extras_enabled;
75 }
76 
77 void
78 gnc_prefs_set_extra(gboolean enabled)
79 {
80  extras_enabled = enabled;
81 }
82 
83 gboolean
84 gnc_prefs_get_file_save_compressed(void)
85 {
86  return use_compression;
87 }
88 
89 void
90 gnc_prefs_set_file_save_compressed(gboolean compressed)
91 {
92  use_compression = compressed;
93 }
94 
95 gint
96 gnc_prefs_get_file_retention_policy(void)
97 {
98  return file_retention_policy;
99 }
100 
101 void
102 gnc_prefs_set_file_retention_policy(gint policy)
103 {
104  file_retention_policy = policy;
105 }
106 
107 gint
108 gnc_prefs_get_file_retention_days(void)
109 {
110  return file_retention_days;
111 }
112 
113 void
114 gnc_prefs_set_file_retention_days(gint days)
115 {
116  file_retention_days = days;
117 }
118 
119 guint
120 gnc_prefs_get_long_version()
121 {
122  return GNUCASH_MAJOR_VERSION * 1000000 +
123  GNUCASH_MINOR_VERSION * 10000 +
124  GNUCASH_MICRO_VERSION * 100 +
125  GNUCASH_NANO_VERSION;
126 }
127 
128 gulong gnc_prefs_register_cb (const char *group,
129  const gchar *pref_name,
130  gpointer func,
131  gpointer user_data)
132 {
133  ENTER("group %s; pref_name %s, prefsbackend->register_cb %p", group, pref_name,
134  prefsbackend ? prefsbackend->register_cb : NULL);
135  if (prefsbackend && prefsbackend->register_cb)
136  {
137  LEAVE("");
138  return (prefsbackend->register_cb) (group, pref_name, func, user_data);
139  }
140  else
141  {
142  LEAVE("no backend loaded, or the backend doesn't define register_cb, returning 0");
143  return 0;
144  }
145 }
146 
147 
148 void gnc_prefs_remove_cb_by_func (const gchar *group,
149  const gchar *pref_name,
150  gpointer func,
151  gpointer user_data)
152 {
153  if (prefsbackend && prefsbackend->remove_cb_by_func)
154  (prefsbackend->remove_cb_by_func) (group, pref_name, func, user_data);
155 }
156 
157 
158 void gnc_prefs_remove_cb_by_id (const gchar *group,
159  guint id)
160 {
161  if (prefsbackend && prefsbackend->remove_cb_by_id)
162  (prefsbackend->remove_cb_by_id) (group, id);
163 }
164 
165 
166 guint gnc_prefs_register_group_cb (const gchar *group,
167  gpointer func,
168  gpointer user_data)
169 {
170  if (prefsbackend && prefsbackend->register_group_cb)
171  return (prefsbackend->register_group_cb) (group, func, user_data);
172  else
173  return 0;
174 }
175 
176 
177 void gnc_prefs_remove_group_cb_by_func (const gchar *group,
178  gpointer func,
179  gpointer user_data)
180 {
181  if (prefsbackend && prefsbackend->remove_group_cb_by_func)
182  (prefsbackend->remove_group_cb_by_func) (group, func, user_data);
183 }
184 
185 
186 void gnc_prefs_bind (const gchar *group,
187  /*@ null @*/ const gchar *pref_name,
188  gpointer object,
189  const gchar *property)
190 {
191  if (prefsbackend && prefsbackend->bind)
192  (prefsbackend->bind) (group, pref_name, object, property);
193 }
194 
195 
196 gboolean gnc_prefs_get_bool (const gchar *group,
197  /*@ null @*/ const gchar *pref_name)
198 {
199  if (prefsbackend && prefsbackend->get_bool)
200  return (prefsbackend->get_bool) (group, pref_name);
201  else
202  return FALSE;
203 }
204 
205 
206 gint gnc_prefs_get_int (const gchar *group,
207  const gchar *pref_name)
208 {
209  if (prefsbackend && prefsbackend->get_int)
210  return (prefsbackend->get_int) (group, pref_name);
211  else
212  return 0;
213 }
214 
215 
216 gint64 gnc_prefs_get_int64 (const gchar *group,
217  const gchar *pref_name)
218 {
219  gint64 result = 0;
220  GVariant *var = gnc_prefs_get_value(group, pref_name);
221  result = g_variant_get_int64 (var);
222  g_variant_unref (var);
223  return result;
224 }
225 
226 
227 gdouble gnc_prefs_get_float (const gchar *group,
228  const gchar *pref_name)
229 {
230  if (prefsbackend && prefsbackend->get_float)
231  return (prefsbackend->get_float) (group, pref_name);
232  else
233  return 0.0;
234 }
235 
236 
237 gchar *gnc_prefs_get_string (const gchar *group,
238  const gchar *pref_name)
239 {
240  if (prefsbackend && prefsbackend->get_string)
241  return (prefsbackend->get_string) (group, pref_name);
242  else
243  return NULL;
244 }
245 
246 
247 gint gnc_prefs_get_enum (const gchar *group,
248  const gchar *pref_name)
249 {
250  if (prefsbackend && prefsbackend->get_enum)
251  return (prefsbackend->get_enum) (group, pref_name);
252  else
253  return 0;
254 }
255 
256 void
257 gnc_prefs_get_coords (const gchar *group,
258  const gchar *pref_name,
259  gdouble *x, gdouble *y)
260 {
261  GVariant *coords = gnc_prefs_get_value (group, pref_name);
262 
263  *x = 0;
264  *y = 0;
265 
266  if (g_variant_is_of_type (coords, (const GVariantType *) "(dd)") )
267  g_variant_get (coords, "(dd)", x, y);
268  g_variant_unref (coords);
269 }
270 
271 
272 GVariant *gnc_prefs_get_value (const gchar *group,
273  const gchar *pref_name)
274 {
275  if (prefsbackend && prefsbackend->get_value)
276  return (prefsbackend->get_value) (group,pref_name);
277  else
278  return NULL;
279 }
280 
281 
282 gboolean gnc_prefs_set_bool (const gchar *group,
283  const gchar *pref_name,
284  gboolean value)
285 {
286  if (prefsbackend && prefsbackend->set_bool)
287  return (prefsbackend->set_bool) (group, pref_name, value);
288  else
289  return FALSE;
290 }
291 
292 
293 gboolean gnc_prefs_set_int (const gchar *group,
294  const gchar *pref_name,
295  gint value)
296 {
297  if (prefsbackend && prefsbackend->set_int)
298  return (prefsbackend->set_int) (group, pref_name, value);
299  else
300  return FALSE;
301 }
302 
303 
304 gboolean gnc_prefs_set_int64 (const gchar *group,
305  const gchar *pref_name,
306  gint64 value)
307 {
308  GVariant *var = g_variant_new ("x",value);
309  return gnc_prefs_set_value (group, pref_name, var);
310 }
311 
312 
313 gboolean gnc_prefs_set_float (const gchar *group,
314  const gchar *pref_name,
315  gdouble value)
316 {
317  if (prefsbackend && prefsbackend->set_float)
318  return (prefsbackend->set_float) (group, pref_name, value);
319  else
320  return FALSE;
321 }
322 
323 
324 gboolean gnc_prefs_set_string (const gchar *group,
325  const gchar *pref_name,
326  const gchar *value)
327 {
328  if (prefsbackend && prefsbackend->set_string)
329  return (prefsbackend->set_string) (group, pref_name, value);
330  else
331  return FALSE;
332 }
333 
334 
335 gboolean gnc_prefs_set_enum (const gchar *group,
336  const gchar *pref_name,
337  gint value)
338 {
339  if (prefsbackend && prefsbackend->set_enum)
340  return (prefsbackend->set_enum) (group, pref_name, value);
341  else
342  return FALSE;
343 }
344 
345 
346 gboolean gnc_prefs_set_coords (const gchar *group,
347  const gchar *pref_name,
348  gdouble x, gdouble y)
349 {
350  GVariant *var = g_variant_new ("(dd)",x, y);
351  return gnc_prefs_set_value (group, pref_name, var);
352 }
353 
354 
355 gboolean gnc_prefs_set_value (const gchar *group,
356  const gchar *pref_name,
357  GVariant *value)
358 {
359  if (prefsbackend && prefsbackend->set_value)
360  return (prefsbackend->set_value) (group, pref_name, value);
361  else
362  return FALSE;
363 }
364 
365 
366 void gnc_prefs_reset (const gchar *group,
367  const gchar *pref_name)
368 {
369  if (prefsbackend && prefsbackend->reset)
370  (prefsbackend->reset) (group, pref_name);
371 }
372 
373 void gnc_prefs_reset_group (const gchar *group)
374 {
375  if (prefsbackend && prefsbackend->reset_group)
376  (prefsbackend->reset_group) (group);
377 }
378 
379 gboolean gnc_prefs_is_set_up (void)
380 {
381  return (prefsbackend !=NULL);
382 }
383 
void gnc_prefs_reset_group(const gchar *group)
Definition: gnc-prefs.c:373
gboolean gnc_prefs_set_value(const gchar *group, const gchar *pref_name, GVariant *value)
Definition: gnc-prefs.c:355
gchar * gnc_prefs_get_string(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:237
gulong gnc_prefs_register_cb(const char *group, const gchar *pref_name, gpointer func, gpointer user_data)
Definition: gnc-prefs.c:128
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
gboolean gnc_prefs_set_int(const gchar *group, const gchar *pref_name, gint value)
Definition: gnc-prefs.c:293
void gnc_prefs_reset(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:366
gboolean gnc_prefs_set_string(const gchar *group, const gchar *pref_name, const gchar *value)
Definition: gnc-prefs.c:324
#define ENTER(format, args...)
Definition: qoflog.h:261
gint64 gnc_prefs_get_int64(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:216
gint gnc_prefs_get_int(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:206
void gnc_prefs_remove_cb_by_id(const gchar *group, guint id)
Definition: gnc-prefs.c:158
void gnc_prefs_bind(const gchar *group, const gchar *pref_name, gpointer object, const gchar *property)
Definition: gnc-prefs.c:186
gboolean gnc_prefs_set_bool(const gchar *group, const gchar *pref_name, gboolean value)
Definition: gnc-prefs.c:282
gboolean gnc_prefs_set_enum(const gchar *group, const gchar *pref_name, gint value)
Definition: gnc-prefs.c:335
gint gnc_prefs_get_enum(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:247
gboolean gnc_prefs_set_float(const gchar *group, const gchar *pref_name, gdouble value)
Definition: gnc-prefs.c:313
gboolean gnc_prefs_set_coords(const gchar *group, const gchar *pref_name, gdouble x, gdouble y)
Definition: gnc-prefs.c:346
void gnc_prefs_get_coords(const gchar *group, const gchar *pref_name, gdouble *x, gdouble *y)
Definition: gnc-prefs.c:257
void gnc_prefs_remove_group_cb_by_func(const gchar *group, gpointer func, gpointer user_data)
Definition: gnc-prefs.c:177
GVariant * gnc_prefs_get_value(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:272
Generic api to store and retrieve preferences.
guint gnc_prefs_register_group_cb(const gchar *group, gpointer func, gpointer user_data)
Definition: gnc-prefs.c:166
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:196
#define LEAVE(format, args...)
Definition: qoflog.h:271
gboolean gnc_prefs_is_set_up(void)
Definition: gnc-prefs.c:379
const gchar * QofLogModule
Definition: qofid.h:89
void gnc_prefs_remove_cb_by_func(const gchar *group, const gchar *pref_name, gpointer func, gpointer user_data)
Definition: gnc-prefs.c:148
gdouble gnc_prefs_get_float(const gchar *group, const gchar *pref_name)
Definition: gnc-prefs.c:227
gboolean gnc_prefs_set_int64(const gchar *group, const gchar *pref_name, gint64 value)
Definition: gnc-prefs.c:304