gnucash/libgnucash/core-utils/gnc-prefs.c
Bill Nottingham 06110e2abd Fix warning about misleading indentation from recent gcc.
Patch by <law@redhat.com>
2020-10-15 08:38:00 +08:00

411 lines
10 KiB
C

/*
* 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 <glib.h>
#include <config.h>
#include "gnc-prefs.h"
#include "gnc-prefs-p.h"
#include "gnc-version.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
/* Global variables used to remove the preference registered callbacks
* that were setup via a g_once. */
static gulong reg_auto_raise_lists_id;
static gulong reg_negative_color_pref_id;
PrefsBackend *prefsbackend = NULL;
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 PROJECT_VERSION_MAJOR * 1000000 + PROJECT_VERSION_MINOR;
}
gulong gnc_prefs_register_cb (const char *group,
const gchar *pref_name,
gpointer func,
gpointer user_data)
{
if (prefsbackend && prefsbackend->register_cb)
return (prefsbackend->register_cb) (group, pref_name, func, user_data);
else
{
g_warning ("no preferences backend loaded, or the backend doesn't define register_cb, returning 0");
return 0;
}
}
void gnc_prefs_remove_cb_by_func (const gchar *group,
const gchar *pref_name,
gpointer func,
gpointer user_data)
{
if (prefsbackend && 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 && 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 && 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 && 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 && prefsbackend->bind)
(prefsbackend->bind) (group, pref_name, object, property);
}
gboolean gnc_prefs_get_bool (const gchar *group,
/*@ null @*/ const gchar *pref_name)
{
if (prefsbackend && 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 && prefsbackend->get_int)
return (prefsbackend->get_int) (group, pref_name);
else
return 0;
}
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;
}
gdouble gnc_prefs_get_float (const gchar *group,
const gchar *pref_name)
{
if (prefsbackend && 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 && 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 && prefsbackend->get_enum)
return (prefsbackend->get_enum) (group, pref_name);
else
return 0;
}
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);
}
GVariant *gnc_prefs_get_value (const gchar *group,
const gchar *pref_name)
{
if (prefsbackend && 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 && 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 && prefsbackend->set_int)
return (prefsbackend->set_int) (group, pref_name, value);
else
return FALSE;
}
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);
}
gboolean gnc_prefs_set_float (const gchar *group,
const gchar *pref_name,
gdouble value)
{
if (prefsbackend && 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 && 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 && prefsbackend->set_enum)
return (prefsbackend->set_enum) (group, pref_name, value);
else
return FALSE;
}
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);
}
gboolean gnc_prefs_set_value (const gchar *group,
const gchar *pref_name,
GVariant *value)
{
if (prefsbackend && 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 && prefsbackend->reset)
(prefsbackend->reset) (group, pref_name);
}
void gnc_prefs_reset_group (const gchar *group)
{
if (prefsbackend && prefsbackend->reset_group)
(prefsbackend->reset_group) (group);
}
gboolean gnc_prefs_is_set_up (void)
{
return (prefsbackend !=NULL);
}
void gnc_prefs_block_all (void)
{
if (prefsbackend && prefsbackend->block_all)
(prefsbackend->block_all) ();
}
void gnc_prefs_unblock_all (void)
{
if (prefsbackend && prefsbackend->unblock_all)
(prefsbackend->unblock_all) ();
}
gulong gnc_prefs_get_reg_auto_raise_lists_id (void)
{
return reg_auto_raise_lists_id;
}
void gnc_prefs_set_reg_auto_raise_lists_id (gulong id)
{
reg_auto_raise_lists_id = id;
}
gulong gnc_prefs_get_reg_negative_color_pref_id (void)
{
return reg_negative_color_pref_id;
}
void gnc_prefs_set_reg_negative_color_pref_id (gulong id)
{
reg_negative_color_pref_id = id;
}