]> Pileus Git - ~andy/gtk/commitdiff
hack on this some
authorHavoc Pennington <hp@redhat.com>
Mon, 8 Jan 2001 18:26:05 +0000 (18:26 +0000)
committerHavoc Pennington <hp@src.gnome.org>
Mon, 8 Jan 2001 18:26:05 +0000 (18:26 +0000)
2001-01-08  Havoc Pennington  <hp@redhat.com>

* tests/testtreeview.c: hack on this some

* gtk/gtktreestore.c (gtk_tree_store_setv): rename
gtk_tree_store_set_valist, v is for arrays, valist for varargs
list
(gtk_tree_store_getv): rename gtk_tree_store_get_valist

* gtk/gtkliststore.h: Add varargs set() and get() convenience
functions

13 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkliststore.c
gtk/gtkliststore.h
gtk/gtktreestore.c
gtk/gtktreestore.h
tests/testtreeview-plan.txt
tests/testtreeview.c

index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index df7121f59d59f465b716a11725be408fc4d5ee43..69f51cb9e51e625de722cca2b7f77902eacf852d 100644 (file)
@@ -1,3 +1,15 @@
+2001-01-08  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testtreeview.c: hack on this some
+
+       * gtk/gtktreestore.c (gtk_tree_store_setv): rename
+       gtk_tree_store_set_valist, v is for arrays, valist for varargs
+       list
+       (gtk_tree_store_getv): rename gtk_tree_store_get_valist
+
+       * gtk/gtkliststore.h: Add varargs set() and get() convenience
+       functions
+
 2001-01-08  Alexander Larsson  <alexl@redhat.com>
 
        * gtk/gtkwindow-decorate.[hc]:
index 6597abb0261a3bc158ee422505551c5b515c2ae9..88d3c6fd538b3bcd7071a665f120858f00d87e94 100644 (file)
@@ -22,6 +22,7 @@
 #include "gtkliststore.h"
 #include "gtktreedatalist.h"
 #include "gtksignal.h"
+#include <gobject/gvaluecollector.h>
 
 #define G_SLIST(x) ((GSList *) x)
 
@@ -474,6 +475,135 @@ gtk_list_store_set_cell (GtkListStore *list_store,
                           NULL, iter);
 }
 
+void
+gtk_list_store_set_valist (GtkListStore *list_store,
+                           GtkTreeIter  *iter,
+                           va_list     var_args)
+{
+  gint column;
+
+  g_return_if_fail (GTK_IS_LIST_STORE (list_store));
+
+  column = va_arg (var_args, gint);
+
+  while (column != -1)
+    {
+      GValue value = { 0, };
+      gchar *error = NULL;
+
+      if (column >= list_store->n_columns)
+       {
+         g_warning ("%s: Invalid column number %d added to iter (remember to end your list of columns with a -1)", G_STRLOC, column);
+         break;
+       }
+      g_value_init (&value, list_store->column_headers[column]);
+
+      G_VALUE_COLLECT (&value, var_args, &error);
+      if (error)
+       {
+         g_warning ("%s: %s", G_STRLOC, error);
+         g_free (error);
+
+         /* we purposely leak the value here, it might not be
+          * in a sane state if an error condition occoured
+          */
+         break;
+       }
+
+      gtk_list_store_set_cell (list_store,
+                              iter,
+                              column,
+                              &value);
+
+      g_value_unset (&value);
+
+      column = va_arg (var_args, gint);
+    }
+}
+
+/**
+ * gtk_list_store_set:
+ * @list_store: a #GtkListStore
+ * @iter: row iterator
+ * @Varargs: pairs of column number and value, terminated with -1
+ * 
+ * Sets the value of one or more cells in the row referenced by @iter.
+ * The variable argument list should contain integer column numbers,
+ * each column number followed by the value to be set. For example,
+ * The list is terminated by a -1. For example, to set column 0 with type
+ * %G_TYPE_STRING to "Foo", you would write gtk_list_store_set (store, iter,
+ * 0, "Foo", -1).
+ **/
+void
+gtk_list_store_set (GtkListStore *list_store,
+                   GtkTreeIter  *iter,
+                   ...)
+{
+  va_list var_args;
+
+  g_return_if_fail (GTK_IS_LIST_STORE (list_store));
+
+  va_start (var_args, iter);
+  gtk_list_store_set_valist (list_store, iter, var_args);
+  va_end (var_args);
+}
+
+void
+gtk_list_store_get_valist (GtkListStore *list_store,
+                           GtkTreeIter  *iter,
+                           va_list     var_args)
+{
+  gint column;
+
+  g_return_if_fail (GTK_IS_LIST_STORE (list_store));
+
+  column = va_arg (var_args, gint);
+
+  while (column != -1)
+    {
+      GValue value = { 0, };
+      gchar *error = NULL;
+
+      if (column >= list_store->n_columns)
+       {
+         g_warning ("%s: Invalid column number %d accessed (remember to end your list of columns with a -1)", G_STRLOC, column);
+         break;
+       }
+
+      gtk_list_store_get_value (GTK_TREE_MODEL (list_store), iter, column, &value);
+
+      G_VALUE_LCOPY (&value, var_args, &error);
+      if (error)
+       {
+         g_warning ("%s: %s", G_STRLOC, error);
+         g_free (error);
+
+         /* we purposely leak the value here, it might not be
+          * in a sane state if an error condition occoured
+          */
+         break;
+       }
+
+      g_value_unset (&value);
+
+      column = va_arg (var_args, gint);
+    }
+}
+
+void
+gtk_list_store_get (GtkListStore *list_store,
+                   GtkTreeIter  *iter,
+                   ...)
+{
+  va_list var_args;
+
+  g_return_if_fail (GTK_IS_LIST_STORE (list_store));
+
+  va_start (var_args, iter);
+  gtk_list_store_get_valist (list_store, iter, var_args);
+  va_end (var_args);
+}
+
 void
 gtk_list_store_remove (GtkListStore *list_store,
                       GtkTreeIter  *iter)
index dc91fa56724262cbc107840f8e85051d60879c5c..ff01ea37fc59bb1c56c64563a28525753ab54e43 100644 (file)
@@ -79,6 +79,18 @@ void          gtk_list_store_set_cell        (GtkListStore *store,
                                              GtkTreeIter  *iter,
                                              gint          column,
                                              GValue       *value);
+void          gtk_list_store_set             (GtkListStore *list_store,
+                                             GtkTreeIter  *iter,
+                                             ...);
+void          gtk_list_store_set_valist      (GtkListStore *list_store,
+                                             GtkTreeIter  *iter,
+                                             va_list       var_args);
+void          gtk_list_store_get             (GtkListStore *list_store,
+                                             GtkTreeIter  *iter,
+                                             ...);
+void          gtk_list_store_get_valist      (GtkListStore *list_store,
+                                             GtkTreeIter  *iter,
+                                             va_list       var_args);
 void          gtk_list_store_remove          (GtkListStore *store,
                                              GtkTreeIter  *iter);
 void          gtk_list_store_insert          (GtkListStore *store,
index 071a117a7b2bc7330661cb43815f5b8b46b8d02f..0c4bc516dfe83ae8c50cb507dd3e940c8dbdca8d 100644 (file)
@@ -536,9 +536,9 @@ gtk_tree_store_set_cell (GtkTreeStore *tree_store,
 }
 
 void
-gtk_tree_store_setv (GtkTreeStore *tree_store,
-                    GtkTreeIter  *iter,
-                    va_list    var_args)
+gtk_tree_store_set_valist (GtkTreeStore *tree_store,
+                           GtkTreeIter  *iter,
+                           va_list     var_args)
 {
   gint column;
 
@@ -546,14 +546,14 @@ gtk_tree_store_setv (GtkTreeStore *tree_store,
 
   column = va_arg (var_args, gint);
 
-  while (column >= 0)
+  while (column != -1)
     {
       GValue value = { 0, };
       gchar *error = NULL;
 
       if (column >= tree_store->n_columns)
        {
-         g_warning ("Invalid column number %d added to iter", column);
+         g_warning ("%s: Invalid column number %d added to iter (remember to end your list of columns with a -1)", G_STRLOC, column);
          break;
        }
       g_value_init (&value, tree_store->column_headers[column]);
@@ -581,6 +581,19 @@ gtk_tree_store_setv (GtkTreeStore *tree_store,
     }
 }
 
+/**
+ * gtk_tree_store_set:
+ * @tree_store: a #GtkTreeStore
+ * @iter: row iterator
+ * @Varargs: pairs of column number and value, terminated with -1
+ * 
+ * Sets the value of one or more cells in the row referenced by @iter.
+ * The variable argument list should contain integer column numbers,
+ * each column number followed by the value to be set. For example,
+ * The list is terminated by a -1. For example, to set column 0 with type
+ * %G_TYPE_STRING to "Foo", you would write gtk_tree_store_set (store, iter,
+ * 0, "Foo", -1).
+ **/
 void
 gtk_tree_store_set (GtkTreeStore *tree_store,
                    GtkTreeIter  *iter,
@@ -591,14 +604,14 @@ gtk_tree_store_set (GtkTreeStore *tree_store,
   g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
 
   va_start (var_args, iter);
-  gtk_tree_store_setv (tree_store, iter, var_args);
+  gtk_tree_store_set_valist (tree_store, iter, var_args);
   va_end (var_args);
 }
 
 void
-gtk_tree_store_getv (GtkTreeStore *tree_store,
-                    GtkTreeIter  *iter,
-                    va_list    var_args)
+gtk_tree_store_get_valist (GtkTreeStore *tree_store,
+                           GtkTreeIter  *iter,
+                           va_list     var_args)
 {
   gint column;
 
@@ -606,14 +619,14 @@ gtk_tree_store_getv (GtkTreeStore *tree_store,
 
   column = va_arg (var_args, gint);
 
-  while (column >= 0)
+  while (column != -1)
     {
       GValue value = { 0, };
       gchar *error = NULL;
 
       if (column >= tree_store->n_columns)
        {
-         g_warning ("Invalid column number %d accessed", column);
+         g_warning ("%s: Invalid column number %d accessed (remember to end your list of columns with a -1)", G_STRLOC, column);
          break;
        }
 
@@ -647,7 +660,7 @@ gtk_tree_store_get (GtkTreeStore *tree_store,
   g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
 
   va_start (var_args, iter);
-  gtk_tree_store_getv (tree_store, iter, var_args);
+  gtk_tree_store_get_valist (tree_store, iter, var_args);
   va_end (var_args);
 }
 
index 373c117927824836719f3d426c39ac624542b0dd..ab6abefa1d24ce2a971861ba5684386e100cba65 100644 (file)
@@ -84,13 +84,13 @@ void          gtk_tree_store_set_cell        (GtkTreeStore *tree_store,
 void          gtk_tree_store_set             (GtkTreeStore *tree_store,
                                              GtkTreeIter  *iter,
                                              ...);
-void          gtk_tree_store_setv            (GtkTreeStore *tree_store,
+void          gtk_tree_store_set_valist      (GtkTreeStore *tree_store,
                                              GtkTreeIter  *iter,
                                              va_list       var_args);
 void          gtk_tree_store_get             (GtkTreeStore *tree_store,
                                              GtkTreeIter  *iter,
                                              ...);
-void          gtk_tree_store_getv            (GtkTreeStore *tree_store,
+void          gtk_tree_store_get_valist      (GtkTreeStore *tree_store,
                                              GtkTreeIter  *iter,
                                              va_list       var_args);
 void          gtk_tree_store_remove          (GtkTreeStore *tree_store,
index 9662d699d67a0995bf1e2057589ec727505c83cf..20753f124ec167652f8df1b710a6d9a78179bd2e 100644 (file)
@@ -1,4 +1,11 @@
 This document is a laundry list of stuff to check if you want to
 verify that GtkTreeView and associated objects are working properly.
 
+TreeModel testing:
+
+ - all the TreeView/TreeModel tests in this document should be run 
+   with each of the different models testtreeview supports
+
+ - ensure that swapping in a new model for the tree view when there
+   was a preexisting one exists already 
 
index 0b38023ce662289758d7225ce4361e356aa4a1f6..509356c9da7f0322b075877bf89390d3695502f7 100644 (file)
@@ -79,11 +79,115 @@ GtkTreeModelTypes *gtk_tree_model_types_new           (void);
 
 typedef enum
 {
-  MODEL_TYPES,
-  MODEL_LAST  
+  /*   MODEL_TYPES, */
+  MODEL_TREE,
+  MODEL_LIST,
+  MODEL_SORTED_TREE,
+  MODEL_SORTED_LIST,
+  MODEL_NULL,
+  MODEL_LAST
 } ModelType;
 
+/* FIXME add a custom model to test */
 static GtkTreeModel *models[MODEL_LAST];
+static const char *model_names[MODEL_LAST] = {
+  "GtkTreeStore",
+  "GtkListStore",
+  "GtkTreeModelSort wrapping GtkTreeStore",
+  "GtkTreeModelSort wrapping GtkListStore",
+  "NULL (no model)"
+};
+
+static GtkTreeModel*
+create_list_model (void)
+{
+  GtkListStore *store;
+  GtkTreeIter iter;
+  gint i;
+  
+  store = gtk_list_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
+
+  i = 0;
+  while (i < 200)
+    {
+      char *msg;
+      
+      gtk_list_store_append (store, &iter);
+
+      msg = g_strdup_printf ("%d", i);
+      
+      gtk_list_store_set (store, &iter, 0, msg, 1, "Foo! Foo! Foo!", -1);
+
+      g_free (msg);
+      
+      ++i;
+    }
+
+  return GTK_TREE_MODEL (store);
+}
+
+static void
+typesystem_recurse (GType        type,
+                    GtkTreeIter *parent_iter,
+                    GtkTreeStore *store)
+{
+  GType* children;
+  guint n_children = 0;
+  gint i;
+  GtkTreeIter iter;
+  gchar *str;
+  
+  gtk_tree_store_append (store, &iter, parent_iter);
+
+  str = g_strdup_printf ("%d", type);
+  gtk_tree_store_set (store, &iter, 0, str, 1, g_type_name (type), -1);
+  g_free (str);
+  
+  children = g_type_children (type, &n_children);
+
+  i = 0;
+  while (i < n_children)
+    {
+      typesystem_recurse (children[i], &iter, store);
+
+      ++i;
+    }
+  
+  g_free (children);
+}
+
+static GtkTreeModel*
+create_tree_model (void)
+{
+  GtkTreeStore *store;
+  gint i;
+  
+  store = gtk_tree_store_new_with_types (2, G_TYPE_STRING, G_TYPE_STRING);
+
+  i = 0;
+  while (i < G_TYPE_LAST_RESERVED_FUNDAMENTAL)
+    {
+      typesystem_recurse (i, NULL, store);
+      
+      ++i;
+    }
+
+  return GTK_TREE_MODEL (store);
+}
+
+static void
+model_selected (GtkOptionMenu *om, gpointer data)
+{
+  GtkTreeView *tree_view = GTK_TREE_VIEW (data);
+  gint hist;
+
+  hist = gtk_option_menu_get_history (om);
+
+  if (models[hist] != gtk_tree_view_get_model (tree_view))
+    {
+      gtk_tree_view_set_model (tree_view, models[hist]);
+    }
+}
 
 int
 main (int    argc,
@@ -92,20 +196,52 @@ main (int    argc,
   GtkWidget *window;
   GtkWidget *sw;
   GtkWidget *tv;
+  GtkWidget *table;
+  GtkWidget *om;
+  GtkWidget *menu;
   GtkTreeViewColumn *col;
   GtkCellRenderer *rend;
+  GtkTreeModel *model;
   gint i;
   
   gtk_init (&argc, &argv);
 
+#if 0
   models[MODEL_TYPES] = GTK_TREE_MODEL (gtk_tree_model_types_new ());
+#endif
+  models[MODEL_LIST] = create_list_model ();
+  models[MODEL_TREE] = create_tree_model ();
+
+  model = create_list_model ();
+  models[MODEL_SORTED_LIST] = gtk_tree_model_sort_new_with_model (model, NULL, 0);
+  g_object_unref (G_OBJECT (model));
+
+  model = create_tree_model ();
+  models[MODEL_SORTED_TREE] = gtk_tree_model_sort_new_with_model (model, NULL, 0);
+  g_object_unref (G_OBJECT (model));
+  
+  models[MODEL_NULL] = NULL;
+  
+  menu = gtk_menu_new ();
   
   i = 0;
   while (i < MODEL_LAST)
     {
+      GtkWidget *mi;
+      const char *name;
+
+      name = model_names[i];
+      
+      mi = gtk_menu_item_new_with_label (name);
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+#if 0
       window = create_prop_editor (G_OBJECT (models[i]));
 
-      gtk_window_set_title (GTK_WINDOW (window), g_type_name (G_TYPE_FROM_INSTANCE (models[i])));
+      gtk_window_set_title (GTK_WINDOW (window),                            
+                            name);
+#endif
 
       ++i;
     }
@@ -113,16 +249,38 @@ main (int    argc,
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
   gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
+
+  table = gtk_table_new (2, 1, FALSE);
+
+  gtk_container_add (GTK_CONTAINER (window), table);
+
+  om = gtk_option_menu_new ();
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
+  
+  gtk_table_attach (GTK_TABLE (table), om,
+                    0, 1, 0, 1,
+                    0, 0, 
+                    0, 0);
   
   sw = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
                                   GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_AUTOMATIC);
 
-  gtk_container_add (GTK_CONTAINER (window), sw);
+  
+  gtk_table_attach (GTK_TABLE (table), sw,
+                    0, 1, 1, 2,
+                    GTK_EXPAND | GTK_FILL,
+                    GTK_EXPAND | GTK_FILL,
+                    0, 0);
   
   tv = gtk_tree_view_new_with_model (models[0]);
 
+  gtk_signal_connect (GTK_OBJECT (om),
+                      "changed",
+                      GTK_SIGNAL_FUNC (model_selected),
+                      tv);
+  
   gtk_container_add (GTK_CONTAINER (sw), tv);
 
   rend = gtk_cell_renderer_text_new ();
@@ -148,7 +306,7 @@ main (int    argc,
 
   g_object_unref (G_OBJECT (rend));
   g_object_unref (G_OBJECT (col));
-
+  
   gtk_widget_show_all (window);
   
   gtk_main ();