From d4c19efc8dc09c2862f467855d5fcd18c867e8ea Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 20 Jan 2019 12:30:12 +0000 Subject: [PATCH] Create two functions to save/restore the account filter settings These functions allow the saving and restoring of the GncTreeViewAccount filter settings to the state file. Currently they are only saved if the page is left open when Gnucash is closed. --- gnucash/gnome-utils/gnc-tree-view-account.c | 89 +++++++++++++++++++++ gnucash/gnome-utils/gnc-tree-view-account.h | 9 +++ 2 files changed, 98 insertions(+) diff --git a/gnucash/gnome-utils/gnc-tree-view-account.c b/gnucash/gnome-utils/gnc-tree-view-account.c index 2953cd19e0..0cfbfd241c 100644 --- a/gnucash/gnome-utils/gnc-tree-view-account.c +++ b/gnucash/gnome-utils/gnc-tree-view-account.c @@ -2286,6 +2286,7 @@ account_filter_dialog_create(AccountFilterDialog *fd, GncPluginPage *page) LEAVE(" "); } +// page state section #define ACCT_COUNT "NumberOfOpenAccounts" #define ACCT_OPEN "OpenAccount%d" #define ACCT_SELECTED "SelectedAccount" @@ -2294,6 +2295,14 @@ account_filter_dialog_create(AccountFilterDialog *fd, GncPluginPage *page) #define SHOW_UNUSED "ShowUnused" #define ACCT_TYPES "AccountTypes" +// account/budget state section +// versions less than 3.2 would crash if key did not have an "_" +#define SHOW_HIDDEN_ACCOUNTS "Show_Hidden" +#define SHOW_ZERO_TOTALS "Show_ZeroTotal" +#define SHOW_UNUSED_ACCOUNTS "Show_Unused" +#define ACCOUNT_TYPES "Account_Types" + + typedef struct foo { GKeyFile *key_file; @@ -2402,6 +2411,33 @@ gnc_tree_view_account_save(GncTreeViewAccount *view, } +void +gnc_tree_view_account_save_filter (GncTreeViewAccount *view, + AccountFilterDialog *fd, + GKeyFile *key_file, + const gchar *group_name) +{ + g_return_if_fail (key_file != NULL); + g_return_if_fail (group_name != NULL); + + ENTER("view %p, key_file %p, group_name %s", view, key_file, + group_name); + + g_key_file_set_integer (key_file, group_name, ACCOUNT_TYPES, + fd->visible_types); + g_key_file_set_boolean (key_file, group_name, SHOW_HIDDEN_ACCOUNTS, + fd->show_hidden); + g_key_file_set_boolean (key_file, group_name, SHOW_ZERO_TOTALS, + fd->show_zero_total); + g_key_file_set_boolean (key_file, group_name, SHOW_UNUSED_ACCOUNTS, + fd->show_unused); + + g_key_file_set_comment (key_file, group_name, ACCOUNT_TYPES, + "Account Filter Section below, four lines", NULL); + + LEAVE(""); +} + /** Expand a row in the tree that was expanded when the user last quit * gnucash. Its job is to map from account name to tree row and * expand the row. @@ -2542,6 +2578,59 @@ gnc_tree_view_account_restore(GncTreeViewAccount *view, gnc_tree_view_account_refilter(view); } +void +gnc_tree_view_account_restore_filter (GncTreeViewAccount *view, + AccountFilterDialog *fd, + GKeyFile *key_file, + const gchar *group_name) +{ + GError *error = NULL; + gint i; + gboolean show; + + g_return_if_fail (key_file != NULL); + g_return_if_fail (group_name != NULL); + + /* if entry not found, filter will use the default setting */ + + /* Filter information. Ignore missing keys. */ + show = g_key_file_get_boolean (key_file, group_name, SHOW_HIDDEN_ACCOUNTS, &error); + if (error) + { + g_error_free (error); + error = NULL; + } + else + fd->show_hidden = show; + + show = g_key_file_get_boolean(key_file, group_name, SHOW_ZERO_TOTALS, &error); + if (error) + { + g_error_free (error); + error = NULL; + } + else + fd->show_zero_total = show; + + show = g_key_file_get_boolean(key_file, group_name, SHOW_UNUSED_ACCOUNTS, &error); + if (error) + { + g_error_free (error); + error = NULL; + } + else + fd->show_unused = show; + + i = g_key_file_get_integer(key_file, group_name, ACCOUNT_TYPES, &error); + if (error) + { + g_error_free (error); + error = NULL; + } + else + fd->visible_types = i; +} + // @@fixme -- factor this app-not-gui-specific-logic out. void gnc_tree_view_account_name_edited_cb(Account *account, GtkTreeViewColumn *col, const gchar *new_name) diff --git a/gnucash/gnome-utils/gnc-tree-view-account.h b/gnucash/gnome-utils/gnc-tree-view-account.h index 072fd964dd..9da2769cd1 100644 --- a/gnucash/gnome-utils/gnc-tree-view-account.h +++ b/gnucash/gnome-utils/gnc-tree-view-account.h @@ -118,6 +118,15 @@ void gnc_tree_view_account_restore(GncTreeViewAccount *view, GKeyFile *key_file, const gchar *group_name); +void gnc_tree_view_account_save_filter (GncTreeViewAccount *tree_view, + AccountFilterDialog *fd, + GKeyFile *key_file, + const gchar *group_name); +void gnc_tree_view_account_restore_filter (GncTreeViewAccount *view, + AccountFilterDialog *fd, + GKeyFile *key_file, + const gchar *group_name); + /* Get the GType for an GncTreeViewAccount object. */ GType gnc_tree_view_account_get_type (void);