From fec5b603e27178c935585f0e76b1b80d7da9ee15 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 20 Jan 2019 12:26:42 +0000 Subject: [PATCH 1/4] Bug796965 - Change the default to show unused accounts Currently when you create a new budget, unused accounts are not shown so change the default to match the Accounts TreeView. --- gnucash/gnome/gnc-plugin-page-budget.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gnucash/gnome/gnc-plugin-page-budget.c b/gnucash/gnome/gnc-plugin-page-budget.c index f17249ef8f..0360bc5fc9 100644 --- a/gnucash/gnome/gnc-plugin-page-budget.c +++ b/gnucash/gnome/gnc-plugin-page-budget.c @@ -334,6 +334,7 @@ gnc_plugin_page_budget_init (GncPluginPageBudget *plugin_page) /* Visible types */ priv->fd.visible_types = -1; /* Start with all types */ priv->fd.show_hidden = FALSE; + priv->fd.show_unused = TRUE; priv->fd.show_zero_total = TRUE; priv->fd.filter_override = g_hash_table_new (g_direct_hash, g_direct_equal); 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 2/4] 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); From 274dd2f8bc65f53e8920a22ac066fe8bb4414fbc Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 20 Jan 2019 12:34:36 +0000 Subject: [PATCH 3/4] Save the Account filter settings for a Budget Page Use the newly created functions to save and restore the account filter settings to the saved Budget section of the state file. --- gnucash/gnome/gnc-budget-view.c | 29 ++++++++++++++++++++++++-- gnucash/gnome/gnc-budget-view.h | 1 + gnucash/gnome/gnc-plugin-page-budget.c | 5 ++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gnucash/gnome/gnc-budget-view.c b/gnucash/gnome/gnc-budget-view.c index 0b36e96c16..8f936806cd 100644 --- a/gnucash/gnome/gnc-budget-view.c +++ b/gnucash/gnome/gnc-budget-view.c @@ -496,6 +496,10 @@ gbv_create_widget(GncBudgetView *view) g_signal_connect(G_OBJECT(tree_view), "size-allocate", G_CALLBACK(gbv_treeview_resized_cb), view); + // Read account filter state information from budget section + gnc_tree_view_account_restore_filter (GNC_TREE_VIEW_ACCOUNT(priv->tree_view), priv->fd, + gnc_state_get_current(), gnc_tree_view_get_state_section (GNC_TREE_VIEW(priv->tree_view))); + gnc_budget_view_refresh(view); } @@ -526,7 +530,7 @@ gnc_budget_view_save(GncBudgetView *view, GKeyFile *key_file, const gchar *group priv = GNC_BUDGET_VIEW_GET_PRIVATE(view); - //FIXME + // Save the account filter and page state information to page section gnc_tree_view_account_save(GNC_TREE_VIEW_ACCOUNT(priv->tree_view), priv->fd, key_file, group_name); LEAVE(" "); @@ -586,7 +590,7 @@ gnc_budget_view_restore(GncBudgetView* view, GKeyFile *key_file, const gchar *gr /* Create the new view */ priv = GNC_BUDGET_VIEW_GET_PRIVATE(view); - //FIXME + // Restore the account filter and page state information from page section gnc_tree_view_account_restore(GNC_TREE_VIEW_ACCOUNT(priv->tree_view), priv->fd, key_file, group_name); LEAVE(" "); @@ -619,7 +623,28 @@ gnc_budget_view_delete_budget(GncBudgetView *view) LEAVE(" "); } +/*********************************************************************** + * Save the Account filter information for this budget * + * * + * @param view The view to which the budget is associated. * + **********************************************************************/ +void +gnc_budget_view_save_account_filter (GncBudgetView *view) +{ + GncBudgetViewPrivate *priv; + g_return_if_fail(view != NULL); + + ENTER("view %p", view); + + priv = GNC_BUDGET_VIEW_GET_PRIVATE (view); + + // Save account filter state information to budget section + gnc_tree_view_account_save_filter (GNC_TREE_VIEW_ACCOUNT(priv->tree_view), + priv->fd, gnc_state_get_current(), gnc_tree_view_get_state_section (GNC_TREE_VIEW(priv->tree_view))); + + LEAVE(" "); +} #if 0 /*********************************************************************** diff --git a/gnucash/gnome/gnc-budget-view.h b/gnucash/gnome/gnc-budget-view.h index 3e85b8d8ec..cbe5d47308 100644 --- a/gnucash/gnome/gnc-budget-view.h +++ b/gnucash/gnome/gnc-budget-view.h @@ -64,6 +64,7 @@ GncBudgetView *gnc_budget_view_new(GncBudget *budget, AccountFilterDialog* fd); void gnc_budget_view_save(GncBudgetView* view, GKeyFile *key_file, const gchar* group_name); void gnc_budget_view_refresh(GncBudgetView* view); void gnc_budget_view_delete_budget(GncBudgetView* view); +void gnc_budget_view_save_account_filter(GncBudgetView *view); gboolean gnc_budget_view_restore(GncBudgetView* view, GKeyFile *key_file, const gchar* group_name); GtkTreeSelection* gnc_budget_view_get_selection(GncBudgetView* view); Account* gnc_budget_view_get_account_from_path(GncBudgetView* view, GtkTreePath* path); diff --git a/gnucash/gnome/gnc-plugin-page-budget.c b/gnucash/gnome/gnc-plugin-page-budget.c index 0360bc5fc9..1906cbf517 100644 --- a/gnucash/gnome/gnc-plugin-page-budget.c +++ b/gnucash/gnome/gnc-plugin-page-budget.c @@ -480,6 +480,9 @@ gnc_plugin_page_budget_destroy_widget (GncPluginPage *plugin_page) if (priv->budget_view) { + // save the account filter state information to budget section + gnc_budget_view_save_account_filter (priv->budget_view); + if (priv->delete_budget) { gnc_budget_view_delete_budget (priv->budget_view); @@ -538,7 +541,7 @@ gnc_plugin_page_budget_save_page (GncPluginPage *plugin_page, guid_to_string_buff(gnc_budget_get_guid(priv->budget), guid_str); g_key_file_set_string(key_file, group_name, BUDGET_GUID, guid_str); - //FIXME + // Save the Budget page information to state file gnc_budget_view_save(priv->budget_view, key_file, group_name); LEAVE(" "); From fbabc147bf6b6555197ff3f46e19465a1da3d410 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 20 Jan 2019 12:37:44 +0000 Subject: [PATCH 4/4] Save the Account page filter setting to the state file Use the newly created functions to save and restore the account filter settings to the saved 'Account Hierarchy' section of the state file. --- gnucash/gnome/gnc-plugin-page-account-tree.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gnucash/gnome/gnc-plugin-page-account-tree.c b/gnucash/gnome/gnc-plugin-page-account-tree.c index 41a28cc9ef..c713f3b338 100644 --- a/gnucash/gnome/gnc-plugin-page-account-tree.c +++ b/gnucash/gnome/gnc-plugin-page-account-tree.c @@ -759,6 +759,10 @@ gnc_plugin_page_account_tree_create_widget (GncPluginPage *plugin_page) gnc_plugin_page_account_tree_summarybar_position_changed, page); + // Read account filter state information from account section + gnc_tree_view_account_restore_filter (GNC_TREE_VIEW_ACCOUNT(priv->tree_view), &priv->fd, + gnc_state_get_current(), gnc_tree_view_get_state_section (GNC_TREE_VIEW(priv->tree_view))); + LEAVE("widget = %p", priv->widget); return priv->widget; } @@ -782,6 +786,10 @@ gnc_plugin_page_account_tree_destroy_widget (GncPluginPage *plugin_page) gnc_plugin_page_account_tree_summarybar_position_changed, page); + // Save account filter state information to account section + gnc_tree_view_account_save_filter (GNC_TREE_VIEW_ACCOUNT(priv->tree_view), &priv->fd, + gnc_state_get_current(), gnc_tree_view_get_state_section (GNC_TREE_VIEW(priv->tree_view))); + // Destroy the filter override hash table g_hash_table_destroy(priv->fd.filter_override);