mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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.
This commit is contained in:
parent
6ba47846c0
commit
4a3c6f8f85
@ -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,6 +1772,33 @@ gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page)
|
||||
return g_strdup(color ? color : "Not Set");
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
gnc_plugin_page_register_get_filter_gcm (Account *leader)
|
||||
{
|
||||
GKeyFile *state_file = gnc_state_get_current();
|
||||
gchar *state_section;
|
||||
gchar *filter_text;
|
||||
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
|
||||
GError *error = NULL;
|
||||
const char* filter = NULL;
|
||||
|
||||
// get the filter from the .gcm file
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
filter_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_FILTER, &error);
|
||||
|
||||
if (error)
|
||||
g_clear_error (&error);
|
||||
else
|
||||
{
|
||||
filter_text = g_strdelimit (filter_text, ";", ',');
|
||||
filter = g_strdup (filter_text);
|
||||
g_free (filter_text);
|
||||
}
|
||||
g_free (state_section);
|
||||
return filter;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page)
|
||||
{
|
||||
@ -1780,12 +1808,6 @@ gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page)
|
||||
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);
|
||||
@ -1793,51 +1815,26 @@ gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page)
|
||||
ledger_type = gnc_ledger_display_type (ld);
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
// get the filter from the .gcm file
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
filter_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_FILTER, &error);
|
||||
|
||||
if (error)
|
||||
// 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 ((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");
|
||||
}
|
||||
|
||||
void
|
||||
gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter )
|
||||
static void
|
||||
gnc_plugin_page_register_set_filter_gcm (Account *leader, const gchar *filter, gchar *default_filter)
|
||||
{
|
||||
GncPluginPageRegisterPrivate *priv;
|
||||
GNCLedgerDisplay *ld;
|
||||
Account *leader;
|
||||
gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0");
|
||||
|
||||
GKeyFile *state_file = gnc_state_get_current();
|
||||
gchar *state_section;
|
||||
gchar *filter_text;
|
||||
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
|
||||
ld = priv->ledger;
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
if (leader != NULL)
|
||||
{
|
||||
if (!filter || (g_strcmp0 (filter, default_filter) == 0))
|
||||
xaccAccountSetFilter (leader, NULL);
|
||||
else
|
||||
xaccAccountSetFilter (leader, filter);
|
||||
}
|
||||
|
||||
// save the filter to the .gcm file also
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
@ -1853,10 +1850,67 @@ 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 (state_section);
|
||||
}
|
||||
|
||||
void
|
||||
gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter )
|
||||
{
|
||||
GncPluginPageRegisterPrivate *priv;
|
||||
GNCLedgerDisplayType ledger_type;
|
||||
GNCLedgerDisplay *ld;
|
||||
Account *leader;
|
||||
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;
|
||||
const char* sort_order = NULL;
|
||||
|
||||
// get the sort_order from the .gcm file
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT, &error);
|
||||
|
||||
if (error)
|
||||
g_clear_error (&error);
|
||||
else
|
||||
{
|
||||
sort_order = g_strdup (sort_text);
|
||||
g_free (sort_text);
|
||||
}
|
||||
g_free (state_section);
|
||||
return sort_order;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
|
||||
{
|
||||
@ -1866,12 +1920,6 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
|
||||
Account *leader;
|
||||
const char* sort_order = NULL;
|
||||
|
||||
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);
|
||||
@ -1879,48 +1927,25 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
|
||||
ledger_type = gnc_ledger_display_type (ld);
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
// get the sort_order from the .gcm file
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT, &error);
|
||||
|
||||
if (error)
|
||||
// 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 ((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);
|
||||
}
|
||||
|
||||
void
|
||||
gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order )
|
||||
static void
|
||||
gnc_plugin_page_register_set_sort_order_gcm (Account *leader, const gchar *sort_order )
|
||||
{
|
||||
GncPluginPageRegisterPrivate *priv;
|
||||
GNCLedgerDisplay *ld;
|
||||
Account *leader;
|
||||
|
||||
GKeyFile *state_file = gnc_state_get_current();
|
||||
gchar *state_section;
|
||||
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
|
||||
ld = priv->ledger;
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
if (leader != NULL)
|
||||
{
|
||||
if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0))
|
||||
xaccAccountSetSortOrder (leader, NULL);
|
||||
else
|
||||
xaccAccountSetSortOrder (leader, sort_order);
|
||||
}
|
||||
|
||||
// save sort_order to the .gcm file also
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
@ -1932,9 +1957,59 @@ 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);
|
||||
|
||||
g_free (state_section);
|
||||
}
|
||||
void
|
||||
gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_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_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)
|
||||
g_clear_error (&error);
|
||||
|
||||
g_free (state_section);
|
||||
return sort_reversed;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page)
|
||||
{
|
||||
@ -1944,11 +2019,6 @@ gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page)
|
||||
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);
|
||||
@ -1956,38 +2026,25 @@ gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page)
|
||||
ledger_type = gnc_ledger_display_type (ld);
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
// 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)
|
||||
// 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);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
return sort_reversed;
|
||||
}
|
||||
|
||||
void
|
||||
gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order)
|
||||
static void
|
||||
gnc_plugin_page_register_set_sort_reversed_gcm (Account *leader, gboolean reverse_order)
|
||||
{
|
||||
GncPluginPageRegisterPrivate *priv;
|
||||
GNCLedgerDisplay *ld;
|
||||
Account *leader;
|
||||
|
||||
GKeyFile *state_file = gnc_state_get_current();
|
||||
gchar *state_section;
|
||||
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
|
||||
ld = priv->ledger;
|
||||
leader = gnc_ledger_display_leader (ld);
|
||||
|
||||
if (leader != NULL)
|
||||
xaccAccountSetSortReversed (leader, reverse_order);
|
||||
|
||||
// save reverse_order to the .gcm file also
|
||||
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
|
||||
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user