render text and image in a cell (use G_TYPE_OBJECT for specifying GDK_TYPE_PIXBUF)
authorMaksym Veremeyenko <verem@m1stereo.tv>
Sun, 19 Jun 2011 11:42:42 +0000 (14:42 +0300)
committerMaksym Veremeyenko <verem@m1stereo.tv>
Sun, 19 Jun 2011 11:42:42 +0000 (14:42 +0300)
src/ui.c

index 5d8b116..17539d4 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -41,7 +41,7 @@ typedef struct column_desc
     GType type;
 } column_desc_t;
 
-const static column_desc_t playlist_columns[] =
+static const column_desc_t playlist_columns[] =
 {
     {
         "REM",
@@ -49,7 +49,7 @@ const static column_desc_t playlist_columns[] =
     },
     {
         "B",
-        G_TYPE_STRING
+        G_TYPE_OBJECT
     },
     {
         "CH",
@@ -130,16 +130,33 @@ static GtkWidget* create_treeview(GtkWidget* top, char* name, const column_desc_
     gtk_widget_show (treeview);
 
     for(i = 0, count = 0; columns[i].title; i++, count++)
-        list_store_types[i] = columns[i].type;
+        list_store_types[i] = (columns[i].type == G_TYPE_OBJECT)?GDK_TYPE_PIXBUF:columns[i].type;
 
     list_store = gtk_list_store_newv(count, list_store_types);
     gtk_tree_view_set_model( GTK_TREE_VIEW( treeview ), GTK_TREE_MODEL( list_store ) );
 
     for(i = 0; columns[i].title; i++)
     {
+        char* prop;
+
+        if(list_store_types[i] == G_TYPE_STRING)
+        {
+            renderer = gtk_cell_renderer_text_new();
+            prop = "text";
+        }
+        else if(list_store_types[i] == G_TYPE_OBJECT)
+        {
+            renderer = gtk_cell_renderer_pixbuf_new();
+            prop = "pixbuf";
+        }
+        else
+            renderer = NULL;
+
+        if(!renderer) continue;
+
         renderer = gtk_cell_renderer_toggle_new();
         column = gtk_tree_view_column_new_with_attributes(
-            columns[i].title, renderer, "text", i, NULL);
+            columns[i].title, renderer, prop, i, NULL);
         gtk_tree_view_append_column(GTK_TREE_VIEW( treeview ), column);
     };