> > 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));
> }
> 

Thanks to all who replied with comments.  

Here is the working function:

void build_server_list (GtkWidget *treeview)
{
        GtkListStore *liststore;
        GtkTreeIter iter;
        GtkCellRenderer *text_renderer = gtk_cell_renderer_text_new();
        GtkCellRenderer *pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
        GdkPixbuf *ws_pixbuf, *sv_pixbuf, *hp_pixbuf;
        GtkTreeViewColumn *pixbuf_column, *text_column;
        gint i = 0;
        gint count = 0;
        
        
        /* CREATE THE LISTSTORE MODEL */
        
        liststore = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
        
        
        /* ATTACHED THE LISTSTORE MODEL TO THE TREEVIEW */
        
        gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),
GTK_TREE_MODEL(liststore));
        
        
        /* DESCRIBE EACH COLUMN */
        
        pixbuf_column = gtk_tree_view_column_new_with_attributes (
                                                "Icon", 
                                                pixbuf_renderer,
                                                "pixbuf", 0,
                                                NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), pixbuf_column);
        
        text_column = gtk_tree_view_column_new_with_attributes (
                                                "Machine", 
                                                text_renderer,
                                                "text", 1,
                                                NULL);
        
        gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), text_column);
        
        
        /* GET SOME STOCK ICONS */
        /* getting a 'pixbuf' icon is the key here */
        
        ws_pixbuf = gtk_widget_render_icon(treeview, GTK_STOCK_ABOUT,
GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
        sv_pixbuf = gtk_widget_render_icon(treeview, GTK_STOCK_HARDDISK,
GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
        hp_pixbuf = gtk_widget_render_icon(treeview, GTK_STOCK_NETWORK,
GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
        
        
        /* FILL LISTSTORE MODEL WITH DATA */
        
        /* workstations */
        count = g_strv_length(workstations);
        for (i=0; i<count; i++) {
                gtk_list_store_append(liststore, &iter);
                gtk_list_store_set(liststore, &iter,
                        0, ws_pixbuf,
                        1, workstations[i], 
                        -1);
        }
        
        /* linux servers */
        count = g_strv_length(servers_linux);
        for (i=0; i<count; i++) {
                gtk_list_store_append(liststore, &iter);
                gtk_list_store_set(liststore, &iter,
                        0, sv_pixbuf,
                        1, servers_linux[i], 
                        -1);
        }
        
        /* hp servers */
        count = g_strv_length(servers_hp);
        for (i=0; i<count; i++) {
                gtk_list_store_append(liststore, &iter);
                gtk_list_store_set(liststore, &iter,
                        0, hp_pixbuf,
                        1, servers_hp[i], 
                        -1);
        }

}


_______________________________________________
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