[Gnucash-changes] r14037 - gnucash/trunk/src - Change the method for specifying and recording the default visibility of

Chris Shoemaker chris at cvs.gnucash.org
Sat May 13 22:07:53 EDT 2006


Author: chris
Date: 2006-05-13 22:07:52 -0400 (Sat, 13 May 2006)
New Revision: 14037
Trac: http://svn.gnucash.org/trac/changeset/14037

Modified:
   gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
   gnucash/trunk/src/gnome-utils/gnc-tree-view-commodity.c
   gnucash/trunk/src/gnome-utils/gnc-tree-view-price.c
   gnucash/trunk/src/gnome-utils/gnc-tree-view.c
   gnucash/trunk/src/gnome-utils/gnc-tree-view.h
   gnucash/trunk/src/gnome/druid-hierarchy.c
   gnucash/trunk/src/gnome/gnc-plugin-page-account-tree.c
   gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
   gnucash/trunk/src/import-export/import-account-matcher.c
Log:
   Change the method for specifying and recording the default visibility of
   tree-view columns.  There is now a per-column setting, "DEFAULT_VISIBLE",
   similar to "ALWAYS_VISIBLE", that controls the visibility of a column in 
   the absence of, or prior to, gconf management.

   It is no longer necessary for the tree view to store a list of column names
   for default visible columns.

   To faciliate the adaptation of pre-existing tree-views, the 
   view_column_find_by_name() has been publicized as 
   gnc_tree_view_find_column_by_name().

   All callers of gnc_tree_view_configure_columns() have been converted to use
   the DEFAULT_VISIBLE column property.


Modified: gnucash/trunk/src/gnome/druid-hierarchy.c
===================================================================
--- gnucash/trunk/src/gnome/druid-hierarchy.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome/druid-hierarchy.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -866,8 +866,10 @@
                                          gnc_tree_view_account_notes_edited_cb);
 
   gtk_tree_view_set_headers_visible (tree_view, TRUE);
-  gnc_tree_view_configure_columns (GNC_TREE_VIEW(data->final_account_tree),
-				   "type", /*"placeholder", */ NULL);
+  column = gnc_tree_view_find_column_by_name (
+      GNC_TREE_VIEW(data->final_account_tree), "type");
+  g_object_set_data(G_OBJECT(column), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  gnc_tree_view_configure_columns (GNC_TREE_VIEW(data->final_account_tree));
   gnc_tree_view_set_show_column_menu (GNC_TREE_VIEW(data->final_account_tree),
 				      FALSE);
 

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-account-tree.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-account-tree.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-account-tree.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -403,6 +403,7 @@
 	GtkTreeSelection *selection;
 	GtkTreeView *tree_view;
 	GtkWidget *scrolled_window;
+	GtkTreeViewColumn *col;
 
 	ENTER("page %p", plugin_page);
 	page = GNC_PLUGIN_PAGE_ACCOUNT_TREE (plugin_page);
@@ -423,8 +424,13 @@
 			    TRUE, TRUE, 0);
 
 	tree_view = gnc_tree_view_account_new(FALSE);
-	gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view),
-					"description", "total", NULL);
+	col = gnc_tree_view_find_column_by_name(
+	    GNC_TREE_VIEW(tree_view), "description");
+	g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+	col = gnc_tree_view_find_column_by_name(
+	    GNC_TREE_VIEW(tree_view), "total");
+	g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+	gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view));
 	g_object_set(G_OBJECT(tree_view),
 		     "gconf-section", GCONF_SECTION,
 		     "show-column-menu", TRUE,

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -391,7 +391,7 @@
     tree_view = gnc_tree_view_account_new(FALSE);
     g_object_set(G_OBJECT(tree_view), "gconf-section", GCONF_SECTION, NULL);
 
-    gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view), NULL);
+    gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view));
     priv->tree_view = tree_view;
     selection = gtk_tree_view_get_selection(tree_view);
     gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
@@ -1051,8 +1051,7 @@
         num_periods_visible = g_list_length(col_list);
     }
 
-    gnc_tree_view_configure_columns(
-        GNC_TREE_VIEW(priv->tree_view), NULL);
+    gnc_tree_view_configure_columns(GNC_TREE_VIEW(priv->tree_view));
 
     /* Create any needed columns */
     while (num_periods_visible < num_periods) {

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -644,8 +644,7 @@
 				GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO,
 				GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
 				sort_by_string);
-  gnc_tree_view_add_toggle_column
-    (view, _("Placeholder"),
+  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. */
      Q_("Column letter for 'Placeholder'|P"),
@@ -659,7 +658,7 @@
   gtva_update_column_names(view);
 
   /* By default only the first column is visible. */
-  gnc_tree_view_configure_columns(view, NULL);
+  gnc_tree_view_configure_columns(view);
   gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (f_model),
 					  gnc_tree_view_account_filter_helper,
 					  view,

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view-commodity.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-commodity.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-commodity.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -359,6 +359,7 @@
 {
   GncTreeView *view;
   GtkTreeModel *model, *f_model, *s_model;
+  GtkTreeViewColumn *col;
   gnc_commodity_table *ct;
   va_list var_args;
 
@@ -389,65 +390,70 @@
   /* Set default visibilities */
   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
 
-  gnc_tree_view_add_text_column (view, _("Namespace"), "namespace", NULL,
-				 "NASDAQ",
-				 GNC_TREE_MODEL_COMMODITY_COL_NAMESPACE,
-				 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("Symbol"), "symbol", NULL,
-				 "ACMEACME",
-				 GNC_TREE_MODEL_COMMODITY_COL_MNEMONIC,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("Name"), "name", NULL,
-				 "Acme Corporation, Inc.",
-				 GNC_TREE_MODEL_COMMODITY_COL_FULLNAME,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("Print Name"), "printname", NULL,
-				 "ACMEACME (Acme Corporation, Inc.)",
-				 GNC_TREE_MODEL_COMMODITY_COL_PRINTNAME,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("Unique Name"), "uniquename", NULL,
-				 "NASDAQ::ACMEACME",
-				 GNC_TREE_MODEL_COMMODITY_COL_UNIQUE_NAME,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("CUSIP code"), "cusip_code", NULL,
-				 "QWERTYUIOP",
-				 GNC_TREE_MODEL_COMMODITY_COL_CUSIP,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_numeric_column (view, _("Fraction"), "fraction", "10000",
-				    GNC_TREE_MODEL_COMMODITY_COL_FRACTION,
-				    GNC_TREE_VIEW_COLUMN_COLOR_NONE,
-				    GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				    sort_by_fraction);
-  gnc_tree_view_add_toggle_column
-    (view, _("Get Quotes"),
-     /* Translators: This string has a context prefix; the translation
-	must only contain the part after the | character. */
-     Q_("Column letter for 'Get Quotes'|Q"),
-     "quote_flag",
-     GNC_TREE_MODEL_COMMODITY_COL_QUOTE_FLAG,
-     GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-     sort_by_quote_flag,
-     NULL);
-  gnc_tree_view_add_text_column (view, _("Source"), "quote_source", NULL,
-				 "yahoo",
-				 GNC_TREE_MODEL_COMMODITY_COL_QUOTE_SOURCE,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
-  gnc_tree_view_add_text_column (view, _("Timezone"), "quote_timezone", NULL,
-				 "America/New_York",
-				 GNC_TREE_MODEL_COMMODITY_COL_QUOTE_TZ,
-				 GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
-				 sort_by_commodity_string);
+  col = gnc_tree_view_add_text_column (
+      view, _("Namespace"), "namespace", NULL, "NASDAQ",
+      GNC_TREE_MODEL_COMMODITY_COL_NAMESPACE,
+      GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
+      sort_by_commodity_string);
+  col = gnc_tree_view_add_text_column (
+      view, _("Symbol"), "symbol", NULL, "ACMEACME",
+      GNC_TREE_MODEL_COMMODITY_COL_MNEMONIC,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_text_column (
+      view, _("Name"), "name", NULL, "Acme Corporation, Inc.",
+      GNC_TREE_MODEL_COMMODITY_COL_FULLNAME,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_text_column (
+      view, _("Print Name"), "printname", NULL,
+      "ACMEACME (Acme Corporation, Inc.)",
+      GNC_TREE_MODEL_COMMODITY_COL_PRINTNAME,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  col = gnc_tree_view_add_text_column (
+      view, _("Unique Name"), "uniquename", NULL,
+      "NASDAQ::ACMEACME", GNC_TREE_MODEL_COMMODITY_COL_UNIQUE_NAME,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, 
+      sort_by_commodity_string);
+  col = gnc_tree_view_add_text_column (
+      view, _("CUSIP code"), "cusip_code", NULL, "QWERTYUIOP",
+      GNC_TREE_MODEL_COMMODITY_COL_CUSIP,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_numeric_column (
+      view, _("Fraction"), "fraction", "10000",
+      GNC_TREE_MODEL_COMMODITY_COL_FRACTION,
+      GNC_TREE_VIEW_COLUMN_COLOR_NONE,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_fraction);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_toggle_column(
+      view, _("Get Quotes"),
+      /* Translators: This string has a context prefix; the translation
+         must only contain the part after the | character. */
+      Q_("Column letter for 'Get Quotes'|Q"), "quote_flag",
+      GNC_TREE_MODEL_COMMODITY_COL_QUOTE_FLAG,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_quote_flag,
+      NULL);
+  col = gnc_tree_view_add_text_column (
+      view, _("Source"), "quote_source", NULL, "yahoo",
+      GNC_TREE_MODEL_COMMODITY_COL_QUOTE_SOURCE,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  col = gnc_tree_view_add_text_column (
+      view, _("Timezone"), "quote_timezone", NULL, "America/New_York",
+      GNC_TREE_MODEL_COMMODITY_COL_QUOTE_TZ,
+      GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY,
+      sort_by_commodity_string);
+  
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  gnc_tree_view_configure_columns(view);
 
-  gnc_tree_view_configure_columns(view, "symbol", "name", "cusip_code",
-				  "fraction", NULL);
-
   gtk_widget_show(GTK_WIDGET(view));
   LEAVE(" %p", view);
   return GTK_TREE_VIEW(view);

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view-price.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-price.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-price.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -399,6 +399,7 @@
 {
   GncTreeView *view;
   GtkTreeModel *model, *f_model, *s_model;
+  GtkTreeViewColumn *col;
   GNCPriceDB *price_db;
   va_list var_args;
   const gchar *sample_text;
@@ -430,39 +431,45 @@
 
   sample_text = gnc_commodity_get_printname(gnc_default_currency());
   sample_text2 = g_strdup_printf("%s%s", sample_text, sample_text);
-  gnc_tree_view_add_text_column (view, _("Security"), "security", NULL,
-				 sample_text2,
-				 GNC_TREE_MODEL_PRICE_COL_COMMODITY,
-				 GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
-				 sort_by_name);
+  col = gnc_tree_view_add_text_column (
+      view, _("Security"), "security", NULL, sample_text2,
+      GNC_TREE_MODEL_PRICE_COL_COMMODITY,
+      GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
+      sort_by_name);
   g_free(sample_text2);
-  gnc_tree_view_add_text_column (view, _("Currency"), "currency", NULL,
-				 sample_text,
-				 GNC_TREE_MODEL_PRICE_COL_CURRENCY,
-				 GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
-				 sort_by_name);
-  gnc_tree_view_add_text_column (view, _("Date"), "date", NULL,
-				 "2005-05-20",
-				 GNC_TREE_MODEL_PRICE_COL_DATE,
-				 GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
-				 sort_by_date);
-  gnc_tree_view_add_text_column (view, _("Source"), "source", NULL,
-				 "Finance::Quote",
-				 GNC_TREE_MODEL_PRICE_COL_SOURCE,
-				 GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
-				 sort_by_source);
-  gnc_tree_view_add_text_column (view, _("Type"), "type", NULL, "last",
-				 GNC_TREE_MODEL_PRICE_COL_TYPE,
-				 GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
-				 sort_by_type);
-  gnc_tree_view_add_numeric_column (view, _("Price"), "price", "100.00000",
-				    GNC_TREE_MODEL_PRICE_COL_VALUE,
-				    GNC_TREE_VIEW_COLUMN_COLOR_NONE,
-				    GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
-				    sort_by_value);
+  col = gnc_tree_view_add_text_column (
+      view, _("Currency"), "currency", NULL, sample_text,
+      GNC_TREE_MODEL_PRICE_COL_CURRENCY,
+      GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
+      sort_by_name);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_text_column (
+      view, _("Date"), "date", NULL, "2005-05-20",
+      GNC_TREE_MODEL_PRICE_COL_DATE,
+      GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
+      sort_by_date);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_text_column (
+      view, _("Source"), "source", NULL, "Finance::Quote",
+      GNC_TREE_MODEL_PRICE_COL_SOURCE,
+      GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
+      sort_by_source);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_text_column (
+      view, _("Type"), "type", NULL, "last",
+      GNC_TREE_MODEL_PRICE_COL_TYPE,
+      GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
+      sort_by_type);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+  col = gnc_tree_view_add_numeric_column (
+      view, _("Price"), "price", "100.00000",
+      GNC_TREE_MODEL_PRICE_COL_VALUE,
+      GNC_TREE_VIEW_COLUMN_COLOR_NONE,
+      GNC_TREE_MODEL_PRICE_COL_VISIBILITY,
+      sort_by_value);
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
 
-  gnc_tree_view_configure_columns(view, "commodity", "currency",
-				  "date", "source", "type", "price", NULL);
+  gnc_tree_view_configure_columns(view);
 
   gtk_widget_show(GTK_WIDGET(view));
   LEAVE(" %p", view);

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -117,7 +117,6 @@
 typedef struct GncTreeViewPrivate
 {
   GtkTooltips       *title_tips;
-  GSList            *default_visible;
 
   /*  Spacer column */
   GtkTreeViewColumn *spacer_column;
@@ -248,7 +247,6 @@
   gnc_gobject_tracking_remember(G_OBJECT(view), G_OBJECT_CLASS(klass));
 
   priv = GNC_TREE_VIEW_GET_PRIVATE(view);
-  priv->default_visible = NULL;
   priv->column_menu = NULL;
   priv->show_column_menu = FALSE;
   priv->gconf_section = NULL;
@@ -342,7 +340,6 @@
 {
   GncTreeView *view;
   GncTreeViewPrivate *priv;
-  GSList *slist;
 
   ENTER("view %p", object);
   g_return_if_fail (object != NULL);
@@ -353,12 +350,6 @@
   gnc_tree_view_remove_gconf(view);
 
   priv = GNC_TREE_VIEW_GET_PRIVATE(view);
-  if (priv->default_visible) {
-    slist = priv->default_visible;
-    priv->default_visible = NULL;
-    g_slist_foreach(slist, (GFunc)g_free, NULL);
-    g_slist_free(slist);
-  }
 
   if (priv->column_menu) {
     DEBUG("removing column selection menu");
@@ -499,11 +490,10 @@
  *
  *  @param id The "pref name" to find.
  *
- *  @internal
  */
-static GtkTreeViewColumn *
-view_column_find_by_name (GncTreeView *view,
-			  const gchar *wanted)
+GtkTreeViewColumn *
+gnc_tree_view_find_column_by_name (GncTreeView *view,
+                                   const gchar *wanted)
 {
   GtkTreeViewColumn *column, *found = NULL;
   GList *column_list, *tmp;
@@ -827,15 +817,15 @@
       return visible;
     }
 
-    visible =  (g_slist_find_custom(priv->default_visible, pref_name,
-				    (GCompareFunc)strcmp) != NULL);
+    visible = column ? 
+        (g_object_get_data(G_OBJECT(column), DEFAULT_VISIBLE) != NULL) : FALSE;
     LEAVE("%d, gconf but using defaults", visible);
     return visible;
   }
 
   /* Check the default columns list */
-  visible = (g_slist_find_custom(priv->default_visible, pref_name,
-				 (GCompareFunc)strcmp) != NULL);
+  visible = column ? 
+      (g_object_get_data(G_OBJECT(column), DEFAULT_VISIBLE) != NULL) : FALSE;
   LEAVE("defaults says %d", visible);
   return visible;
 }
@@ -943,7 +933,7 @@
   gint model_column, current;
 
   priv = GNC_TREE_VIEW_GET_PRIVATE(view);
-  column = view_column_find_by_name(view, name);
+  column = gnc_tree_view_find_column_by_name(view, name);
   if (!column)
     return;
 
@@ -992,7 +982,7 @@
   columns = NULL;
   for (tmp = column_names; tmp; tmp = g_slist_next(tmp)) {
     name = gconf_value_get_string(tmp->data);
-    column = view_column_find_by_name(view, name);
+    column = gnc_tree_view_find_column_by_name(view, name);
     if (!column)
       continue;
     columns = g_slist_append(columns, column);
@@ -1077,7 +1067,7 @@
 
     if (strcmp(type_name, GCONF_KEY_VISIBLE) == 0) {
       priv->seen_gconf_visibility = TRUE;
-      column = view_column_find_by_name(view, column_name);
+      column = gnc_tree_view_find_column_by_name(view, column_name);
       if (column) {
 	known = TRUE;
 	if (!g_object_get_data(G_OBJECT(column), ALWAYS_VISIBLE)) {
@@ -1086,7 +1076,7 @@
       }
     } else if (strcmp(type_name, GCONF_KEY_WIDTH) == 0) {
       width = gconf_value_get_int(value);
-      column = view_column_find_by_name(view, column_name);
+      column = gnc_tree_view_find_column_by_name(view, column_name);
       if (column) {
 	known = TRUE;
 	if (width && (width != gtk_tree_view_column_get_width(column))) {
@@ -1553,7 +1543,7 @@
 
   /* Now enable it on the requested columns. */
   while (name != NULL) {
-    column = view_column_find_by_name (view, name);
+    column = gnc_tree_view_find_column_by_name(view, name);
     if (column != NULL) {
       gtk_tree_view_column_set_expand(column, TRUE);
       hide_spacer = TRUE;
@@ -1645,62 +1635,46 @@
   }
 }
 
-/** Configure (by name) the default set of visible columns in an gnc
- *  tree view.  This is the list of columns that will be shown if the
- *  view isn't using gconf to manage column visibility.  If gconf is
- *  used, this list will be used the very first time the view is
- *  presented to the user, then gconf will be used after that.  The
- *  available list of columns can be found in the file
- *  gnc-tree-view-xxx.c.
- *
- *  Parameters are defined in gnc-tree-view.h
- */
+static gint 
+gnc_tree_view_count_visible_columns(GncTreeView *view)
+{
+    GList *columns, *node;
+    gint count = 0;
+
+    columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(view));
+    for (node = columns; node; node = node->next) {
+        GtkTreeViewColumn *col = GTK_TREE_VIEW_COLUMN(node->data);
+        if (gnc_tree_view_column_visible (view, col, NULL))
+            count++;
+    }
+    g_list_free(columns);
+    return count;
+}
+
 void
-gnc_tree_view_configure_columns (GncTreeView *view,
-				 gchar *first_column_name,
-				 ...)
+gnc_tree_view_configure_columns (GncTreeView *view)
 {
   GncTreeViewPrivate *priv;
   GtkTreeViewColumn *column;
-  GSList *slist;
   GList *columns;
-  gchar *name;
   gboolean hide_spacer;
-  va_list args;
 
   g_return_if_fail(GNC_IS_TREE_VIEW(view));
 
   ENTER(" ");
-  /* Delete any old list of column names */
-  priv = GNC_TREE_VIEW_GET_PRIVATE(view);
-  if (priv->default_visible) {
-    slist = priv->default_visible;
-    priv->default_visible = NULL;
-    g_slist_foreach(slist, (GFunc)g_free, NULL);
-    g_slist_free(slist);
-  }
 
-  /* Build a new list */
-  va_start (args, first_column_name);
-  name = first_column_name;
-  while (name != NULL) {
-    priv->default_visible =
-      g_slist_append(priv->default_visible, g_strdup(name));
-    name = va_arg(args, gchar*);
-  }
-  va_end (args);
-
   /* Update the view and gconf */
   columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(view));
   g_list_foreach(columns, (GFunc)gnc_tree_view_update_visibility, view);
   g_list_free(columns);
 
+  priv = GNC_TREE_VIEW_GET_PRIVATE(view);
   if (priv->gconf_section)
     priv->seen_gconf_visibility = TRUE;
 
   /* If only the first column is visible, hide the spacer and make that
    * column expand. */
-  hide_spacer = (first_column_name == NULL);
+  hide_spacer = (gnc_tree_view_count_visible_columns(view) == 1);
   column = gtk_tree_view_get_column(GTK_TREE_VIEW(view), 0);
   gtk_tree_view_column_set_expand(column, hide_spacer);
   gtk_tree_view_column_set_visible(priv->spacer_column, !hide_spacer);

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view.h	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view.h	2006-05-14 02:07:52 UTC (rev 14037)
@@ -70,6 +70,11 @@
    values: GINT_TO_POINTER(0) and GINT_TO_POINTER(1) */
 #define ALWAYS_VISIBLE  "always-visible"
 
+/* This attribute controls visibility of a non-gconf column or a gconf
+   column before a visibility preference has been recorded. Valid values:
+   GINT_TO_POINTER(0) and GINT_TO_POINTER(1)  */
+#define DEFAULT_VISIBLE  "default-visible"
+
 #define GNC_TREE_VIEW_COLUMN_DATA_NONE -1
 #define GNC_TREE_VIEW_COLUMN_COLOR_NONE -1
 #define GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS -1
@@ -289,21 +294,27 @@
  */
 void gnc_tree_view_set_model(GncTreeView *view, GtkTreeModel *model);
 
-/** Configure (by name) the default set of visible columns in an gnc
- *  tree view.  This is the list of columns that will be shown if the
- *  view isn't using gconf to manage column visibility.  If gconf is
- *  used, this list will be used the very first time the view is
- *  presented to the user, then gconf will be used after that.  The
- *  available list of columns can be found in the file
- *  gnc-tree-view-xxx.c.
+/** Make all the correct columns visible, respecting their default
+ *  visibility setting, their "always" visibility setting, and their
+ *  gconf visibility settings, if managed by gconf.
  *
  *  @param view A pointer to an gnc tree view.
+ */
+void gnc_tree_view_configure_columns (GncTreeView *view);
+
+/** Find a tree column given the "pref name" used with gconf.  This
+ *  function simply runs the list of all (visible and invisible)
+ *  columns looking for a match.  Column names were attached to each
+ *  column at the time the column was created.
  *
- *  @param column_names A list of column names to make visible.
+ *  @param view The visible tree widget.
+ *
+ *  @param id The "pref name" to find.
+ *
  */
-void gnc_tree_view_configure_columns (GncTreeView *view,
-				      gchar *first_column_name,
-				      ...);
+GtkTreeViewColumn *
+gnc_tree_view_find_column_by_name (GncTreeView *view,
+                                   const gchar *wanted);
 
 /** This function is called to set up or remove an association between
  *  a gconf section and the display of a view.  It will first remove

Modified: gnucash/trunk/src/import-export/import-account-matcher.c
===================================================================
--- gnucash/trunk/src/import-export/import-account-matcher.c	2006-05-14 00:09:26 UTC (rev 14036)
+++ gnucash/trunk/src/import-export/import-account-matcher.c	2006-05-14 02:07:52 UTC (rev 14037)
@@ -64,6 +64,7 @@
 build_acct_tree(struct _accountpickerdialog * picker)
 {
   GtkTreeView *account_tree;
+  GtkTreeViewColumn *col;
 
   /* Build a new account tree */
   TRACE("Begin");
@@ -71,16 +72,23 @@
   picker->account_tree = GNC_TREE_VIEW_ACCOUNT(account_tree);
   gtk_tree_view_set_headers_visible (account_tree, TRUE);
 
+  col = gnc_tree_view_find_column_by_name(GNC_TREE_VIEW(account_tree), "type");
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
   /* Add our custom column. */
-  gnc_tree_view_account_add_kvp_column (picker->account_tree,
+  col = gnc_tree_view_account_add_kvp_column (picker->account_tree,
 					_("Account ID"), "online_id");
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
 
+  col = gnc_tree_view_find_column_by_name(
+      GNC_TREE_VIEW(picker->account_tree), "type");
+  g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
   gtk_container_add(GTK_CONTAINER(picker->account_tree_sw),
 		    GTK_WIDGET(picker->account_tree));
 
   /* Configure the columns */
-  gnc_tree_view_configure_columns (GNC_TREE_VIEW(picker->account_tree),
-				   "type", "description", "online_id", NULL);
+  gnc_tree_view_configure_columns (GNC_TREE_VIEW(picker->account_tree));
 }
 
 /* When user clicks to create a new account */



More information about the gnucash-changes mailing list