+typedef enum
+{
+ COLUMNS_NONE,
+ COLUMNS_ONE,
+ COLUMNS_LOTS,
+ COLUMNS_LAST
+} ColumnsType;
+
+#define N_COLUMNS 9
+
+static GType*
+get_model_types (void)
+{
+ static GType column_types[N_COLUMNS] = { 0 };
+
+ if (column_types[0] == 0)
+ {
+ column_types[0] = G_TYPE_STRING;
+ column_types[1] = G_TYPE_STRING;
+ column_types[2] = GDK_TYPE_PIXBUF;
+ column_types[3] = G_TYPE_FLOAT;
+ column_types[4] = G_TYPE_UINT;
+ column_types[5] = G_TYPE_UCHAR;
+ column_types[6] = G_TYPE_CHAR;
+ column_types[7] = G_TYPE_BOOLEAN;
+ column_types[8] = G_TYPE_INT;
+ }
+
+ return column_types;
+}
+
+static void
+set_columns_type (GtkTreeView *tree_view, ColumnsType type)
+{
+ GtkTreeViewColumn *col;
+ GtkCellRenderer *rend;
+
+ col = gtk_tree_view_get_column (tree_view, 0);
+ while (col)
+ {
+ gtk_tree_view_remove_column (tree_view, col);
+
+ col = gtk_tree_view_get_column (tree_view, 0);
+ }
+
+ switch (type)
+ {
+ case COLUMNS_NONE:
+ break;
+
+ case COLUMNS_LOTS:
+ rend = gtk_cell_renderer_text_new ();
+
+ col = gtk_tree_view_column_new_with_attributes ("Column 1",
+ rend,
+ "text", 1,
+ NULL);
+
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
+
+ g_object_unref (G_OBJECT (rend));
+ g_object_unref (G_OBJECT (col));
+
+ rend = gtk_cell_renderer_text_pixbuf_new ();
+
+ col = gtk_tree_view_column_new_with_attributes ("Column 2",
+ rend,
+ "text", 0,
+ "pixbuf", 2,
+ NULL);
+
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
+
+ g_object_unref (G_OBJECT (rend));
+ g_object_unref (G_OBJECT (col));
+
+ /* FALL THRU */
+
+ case COLUMNS_ONE:
+ rend = gtk_cell_renderer_text_new ();
+
+ col = gtk_tree_view_column_new_with_attributes ("Column 0",
+ rend,
+ "text", 0,
+ NULL);
+
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view), col, 0);
+
+ g_object_unref (G_OBJECT (rend));
+ g_object_unref (G_OBJECT (col));
+
+ default:
+ break;
+ }
+}
+
+static GdkPixbuf *our_pixbuf;
+