Mercurial > audlegacy-plugins
annotate src/streambrowser/gui/streambrowser_win.c @ 2815:cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
author | Calin Crisan ccrisan@gmail.com |
---|---|
date | Sun, 13 Jul 2008 04:00:04 +0300 |
parents | 11fb1503ee4b |
children | 779125caa3ac |
rev | line source |
---|---|
2735 | 1 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
2 #include <stdlib.h> |
2735 | 3 #include <string.h> |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
4 #include <ctype.h> |
2735 | 5 #include <glib.h> |
6 #include <gtk/gtk.h> | |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
7 #include <gdk/gdkkeysyms.h> |
2735 | 8 |
9 #include "../streambrowser.h" | |
10 #include "streambrowser_win.h" | |
11 | |
12 | |
13 typedef struct { | |
14 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
15 streamdir_t* streamdir; |
2735 | 16 GtkWidget* table; |
17 GtkWidget* tree_view; | |
18 | |
19 } streamdir_gui_t; | |
20 | |
21 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
22 void (* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo); |
2735 | 23 |
24 static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text); | |
25 static GtkWidget* gtk_streamdir_tree_view_new(); | |
26 static GtkWidget* gtk_streamdir_table_new(GtkWidget *tree_view); | |
27 | |
28 static gboolean on_notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data); | |
29 static gboolean on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data); | |
30 static gboolean on_add_button_clicked(GtkButton *button, gpointer data); | |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
31 static gboolean on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
32 static gboolean on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
33 static gboolean on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data); |
2735 | 34 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
35 static streamdir_gui_t* find_streamdir_gui_by_name(gchar *name); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
36 static streamdir_gui_t* find_streamdir_gui_by_tree_view(GtkTreeView *tree_view); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
37 static streamdir_gui_t* find_streamdir_gui_by_table(GtkTable *table); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
38 static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir); |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
39 static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data); |
2735 | 40 |
41 static GtkWidget* notebook; | |
42 static GtkWidget* search_entry; | |
43 static GtkWidget* add_button; | |
44 static GtkWidget* streambrowser_window; | |
45 static GList* streamdir_gui_list; | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
46 static GtkCellRenderer* cell_renderer_pixbuf; |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
47 static GtkCellRenderer* cell_renderer_text; |
2735 | 48 |
49 | |
50 void streambrowser_win_init() | |
51 { | |
52 /* notebook */ | |
53 notebook = gtk_notebook_new(); | |
54 g_signal_connect(G_OBJECT(notebook), "switch-page", G_CALLBACK(on_notebook_switch_page), NULL); | |
55 gtk_widget_show(notebook); | |
56 | |
2764
d45b4beadf6c
Made "bluetooth" and "streambrowser" plugins translatable.
Stany HENRY <StrassBoy@gmail.com>
parents:
2757
diff
changeset
|
57 GtkWidget *search_label = gtk_label_new(_("Search:")); |
2735 | 58 gtk_widget_show(search_label); |
59 | |
60 /* search entry */ | |
61 search_entry = gtk_entry_new(); | |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
62 g_signal_connect(G_OBJECT(search_entry), "key-press-event", G_CALLBACK(on_search_entry_key_pressed), NULL); |
2735 | 63 gtk_widget_show(search_entry); |
64 | |
65 GtkWidget *hbox1 = gtk_hbox_new(FALSE, 0); | |
66 gtk_box_pack_start(GTK_BOX(hbox1), search_label, FALSE, TRUE, 3); | |
67 gtk_box_pack_start(GTK_BOX(hbox1), search_entry, TRUE, TRUE, 3); | |
68 gtk_widget_show(hbox1); | |
69 | |
70 /* add button */ | |
71 add_button = gtk_button_new_from_stock(GTK_STOCK_ADD); | |
72 g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(on_add_button_clicked), NULL); | |
73 gtk_widget_show(add_button); | |
74 | |
75 GtkWidget *vbox1 = gtk_vbox_new(FALSE, 3); | |
76 gtk_box_pack_start(GTK_BOX(vbox1), notebook, TRUE, TRUE, 0); | |
77 gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, TRUE, 0); | |
78 gtk_box_pack_start(GTK_BOX(vbox1), add_button, FALSE, TRUE, 0); | |
79 gtk_widget_show(vbox1); | |
80 | |
81 /* streambrowser window */ | |
82 streambrowser_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
2764
d45b4beadf6c
Made "bluetooth" and "streambrowser" plugins translatable.
Stany HENRY <StrassBoy@gmail.com>
parents:
2757
diff
changeset
|
83 gtk_window_set_title(GTK_WINDOW(streambrowser_window), _("Stream browser")); |
2735 | 84 gtk_window_set_position(GTK_WINDOW(streambrowser_window), GTK_WIN_POS_CENTER); |
85 gtk_window_set_default_size(GTK_WINDOW(streambrowser_window), 700, 400); | |
2791
f9c6a9cb442e
streambrowser has now an icon
Calin Crisan ccrisan@gmail.com
parents:
2790
diff
changeset
|
86 gtk_window_set_icon_from_file(GTK_WINDOW(streambrowser_window), STREAMBROWSER_ICON, NULL); |
2735 | 87 g_signal_connect(G_OBJECT(streambrowser_window), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), streambrowser_window); |
88 gtk_container_add(GTK_CONTAINER(streambrowser_window), vbox1); | |
89 | |
90 /* others */ | |
91 cell_renderer_pixbuf = gtk_cell_renderer_pixbuf_new(); | |
92 cell_renderer_text = gtk_cell_renderer_text_new(); | |
93 } | |
94 | |
95 void streambrowser_win_done() | |
96 { | |
97 } | |
98 | |
99 void streambrowser_win_show() | |
100 { | |
101 gtk_widget_show(streambrowser_window); | |
102 } | |
103 | |
104 void streambrowser_win_hide() | |
105 { | |
106 gtk_widget_hide(streambrowser_window); | |
107 } | |
108 | |
109 void streambrowser_win_set_streamdir(streamdir_t *streamdir, gchar *icon_filename) | |
110 { | |
111 GtkWidget *tree_view = NULL; | |
112 | |
113 /* search for an old instance of this streamdir and replace it */ | |
114 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_name(streamdir->name); | |
115 if (streamdir_gui != NULL) { | |
116 streamdir_delete(streamdir_gui->streamdir); | |
117 streamdir_gui->streamdir = streamdir; | |
118 tree_view = streamdir_gui->tree_view; | |
119 } | |
120 /* if no older instance of this streamdir has been found, we add a brand new one */ | |
121 else { | |
122 streamdir_gui = g_malloc(sizeof(streamdir_gui_t)); | |
123 | |
124 tree_view = gtk_streamdir_tree_view_new(); | |
125 | |
126 GtkWidget *table = gtk_streamdir_table_new(tree_view); | |
127 gtk_widget_show_all(table); | |
128 | |
129 GtkWidget *label = gtk_label_new_with_icon(icon_filename, streamdir->name); | |
130 gtk_widget_show_all(label); | |
131 | |
132 streamdir_gui->streamdir = streamdir; | |
133 streamdir_gui->tree_view = tree_view; | |
134 streamdir_gui->table = table; | |
135 | |
136 streamdir_gui_list = g_list_append(streamdir_gui_list, streamdir_gui); | |
137 | |
138 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label); | |
139 } | |
140 | |
141 /* fill the tree with categories */ | |
142 GtkTreeIter iter; | |
143 GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view))); | |
144 | |
145 gtk_tree_store_clear(store); | |
146 | |
147 int i, count = category_get_count(streamdir); | |
148 category_t *category; | |
149 for (i = 0; i < count; i++) { | |
150 category = category_get_by_index(streamdir, i); | |
151 | |
152 gtk_tree_store_append(store, &iter, NULL); | |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
153 gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1); |
2735 | 154 } |
155 } | |
156 | |
157 void streambrowser_win_set_category(streamdir_t *streamdir, category_t *category) | |
158 { | |
159 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_name(streamdir->name); | |
160 if (streamdir_gui == NULL) { | |
161 failure("gui: streambrowser_win_set_category() called with non-existent streamdir\n"); | |
162 return; | |
163 } | |
164 | |
165 GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view); | |
166 GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view))); | |
167 GtkTreePath *path; | |
168 GtkTreeIter iter, new_iter; | |
169 | |
170 /* clear all the previously added streaminfo in this category */ | |
171 path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), 0, -1); | |
172 if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) { | |
173 while (gtk_tree_store_remove(store, &iter)) | |
174 ; | |
175 } | |
176 | |
177 /* find the corresponding category tree iter */ | |
178 path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1); | |
179 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) | |
180 return; | |
181 | |
182 /* append the new streaminfos to the current category / iter */ | |
183 int i, count = streaminfo_get_count(category); | |
184 streaminfo_t *streaminfo; | |
185 for (i = 0; i < count; i++) { | |
186 streaminfo = streaminfo_get_by_index(category, i); | |
187 | |
188 gtk_tree_store_append(store, &new_iter, &iter); | |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
189 gtk_tree_store_set(store, &new_iter, 0, "gtk-directory", 1, streaminfo->name, 2, streaminfo->current_track, -1); |
2735 | 190 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
191 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
192 gtk_tree_path_free(path); |
2735 | 193 } |
194 | |
195 void streambrowser_win_set_update_function(void (*function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo)) | |
196 { | |
197 update_function = function; | |
198 } | |
199 | |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
200 void streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching) |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
201 { |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
202 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
203 GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
204 GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view)); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
205 GtkTreePath *path; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
206 GtkTreeIter iter; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
207 |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
208 /* find the corresponding category tree iter */ |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
209 path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
210 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
211 return; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
212 |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
213 if (fetching) { |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
214 gchar temp[DEF_STRING_LEN]; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
215 sprintf(temp, "<span style='italic' weight='heavy'>%s</span>", category->name); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
216 gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, temp, 2, "", -1); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
217 } |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
218 else { |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
219 gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1); |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
220 } |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
221 } |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
222 |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
223 void streambrowser_win_set_streaminfo_state(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean fetching) |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
224 { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
225 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
226 GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
227 GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view)); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
228 GtkTreePath *path; |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
229 GtkTreeIter iter; |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
230 |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
231 /* find the corresponding category tree iter */ |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
232 path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), streaminfo_get_index(category, streaminfo), -1); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
233 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
234 return; |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
235 |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
236 if (fetching) { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
237 gchar temp[DEF_STRING_LEN]; |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
238 sprintf(temp, "<span style='italic' weight='heavy'>%s</span>", streaminfo->name); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
239 gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, temp, 2, "", -1); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
240 } |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
241 else { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
242 gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, streaminfo->name, 2, "", -1); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
243 } |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
244 } |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
245 |
2735 | 246 static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text) |
247 { | |
248 GtkWidget *hbox = gtk_hbox_new(FALSE, 1); | |
249 GtkWidget *label = gtk_label_new(label_text); | |
250 GtkWidget *icon = gtk_image_new_from_file(icon_filename); | |
251 | |
252 gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, TRUE, 0); | |
253 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); | |
254 | |
255 return hbox; | |
256 } | |
257 | |
258 static GtkWidget *gtk_streamdir_tree_view_new() | |
259 { | |
260 GtkWidget *tree_view = gtk_tree_view_new(); | |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
261 |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
262 GtkTreeStore *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); |
2735 | 263 gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(store)); |
264 | |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
265 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), TRUE); |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
266 gtk_tree_view_set_search_entry(GTK_TREE_VIEW(tree_view), GTK_ENTRY(search_entry)); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
267 gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(tree_view), tree_view_search_equal_func, NULL, NULL); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
268 gtk_tree_view_set_search_column(GTK_TREE_VIEW(tree_view), 1); |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
269 g_signal_connect(G_OBJECT(tree_view), "key-press-event", G_CALLBACK(on_tree_view_key_pressed), NULL); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
270 g_signal_connect(G_OBJECT(tree_view), "cursor-changed", G_CALLBACK(on_tree_view_cursor_changed), NULL); |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
271 g_signal_connect(G_OBJECT(tree_view), "button-press-event", G_CALLBACK(on_tree_view_button_pressed), NULL); |
2735 | 272 |
2783
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
273 GtkTreeViewColumn *column = gtk_tree_view_column_new(); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
274 gtk_tree_view_column_pack_start(column, cell_renderer_pixbuf, TRUE); |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
275 gtk_tree_view_column_add_attribute(column, cell_renderer_pixbuf, "stock-id", 0); |
2783
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
276 gtk_tree_view_column_set_resizable(column, TRUE); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
277 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
278 |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
279 column = gtk_tree_view_column_new(); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
280 gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE); |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
281 gtk_tree_view_column_add_attribute(column, cell_renderer_text, "markup", 1); |
2783
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
282 gtk_tree_view_column_set_resizable(column, TRUE); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
283 gtk_tree_view_column_set_title(column, _("Stream name")); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
284 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
285 |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
286 column = gtk_tree_view_column_new(); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
287 gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
288 gtk_tree_view_column_add_attribute(column, cell_renderer_text, "text", 2); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
289 gtk_tree_view_column_set_resizable(column, TRUE); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
290 gtk_tree_view_column_set_title(column, _("Now playing")); |
8be380729806
made columns resizable in streambrowser's main win
Calin Crisan ccrisan@gmail.com
parents:
2782
diff
changeset
|
291 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
292 |
2735 | 293 return tree_view; |
294 } | |
295 | |
296 static GtkWidget* gtk_streamdir_table_new(GtkWidget *tree_view) | |
297 { | |
298 GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); | |
299 gtk_container_add(GTK_CONTAINER(scrolled_window), tree_view); | |
300 | |
301 GtkWidget *table = gtk_table_new(1, 1, FALSE); | |
302 gtk_table_attach(GTK_TABLE(table), scrolled_window, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); | |
303 | |
304 return table; | |
305 } | |
306 | |
307 static gboolean on_notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data) | |
308 { | |
309 if (page_num < 0) | |
310 return FALSE; | |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
311 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
312 /* only enable searching in the current tree (tab) */ |
2735 | 313 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
314 streamdir_gui_t *streamdir_gui; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
315 int i; |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
316 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
317 for (i = 0; i < g_list_length(streamdir_gui_list); i++) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
318 streamdir_gui = g_list_nth_data(streamdir_gui_list, i); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
319 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
320 if (i == page_num) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
321 gtk_tree_view_set_search_column(GTK_TREE_VIEW(streamdir_gui->tree_view), 1); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
322 else |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
323 gtk_tree_view_set_search_column(GTK_TREE_VIEW(streamdir_gui->tree_view), -1); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
324 } |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
325 |
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
326 /* clear the search box */ |
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
327 gtk_entry_set_text(GTK_ENTRY(search_entry), ""); |
2735 | 328 |
329 return TRUE; | |
330 } | |
331 | |
332 static gboolean on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data) | |
333 { | |
334 GtkTreePath *path; | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
335 GtkTreeIter iter; |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
336 GtkTreeModel *model; |
2735 | 337 |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
338 /* obtain the current category */ |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
339 gtk_tree_view_get_cursor(tree_view, &path, NULL); |
2735 | 340 |
341 if (path == NULL) | |
342 return TRUE; | |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
343 |
2735 | 344 gint *indices = gtk_tree_path_get_indices(path); |
345 if (gtk_tree_path_get_depth(path) != 1) { | |
346 gtk_tree_path_free(path); | |
347 return TRUE; | |
348 } | |
349 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
350 model = gtk_tree_view_get_model(tree_view); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
351 gtk_tree_model_get_iter(model, &iter, path); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
352 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
353 /* don't fetch a category that has been already fetched */ |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
354 if (gtk_tree_model_iter_has_child(model, &iter)) { |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
355 gtk_tree_path_free(path); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
356 return TRUE; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
357 } |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
358 |
2735 | 359 int category_index = indices[0]; |
360 | |
361 gtk_tree_path_free(path); | |
362 | |
363 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_tree_view(tree_view); | |
364 if (streamdir_gui == NULL) | |
365 return TRUE; | |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
366 |
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
367 /* issue an update on the current category */ |
2735 | 368 update_function(streamdir_gui->streamdir, category_get_by_index(streamdir_gui->streamdir, category_index), NULL); |
2757
4ec0e13208de
added shoutcast icon; fixed some small bugs
Calin Crisan ccrisan@gmail.com
parents:
2735
diff
changeset
|
369 |
2735 | 370 return TRUE; |
371 } | |
372 | |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
373 static gboolean on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data) |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
374 { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
375 /* double click adds the currently selected stream to the playlist */ |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
376 if (event->type == GDK_2BUTTON_PRESS) { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
377 on_add_button_clicked(NULL, NULL); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
378 } |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
379 |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
380 return FALSE; |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
381 } |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
382 |
2735 | 383 static gboolean on_add_button_clicked(GtkButton *button, gpointer data) |
384 { | |
385 GtkTreePath *path; | |
386 GtkTreeViewColumn *focus_column; | |
387 | |
388 GtkWidget *table = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook))); | |
389 streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_table(GTK_TABLE(table)); | |
390 if (streamdir_gui == NULL) | |
391 return TRUE; | |
392 | |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
393 GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view); |
2735 | 394 |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
395 gtk_tree_view_get_cursor(tree_view, &path, &focus_column); |
2735 | 396 |
397 if (path == NULL) | |
398 return TRUE; | |
399 | |
400 gint *indices = gtk_tree_path_get_indices(path); | |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
401 if (gtk_tree_path_get_depth(path) == 1) { |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
402 if (gtk_tree_view_row_expanded(tree_view, path)) |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
403 gtk_tree_view_collapse_row(tree_view, path); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
404 else |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
405 gtk_tree_view_expand_row(tree_view, path, FALSE); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
406 |
2735 | 407 gtk_tree_path_free(path); |
408 return TRUE; | |
409 } | |
410 | |
411 int category_index = indices[0]; | |
412 int streaminfo_index = indices[1]; | |
413 | |
414 gtk_tree_path_free(path); | |
415 | |
416 streamdir_t *streamdir = streamdir_gui->streamdir; | |
417 category_t *category = category_get_by_index(streamdir_gui->streamdir, category_index); | |
418 streaminfo_t *streaminfo = streaminfo_get_by_index(category, streaminfo_index); | |
419 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
420 gtk_entry_set_text(GTK_ENTRY(search_entry), ""); |
2735 | 421 update_function(streamdir, category, streaminfo); |
422 | |
423 return TRUE; | |
424 } | |
425 | |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
426 static gboolean on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
427 { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
428 if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) { |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
429 on_add_button_clicked(GTK_BUTTON(add_button), NULL); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
430 return FALSE; |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
431 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
432 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
433 if (event->keyval == GDK_Escape) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
434 gtk_entry_set_text(GTK_ENTRY(search_entry), ""); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
435 return FALSE; |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
436 } |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
437 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
438 return FALSE; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
439 } |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
440 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
441 static gboolean on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
442 { |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
443 gtk_widget_grab_focus(search_entry); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
444 on_search_entry_key_pressed(widget, event, data); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
445 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
446 return FALSE; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
447 } |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
448 |
2735 | 449 static streamdir_gui_t *find_streamdir_gui_by_name(gchar *name) |
450 { | |
451 GList *iterator; | |
452 streamdir_gui_t *streamdir_gui; | |
453 | |
454 for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) { | |
455 streamdir_gui = iterator->data; | |
456 | |
457 if (strcmp(streamdir_gui->streamdir->name, name) == 0) | |
458 return streamdir_gui; | |
459 } | |
460 | |
461 return NULL; | |
462 } | |
463 | |
464 static streamdir_gui_t *find_streamdir_gui_by_tree_view(GtkTreeView *tree_view) | |
465 { | |
466 GList *iterator; | |
467 streamdir_gui_t *streamdir_gui; | |
468 | |
469 for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) { | |
470 streamdir_gui = iterator->data; | |
471 | |
472 if ((void *) streamdir_gui->tree_view == (void *) tree_view) | |
473 return streamdir_gui; | |
474 } | |
475 | |
476 return NULL; | |
477 } | |
478 | |
479 static streamdir_gui_t *find_streamdir_gui_by_table(GtkTable *table) | |
480 { | |
481 GList *iterator; | |
482 streamdir_gui_t *streamdir_gui; | |
483 | |
484 for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) { | |
485 streamdir_gui = iterator->data; | |
486 | |
487 if ((void *) streamdir_gui->table == (void *) table) | |
488 return streamdir_gui; | |
489 } | |
490 | |
491 return NULL; | |
492 } | |
493 | |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
494 static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir) |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
495 { |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
496 GList *iterator; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
497 streamdir_gui_t *streamdir_gui; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
498 |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
499 for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) { |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
500 streamdir_gui = iterator->data; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
501 |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
502 if ((void *) streamdir_gui->streamdir == (void *) streamdir) |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
503 return streamdir_gui; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
504 } |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
505 |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
506 return NULL; |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
507 } |
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2783
diff
changeset
|
508 |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
509 static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data) |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
510 { |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
511 if (column == -1) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
512 return TRUE; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2797
diff
changeset
|
513 |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
514 GValue value = {0, }; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
515 gboolean ret; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
516 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
517 gtk_tree_model_get_value(model, iter, column, &value); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
518 const gchar *string = g_value_get_string(&value); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
519 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
520 if (string == NULL || string[0] == '\0' || key == NULL || key[0] == '\0') |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
521 ret = TRUE; |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
522 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
523 ret = !mystrcasestr(string, key); |
2782
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
524 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
525 g_value_unset(&value); |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
526 |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
527 return ret; |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
528 } |
c5005707a575
added basic search functionality
Calin Crisan ccrisan@gmail.com
parents:
2764
diff
changeset
|
529 |