From 4761aa414cef3168d968f26c38cbaf55aefab242 Mon Sep 17 00:00:00 2001 From: Geert Janssens Date: Fri, 17 Feb 2023 11:10:22 +0100 Subject: [PATCH] GncGSettings - reduce code duplication Most getters and setters are identical with the exception of the actual function to call into GSettings. Extract boilerplate in two template functions and make all getters/setters wrappers of these two functions. --- libgnucash/app-utils/gnc-gsettings.cpp | 234 ++++++------------------- 1 file changed, 58 insertions(+), 176 deletions(-) diff --git a/libgnucash/app-utils/gnc-gsettings.cpp b/libgnucash/app-utils/gnc-gsettings.cpp index 237fcb8c04..500e86e0bd 100644 --- a/libgnucash/app-utils/gnc-gsettings.cpp +++ b/libgnucash/app-utils/gnc-gsettings.cpp @@ -328,19 +328,18 @@ void gnc_gsettings_bind (const gchar *schema, } /************************************************************/ -/* Getters/Setters */ +/* Getters */ /************************************************************/ - -gboolean -gnc_gsettings_get_bool (const gchar *schema, - const gchar *key) +template +T gnc_gsettings_get(const char *schema, const char *key, + auto getter(GSettings*, const char *)->T, T default_val) { auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); + g_return_val_if_fail (G_IS_SETTINGS (gs_obj), default_val); - auto val = false; + T val = default_val; if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_boolean (gs_obj, key); + val = getter (gs_obj, key); else PERR ("Invalid key %s for schema %s", key, schema); @@ -349,137 +348,62 @@ gnc_gsettings_get_bool (const gchar *schema, } gboolean -gnc_gsettings_set_bool (const gchar *schema, - const gchar *key, - gboolean value) +gnc_gsettings_get_bool (const gchar *schema, const gchar *key) { - gboolean result = false; - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); - - ENTER("schema: %s, key: %s", schema, key); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - { - result = g_settings_set_boolean (gs_obj, key, value); - if (!result) - PERR ("Unable to set value for key %s in schema %s", key, schema); - } - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - LEAVE("result %i", result); - return result; + return gnc_gsettings_get (schema, key, g_settings_get_boolean, + static_cast(false)); } gint -gnc_gsettings_get_int (const gchar *schema, - const gchar *key) +gnc_gsettings_get_int (const gchar *schema, const gchar *key) { - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), 0); - - auto val = static_cast (0); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_int (gs_obj, key); - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return val; + return gnc_gsettings_get (schema, key, g_settings_get_int, 0); } -gboolean -gnc_gsettings_set_int (const gchar *schema, - const gchar *key, - gint value) +gdouble +gnc_gsettings_get_float (const gchar *schema, const gchar *key) { - gboolean result = false; - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); - - if (gnc_gsettings_is_valid_key (gs_obj, key)) - { - result = g_settings_set_int (gs_obj, key, value); - if (!result) - PERR ("Unable to set value for key %s in schema %s", key, schema); - } - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return result; + return gnc_gsettings_get (schema, key, g_settings_get_double, 0.0); } -gdouble -gnc_gsettings_get_float (const gchar *schema, - const gchar *key) +gchar * +gnc_gsettings_get_string (const gchar *schema, const gchar *key) { - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), 0); - - auto val = static_cast (0); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_double (gs_obj, key); - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return val; + return gnc_gsettings_get (schema, key, g_settings_get_string, + static_cast (nullptr)); } -gboolean -gnc_gsettings_set_float (const gchar *schema, - const gchar *key, - gdouble value) +gint +gnc_gsettings_get_enum (const gchar *schema, const gchar *key) { - gboolean result = false; - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); - - if (gnc_gsettings_is_valid_key (gs_obj, key)) - { - result = g_settings_set_double (gs_obj, key, value); - if (!result) - PERR ("Unable to set value for key %s in schema %s", key, schema); - } - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return result; + return gnc_gsettings_get (schema, key, g_settings_get_enum, 0); } -gchar * -gnc_gsettings_get_string (const gchar *schema, - const gchar *key) +GVariant * +gnc_gsettings_get_value (const gchar *schema, const gchar *key) { - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), nullptr); - - auto val = static_cast (nullptr); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_string (gs_obj, key); - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return val; + return gnc_gsettings_get (schema, key, g_settings_get_value, + static_cast (nullptr)); } -gboolean -gnc_gsettings_set_string (const gchar *schema, - const gchar *key, - const gchar *value) +/************************************************************/ +/* Setters */ +/************************************************************/ +template gboolean +gnc_gsettings_set (const gchar *schema, + const gchar *key, + T value, + gboolean setter(GSettings*, const char *, T)) { - gboolean result = false; + ENTER("schema: %s, key: %s", schema, key); + auto gs_obj = gnc_gsettings_get_settings_obj (schema); g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); - ENTER("schema: %s, key: %s", schema, key); + auto result = false; if (gnc_gsettings_is_valid_key (gs_obj, key)) { - result = g_settings_set_string (gs_obj, key, value); + result = setter (gs_obj, key, value); if (!result) PERR ("Unable to set value for key %s in schema %s", key, schema); } @@ -491,82 +415,40 @@ gnc_gsettings_set_string (const gchar *schema, return result; } -gint -gnc_gsettings_get_enum (const gchar *schema, - const gchar *key) +gboolean +gnc_gsettings_set_bool (const gchar *schema, const gchar *key, gboolean value) { - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), 0); - - auto val = static_cast (0); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_enum (gs_obj, key); - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return val; + return gnc_gsettings_set (schema, key, value, g_settings_set_boolean); } gboolean -gnc_gsettings_set_enum (const gchar *schema, - const gchar *key, - gint value) +gnc_gsettings_set_int (const gchar *schema, const gchar *key, gint value) { - gboolean result = false; - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); - - if (gnc_gsettings_is_valid_key (gs_obj, key)) - { - result = g_settings_set_enum (gs_obj, key, value); - if (!result) - PERR ("Unable to set value for key %s in schema %s", key, schema); - } - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return result; + return gnc_gsettings_set (schema, key, value, g_settings_set_int); } -GVariant * -gnc_gsettings_get_value (const gchar *schema, - const gchar *key) +gboolean +gnc_gsettings_set_float (const gchar *schema, const gchar *key, gdouble value) { - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), nullptr); - - auto val = static_cast (nullptr); - if (gnc_gsettings_is_valid_key (gs_obj, key)) - val = g_settings_get_value (gs_obj, key); - else - PERR ("Invalid key %s for schema %s", key, schema); - - g_object_unref (gs_obj); - return val; + return gnc_gsettings_set (schema, key, value, g_settings_set_double); } gboolean -gnc_gsettings_set_value (const gchar *schema, - const gchar *key, - GVariant *value) +gnc_gsettings_set_string (const gchar *schema, const gchar *key, const gchar *value) { - gboolean result = false; - auto gs_obj = gnc_gsettings_get_settings_obj (schema); - g_return_val_if_fail (G_IS_SETTINGS (gs_obj), false); + return gnc_gsettings_set (schema, key, value, g_settings_set_string); +} - if (gnc_gsettings_is_valid_key (gs_obj, key)) - { - result = g_settings_set_value (gs_obj, key, value); - if (!result) - PERR ("Unable to set value for key %s in schema %s", key, schema); - } - else - PERR ("Invalid key %s for schema %s", key, schema); +gboolean +gnc_gsettings_set_enum (const gchar *schema, const gchar *key, gint value) +{ + return gnc_gsettings_set (schema, key, value, g_settings_set_enum); +} - g_object_unref (gs_obj); - return result; +gboolean +gnc_gsettings_set_value (const gchar *schema, const gchar *key, GVariant *value) +{ + return gnc_gsettings_set (schema, key, value, g_settings_set_value); } void