diff src/streambrowser/gui/streambrowser_win.c @ 2790:c156102069ae

background fetching of streaming info is now indicated in gui
author Calin Crisan ccrisan@gmail.com
date Wed, 09 Jul 2008 22:07:55 +0300
parents 8be380729806
children f9c6a9cb442e
line wrap: on
line diff
--- a/src/streambrowser/gui/streambrowser_win.c	Wed Jul 09 16:18:55 2008 +0200
+++ b/src/streambrowser/gui/streambrowser_win.c	Wed Jul 09 22:07:55 2008 +0300
@@ -32,6 +32,7 @@
 static streamdir_gui_t*		find_streamdir_gui_by_name(gchar *name);
 static streamdir_gui_t*		find_streamdir_gui_by_tree_view(GtkTreeView *tree_view);
 static streamdir_gui_t*		find_streamdir_gui_by_table(GtkTable *table);
+static streamdir_gui_t*		find_streamdir_gui_by_streamdir(streamdir_t *streamdir);
 static gboolean			tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data);
 
 
@@ -85,7 +86,6 @@
 
 	/* others */
 	cell_renderer_pixbuf = gtk_cell_renderer_pixbuf_new();
-	g_object_set(G_OBJECT(cell_renderer_pixbuf), "stock-id", "gtk-directory", NULL);
 	cell_renderer_text = gtk_cell_renderer_text_new();
 }
 
@@ -147,7 +147,7 @@
 		category = category_get_by_index(streamdir, i);
 
 		gtk_tree_store_append(store, &iter, NULL);
-		gtk_tree_store_set(store, &iter, 0, NULL, 1, category->name, 2, "", -1);
+		gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1);
 	}
 }
 
@@ -183,7 +183,7 @@
 		streaminfo = streaminfo_get_by_index(category, i);
 
 		gtk_tree_store_append(store, &new_iter, &iter);
-		gtk_tree_store_set(store, &new_iter, 0, NULL, 1, streaminfo->name, 2, streaminfo->current_track, -1);
+		gtk_tree_store_set(store, &new_iter, 0, "gtk-directory", 1, streaminfo->name, 2, streaminfo->current_track, -1);
 	}
 }
 
@@ -192,6 +192,29 @@
 	update_function = function;
 }
 
+void streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching)
+{
+	streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir);
+	GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
+	GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view));
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	
+	/* find the corresponding category tree iter */
+	path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1);
+	if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
+		return;
+	
+	if (fetching) {
+		gchar temp[DEF_STRING_LEN];
+		sprintf(temp, "<span style='italic' weight='heavy'>%s</span>", category->name);
+		gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, temp, 2, "", -1);
+	}
+	else {
+		gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1);
+	}
+}
+
 static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text)
 {
 	GtkWidget *hbox = gtk_hbox_new(FALSE, 1);
@@ -208,7 +231,7 @@
 {
 	GtkWidget *tree_view = gtk_tree_view_new();
 
-	GtkTreeStore *store = gtk_tree_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
+	GtkTreeStore *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(store));
 
 	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), TRUE);
@@ -218,13 +241,13 @@
 
 	GtkTreeViewColumn *column = gtk_tree_view_column_new();
 	gtk_tree_view_column_pack_start(column, cell_renderer_pixbuf, TRUE);
-	gtk_tree_view_column_add_attribute(column, cell_renderer_pixbuf, "pixbuf", 0);
+	gtk_tree_view_column_add_attribute(column, cell_renderer_pixbuf, "stock-id", 0);
 	gtk_tree_view_column_set_resizable(column, TRUE);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
 	
 	column = gtk_tree_view_column_new();
 	gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE);
-	gtk_tree_view_column_add_attribute(column, cell_renderer_text, "text", 1);
+	gtk_tree_view_column_add_attribute(column, cell_renderer_text, "markup", 1);
 	gtk_tree_view_column_set_resizable(column, TRUE);
 	gtk_tree_view_column_set_title(column, _("Stream name"));
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
@@ -438,6 +461,21 @@
 	return NULL;
 }
 
+static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir)
+{
+	GList *iterator;
+	streamdir_gui_t *streamdir_gui;
+
+	for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) {
+		streamdir_gui = iterator->data;
+
+		if ((void *) streamdir_gui->streamdir == (void *) streamdir)
+			return streamdir_gui;
+	}
+	
+	return NULL;
+}
+
 static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data)
 {
 	GValue value = {0, };