mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Complete the move of saving register filter/sort to .gcm
This commit changes the saving of register filter and sort information from KVP entries to using the .gcm file. On register load these settings are transferred to the .gcm file and the KVP entries removed. A feature flag is also set when the first register is loaded by this version.
This commit is contained in:
parent
bf9c44416e
commit
6fb50d227a
@ -730,6 +730,10 @@ gnc_plugin_page_register_new_common (GNCLedgerDisplay* ledger)
|
||||
gchar* label_color;
|
||||
QofQuery* q;
|
||||
|
||||
// added for version 4.0 onwards
|
||||
if (!gnc_features_check_used (gnc_get_current_book(), GNC_FEATURE_REG_SORT_FILTER))
|
||||
gnc_features_set_used (gnc_get_current_book(), GNC_FEATURE_REG_SORT_FILTER);
|
||||
|
||||
/* Is there an existing page? */
|
||||
gsr = gnc_ledger_display_get_user_data (ledger);
|
||||
if (gsr)
|
||||
@ -1656,10 +1660,6 @@ static const gchar* style_names[] =
|
||||
#define KEY_REGISTER_STYLE "RegisterStyle"
|
||||
#define KEY_DOUBLE_LINE "DoubleLineMode"
|
||||
|
||||
#define KEY_PAGE_SORT "register_order"
|
||||
#define KEY_PAGE_SORT_REV "register_reversed"
|
||||
#define KEY_PAGE_FILTER "register_filter"
|
||||
|
||||
#define LABEL_ACCOUNT "Account"
|
||||
#define LABEL_SUBACCOUNT "SubAccount"
|
||||
#define LABEL_GL "GL"
|
||||
@ -2061,6 +2061,18 @@ gnc_plugin_page_register_get_tab_color (GncPluginPage* plugin_page)
|
||||
return g_strdup (color ? color : "Not Set");
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_plugin_page_register_check_for_empty_group (GKeyFile *state_file, const gchar *state_section)
|
||||
{
|
||||
gsize num_keys;
|
||||
gchar **keys = g_key_file_get_keys (state_file, state_section, &num_keys, NULL);
|
||||
|
||||
if (num_keys == 0)
|
||||
gnc_state_drop_sections_for (state_section);
|
||||
|
||||
g_strfreev (keys);
|
||||
}
|
||||
|
||||
static const gchar*
|
||||
gnc_plugin_page_register_get_filter_gcm (Account* leader)
|
||||
{
|
||||
@ -2094,7 +2106,6 @@ gnc_plugin_page_register_get_filter (GncPluginPage* plugin_page)
|
||||
{
|
||||
GncPluginPageRegisterPrivate* priv;
|
||||
GNCLedgerDisplayType ledger_type;
|
||||
GNCLedgerDisplay* ld;
|
||||
Account* leader;
|
||||
const char* filter = NULL;
|
||||
|
||||
@ -2102,19 +2113,12 @@ gnc_plugin_page_register_get_filter (GncPluginPage* 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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
ledger_type = gnc_ledger_display_type (priv->ledger);
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
// load from gcm file
|
||||
filter = gnc_plugin_page_register_get_filter_gcm (leader);
|
||||
|
||||
return filter ? g_strdup (filter) : g_strdup_printf ("%s,%s,%s,%s",
|
||||
DEFAULT_FILTER,
|
||||
@ -2137,6 +2141,8 @@ gnc_plugin_page_register_set_filter_gcm (Account* leader, const gchar* filter,
|
||||
{
|
||||
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_FILTER, NULL))
|
||||
g_key_file_remove_key (state_file, state_section, KEY_PAGE_FILTER, NULL);
|
||||
|
||||
gnc_plugin_page_register_check_for_empty_group (state_file, state_section);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2156,32 +2162,20 @@ gnc_plugin_page_register_set_filter (GncPluginPage* plugin_page,
|
||||
{
|
||||
GncPluginPageRegisterPrivate* priv;
|
||||
GNCLedgerDisplayType ledger_type;
|
||||
GNCLedgerDisplay* ld;
|
||||
Account* leader;
|
||||
gchar* default_filter;
|
||||
|
||||
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);
|
||||
|
||||
ledger_type = gnc_ledger_display_type (priv->ledger);
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
default_filter = g_strdup_printf ("%s,%s,%s,%s", DEFAULT_FILTER,
|
||||
"0", "0", get_filter_default_num_of_days (ledger_type));
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
// save to gcm file
|
||||
gnc_plugin_page_register_set_filter_gcm (leader, filter, default_filter);
|
||||
|
||||
g_free (default_filter);
|
||||
return;
|
||||
}
|
||||
@ -2217,8 +2211,6 @@ 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;
|
||||
|
||||
@ -2226,19 +2218,12 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage* 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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
// load from gcm file
|
||||
sort_order = gnc_plugin_page_register_get_sort_order_gcm (leader);
|
||||
|
||||
return g_strdup (sort_order ? sort_order : DEFAULT_SORT_ORDER);
|
||||
}
|
||||
|
||||
@ -2257,6 +2242,8 @@ gnc_plugin_page_register_set_sort_order_gcm (Account* leader,
|
||||
{
|
||||
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_SORT, NULL))
|
||||
g_key_file_remove_key (state_file, state_section, KEY_PAGE_SORT, NULL);
|
||||
|
||||
gnc_plugin_page_register_check_for_empty_group (state_file, state_section);
|
||||
}
|
||||
else
|
||||
g_key_file_set_string (state_file, state_section, KEY_PAGE_SORT, sort_order);
|
||||
@ -2268,30 +2255,14 @@ 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;
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
// save to gcm file
|
||||
gnc_plugin_page_register_set_sort_order_gcm (leader, sort_order);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -2320,27 +2291,17 @@ 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;
|
||||
|
||||
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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
// load from gcm file
|
||||
sort_reversed = gnc_plugin_page_register_get_sort_reversed_gcm (leader);
|
||||
return sort_reversed;
|
||||
}
|
||||
|
||||
@ -2359,6 +2320,8 @@ gnc_plugin_page_register_set_sort_reversed_gcm (Account* leader,
|
||||
{
|
||||
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_SORT_REV, NULL))
|
||||
g_key_file_remove_key (state_file, state_section, KEY_PAGE_SORT_REV, NULL);
|
||||
|
||||
gnc_plugin_page_register_check_for_empty_group (state_file, state_section);
|
||||
}
|
||||
else
|
||||
g_key_file_set_boolean (state_file, state_section, KEY_PAGE_SORT_REV,
|
||||
@ -2372,25 +2335,13 @@ 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);
|
||||
leader = gnc_ledger_display_leader (priv->ledger);
|
||||
|
||||
// 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;
|
||||
// save to gcm file
|
||||
gnc_plugin_page_register_set_sort_reversed_gcm (leader, reverse_order);
|
||||
}
|
||||
|
||||
static gchar*
|
||||
@ -2556,7 +2507,7 @@ gnc_plugin_page_register_sort_response_cb (GtkDialog* dialog,
|
||||
else
|
||||
{
|
||||
// clear the sort when unticking the save option
|
||||
if ((priv->sd.save_order == FALSE) && (priv->sd.original_save_order == TRUE))
|
||||
if ((!priv->sd.save_order) && ((priv->sd.original_save_order) || (priv->sd.original_reverse_order)))
|
||||
{
|
||||
gnc_plugin_page_register_set_sort_order (plugin_page, DEFAULT_SORT_ORDER);
|
||||
gnc_plugin_page_register_set_sort_reversed (plugin_page, FALSE);
|
||||
|
@ -447,6 +447,82 @@ gnc_split_reg_get_register_state_group (GNCSplitReg *gsr)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gsr_drop_register_width_state (GNCSplitReg *gsr, GKeyFile* state_file, const gchar *state_section)
|
||||
{
|
||||
GNCLedgerDisplayType ledger_type;
|
||||
GNCLedgerDisplay* ld;
|
||||
|
||||
gboolean sort_reversed = FALSE;
|
||||
gchar* sort_text = NULL;
|
||||
gchar* filter_text = NULL;
|
||||
|
||||
// Look for any old kvp entries and add them to .gcm file
|
||||
ledger_type = gnc_ledger_display_type (gsr->ledger);
|
||||
|
||||
// General ledger should already be using .gcm file
|
||||
if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
|
||||
{
|
||||
Account *leader = gnc_ledger_display_leader (gsr->ledger);
|
||||
const char* kvp_filter = NULL;
|
||||
const char* kvp_sort_order = NULL;
|
||||
gboolean kvp_sort_reversed = FALSE;
|
||||
|
||||
kvp_filter = xaccAccountGetFilter (leader);
|
||||
if (kvp_filter)
|
||||
{
|
||||
gchar *temp_filter_text = g_strdup (kvp_filter);
|
||||
temp_filter_text = g_strdelimit (temp_filter_text, ",",
|
||||
';'); // make it conform to .gcm file list
|
||||
g_key_file_set_string (state_file, state_section, KEY_PAGE_FILTER,
|
||||
temp_filter_text);
|
||||
g_free (temp_filter_text);
|
||||
xaccAccountSetFilter (leader, NULL);
|
||||
}
|
||||
|
||||
kvp_sort_order = xaccAccountGetSortOrder (leader);
|
||||
if (kvp_sort_order)
|
||||
{
|
||||
g_key_file_set_string (state_file, state_section,
|
||||
KEY_PAGE_SORT, kvp_sort_order);
|
||||
xaccAccountSetSortOrder (leader, NULL);
|
||||
}
|
||||
|
||||
kvp_sort_reversed = xaccAccountGetSortReversed (leader);
|
||||
if (kvp_sort_reversed)
|
||||
{
|
||||
g_key_file_set_boolean (state_file, state_section,
|
||||
KEY_PAGE_SORT_REV, kvp_sort_reversed);
|
||||
xaccAccountSetSortReversed (leader, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
sort_reversed = g_key_file_get_boolean (state_file, state_section,
|
||||
KEY_PAGE_SORT_REV, NULL);
|
||||
|
||||
sort_text = g_key_file_get_string (state_file, state_section,
|
||||
KEY_PAGE_SORT, NULL);
|
||||
|
||||
filter_text = g_key_file_get_string (state_file, state_section,
|
||||
KEY_PAGE_FILTER, NULL);
|
||||
|
||||
// drop the register state widths
|
||||
gnc_state_drop_sections_for (state_section);
|
||||
|
||||
if (filter_text)
|
||||
g_key_file_set_string (state_file, state_section, KEY_PAGE_FILTER,
|
||||
filter_text);
|
||||
if (sort_text)
|
||||
g_key_file_set_string (state_file, state_section, KEY_PAGE_SORT, sort_text);
|
||||
|
||||
if (sort_reversed)
|
||||
g_key_file_set_boolean (state_file, state_section, KEY_PAGE_SORT_REV,
|
||||
sort_reversed);
|
||||
|
||||
g_free (filter_text);
|
||||
g_free (sort_text);
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
gsr_create_table( GNCSplitReg *gsr )
|
||||
@ -457,9 +533,11 @@ gsr_create_table( GNCSplitReg *gsr )
|
||||
Account * account = gnc_ledger_display_leader(gsr->ledger);
|
||||
const GncGUID * guid = xaccAccountGetGUID(account);
|
||||
gchar guidstr[GUID_ENCODING_LENGTH+1];
|
||||
GKeyFile* state_file = gnc_state_get_current();
|
||||
gchar *register_state_section;
|
||||
const gchar *default_state_section;
|
||||
const gchar *group;
|
||||
gboolean has_date_width = FALSE;
|
||||
|
||||
guid_to_string_buff (guid, guidstr);
|
||||
|
||||
@ -470,9 +548,12 @@ gsr_create_table( GNCSplitReg *gsr )
|
||||
sr = gnc_ledger_display_get_split_register (gsr->ledger);
|
||||
default_state_section = gnc_split_reg_get_register_state_group (gsr);
|
||||
|
||||
// see if register group has the date_width key, old format pre 4.0
|
||||
has_date_width = g_key_file_has_key (state_file, register_state_section, "date_width", NULL);
|
||||
|
||||
// if this is from a page recreate and no register state use those settings,
|
||||
// register state is dropped at the end of function.
|
||||
if (gsr->page_state_name && !g_key_file_has_group (gnc_state_get_current (), register_state_section))
|
||||
// register state width information is dropped at the end of function.
|
||||
if (gsr->page_state_name && !has_date_width)
|
||||
group = gsr->page_state_name;
|
||||
else
|
||||
{
|
||||
@ -505,12 +586,13 @@ gsr_create_table( GNCSplitReg *gsr )
|
||||
G_CALLBACK(gsr_emit_show_popup_menu), gsr);
|
||||
|
||||
// if no default state and register has state, copy it.
|
||||
if (g_key_file_has_group (gnc_state_get_current (), register_state_section))
|
||||
if (has_date_width) // we have old register state section
|
||||
{
|
||||
if (!gnc_split_reg_register_has_user_state (gsr))
|
||||
gnc_table_save_state (sr->table, default_state_section);
|
||||
// drop the register state
|
||||
gnc_state_drop_sections_for (register_state_section);
|
||||
|
||||
// drop the register width state information
|
||||
gsr_drop_register_width_state (gsr, state_file, register_state_section);
|
||||
}
|
||||
g_free (register_state_section);
|
||||
LEAVE(" ");
|
||||
|
@ -37,6 +37,9 @@
|
||||
#define IS_GNC_SPLIT_REG(obj) G_TYPE_CHECK_INSTANCE_TYPE( obj, gnc_split_reg_get_type() )
|
||||
|
||||
#define STATE_SECTION_REG_PREFIX "Register"
|
||||
#define KEY_PAGE_SORT "register_order"
|
||||
#define KEY_PAGE_SORT_REV "register_reversed"
|
||||
#define KEY_PAGE_FILTER "register_filter"
|
||||
|
||||
typedef struct _GNCSplitReg GNCSplitReg;
|
||||
typedef struct _GNCSplitRegClass GNCSplitRegClass;
|
||||
|
Loading…
Reference in New Issue
Block a user