2013-10-07 09:06:23 -05:00
|
|
|
/*
|
|
|
|
* gnc-prefs.c:
|
|
|
|
*
|
|
|
|
* Copyright (C) 2006 Chris Shoemaker <c.shoemaker@cox.net>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License as
|
|
|
|
* published by the Free Software Foundation; either version 2 of
|
|
|
|
* the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, contact:
|
|
|
|
*
|
|
|
|
* Free Software Foundation Voice: +1-617-542-5942
|
|
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
|
|
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "config.h"
|
|
|
|
#include "gnc-prefs.h"
|
|
|
|
#include "gnc-prefs-p.h"
|
|
|
|
#include "gnc-version.h"
|
|
|
|
#include "libqof/qof/qof.h"
|
|
|
|
|
|
|
|
static gchar *namespace_regexp = NULL;
|
|
|
|
static gboolean is_debugging = FALSE;
|
|
|
|
static gboolean extras_enabled = FALSE;
|
|
|
|
static gboolean use_compression = TRUE; // This is also the default in the prefs backend
|
|
|
|
static gint file_retention_policy = 1; // 1 = "days", the default in the prefs backend
|
|
|
|
static gint file_retention_days = 30; // This is also the default in the prefs backend
|
|
|
|
|
2013-10-07 09:29:30 -05:00
|
|
|
PrefsBackend prefsbackend;
|
|
|
|
|
2013-10-07 09:06:23 -05:00
|
|
|
/* This static indicates the debugging module that this .o belongs to. */
|
|
|
|
static QofLogModule log_module = G_LOG_DOMAIN;
|
|
|
|
|
|
|
|
const gchar *
|
|
|
|
gnc_prefs_get_namespace_regexp(void)
|
|
|
|
{
|
|
|
|
return namespace_regexp;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_namespace_regexp(const gchar *str)
|
|
|
|
{
|
|
|
|
if (namespace_regexp)
|
|
|
|
g_free(namespace_regexp);
|
|
|
|
|
|
|
|
if (str)
|
|
|
|
namespace_regexp = g_strdup(str);
|
|
|
|
}
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
gnc_prefs_is_debugging_enabled(void)
|
|
|
|
{
|
|
|
|
return is_debugging;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_debugging(gboolean d)
|
|
|
|
{
|
|
|
|
is_debugging = d;
|
|
|
|
}
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
gnc_prefs_is_extra_enabled(void)
|
|
|
|
{
|
|
|
|
return extras_enabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_extra(gboolean enabled)
|
|
|
|
{
|
|
|
|
extras_enabled = enabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
gnc_prefs_get_file_save_compressed(void)
|
|
|
|
{
|
|
|
|
return use_compression;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_file_save_compressed(gboolean compressed)
|
|
|
|
{
|
|
|
|
use_compression = compressed;
|
|
|
|
}
|
|
|
|
|
|
|
|
gint
|
|
|
|
gnc_prefs_get_file_retention_policy(void)
|
|
|
|
{
|
|
|
|
return file_retention_policy;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_file_retention_policy(gint policy)
|
|
|
|
{
|
|
|
|
file_retention_policy = policy;
|
|
|
|
}
|
|
|
|
|
|
|
|
gint
|
|
|
|
gnc_prefs_get_file_retention_days(void)
|
|
|
|
{
|
|
|
|
return file_retention_days;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gnc_prefs_set_file_retention_days(gint days)
|
|
|
|
{
|
|
|
|
file_retention_days = days;
|
|
|
|
}
|
|
|
|
|
|
|
|
guint
|
|
|
|
gnc_prefs_get_long_version()
|
|
|
|
{
|
|
|
|
return GNUCASH_MAJOR_VERSION * 1000000 +
|
|
|
|
GNUCASH_MINOR_VERSION * 10000 +
|
|
|
|
GNUCASH_MICRO_VERSION * 100 +
|
|
|
|
GNUCASH_NANO_VERSION;
|
|
|
|
}
|
|
|
|
|
|
|
|
gulong gnc_prefs_register_cb (const char *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gpointer func,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
2013-10-07 09:30:59 -05:00
|
|
|
ENTER("group %s; pref_name %s, prefsbackend.register_cb %p", group, pref_name, prefsbackend.register_cb);
|
2013-10-07 09:06:23 -05:00
|
|
|
if (prefsbackend.register_cb)
|
2013-10-07 09:30:59 -05:00
|
|
|
{
|
|
|
|
LEAVE("");
|
2013-10-07 09:06:23 -05:00
|
|
|
return (prefsbackend.register_cb) (group, pref_name, func, user_data);
|
2013-10-07 09:30:59 -05:00
|
|
|
}
|
2013-10-07 09:06:23 -05:00
|
|
|
else
|
2013-10-07 09:30:59 -05:00
|
|
|
{
|
|
|
|
LEAVE("");
|
2013-10-07 09:06:23 -05:00
|
|
|
return 0;
|
2013-10-07 09:30:59 -05:00
|
|
|
}
|
2013-10-07 09:06:23 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gnc_prefs_remove_cb_by_func (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gpointer func,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
if (prefsbackend.remove_cb_by_func)
|
|
|
|
(prefsbackend.remove_cb_by_func) (group, pref_name, func, user_data);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gnc_prefs_remove_cb_by_id (const gchar *group,
|
|
|
|
guint id)
|
|
|
|
{
|
|
|
|
if (prefsbackend.remove_cb_by_id)
|
|
|
|
(prefsbackend.remove_cb_by_id) (group, id);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
guint gnc_prefs_register_group_cb (const gchar *group,
|
|
|
|
gpointer func,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
if (prefsbackend.register_group_cb)
|
|
|
|
return (prefsbackend.register_group_cb) (group, func, user_data);
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gnc_prefs_remove_group_cb_by_func (const gchar *group,
|
|
|
|
gpointer func,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
if (prefsbackend.remove_group_cb_by_func)
|
|
|
|
(prefsbackend.remove_group_cb_by_func) (group, func, user_data);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gnc_prefs_bind (const gchar *group,
|
|
|
|
/*@ null @*/ const gchar *pref_name,
|
|
|
|
gpointer object,
|
|
|
|
const gchar *property)
|
|
|
|
{
|
|
|
|
if (prefsbackend.bind)
|
|
|
|
(prefsbackend.bind) (group, pref_name, object, property);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gboolean gnc_prefs_get_bool (const gchar *group,
|
|
|
|
/*@ null @*/ const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_bool)
|
|
|
|
return (prefsbackend.get_bool) (group, pref_name);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gint gnc_prefs_get_int (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_int)
|
|
|
|
return (prefsbackend.get_int) (group, pref_name);
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:31:37 -05:00
|
|
|
gint64 gnc_prefs_get_int64 (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
gint64 result = 0;
|
|
|
|
GVariant *var = gnc_prefs_get_value(group, pref_name);
|
|
|
|
result = g_variant_get_int64 (var);
|
|
|
|
g_variant_unref (var);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:06:23 -05:00
|
|
|
gdouble gnc_prefs_get_float (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_float)
|
|
|
|
return (prefsbackend.get_float) (group, pref_name);
|
|
|
|
else
|
|
|
|
return 0.0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gchar *gnc_prefs_get_string (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_string)
|
|
|
|
return (prefsbackend.get_string) (group, pref_name);
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gint gnc_prefs_get_enum (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_enum)
|
|
|
|
return (prefsbackend.get_enum) (group, pref_name);
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-10-07 09:31:37 -05:00
|
|
|
void
|
|
|
|
gnc_prefs_get_coords (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gdouble *x, gdouble *y)
|
|
|
|
{
|
|
|
|
GVariant *coords = gnc_prefs_get_value (group, pref_name);
|
|
|
|
|
|
|
|
*x = 0;
|
|
|
|
*y = 0;
|
|
|
|
|
|
|
|
if (g_variant_is_of_type (coords, (const GVariantType *) "(dd)") )
|
|
|
|
g_variant_get (coords, "(dd)", x, y);
|
|
|
|
g_variant_unref (coords);
|
|
|
|
}
|
|
|
|
|
2013-10-07 09:06:23 -05:00
|
|
|
|
|
|
|
GVariant *gnc_prefs_get_value (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.get_value)
|
|
|
|
return (prefsbackend.get_value) (group,pref_name);
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gboolean gnc_prefs_set_bool (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gboolean value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_bool)
|
|
|
|
return (prefsbackend.set_bool) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gboolean gnc_prefs_set_int (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gint value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_int)
|
|
|
|
return (prefsbackend.set_int) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:31:37 -05:00
|
|
|
gboolean gnc_prefs_set_int64 (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gint64 value)
|
|
|
|
{
|
|
|
|
GVariant *var = g_variant_new ("x",value);
|
|
|
|
return gnc_prefs_set_value (group, pref_name, var);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:06:23 -05:00
|
|
|
gboolean gnc_prefs_set_float (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gdouble value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_float)
|
|
|
|
return (prefsbackend.set_float) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gboolean gnc_prefs_set_string (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
const gchar *value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_string)
|
|
|
|
return (prefsbackend.set_string) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gboolean gnc_prefs_set_enum (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gint value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_enum)
|
|
|
|
return (prefsbackend.set_enum) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:31:37 -05:00
|
|
|
gboolean gnc_prefs_set_coords (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
gdouble x, gdouble y)
|
|
|
|
{
|
|
|
|
GVariant *var = g_variant_new ("(dd)",x, y);
|
|
|
|
return gnc_prefs_set_value (group, pref_name, var);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-07 09:06:23 -05:00
|
|
|
gboolean gnc_prefs_set_value (const gchar *group,
|
|
|
|
const gchar *pref_name,
|
|
|
|
GVariant *value)
|
|
|
|
{
|
|
|
|
if (prefsbackend.set_value)
|
|
|
|
return (prefsbackend.set_value) (group, pref_name, value);
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gnc_prefs_reset (const gchar *group,
|
|
|
|
const gchar *pref_name)
|
|
|
|
{
|
|
|
|
if (prefsbackend.reset)
|
|
|
|
(prefsbackend.reset) (group, pref_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
void gnc_prefs_reset_group (const gchar *group)
|
|
|
|
{
|
|
|
|
if (prefsbackend.reset_group)
|
|
|
|
(prefsbackend.reset_group) (group);
|
|
|
|
}
|
|
|
|
|