r20359 - gnucash/trunk/src/gnome-utils - Modify Tax Info on Account Page to display or not display sub-account info based on whether row is expanded.

J. Alex Aycinena alex.aycinena at code.gnucash.org
Tue Mar 1 18:09:37 EST 2011


Author: alex.aycinena
Date: 2011-03-01 18:09:37 -0500 (Tue, 01 Mar 2011)
New Revision: 20359
Trac: http://svn.gnucash.org/trac/changeset/20359

Modified:
   gnucash/trunk/src/gnome-utils/gnc-tree-model-account.c
   gnucash/trunk/src/gnome-utils/gnc-tree-model-account.h
   gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
Log:
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> 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.


Modified: gnucash/trunk/src/gnome-utils/gnc-tree-model-account.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-model-account.c	2011-03-01 21:27:14 UTC (rev 20358)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-model-account.c	2011-03-01 23:09:37 UTC (rev 20359)
@@ -411,6 +411,7 @@
     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 @@
         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));

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-model-account.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-model-account.h	2011-03-01 21:27:14 UTC (rev 20358)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-model-account.h	2011-03-01 23:09:37 UTC (rev 20359)
@@ -78,6 +78,7 @@
     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,

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2011-03-01 21:27:14 UTC (rev 20358)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2011-03-01 23:09:37 UTC (rev 20359)
@@ -71,6 +71,12 @@
         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;
@@ -460,6 +466,66 @@
 }
 
 /************************************************************/
+/*                 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 @@
     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_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. */



More information about the gnucash-changes mailing list