From 1b9023e78fc4ada6bece918997216482cb813568 Mon Sep 17 00:00:00 2001 From: "J. Alex Aycinena" Date: Tue, 1 Mar 2011 23:09:37 +0000 Subject: [PATCH] Modify Tax Info on Account Page to display or not display sub-account info based on whether row is expanded. Re-apply changes reverted in r20251. The only difference between this commit and r20207 is that, contrary to the recommendation given in gnc-tree-view.h, "Use GNC_TREE_VIEW_COLUMN_DATA_NONE if you plan on using a non-model data source for this column", it cobtinues to use "GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO". Using "GNC_TREE_VIEW_COLUMN_DATA_NONE" generates problems later in the "gnc_tree_view_add_text_column" routine when it tries to set up sorting for the column ("CRIT gtk_tree_sortable_set_sort_func: assertion `sort_column_id >= 0' failed"). Define a new column, GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT, in gnc-tree-model-account.c filled with gnc_ui_account_get_tax_info_sub_acct_string. Modify gnc-tree-view-account.c to define a tax_info_data_func that displays only the the data in the GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO model column if the row is expanded; otherwise it combines it with the data in the GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT model column. Modily the view creation function to use the new tax_info_data_func for the text after having first set it to GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO to prevent the problem mentioned above, thereby overriding it. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@20359 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome-utils/gnc-tree-model-account.c | 6 ++ src/gnome-utils/gnc-tree-model-account.h | 1 + src/gnome-utils/gnc-tree-view-account.c | 85 ++++++++++++++++++++++-- 3 files changed, 87 insertions(+), 5 deletions(-) diff --git a/src/gnome-utils/gnc-tree-model-account.c b/src/gnome-utils/gnc-tree-model-account.c index 235d9e4bb9..3969861546 100644 --- a/src/gnome-utils/gnc-tree-model-account.c +++ b/src/gnome-utils/gnc-tree-model-account.c @@ -411,6 +411,7 @@ gnc_tree_model_account_get_column_type (GtkTreeModel *tree_model, case GNC_TREE_MODEL_ACCOUNT_COL_TOTAL_PERIOD: case GNC_TREE_MODEL_ACCOUNT_COL_NOTES: case GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO: + case GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT: case GNC_TREE_MODEL_ACCOUNT_COL_LASTNUM: case GNC_TREE_MODEL_ACCOUNT_COL_COLOR_PRESENT: @@ -801,6 +802,11 @@ gnc_tree_model_account_get_value (GtkTreeModel *tree_model, g_value_take_string (value, gnc_ui_account_get_tax_info_string (account)); break; + case GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT: + g_value_init (value, G_TYPE_STRING); + g_value_take_string (value, gnc_ui_account_get_tax_info_sub_acct_string (account)); + break; + case GNC_TREE_MODEL_ACCOUNT_COL_LASTNUM: g_value_init (value, G_TYPE_STRING); g_value_set_string (value, xaccAccountGetLastNum (account)); diff --git a/src/gnome-utils/gnc-tree-model-account.h b/src/gnome-utils/gnc-tree-model-account.h index 2571b718be..f93c1c838b 100644 --- a/src/gnome-utils/gnc-tree-model-account.h +++ b/src/gnome-utils/gnc-tree-model-account.h @@ -78,6 +78,7 @@ typedef enum GNC_TREE_MODEL_ACCOUNT_COL_TOTAL_PERIOD, GNC_TREE_MODEL_ACCOUNT_COL_NOTES, GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO, + GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT, GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER, GNC_TREE_MODEL_ACCOUNT_COL_LAST_VISIBLE = GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER, diff --git a/src/gnome-utils/gnc-tree-view-account.c b/src/gnome-utils/gnc-tree-view-account.c index cb6da48446..ab1b701236 100644 --- a/src/gnome-utils/gnc-tree-view-account.c +++ b/src/gnome-utils/gnc-tree-view-account.c @@ -71,6 +71,12 @@ static void gtva_setup_column_renderer_edited_cb(GncTreeViewAccount *account_vie GtkCellRenderer *renderer, GncTreeViewAccountColumnTextEdited col_edited_cb); +static void tax_info_data_func (GtkTreeViewColumn *col, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer view); + typedef struct GncTreeViewAccountPrivate { AccountViewInfo avi; @@ -459,6 +465,66 @@ sort_by_total_period_value (GtkTreeModel *f_model, return sort_by_xxx_period_value (f_model, f_iter_a, f_iter_b, TRUE); } +/************************************************************/ +/* Tax_Info data function */ +/************************************************************/ + +/* + * The tax-info column in the account tree view is based on the + * combination of two columns in the account tree model. The data + * function displays only the the data in the + * GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO model column if the row is + * expanded; otherwise it combines it with the data + * in the GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT model column. + */ +static void +tax_info_data_func (GtkTreeViewColumn *col, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer view) +{ + const gchar *tax_info, *tax_info_sub_acct; + GtkTreePath *path; + + gtk_tree_model_get(model, + iter, + GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO, + &tax_info, + -1); + + if (tax_info == NULL) + tax_info = ""; + path = gtk_tree_model_get_path(model, iter); + if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(view), path)) + g_object_set(renderer, "text", tax_info, NULL); + else + { + gtk_tree_model_get(model, + iter, + GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT, + &tax_info_sub_acct, + -1); + if (tax_info_sub_acct == NULL) + tax_info_sub_acct = ""; + if (safe_strcmp (tax_info_sub_acct, "") == 0) + g_object_set(renderer, "text", tax_info, NULL); + else + { + if (safe_strcmp (tax_info, "") == 0) + g_object_set(renderer, "text", tax_info_sub_acct, NULL); + else + { + const gchar *combined_tax_info; + combined_tax_info = g_strdup_printf ("%s; %s", tax_info, + tax_info_sub_acct); + g_object_set(renderer, "text", combined_tax_info, NULL); + } + } + } + gtk_tree_path_free(path); +} + /************************************************************/ /* New View Creation */ /************************************************************/ @@ -477,6 +543,8 @@ gnc_tree_view_account_new_with_root (Account *root, gboolean show_root) GtkTreePath *virtual_root_path = NULL; const gchar *sample_type, *sample_commodity; GncTreeViewAccountPrivate *priv; + GtkTreeViewColumn *tax_info_column; + GtkCellRenderer *renderer; ENTER(" "); /* Create our view */ @@ -644,11 +712,18 @@ gnc_tree_view_account_new_with_root (Account *root, gboolean show_root) GNC_TREE_MODEL_ACCOUNT_COL_NOTES, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); - gnc_tree_view_add_text_column(view, _("Tax Info"), "tax-info", NULL, - "Sample tax info.", - GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO, - GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, - sort_by_string); + tax_info_column + = gnc_tree_view_add_text_column(view, _("Tax Info"), "tax-info", NULL, + "Sample tax info.", + GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO, + GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, + sort_by_string); + renderer = gnc_tree_view_column_get_renderer(tax_info_column); + gtk_tree_view_column_set_cell_data_func(tax_info_column, + renderer, + tax_info_data_func, + GTK_TREE_VIEW(view), + NULL); gnc_tree_view_add_toggle_column(view, _("Placeholder"), /* Translators: This string has a context prefix; the translation must only contain the part after the | character. */