Mercurial > audlegacy
comparison src/audacious/ui_fileinfo.c @ 4009:ba6258a39662
icon, codec and quality info added to file info box. Added new tuple field FIELD_MIMETYPE used for icon resolving
author | Eugene Zagidullin <e.asphyx@gmail.com> |
---|---|
date | Sun, 25 Nov 2007 02:07:20 +0300 |
parents | ce1ce0a6cc74 |
children | ce791ae274aa |
comparison
equal
deleted
inserted
replaced
3995:3496674a54b5 | 4009:ba6258a39662 |
---|---|
27 #include <glib/gi18n.h> | 27 #include <glib/gi18n.h> |
28 #include <gtk/gtk.h> | 28 #include <gtk/gtk.h> |
29 #include <string.h> | 29 #include <string.h> |
30 #include <stddef.h> | 30 #include <stddef.h> |
31 #include <stdio.h> | 31 #include <stdio.h> |
32 #include <stdarg.h> | |
32 #include <sys/types.h> | 33 #include <sys/types.h> |
33 #include <dirent.h> | 34 #include <dirent.h> |
34 #include <unistd.h> | 35 #include <unistd.h> |
35 #include <errno.h> | 36 #include <errno.h> |
36 #include <sys/types.h> | 37 #include <sys/types.h> |
69 GtkWidget *entry_track; | 70 GtkWidget *entry_track; |
70 GtkWidget *entry_genre; | 71 GtkWidget *entry_genre; |
71 | 72 |
72 GtkWidget *image_artwork; | 73 GtkWidget *image_artwork; |
73 | 74 |
75 GtkWidget *image_fileicon; | |
76 GtkWidget *label_codec_name; | |
77 GtkWidget *label_quality; | |
78 | |
74 static void | 79 static void |
75 fileinfo_entry_set_text(GtkWidget *widget, const char *text) | 80 fileinfo_entry_set_text(GtkWidget *widget, const char *text) |
76 { | 81 { |
77 if (widget == NULL) | 82 if (widget == NULL) |
78 return; | 83 return; |
79 | 84 |
80 gtk_entry_set_text(GTK_ENTRY(widget), text); | 85 gtk_entry_set_text(GTK_ENTRY(widget), text); |
86 } | |
87 | |
88 static void | |
89 fileinfo_label_set_text(GtkWidget *widget, const char *text) | |
90 { | |
91 gchar *tmp; | |
92 | |
93 if (widget == NULL) | |
94 return; | |
95 | |
96 if (text) { | |
97 tmp = g_strdup_printf("<span size=\"small\">%s</span>", text); | |
98 gtk_label_set_text(GTK_LABEL(widget), tmp); | |
99 gtk_label_set_use_markup(GTK_LABEL(widget), TRUE); | |
100 g_free(tmp); | |
101 } else { | |
102 gtk_label_set_text(GTK_LABEL(widget), _("<span size=\"small\">n/a</span>")); | |
103 gtk_label_set_use_markup(GTK_LABEL(widget), TRUE); | |
104 } | |
81 } | 105 } |
82 | 106 |
83 static void | 107 static void |
84 fileinfo_entry_set_text_free(GtkWidget *widget, char *text) | 108 fileinfo_entry_set_text_free(GtkWidget *widget, char *text) |
85 { | 109 { |
146 fileinfo_entry_set_text(entry_location, ""); | 170 fileinfo_entry_set_text(entry_location, ""); |
147 | 171 |
148 fileinfo_entry_set_image(image_artwork, DATA_DIR "/images/audio.png"); | 172 fileinfo_entry_set_image(image_artwork, DATA_DIR "/images/audio.png"); |
149 } | 173 } |
150 | 174 |
175 GdkPixbuf * | |
176 themed_icon_lookup(gint size, const gchar *name, ...) /* NULL-terminated list of icon names */ | |
177 { | |
178 GtkIconTheme *icon_theme; | |
179 GdkPixbuf *pixbuf; | |
180 GError *error = NULL; | |
181 gchar *n; | |
182 va_list par; | |
183 | |
184 icon_theme = gtk_icon_theme_get_default (); | |
185 //fprintf(stderr, "looking for %s\n", name); | |
186 pixbuf = gtk_icon_theme_load_icon (icon_theme, name, size, 0, &error); | |
187 if(pixbuf) return pixbuf; | |
188 | |
189 if(error != NULL) g_error_free(error); | |
190 | |
191 /* fallback */ | |
192 va_start(par, name); | |
193 while((n = (gchar*)va_arg(par, gchar *)) != NULL) { | |
194 //fprintf(stderr, "looking for %s\n", n); | |
195 error = NULL; | |
196 pixbuf = gtk_icon_theme_load_icon (icon_theme, n, size, 0, &error); | |
197 if(pixbuf) { | |
198 //fprintf(stderr, "%s is ok\n", n); | |
199 va_end(par); | |
200 return pixbuf; | |
201 } | |
202 if(error != NULL) g_error_free(error); | |
203 } | |
204 | |
205 return NULL; | |
206 } | |
207 | |
208 GdkPixbuf * | |
209 mime_icon_lookup(gint size, const gchar *mime_type) /* smart icon resolving routine :) */ | |
210 { | |
211 gchar *mime_as_is; /* audio-x-mp3 */ | |
212 gchar *mime_gnome; /* gnome-mime-audio-x-mp3 */ | |
213 gchar *mime_generic; /* audio-x-generic */ | |
214 gchar *mime_gnome_generic; /* gnome-mime-audio */ | |
215 | |
216 GdkPixbuf *icon = NULL; | |
217 | |
218 gchar **s = g_strsplit(mime_type, "/", 2); | |
219 if(s[1] != NULL) { | |
220 mime_as_is = g_strdup_printf("%s-%s", s[0], s[1]); | |
221 mime_gnome = g_strdup_printf("gnome-mime-%s-%s", s[0], s[1]); | |
222 mime_generic = g_strdup_printf("%s-x-generic", s[0]); | |
223 mime_gnome_generic = g_strdup_printf("gnome-mime-%s", s[0]); | |
224 //fprintf(stderr, "will look for %s, %s, %s, %s, %s\n", mime_as_is, mime_gnome, mime_generic, mime_gnome_generic, s[0]); | |
225 icon = themed_icon_lookup(size, mime_as_is, mime_gnome, mime_generic, mime_gnome_generic, s[0], NULL); /* s[0] is category */ | |
226 g_free(mime_gnome_generic); | |
227 g_free(mime_generic); | |
228 g_free(mime_gnome); | |
229 g_free(mime_as_is); | |
230 } | |
231 g_strfreev(s); | |
232 | |
233 return icon; | |
234 } | |
235 | |
151 void | 236 void |
152 create_fileinfo_window(void) | 237 create_fileinfo_window(void) |
153 { | 238 { |
154 GtkWidget *hbox; | 239 GtkWidget *hbox; |
155 GtkWidget *vbox1; | 240 GtkWidget *vbox1; |
160 GtkWidget *label_comment; | 245 GtkWidget *label_comment; |
161 GtkWidget *label_genre; | 246 GtkWidget *label_genre; |
162 GtkWidget *label_year; | 247 GtkWidget *label_year; |
163 GtkWidget *label_track; | 248 GtkWidget *label_track; |
164 GtkWidget *label_location; | 249 GtkWidget *label_location; |
250 GtkWidget *label_codec; | |
251 GtkWidget *label_codec_label; | |
252 GtkWidget *label_quality_label; | |
253 GtkWidget *codec_hbox; | |
254 GtkWidget *codec_table; | |
165 GtkWidget *table1; | 255 GtkWidget *table1; |
166 GtkWidget *bbox_close; | 256 GtkWidget *bbox_close; |
167 GtkWidget *btn_close; | 257 GtkWidget *btn_close; |
168 GtkWidget *alignment; | 258 GtkWidget *alignment; |
169 | 259 |
286 gtk_box_pack_start (GTK_BOX (vbox2), alignment, FALSE, FALSE, 0); | 376 gtk_box_pack_start (GTK_BOX (vbox2), alignment, FALSE, FALSE, 0); |
287 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 6, 0, 0); | 377 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 6, 0, 0); |
288 | 378 |
289 entry_location = gtk_entry_new(); | 379 entry_location = gtk_entry_new(); |
290 gtk_container_add(GTK_CONTAINER(alignment), entry_location); | 380 gtk_container_add(GTK_CONTAINER(alignment), entry_location); |
381 | |
382 label_codec = gtk_label_new(_("<span size=\"small\">Codec</span>")); | |
383 gtk_box_pack_start (GTK_BOX (vbox2), label_codec, FALSE, FALSE, 0); | |
384 gtk_label_set_use_markup(GTK_LABEL(label_codec), TRUE); | |
385 gtk_misc_set_alignment(GTK_MISC(label_codec), 0, 0.5); | |
386 | |
387 alignment = gtk_alignment_new (0.5, 0.5, 1, 1); | |
388 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 6, 0, 0); | |
389 gtk_box_pack_start (GTK_BOX (vbox2), alignment, FALSE, FALSE, 0); | |
390 | |
391 codec_hbox = gtk_hbox_new(FALSE, 6); | |
392 gtk_container_add (GTK_CONTAINER(alignment), codec_hbox); | |
393 | |
394 image_fileicon = gtk_image_new_from_stock (GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG); | |
395 gtk_box_pack_start (GTK_BOX (codec_hbox), image_fileicon, FALSE, FALSE, 0); | |
396 | |
397 codec_table = gtk_table_new(2, 2, FALSE); | |
398 gtk_table_set_row_spacings (GTK_TABLE(codec_table), 6); | |
399 gtk_table_set_col_spacings (GTK_TABLE(codec_table), 12); | |
400 gtk_box_pack_start (GTK_BOX (codec_hbox), codec_table, FALSE, FALSE, 0); | |
401 | |
402 label_codec_label = gtk_label_new(_("<span size=\"small\">Codec name:</span>")); | |
403 gtk_label_set_use_markup(GTK_LABEL(label_codec_label), TRUE); | |
404 gtk_misc_set_alignment(GTK_MISC(label_codec_label), 0, 0.5); | |
405 label_quality_label = gtk_label_new(_("<span size=\"small\">Quality:</span>")); | |
406 gtk_label_set_use_markup(GTK_LABEL(label_quality_label), TRUE); | |
407 gtk_misc_set_alignment(GTK_MISC(label_quality_label), 0, 0.5); | |
408 | |
409 label_codec_name = gtk_label_new(_("<span size=\"small\">n/a</span>")); | |
410 gtk_label_set_use_markup(GTK_LABEL(label_codec_name), TRUE); | |
411 gtk_misc_set_alignment(GTK_MISC(label_codec_name), 0, 0.5); | |
412 label_quality = gtk_label_new(_("<span size=\"small\">n/a</span>")); | |
413 gtk_label_set_use_markup(GTK_LABEL(label_quality), TRUE); | |
414 gtk_misc_set_alignment(GTK_MISC(label_quality), 0, 0.5); | |
415 | |
416 gtk_table_attach(GTK_TABLE(codec_table), label_codec_label, 0, 1, 0, 1, | |
417 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), | |
418 (GtkAttachOptions) (0), 0, 0); | |
419 gtk_table_attach(GTK_TABLE(codec_table), label_codec_name, 1, 2, 0, 1, | |
420 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), | |
421 (GtkAttachOptions) (0), 0, 0); | |
422 gtk_table_attach(GTK_TABLE(codec_table), label_quality_label, 0, 1, 1, 2, | |
423 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), | |
424 (GtkAttachOptions) (0), 0, 0); | |
425 gtk_table_attach(GTK_TABLE(codec_table), label_quality, 1, 2, 1, 2, | |
426 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), | |
427 (GtkAttachOptions) (0), 0, 0); | |
291 | 428 |
292 bbox_close = gtk_hbutton_box_new(); | 429 bbox_close = gtk_hbutton_box_new(); |
293 gtk_box_pack_start(GTK_BOX(vbox1), bbox_close, FALSE, FALSE, 0); | 430 gtk_box_pack_start(GTK_BOX(vbox1), bbox_close, FALSE, FALSE, 0); |
294 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox_close), GTK_BUTTONBOX_END); | 431 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox_close), GTK_BUTTONBOX_END); |
295 | 432 |
303 | 440 |
304 void | 441 void |
305 fileinfo_show_for_tuple(Tuple *tuple) | 442 fileinfo_show_for_tuple(Tuple *tuple) |
306 { | 443 { |
307 gchar *tmp = NULL; | 444 gchar *tmp = NULL; |
445 GdkPixbuf *icon = NULL; | |
308 | 446 |
309 if (tuple == NULL) | 447 if (tuple == NULL) |
310 return; | 448 return; |
311 | 449 |
312 gtk_widget_realize(fileinfo_win); | 450 gtk_widget_realize(fileinfo_win); |
331 g_strdup_printf("%d", tuple_get_int(tuple, FIELD_YEAR, NULL))); | 469 g_strdup_printf("%d", tuple_get_int(tuple, FIELD_YEAR, NULL))); |
332 | 470 |
333 if (tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL)) | 471 if (tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL)) |
334 fileinfo_entry_set_text_free(entry_track, | 472 fileinfo_entry_set_text_free(entry_track, |
335 g_strdup_printf("%d", tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL))); | 473 g_strdup_printf("%d", tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL))); |
474 | |
475 fileinfo_label_set_text(label_codec_name, tuple_get_string(tuple, FIELD_CODEC, NULL)); | |
476 fileinfo_label_set_text(label_quality, tuple_get_string(tuple, FIELD_QUALITY, NULL)); | |
477 | |
478 tmp = (gchar *)tuple_get_string(tuple, FIELD_MIMETYPE, NULL); | |
479 icon = mime_icon_lookup(48, tmp ? tmp : "audio/x-generic"); | |
480 if (icon) { | |
481 if (image_fileicon) gtk_image_set_from_pixbuf (GTK_IMAGE(image_fileicon), icon); | |
482 g_object_unref(icon); | |
483 } | |
336 | 484 |
337 tmp = fileinfo_recursive_get_image( | 485 tmp = fileinfo_recursive_get_image( |
338 tuple_get_string(tuple, FIELD_FILE_PATH, NULL), | 486 tuple_get_string(tuple, FIELD_FILE_PATH, NULL), |
339 tuple_get_string(tuple, FIELD_FILE_NAME, NULL), 0); | 487 tuple_get_string(tuple, FIELD_FILE_NAME, NULL), 0); |
340 | 488 |