From 4a3c6f8f8594e1ec12208dfbb6b26d0f415c0a45 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Fri, 17 Aug 2018 11:11:38 +0100 Subject: [PATCH] Change saving to .gcm and Kvp for GNC_FEATURE_REG_SORT_FILTER For the LD_GL save the filter and sort settings to the .gcm always. For the rest, keep saving the filter and sort settings to kvp only when the GNC_FEATURE_REG_SORT_FILTER is not set, if set then save only to the .gcm file. This will be set on first use in version 4.0 where a conversion will be run to only use the .gcm meta file. --- gnucash/gnome/gnc-plugin-page-register.c | 246 +++++++++++++++-------- 1 file changed, 164 insertions(+), 82 deletions(-) diff --git a/gnucash/gnome/gnc-plugin-page-register.c b/gnucash/gnome/gnc-plugin-page-register.c index 24a3953eed1..bc7cda66b2b 100644 --- a/gnucash/gnome/gnc-plugin-page-register.c +++ b/gnucash/gnome/gnc-plugin-page-register.c @@ -62,6 +62,7 @@ #include "gnc-date-edit.h" #include "gnc-engine.h" #include "gnc-event.h" +#include "gnc-features.h" #include "gnc-gnome-utils.h" #include "gnc-gobject-utils.h" #include "gnc-gui-query.h" @@ -1771,27 +1772,15 @@ gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page) return g_strdup(color ? color : "Not Set"); } -static gchar * -gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) +static const gchar * +gnc_plugin_page_register_get_filter_gcm (Account *leader) { - GncPluginPageRegisterPrivate *priv; - GNCLedgerDisplayType ledger_type; - GNCLedgerDisplay *ld; - Account *leader; - const char* filter = NULL; - GKeyFile *state_file = gnc_state_get_current(); gchar *state_section; gchar *filter_text; gchar acct_guid[GUID_ENCODING_LENGTH + 1]; GError *error = NULL; - - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); - - priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); - ld = priv->ledger; - ledger_type = gnc_ledger_display_type (ld); - leader = gnc_ledger_display_leader (ld); + const char* filter = NULL; // get the filter from the .gcm file guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); @@ -1799,44 +1788,52 @@ gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) filter_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_FILTER, &error); if (error) - { - if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) - filter = xaccAccountGetFilter (leader); g_clear_error (&error); - } else { filter_text = g_strdelimit (filter_text, ";", ','); filter = g_strdup (filter_text); g_free (filter_text); } - return filter ? g_strdup(filter) : g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); + g_free (state_section); + return filter; } -void -gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter ) +static gchar * +gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) { GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; GNCLedgerDisplay *ld; Account *leader; - gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); + const char* filter = NULL; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar *filter_text; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - if (leader != NULL) + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + filter = gnc_plugin_page_register_get_filter_gcm (leader); + else // load from kvp { - if (!filter || (g_strcmp0 (filter, default_filter) == 0)) - xaccAccountSetFilter (leader, NULL); - else - xaccAccountSetFilter (leader, filter); + if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) + filter = xaccAccountGetFilter (leader); } + return filter ? g_strdup(filter) : g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); +} + +static void +gnc_plugin_page_register_set_filter_gcm (Account *leader, const gchar *filter, gchar *default_filter) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar *filter_text; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; // save the filter to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); @@ -1853,31 +1850,50 @@ gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *fi g_key_file_set_string (state_file, state_section, KEY_PAGE_FILTER, filter_text); g_free (filter_text); } - g_free (default_filter); - return; + g_free (state_section); } -static gchar * -gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) +void +gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter ) { GncPluginPageRegisterPrivate *priv; GNCLedgerDisplayType ledger_type; GNCLedgerDisplay *ld; Account *leader; - const char* sort_order = NULL; + gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); + + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); + ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); + leader = gnc_ledger_display_leader (ld); + + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_filter_gcm (leader, filter, default_filter); + else // save to kvp + { + if (leader != NULL) + { + if (!filter || (g_strcmp0 (filter, default_filter) == 0)) + xaccAccountSetFilter (leader, NULL); + else + xaccAccountSetFilter (leader, filter); + } + } + g_free (default_filter); + return; +} +static const gchar * +gnc_plugin_page_register_get_sort_order_gcm (Account *leader) +{ GKeyFile *state_file = gnc_state_get_current(); gchar *state_section; gchar *sort_text; gchar acct_guid[GUID_ENCODING_LENGTH + 1]; GError *error = NULL; - - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); - - priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); - ld = priv->ledger; - ledger_type = gnc_ledger_display_type (ld); - leader = gnc_ledger_display_leader (ld); + const char* sort_order = NULL; // get the sort_order from the .gcm file guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); @@ -1885,41 +1901,50 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT, &error); if (error) - { - if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) - sort_order = xaccAccountGetSortOrder (leader); g_clear_error (&error); - } else { sort_order = g_strdup (sort_text); g_free (sort_text); } - return g_strdup(sort_order ? sort_order : DEFAULT_SORT_ORDER); + g_free (state_section); + return sort_order; } -void -gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order ) +static gchar * +gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) { GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; GNCLedgerDisplay *ld; Account *leader; + const char* sort_order = NULL; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - if (leader != NULL) + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + sort_order = gnc_plugin_page_register_get_sort_order_gcm (leader); + else // load from kvp { - if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0)) - xaccAccountSetSortOrder (leader, NULL); - else - xaccAccountSetSortOrder (leader, sort_order); + if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) + sort_order = xaccAccountGetSortOrder (leader); } + return g_strdup(sort_order ? sort_order : DEFAULT_SORT_ORDER); +} + +static void +gnc_plugin_page_register_set_sort_order_gcm (Account *leader, const gchar *sort_order ) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; // save sort_order to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); @@ -1932,61 +1957,93 @@ gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar else g_key_file_set_string (state_file, state_section, KEY_PAGE_SORT, sort_order); - return; + g_free (state_section); } - -static gboolean -gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page) +void +gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order ) { GncPluginPageRegisterPrivate *priv; GNCLedgerDisplayType ledger_type; GNCLedgerDisplay *ld; Account *leader; - gboolean sort_reversed = FALSE; - - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - GError *error = NULL; - - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), FALSE); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); ld = priv->ledger; ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_sort_order_gcm (leader, sort_order); + else // save to kvp + { + if (leader != NULL) + { + if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0)) + xaccAccountSetSortOrder (leader, NULL); + else + xaccAccountSetSortOrder (leader, sort_order); + } + } + return; +} + +static gboolean +gnc_plugin_page_register_get_sort_reversed_gcm (Account *leader) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + GError *error = NULL; + gboolean sort_reversed = FALSE; + // get the sort_reversed from the .gcm file guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); sort_reversed = g_key_file_get_boolean (state_file, state_section, KEY_PAGE_SORT_REV, &error); if (error) - { - if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) - sort_reversed = xaccAccountGetSortReversed (leader); g_clear_error (&error); - } + + g_free (state_section); return sort_reversed; } -void -gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order) +static gboolean +gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page) { GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; GNCLedgerDisplay *ld; Account *leader; + gboolean sort_reversed = FALSE; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), FALSE); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - if (leader != NULL) - xaccAccountSetSortReversed (leader, reverse_order); + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + sort_reversed = gnc_plugin_page_register_get_sort_reversed_gcm (leader); + else // load from kvp + { + if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) + sort_reversed = xaccAccountGetSortReversed (leader); + } + return sort_reversed; +} + +static void +gnc_plugin_page_register_set_sort_reversed_gcm (Account *leader, gboolean reverse_order) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; // save reverse_order to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); @@ -1999,6 +2056,31 @@ gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean else g_key_file_set_boolean (state_file, state_section, KEY_PAGE_SORT_REV, reverse_order); + g_free (state_section); +} + +void +gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order) +{ + GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; + GNCLedgerDisplay *ld; + Account *leader; + + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); + ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); + leader = gnc_ledger_display_leader (ld); + + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_sort_reversed_gcm (leader, reverse_order); + else // save to kvp + { + if (leader != NULL) + xaccAccountSetSortReversed (leader, reverse_order); + } return; }