Tony,

I don't claim to be an expert but I have used IconViews & TreeViews.  I
have never seen it attempted the way you show.  Using GDK_TYPE_PIXBUF as
the column type is all I have every tried, based on code I've seen from
others, and it has always worked.

Here are a few observation of your code.
1. I have been successful using the following creation order.
    A. Load all icons I plan to use into an array of *pixbuf or some
type of permanent(life of the app) container.
    B. Create the list store
    model = GTK_TREE_MODEL (gtk_list_store_new (2,
                                              GDK_TYPE_PIXBUF,  /* ICON
*/
                                              G_TYPE_STRING     /*
Location Name  */
                                            ));
    C. Create the iconview (or treeview) & show it, plan on adding it to
a scrolled_window.
      iconview = gtk_icon_view_new_with_model (GTK_TREE_MODEL (model));
      gtk_icon_view_set_orientation (GTK_ICON_VIEW (iconview),
GTK_ORIENTATION_VERTICAL);
      gtk_icon_view_set_columns (GTK_ICON_VIEW (iconview), -1);
      gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (iconview),
GTK_SELECTION_SINGLE);
      gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (iconview),
ID_SEL_ICON);
      gtk_icon_view_set_markup_column (GTK_ICON_VIEW (iconview),
ID_SEL_LABEL);

    D. Load each record to the list store with a pointer to pixmap, and
text string
      gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
                      ID_SEL_ICON, pixbuf, ID_SEL_LABEL, "Home", -1);

Iconviews don't need all the renderer fuss and may work well for you.
gfhcm.sourceforge.net contains an application i wrote that uses both
icon views and tree views, look at the gfhcm-client or gfhcmc codeset.  

You might also find answers for the GTK API Docs or the TreeView
tutorial.
http://developer.gnome.org/doc/API/2.0/gtk/TreeWidget.html
http://developer.gnome.org/doc/API/2.0/gtk/GtkIconView.html
http://scentric.net/tutorial/treeview-tutorial.html

Hope this helps,

James,

On Sun, 2006-12-17 at 23:06 -0500, Tony Freeman wrote:

> > Hello,
> > 
> > I need help understanding how one would create a treeview so that the
> > first column is an icon and the second column is text.  The icon and
> > text represent the type of machine the user can choose (linux
> > workstation, linux server, hp).  I want to have a different icon for
> > each machine; however, I notice that whatever icon is called last in the
> > code that I have written, is the icon that is shown for ALL the rows.  
> > 
> > Please help!  What am I doing wrong?
> 
> I forgot to attach the code!
> 
> Here it is:
> 
> 
> void build_server_list (GtkWidget *treeview)
> {
>       GtkListStore *liststore;
>       GtkTreeIter iter;
>       GtkCellRenderer *text_renderer;
>       GtkCellRenderer *icon_renderer;
>       gint i = 0;
>       gint count = 0;
>       
> 
>       icon_renderer = gtk_cell_renderer_pixbuf_new();
>       gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(treeview),
>                                                0,      
>                                                " ",  
>                                                icon_renderer,
>                                                NULL);
>       
>       text_renderer = gtk_cell_renderer_text_new();
>       gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(treeview),
>                                                1,      
>                                                " ",  
>                                                text_renderer,
>                                                NULL);
>       
>       liststore = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
>       
>       /* workstations */
>       count = g_strv_length(workstations);
>       g_object_set(icon_renderer, "stock-id", "gtk-close", NULL);
>       for (i=0; i<count; i++) {
>               gtk_list_store_append(liststore, &iter);
>               gtk_list_store_set(liststore, &iter,
>                       0, icon_renderer,
>                       1, workstations[i], -1);
>       }
>       
>       /* linux servers */
>       count = g_strv_length(servers_linux);
>       g_object_set(icon_renderer, "stock-id", "gtk-save", NULL);
>       for (i=0; i<count; i++) {
>               gtk_list_store_append(liststore, &iter);
>               gtk_list_store_set(liststore, &iter,
>                       0, icon_renderer,
>                       1, servers_linux[i], -1);
>       }
>       
>       
>       /* hp servers */
>       count = g_strv_length(servers_hp);
>       g_object_set(icon_renderer, "stock-id", "gtk-open", NULL);
>       for (i=0; i<count; i++) {
>               gtk_list_store_append(liststore, &iter);
>               gtk_list_store_set(liststore, &iter,
>                       0, icon_renderer,
>                       1, servers_hp[i], -1);
>       }
>       
>       gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),
> GTK_TREE_MODEL(liststore));
> }
> 
> 
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to