Mercurial > audlegacy
annotate Plugins/Input/vorbis/fileinfo.c @ 1458:f12d7e208b43 trunk
[svn] Update FSF address in copyright notices. Update autotools templates.
author | chainsaw |
---|---|
date | Wed, 02 Aug 2006 15:44:07 -0700 |
parents | 6cc5538851d6 |
children | 705d4c089fce |
rev | line source |
---|---|
61 | 1 /* BMP - Cross-platform multimedia player |
2 * Copyright (C) 2003-2004 BMP development team. | |
3 * | |
4 * Based on XMMS: | |
5 * Copyright (C) 1998-2003 XMMS development team. | |
6 * | |
7 * This program is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU General Public License | |
9 * as published by the Free Software Foundation; either version 2 | |
10 * of the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 * GNU General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
1458
f12d7e208b43
[svn] Update FSF address in copyright notices. Update autotools templates.
chainsaw
parents:
983
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
61 | 20 * 02111-1307, USA. |
21 * | |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 # include "config.h" | |
26 #endif | |
27 | |
28 #include <glib.h> | |
29 #include <glib/gi18n.h> | |
30 #include <gtk/gtk.h> | |
31 #include <ogg/ogg.h> | |
32 #include <vorbis/codec.h> | |
33 #include <vorbis/vorbisfile.h> | |
34 | |
35 #include <math.h> | |
36 #include <stdlib.h> | |
37 #include <string.h> | |
38 | |
39 #include <unistd.h> | |
40 | |
41 #include "audacious/util.h" | |
42 #include <libaudacious/util.h> | |
43 #include <libaudacious/vfs.h> | |
44 | |
45 #include "vorbis.h" | |
46 #include "vcedit.h" | |
47 | |
48 #include "ogg.xpm" | |
49 | |
50 static struct vte_struct { | |
51 VFSFile *in; | |
52 gchar *filename; | |
53 } vte; | |
54 | |
55 static void fail(const gchar * error); | |
56 static void save_cb(GtkWidget * w, gpointer data); | |
57 static void remove_cb(GtkWidget * w, gpointer data); | |
58 static gint init_files(vcedit_state * state); | |
59 static gint close_files(vcedit_state * state); | |
60 | |
61 extern GMutex *vf_mutex; | |
62 static GtkWidget *window = NULL; | |
63 static GList *genre_list = NULL; | |
64 | |
65 static GtkWidget *title_entry, *album_entry, *performer_entry; | |
66 static GtkWidget *tracknumber_entry, *date_entry; | |
67 static GtkWidget *genre_combo, *user_comment_entry; | |
68 #ifdef ALL_VORBIS_TAGS | |
69 static GtkWidget *description_entry, *version_entry, *isrc_entry; | |
70 static GtkWidget *copyright_entry, *organization_entry, *location_entry; | |
71 #endif | |
72 static GtkWidget *rg_track_entry, *rg_album_entry, *rg_track_peak_entry, | |
73 *rg_album_peak_entry; | |
74 static GtkWidget *rg_track_label, *rg_album_label, *rg_track_peak_label, | |
75 *rg_album_peak_label; | |
76 static GtkWidget *rg_show_button; | |
77 | |
78 GtkWidget *save_button, *remove_button; | |
79 GtkWidget *rg_frame, *rg_table; | |
80 | |
81 /* From mpg123.c, as no standardized Ogg Vorbis genres exists. */ | |
82 static const gchar *vorbis_genres[] = { | |
83 N_("Blues"), N_("Classic Rock"), N_("Country"), N_("Dance"), | |
84 N_("Disco"), N_("Funk"), N_("Grunge"), N_("Hip-Hop"), | |
85 N_("Jazz"), N_("Metal"), N_("New Age"), N_("Oldies"), | |
86 N_("Other"), N_("Pop"), N_("R&B"), N_("Rap"), N_("Reggae"), | |
87 N_("Rock"), N_("Techno"), N_("Industrial"), N_("Alternative"), | |
88 N_("Ska"), N_("Death Metal"), N_("Pranks"), N_("Soundtrack"), | |
89 N_("Euro-Techno"), N_("Ambient"), N_("Trip-Hop"), N_("Vocal"), | |
90 N_("Jazz+Funk"), N_("Fusion"), N_("Trance"), N_("Classical"), | |
91 N_("Instrumental"), N_("Acid"), N_("House"), N_("Game"), | |
92 N_("Sound Clip"), N_("Gospel"), N_("Noise"), N_("AlternRock"), | |
93 N_("Bass"), N_("Soul"), N_("Punk"), N_("Space"), | |
94 N_("Meditative"), N_("Instrumental Pop"), | |
95 N_("Instrumental Rock"), N_("Ethnic"), N_("Gothic"), | |
96 N_("Darkwave"), N_("Techno-Industrial"), N_("Electronic"), | |
97 N_("Pop-Folk"), N_("Eurodance"), N_("Dream"), | |
98 N_("Southern Rock"), N_("Comedy"), N_("Cult"), | |
99 N_("Gangsta Rap"), N_("Top 40"), N_("Christian Rap"), | |
100 N_("Pop/Funk"), N_("Jungle"), N_("Native American"), | |
101 N_("Cabaret"), N_("New Wave"), N_("Psychedelic"), N_("Rave"), | |
102 N_("Showtunes"), N_("Trailer"), N_("Lo-Fi"), N_("Tribal"), | |
103 N_("Acid Punk"), N_("Acid Jazz"), N_("Polka"), N_("Retro"), | |
104 N_("Musical"), N_("Rock & Roll"), N_("Hard Rock"), N_("Folk"), | |
105 N_("Folk/Rock"), N_("National Folk"), N_("Swing"), | |
106 N_("Fast-Fusion"), N_("Bebob"), N_("Latin"), N_("Revival"), | |
107 N_("Celtic"), N_("Bluegrass"), N_("Avantgarde"), | |
108 N_("Gothic Rock"), N_("Progressive Rock"), | |
109 N_("Psychedelic Rock"), N_("Symphonic Rock"), N_("Slow Rock"), | |
110 N_("Big Band"), N_("Chorus"), N_("Easy Listening"), | |
111 N_("Acoustic"), N_("Humour"), N_("Speech"), N_("Chanson"), | |
112 N_("Opera"), N_("Chamber Music"), N_("Sonata"), N_("Symphony"), | |
113 N_("Booty Bass"), N_("Primus"), N_("Porn Groove"), | |
114 N_("Satire"), N_("Slow Jam"), N_("Club"), N_("Tango"), | |
115 N_("Samba"), N_("Folklore"), N_("Ballad"), N_("Power Ballad"), | |
116 N_("Rhythmic Soul"), N_("Freestyle"), N_("Duet"), | |
117 N_("Punk Rock"), N_("Drum Solo"), N_("A Cappella"), | |
118 N_("Euro-House"), N_("Dance Hall"), N_("Goa"), | |
119 N_("Drum & Bass"), N_("Club-House"), N_("Hardcore"), | |
120 N_("Terror"), N_("Indie"), N_("BritPop"), N_("Negerpunk"), | |
121 N_("Polsk Punk"), N_("Beat"), N_("Christian Gangsta Rap"), | |
122 N_("Heavy Metal"), N_("Black Metal"), N_("Crossover"), | |
123 N_("Contemporary Christian"), N_("Christian Rock"), | |
124 N_("Merengue"), N_("Salsa"), N_("Thrash Metal"), | |
125 N_("Anime"), N_("JPop"), N_("Synthpop") | |
126 }; | |
127 | |
128 static const gchar * | |
129 get_comment(vorbis_comment * vc, const gchar * tag) | |
130 { | |
131 const gchar *value; | |
132 | |
133 g_return_val_if_fail(tag != NULL, ""); | |
134 | |
135 if (!vc) | |
136 return ""; | |
137 | |
138 if ((value = vorbis_comment_query(vc, (gchar *) tag, 0))) | |
139 return value; | |
140 else | |
141 return ""; | |
142 } | |
143 | |
144 static gboolean | |
145 str_equal_nocase(gconstpointer a, | |
146 gconstpointer b) | |
147 { | |
148 return strcasecmp((const gchar *) a, (const gchar *) b) == 0; | |
149 } | |
150 | |
151 static GHashTable * | |
152 hash_table_from_vorbis_comment(vorbis_comment * vc) | |
153 { | |
154 GHashTable *table; | |
155 gint i; | |
156 | |
157 table = g_hash_table_new_full(g_str_hash, str_equal_nocase, | |
158 g_free, g_free); | |
159 | |
160 for (i = 0; i < vc->comments; i++) { | |
161 gchar **frags; | |
162 #ifdef DEBUG | |
163 g_message(vc->user_comments[i]); | |
164 #endif | |
165 frags = g_strsplit(vc->user_comments[i], "=", 2); | |
166 | |
167 /* FIXME: need more rigorous checks to guard against | |
168 borqued comments */ | |
169 | |
170 /* No RHS? */ | |
171 if (!frags[1]) frags[1] = g_strdup(""); | |
172 | |
173 g_hash_table_replace(table, frags[0], frags[1]); | |
174 g_free(frags); | |
175 } | |
176 | |
177 return table; | |
178 } | |
179 | |
180 static void | |
181 comment_hash_add_tag(GHashTable * table, | |
182 const gchar * tag, | |
183 const gchar * value) | |
184 { | |
185 g_hash_table_replace(table, g_strdup(tag), g_strdup(value)); | |
186 } | |
187 | |
188 | |
189 static void | |
190 vorbis_comment_add_swapped(gchar * key, | |
191 gchar * value, | |
192 vorbis_comment * vc) | |
193 { | |
194 vorbis_comment_add_tag(vc, key, value); | |
195 } | |
196 | |
197 static void | |
198 hash_table_to_vorbis_comment(vorbis_comment * vc, GHashTable * table) | |
199 { | |
200 vorbis_comment_clear(vc); | |
201 g_hash_table_foreach(table, (GHFunc) vorbis_comment_add_swapped, | |
202 vc); | |
203 } | |
204 | |
205 | |
206 static void | |
207 fail(const gchar * error) | |
208 { | |
209 gchar *errorstring; | |
210 errorstring = g_strdup_printf(_("An error occured:\n%s"), error); | |
211 | |
212 xmms_show_message(_("Error!"), errorstring, _("Ok"), FALSE, NULL, NULL); | |
213 | |
214 g_free(errorstring); | |
215 return; | |
216 } | |
217 | |
218 | |
219 static void | |
220 save_cb(GtkWidget * w, gpointer data) | |
221 { | |
222 const gchar *track_name, *performer, *album_name, *date, *track_number; | |
223 const gchar *genre, *user_comment; | |
224 #ifdef ALL_VORBIS_TAGS | |
225 const gchar *description, *version, *isrc, *copyright, *organization; | |
226 const gchar *location; | |
227 #endif | |
228 const gchar *rg_track_gain, *rg_album_gain, *rg_track_peak, *rg_album_peak; | |
229 | |
230 GHashTable *comment_hash; | |
231 | |
232 vcedit_state *state; | |
233 vorbis_comment *comment; | |
234 | |
235 if (!g_strncasecmp(vte.filename, "http://", 7)) | |
236 return; | |
237 | |
238 state = vcedit_new_state(); | |
239 | |
240 g_mutex_lock(vf_mutex); | |
241 if (init_files(state) < 0) { | |
242 fail(_("Failed to modify tag (open)")); | |
243 goto close; | |
244 } | |
245 | |
246 comment = vcedit_comments(state); | |
247 comment_hash = hash_table_from_vorbis_comment(comment); | |
248 | |
249 track_name = gtk_entry_get_text(GTK_ENTRY(title_entry)); | |
250 performer = gtk_entry_get_text(GTK_ENTRY(performer_entry)); | |
251 album_name = gtk_entry_get_text(GTK_ENTRY(album_entry)); | |
252 track_number = gtk_entry_get_text(GTK_ENTRY(tracknumber_entry)); | |
253 genre = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry)); | |
254 date = gtk_entry_get_text(GTK_ENTRY(date_entry)); | |
255 user_comment = gtk_entry_get_text(GTK_ENTRY(user_comment_entry)); | |
256 #ifdef ALL_VORBIS_TAGS | |
257 location = gtk_entry_get_text(GTK_ENTRY(location_entry)); | |
258 description = gtk_entry_get_text(GTK_ENTRY(description_entry)); | |
259 version = gtk_entry_get_text(GTK_ENTRY(version_entry)); | |
260 isrc = gtk_entry_get_text(GTK_ENTRY(isrc_entry)); | |
261 organization = gtk_entry_get_text(GTK_ENTRY(organization_entry)); | |
262 copyright = gtk_entry_get_text(GTK_ENTRY(copyright_entry)); | |
263 #endif | |
264 rg_track_gain = gtk_entry_get_text(GTK_ENTRY(rg_track_entry)); | |
265 rg_album_gain = gtk_entry_get_text(GTK_ENTRY(rg_album_entry)); | |
266 rg_track_peak = gtk_entry_get_text(GTK_ENTRY(rg_track_peak_entry)); | |
267 rg_album_peak = gtk_entry_get_text(GTK_ENTRY(rg_album_peak_entry)); | |
268 | |
269 comment_hash_add_tag(comment_hash, "title", track_name); | |
270 comment_hash_add_tag(comment_hash, "artist", performer); | |
271 comment_hash_add_tag(comment_hash, "album", album_name); | |
272 comment_hash_add_tag(comment_hash, "tracknumber", track_number); | |
273 comment_hash_add_tag(comment_hash, "genre", genre); | |
274 comment_hash_add_tag(comment_hash, "date", date); | |
275 comment_hash_add_tag(comment_hash, "comment", user_comment); | |
276 | |
277 #ifdef ALL_VORBIS_TAGS | |
278 comment_hash_add_tag(comment_hash, "location", location); | |
279 comment_hash_add_tag(comment_hash, "description", description); | |
280 comment_hash_add_tag(comment_hash, "version", version); | |
281 comment_hash_add_tag(comment_hash, "isrc", isrc); | |
282 comment_hash_add_tag(comment_hash, "organization", organization); | |
283 comment_hash_add_tag(comment_hash, "copyright", copyright); | |
284 #endif | |
285 | |
286 comment_hash_add_tag(comment_hash, "replaygain_track_gain", rg_track_gain); | |
287 comment_hash_add_tag(comment_hash, "replaygain_album_gain", rg_album_gain); | |
288 comment_hash_add_tag(comment_hash, "replaygain_track_peak", rg_track_peak); | |
289 comment_hash_add_tag(comment_hash, "replaygain_album_peak", rg_album_peak); | |
290 | |
291 hash_table_to_vorbis_comment(comment, comment_hash); | |
292 g_hash_table_destroy(comment_hash); | |
293 | |
294 if (close_files(state) < 0) | |
295 fail(_("Failed to modify tag (close)")); | |
296 else { | |
297 gtk_widget_set_sensitive(save_button, FALSE); | |
298 gtk_widget_set_sensitive(remove_button, TRUE); | |
299 } | |
300 | |
301 | |
302 close: | |
303 vcedit_clear(state); | |
304 g_mutex_unlock(vf_mutex); | |
305 } | |
306 | |
307 static void | |
308 remove_cb(GtkWidget * w, gpointer data) | |
309 { | |
310 vcedit_state *state; | |
311 vorbis_comment *comment; | |
312 | |
313 if (!g_strncasecmp(vte.filename, "http://", 7)) | |
314 return; | |
315 | |
316 state = vcedit_new_state(); | |
317 | |
318 g_mutex_lock(vf_mutex); | |
319 if (init_files(state) < 0) { | |
320 fail(_("Failed to modify tag")); | |
321 goto close; | |
322 } | |
323 | |
324 comment = vcedit_comments(state); | |
325 | |
326 vorbis_comment_clear(comment); | |
327 | |
328 if (close_files(state) < 0) { | |
329 fail(_("Failed to modify tag")); | |
330 } | |
331 else { | |
332 gtk_entry_set_text(GTK_ENTRY(title_entry), ""); | |
333 gtk_entry_set_text(GTK_ENTRY(album_entry), ""); | |
334 gtk_entry_set_text(GTK_ENTRY(performer_entry), ""); | |
335 gtk_entry_set_text(GTK_ENTRY(tracknumber_entry), ""); | |
336 gtk_entry_set_text(GTK_ENTRY(date_entry), ""); | |
337 gtk_entry_set_text(GTK_ENTRY(genre_combo), ""); | |
338 gtk_entry_set_text(GTK_ENTRY(user_comment_entry), ""); | |
339 } | |
340 | |
341 close: | |
342 vcedit_clear(state); | |
343 g_mutex_unlock(vf_mutex); | |
344 /* gtk_widget_destroy(window); */ | |
345 } | |
346 | |
347 static void | |
348 rg_show_cb(GtkWidget * w, gpointer data) | |
349 { | |
350 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rg_show_button))) { | |
351 gtk_widget_show(rg_frame); | |
352 } | |
353 else { | |
354 gtk_widget_hide(rg_frame); | |
355 } | |
356 } | |
357 | |
358 static gint | |
359 init_files(vcedit_state * state) | |
360 { | |
361 if ((vte.in = vfs_fopen(vte.filename, "rb")) == NULL) { | |
362 #ifdef DEBUG | |
363 g_message("fileinfo.c: couldn't open file %s", vte.filename); | |
364 #endif | |
365 return -1; | |
366 } | |
367 | |
368 if (vcedit_open(state, vte.in) < 0) { | |
369 #ifdef DEBUG | |
370 g_message("fileinfo.c: couldn't open file for editing %s", | |
371 vte.filename); | |
372 #endif | |
373 vfs_fclose(vte.in); | |
374 return -1; | |
375 } | |
376 | |
377 #ifdef DEBUG | |
378 g_message("fileinfo.c: file successfully opened for editing %s", | |
379 vte.filename); | |
380 #endif | |
381 | |
382 return 0; | |
383 } | |
384 | |
385 static gint | |
386 close_files(vcedit_state * state) | |
387 { | |
388 gint retval = 0, ofh; | |
389 gchar *tmpfn; | |
390 VFSFile *out; | |
391 | |
392 tmpfn = g_strdup_printf("%s.XXXXXX", vte.filename); | |
393 | |
394 if ((ofh = mkstemp(tmpfn)) < 0) { | |
395 g_free(tmpfn); | |
396 vfs_fclose(vte.in); | |
397 #ifdef DEBUG | |
398 g_critical("fileinfo.c: couldn't create temp file"); | |
399 #endif | |
400 return -1; | |
401 } | |
402 else { | |
403 #ifdef DEBUG | |
404 g_message("fileinfo.c: created temp file %s", tmpfn); | |
405 #endif | |
406 } | |
407 | |
408 if ((out = vfs_fopen(tmpfn, "wb")) == NULL) { | |
409 close(ofh); | |
410 remove(tmpfn); | |
411 g_free(tmpfn); | |
412 vfs_fclose(vte.in); | |
413 #ifdef DEBUG | |
414 g_critical("fileinfo.c: couldn't open temp file"); | |
415 #endif | |
416 return -1; | |
417 } | |
418 else { | |
419 #ifdef DEBUG | |
420 g_message("fileinfo.c: opened temp file %s", tmpfn); | |
421 #endif | |
422 } | |
423 | |
424 if (vcedit_write(state, out) < 0) { | |
425 #ifdef DEBUG | |
426 g_warning("vcedit_write: %s", state->lasterror); | |
427 #endif | |
428 retval = -1; | |
429 } | |
430 | |
431 vfs_fclose(vte.in); | |
432 | |
433 if (vfs_fclose(out) != 0) { | |
434 #ifdef DEBUG | |
435 g_critical("fileinfo.c: couldn't close out file"); | |
436 #endif | |
437 retval = -1; | |
438 } | |
439 else { | |
440 #ifdef DEBUG | |
441 g_message("fileinfo.c: outfile closed"); | |
442 #endif | |
443 } | |
444 | |
445 if (retval < 0 || rename(tmpfn, vte.filename) < 0) { | |
446 remove(tmpfn); | |
447 retval = -1; | |
448 #ifdef DEBUG | |
449 g_critical("fileinfo.c: couldn't rename file"); | |
450 #endif | |
451 } | |
452 else { | |
453 #ifdef DEBUG | |
454 g_message("fileinfo.c: file %s renamed successfully to %s", tmpfn, | |
455 vte.filename); | |
456 #endif | |
457 } | |
458 | |
459 g_free(tmpfn); | |
460 return retval; | |
461 } | |
462 | |
463 | |
464 static void | |
465 label_set_text(GtkLabel * label, const gchar * format, ...) | |
466 { | |
467 va_list args; | |
468 gchar *text; | |
469 | |
470 va_start(args, format); | |
471 text = g_strdup_vprintf(format, args); | |
472 va_end(args); | |
473 | |
474 gtk_label_set_text(label, text); | |
475 g_free(text); | |
476 } | |
477 | |
478 void | |
479 change_buttons(void) | |
480 { | |
481 gtk_widget_set_sensitive(GTK_WIDGET(save_button), TRUE); | |
482 } | |
483 | |
484 | |
485 /***********************************************************************/ | |
486 | |
487 void | |
488 vorbis_file_info_box(gchar * filename) | |
489 { | |
490 gchar *filename_utf8, *title; | |
491 const gchar *rg_track_gain, *rg_track_peak; | |
492 const gchar *rg_album_gain, *rg_album_peak; | |
493 | |
701
d539e5c5f730
[svn] Fixes of the remaining GCC 4.1 warnings from external contributor Diego "Flameeyes" Petteno (Gentoo).
chainsaw
parents:
257
diff
changeset
|
494 gint time, minutes, seconds, bitrate, rate, channels, filesize; |
d539e5c5f730
[svn] Fixes of the remaining GCC 4.1 warnings from external contributor Diego "Flameeyes" Petteno (Gentoo).
chainsaw
parents:
257
diff
changeset
|
495 gsize i; |
61 | 496 |
497 OggVorbis_File vf; | |
498 vorbis_info *vi; | |
499 vorbis_comment *comment = NULL; | |
500 | |
501 VFSFile *fh; | |
502 | |
503 gboolean clear_vf = FALSE; | |
504 | |
505 GtkWidget *pixmapwid; | |
506 GdkPixbuf *pixbuf; | |
507 PangoAttrList *attrs; | |
508 PangoAttribute *attr; | |
509 | |
510 GtkWidget *boxx; | |
511 GtkWidget *img; | |
512 GtkWidget *test_table; | |
513 | |
514 static GtkWidget *info_frame, *info_box, *bitrate_label, *rate_label; | |
515 static GtkWidget *bitrate_label_val, *rate_label_val; | |
516 | |
517 static GtkWidget *channel_label, *length_label, *filesize_label; | |
518 static GtkWidget *channel_label_val, *length_label_val, | |
519 *filesize_label_val; | |
520 | |
521 static GtkWidget *filename_entry, *tag_frame; | |
522 | |
523 g_free(vte.filename); | |
524 vte.filename = g_strdup(filename); | |
525 | |
526 if (!window) { | |
527 GtkWidget *hbox, *label, *filename_hbox, *vbox, *left_vbox; | |
528 GtkWidget *table, *bbox, *cancel_button; | |
529 | |
530 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
531 gtk_window_set_type_hint(GTK_WINDOW(window), | |
532 GDK_WINDOW_TYPE_HINT_DIALOG); | |
533 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); | |
534 g_signal_connect(G_OBJECT(window), "destroy", | |
535 G_CALLBACK(gtk_widget_destroyed), &window); | |
536 gtk_container_set_border_width(GTK_CONTAINER(window), 10); | |
537 | |
538 vbox = gtk_vbox_new(FALSE, 10); | |
539 gtk_container_add(GTK_CONTAINER(window), vbox); | |
540 | |
541 filename_hbox = gtk_hbox_new(FALSE, 5); | |
542 gtk_box_pack_start(GTK_BOX(vbox), filename_hbox, FALSE, TRUE, 0); | |
543 | |
544 pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **) | |
545 gnome_mime_audio_ogg_xpm); | |
546 pixmapwid = gtk_image_new_from_pixbuf(pixbuf); | |
547 gtk_misc_set_alignment(GTK_MISC(pixmapwid), 0, 0); | |
548 gtk_box_pack_start(GTK_BOX(filename_hbox), pixmapwid, FALSE, FALSE, | |
549 0); | |
550 | |
551 attrs = pango_attr_list_new(); | |
552 | |
553 attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD); | |
554 attr->start_index = 0; | |
555 attr->end_index = -1; | |
556 pango_attr_list_insert(attrs, attr); | |
557 | |
558 label = gtk_label_new(_("Name:")); | |
559 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
560 gtk_box_pack_start(GTK_BOX(filename_hbox), label, FALSE, FALSE, 0); | |
561 | |
562 filename_entry = gtk_entry_new(); | |
563 gtk_editable_set_editable(GTK_EDITABLE(filename_entry), FALSE); | |
564 gtk_box_pack_start(GTK_BOX(filename_hbox), filename_entry, TRUE, | |
565 TRUE, 0); | |
566 | |
567 hbox = gtk_hbox_new(FALSE, 10); | |
568 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); | |
569 | |
570 left_vbox = gtk_table_new(4, 7, FALSE); | |
571 gtk_box_pack_start(GTK_BOX(hbox), left_vbox, FALSE, FALSE, 0); | |
572 | |
573 tag_frame = gtk_frame_new(_(" Ogg Vorbis Tag ")); | |
574 gtk_table_attach(GTK_TABLE(left_vbox), tag_frame, 2, 4, 0, 1, | |
575 GTK_FILL, GTK_FILL, 0, 4); | |
576 | |
577 table = gtk_table_new(16, 6, FALSE); | |
578 gtk_container_set_border_width(GTK_CONTAINER(table), 5); | |
579 gtk_container_add(GTK_CONTAINER(tag_frame), table); | |
580 | |
581 label = gtk_label_new(_("Title:")); | |
582 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
583 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
584 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, | |
585 GTK_FILL, GTK_FILL, 5, 5); | |
586 | |
587 title_entry = gtk_entry_new(); | |
588 gtk_table_attach(GTK_TABLE(table), title_entry, 1, 4, 0, 1, | |
589 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
590 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
591 | |
592 label = gtk_label_new(_("Artist:")); | |
593 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
594 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
595 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, | |
596 GTK_FILL, GTK_FILL, 5, 5); | |
597 | |
598 performer_entry = gtk_entry_new(); | |
599 gtk_table_attach(GTK_TABLE(table), performer_entry, 1, 4, 1, 2, | |
600 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
601 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
602 | |
603 label = gtk_label_new(_("Album:")); | |
604 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
605 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
606 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, | |
607 GTK_FILL, GTK_FILL, 5, 5); | |
608 | |
609 album_entry = gtk_entry_new(); | |
610 gtk_table_attach(GTK_TABLE(table), album_entry, 1, 4, 2, 3, | |
611 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
612 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
613 | |
614 label = gtk_label_new(_("Comment:")); | |
615 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
616 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
617 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, | |
618 GTK_FILL, GTK_FILL, 5, 5); | |
619 | |
620 user_comment_entry = gtk_entry_new(); | |
621 gtk_table_attach(GTK_TABLE(table), user_comment_entry, 1, 4, 3, | |
622 4, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
623 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
624 | |
625 label = gtk_label_new(_("Date:")); | |
626 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
627 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
628 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, | |
629 GTK_FILL, GTK_FILL, 5, 5); | |
630 | |
631 date_entry = gtk_entry_new(); | |
632 gtk_widget_set_size_request(date_entry, 60, -1); | |
633 gtk_table_attach(GTK_TABLE(table), date_entry, 1, 2, 4, 5, | |
634 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
635 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
636 | |
637 label = gtk_label_new(_("Track number:")); | |
638 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
639 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
640 gtk_table_attach(GTK_TABLE(table), label, 2, 3, 4, 5, | |
641 GTK_FILL, GTK_FILL, 5, 5); | |
642 | |
643 tracknumber_entry = gtk_entry_new_with_max_length(4); | |
644 gtk_widget_set_size_request(tracknumber_entry, 20, -1); | |
645 gtk_table_attach(GTK_TABLE(table), tracknumber_entry, 3, 4, 4, | |
646 5, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
647 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
648 | |
649 label = gtk_label_new(_("Genre:")); | |
650 gtk_label_set_attributes(GTK_LABEL(label), attrs); | |
651 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
652 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6, | |
653 GTK_FILL, GTK_FILL, 5, 5); | |
654 | |
655 genre_combo = gtk_combo_new(); | |
656 if (!genre_list) { | |
657 for (i = 0; i < G_N_ELEMENTS(vorbis_genres); i++) | |
658 genre_list = g_list_prepend(genre_list, _(vorbis_genres[i])); | |
659 genre_list = g_list_sort(genre_list, (GCompareFunc) g_strcasecmp); | |
660 } | |
661 gtk_combo_set_popdown_strings(GTK_COMBO(genre_combo), genre_list); | |
662 gtk_table_attach(GTK_TABLE(table), genre_combo, 1, 4, 5, 6, | |
663 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
664 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
665 | |
666 #ifdef ALL_VORBIS_TAGS | |
667 label = gtk_label_new(_("Description:")); | |
668 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
669 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 6, 7, | |
670 GTK_FILL, GTK_FILL, 5, 5); | |
671 | |
672 description_entry = gtk_entry_new(); | |
673 gtk_table_attach(GTK_TABLE(table), description_entry, 1, 4, 6, | |
674 7, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
675 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
676 | |
677 label = gtk_label_new(_("Location:")); | |
678 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
679 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 7, 8, | |
680 GTK_FILL, GTK_FILL, 5, 5); | |
681 | |
682 location_entry = gtk_entry_new(); | |
683 gtk_table_attach(GTK_TABLE(table), location_entry, 1, 4, 7, 8, | |
684 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
685 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
686 | |
687 label = gtk_label_new(_("Version:")); | |
688 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
689 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 8, 9, | |
690 GTK_FILL, GTK_FILL, 5, 5); | |
691 | |
692 version_entry = gtk_entry_new(); | |
693 gtk_widget_set_size_request(version_entry, 60, -1); | |
694 gtk_table_attach(GTK_TABLE(table), version_entry, 1, 2, 8, 9, | |
695 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
696 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
697 | |
698 label = gtk_label_new(_("ISRC number:")); | |
699 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
700 gtk_table_attach(GTK_TABLE(table), label, 2, 3, 8, 9, | |
701 GTK_FILL, GTK_FILL, 5, 5); | |
702 | |
703 isrc_entry = gtk_entry_new(); | |
704 gtk_widget_set_size_request(isrc_entry, 20, -1); | |
705 gtk_table_attach(GTK_TABLE(table), isrc_entry, 3, 4, 8, 9, | |
706 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
707 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
708 | |
709 label = gtk_label_new(_("Organization:")); | |
710 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
711 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 9, 10, | |
712 GTK_FILL, GTK_FILL, 5, 5); | |
713 | |
714 organization_entry = gtk_entry_new(); | |
715 gtk_table_attach(GTK_TABLE(table), organization_entry, 1, 4, 9, | |
716 10, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
717 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
718 | |
719 label = gtk_label_new(_("Copyright:")); | |
720 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | |
721 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 10, 11, | |
722 GTK_FILL, GTK_FILL, 5, 5); | |
723 | |
724 copyright_entry = gtk_entry_new(); | |
725 gtk_table_attach(GTK_TABLE(table), copyright_entry, 1, 4, 10, | |
726 11, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
727 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
728 #endif | |
729 boxx = gtk_hbutton_box_new(); | |
730 gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_SPREAD); | |
731 | |
732 remove_button = gtk_button_new_from_stock(GTK_STOCK_DELETE); | |
733 g_signal_connect_swapped(G_OBJECT(remove_button), | |
734 "clicked", G_CALLBACK(remove_cb), NULL); | |
735 gtk_container_add(GTK_CONTAINER(boxx), remove_button); | |
736 | |
737 save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); | |
738 g_signal_connect(G_OBJECT(save_button), "clicked", | |
739 G_CALLBACK(save_cb), NULL); | |
740 gtk_container_add(GTK_CONTAINER(boxx), save_button); | |
741 | |
742 gtk_table_attach(GTK_TABLE(table), boxx, 0, 5, 6, 7, GTK_FILL, 0, | |
743 0, 8); | |
744 | |
745 rg_show_button = gtk_toggle_button_new(); | |
746 img = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, | |
747 GTK_ICON_SIZE_MENU); | |
748 gtk_container_add(GTK_CONTAINER(rg_show_button), img); | |
749 g_signal_connect(G_OBJECT(rg_show_button), "toggled", | |
750 G_CALLBACK(rg_show_cb), NULL); | |
751 | |
752 gtk_table_attach(GTK_TABLE(left_vbox), rg_show_button, 4, 5, 0, 2, | |
753 GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
754 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 5, 5); | |
755 | |
756 rg_frame = gtk_frame_new(_(" Ogg Vorbis ReplayGain ")); | |
757 gtk_table_attach(GTK_TABLE(left_vbox), rg_frame, 5, 6, 0, 4, | |
758 GTK_FILL, GTK_FILL, 0, 4); | |
759 rg_table = gtk_table_new(16, 4, FALSE); | |
760 gtk_container_add(GTK_CONTAINER(rg_frame), GTK_WIDGET(rg_table)); | |
761 | |
762 rg_track_label = gtk_label_new(_("Track gain:")); | |
763 gtk_misc_set_alignment(GTK_MISC(rg_track_label), 1, 0.5); | |
764 gtk_table_attach(GTK_TABLE(rg_table), rg_track_label, 5, 6, 0, 1, | |
765 GTK_FILL, GTK_FILL, 5, 5); | |
766 | |
767 rg_track_entry = gtk_entry_new(); | |
768 gtk_table_attach(GTK_TABLE(rg_table), rg_track_entry, 6, 7, 0, | |
769 1, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
770 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
771 | |
772 rg_track_peak_label = gtk_label_new(_("Track peak:")); | |
773 gtk_misc_set_alignment(GTK_MISC(rg_track_peak_label), 1, 0.5); | |
774 gtk_table_attach(GTK_TABLE(rg_table), rg_track_peak_label, 5, 6, 1, | |
775 2, GTK_FILL, GTK_FILL, 5, 5); | |
776 | |
777 rg_track_peak_entry = gtk_entry_new(); | |
778 gtk_table_attach(GTK_TABLE(rg_table), rg_track_peak_entry, 6, 7, 1, | |
779 2, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
780 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
781 | |
782 | |
783 rg_album_label = gtk_label_new(_("Album gain:")); | |
784 gtk_misc_set_alignment(GTK_MISC(rg_album_label), 1, 0.5); | |
785 gtk_table_attach(GTK_TABLE(rg_table), rg_album_label, 5, 6, 2, 3, | |
786 GTK_FILL, GTK_FILL, 5, 5); | |
787 | |
788 rg_album_entry = gtk_entry_new(); | |
789 gtk_table_attach(GTK_TABLE(rg_table), rg_album_entry, 6, 7, 2, | |
790 3, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
791 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
792 | |
793 rg_album_peak_label = gtk_label_new(_("Album peak:")); | |
794 gtk_misc_set_alignment(GTK_MISC(rg_album_peak_label), 1, 0.5); | |
795 gtk_table_attach(GTK_TABLE(rg_table), rg_album_peak_label, 5, 6, 3, | |
796 4, GTK_FILL, GTK_FILL, 5, 5); | |
797 | |
798 rg_album_peak_entry = gtk_entry_new(); | |
799 gtk_table_attach(GTK_TABLE(rg_table), rg_album_peak_entry, 6, 7, 3, | |
800 4, GTK_FILL | GTK_EXPAND | GTK_SHRINK, | |
801 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); | |
802 | |
803 bbox = gtk_hbutton_box_new(); | |
804 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); | |
805 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); | |
806 gtk_table_attach(GTK_TABLE(left_vbox), bbox, 0, 4, 1, 2, GTK_FILL, | |
807 0, 0, 8); | |
808 | |
809 cancel_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); | |
810 g_signal_connect_swapped(G_OBJECT(cancel_button), | |
811 "clicked", | |
812 G_CALLBACK(gtk_widget_destroy), | |
813 G_OBJECT(window)); | |
814 GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); | |
815 gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0); | |
816 gtk_widget_grab_default(cancel_button); | |
817 | |
818 | |
819 gtk_table_set_col_spacing(GTK_TABLE(left_vbox), 1, 10); | |
820 | |
821 | |
822 info_frame = gtk_frame_new(_(" Ogg Vorbis Info ")); | |
823 gtk_table_attach(GTK_TABLE(left_vbox), info_frame, 0, 2, 0, 1, | |
824 GTK_FILL, GTK_FILL, 0, 4); | |
825 | |
826 info_box = gtk_vbox_new(FALSE, 5); | |
827 gtk_container_add(GTK_CONTAINER(info_frame), info_box); | |
828 gtk_container_set_border_width(GTK_CONTAINER(info_box), 10); | |
829 gtk_box_set_spacing(GTK_BOX(info_box), 0); | |
830 | |
831 /* FIXME: Obvious... */ | |
832 test_table = gtk_table_new(2, 10, FALSE); | |
833 gtk_container_set_border_width(GTK_CONTAINER(test_table), 0); | |
834 gtk_container_add(GTK_CONTAINER(info_box), test_table); | |
835 | |
836 | |
837 bitrate_label = gtk_label_new(_("Bit rate:")); | |
838 gtk_label_set_attributes(GTK_LABEL(bitrate_label), attrs); | |
839 gtk_misc_set_alignment(GTK_MISC(bitrate_label), 1, 0.5); | |
840 gtk_label_set_justify(GTK_LABEL(bitrate_label), GTK_JUSTIFY_RIGHT); | |
841 gtk_table_attach(GTK_TABLE(test_table), bitrate_label, 0, 1, 0, 1, | |
842 GTK_FILL, GTK_FILL, 5, 2); | |
843 | |
844 bitrate_label_val = gtk_label_new(""); | |
845 gtk_misc_set_alignment(GTK_MISC(bitrate_label_val), 0, 0); | |
846 gtk_label_set_justify(GTK_LABEL(bitrate_label_val), GTK_JUSTIFY_LEFT); | |
847 gtk_table_attach(GTK_TABLE(test_table), bitrate_label_val, 1, 2, 0, | |
848 1, GTK_FILL, GTK_FILL, 10, 2); | |
849 | |
850 rate_label = gtk_label_new(_("Sample rate:")); | |
851 gtk_label_set_attributes(GTK_LABEL(rate_label), attrs); | |
852 gtk_misc_set_alignment(GTK_MISC(rate_label), 1, 0.5); | |
853 gtk_label_set_justify(GTK_LABEL(rate_label), GTK_JUSTIFY_RIGHT); | |
854 gtk_table_attach(GTK_TABLE(test_table), rate_label, 0, 1, 1, 2, | |
855 GTK_FILL, GTK_FILL, 5, 2); | |
856 | |
857 rate_label_val = gtk_label_new(""); | |
858 gtk_misc_set_alignment(GTK_MISC(rate_label_val), 0, 0); | |
859 gtk_label_set_justify(GTK_LABEL(rate_label_val), GTK_JUSTIFY_LEFT); | |
860 gtk_table_attach(GTK_TABLE(test_table), rate_label_val, 1, 2, 1, 2, | |
861 GTK_FILL, GTK_FILL, 10, 2); | |
862 | |
863 channel_label = gtk_label_new(_("Channels:")); | |
864 gtk_label_set_attributes(GTK_LABEL(channel_label), attrs); | |
865 gtk_misc_set_alignment(GTK_MISC(channel_label), 1, 0.5); | |
866 gtk_label_set_justify(GTK_LABEL(channel_label), GTK_JUSTIFY_RIGHT); | |
867 gtk_table_attach(GTK_TABLE(test_table), channel_label, 0, 1, 2, 3, | |
868 GTK_FILL, GTK_FILL, 5, 2); | |
869 | |
870 channel_label_val = gtk_label_new(""); | |
871 gtk_misc_set_alignment(GTK_MISC(channel_label_val), 0, 0); | |
872 gtk_label_set_justify(GTK_LABEL(channel_label_val), GTK_JUSTIFY_LEFT); | |
873 gtk_table_attach(GTK_TABLE(test_table), channel_label_val, 1, 2, 2, | |
874 3, GTK_FILL, GTK_FILL, 10, 2); | |
875 | |
876 length_label = gtk_label_new(_("Length:")); | |
877 gtk_label_set_attributes(GTK_LABEL(length_label), attrs); | |
878 gtk_misc_set_alignment(GTK_MISC(length_label), 1, 0.5); | |
879 gtk_label_set_justify(GTK_LABEL(length_label), GTK_JUSTIFY_RIGHT); | |
880 gtk_table_attach(GTK_TABLE(test_table), length_label, 0, 1, 3, 4, | |
881 GTK_FILL, GTK_FILL, 5, 2); | |
882 | |
883 length_label_val = gtk_label_new(""); | |
884 gtk_misc_set_alignment(GTK_MISC(length_label_val), 0, 0); | |
885 gtk_label_set_justify(GTK_LABEL(length_label_val), GTK_JUSTIFY_LEFT); | |
886 gtk_table_attach(GTK_TABLE(test_table), length_label_val, 1, 2, 3, | |
887 4, GTK_FILL, GTK_FILL, 10, 2); | |
888 | |
889 filesize_label = gtk_label_new(_("File size:")); | |
890 gtk_label_set_attributes(GTK_LABEL(filesize_label), attrs); | |
891 gtk_misc_set_alignment(GTK_MISC(filesize_label), 1, 0.5); | |
892 gtk_label_set_justify(GTK_LABEL(filesize_label), GTK_JUSTIFY_RIGHT); | |
893 gtk_table_attach(GTK_TABLE(test_table), filesize_label, 0, 1, 4, 5, | |
894 GTK_FILL, GTK_FILL, 5, 2); | |
895 | |
896 filesize_label_val = gtk_label_new(""); | |
897 gtk_misc_set_alignment(GTK_MISC(filesize_label_val), 0, 0); | |
898 gtk_label_set_justify(GTK_LABEL(filesize_label_val), | |
899 GTK_JUSTIFY_LEFT); | |
900 gtk_table_attach(GTK_TABLE(test_table), filesize_label_val, 1, 2, | |
901 4, 5, GTK_FILL, GTK_FILL, 10, 2); | |
902 | |
903 pango_attr_list_unref(attrs); | |
904 } | |
905 else | |
906 gtk_window_present(GTK_WINDOW(window)); | |
907 | |
908 if (!g_strncasecmp(vte.filename, "http://", 7)) | |
909 gtk_widget_set_sensitive(tag_frame, FALSE); | |
910 else | |
911 gtk_widget_set_sensitive(tag_frame, TRUE); | |
912 | |
913 gtk_label_set_text(GTK_LABEL(bitrate_label), _("Bit rate:")); | |
914 gtk_label_set_text(GTK_LABEL(bitrate_label_val), _("N/A")); | |
915 | |
916 gtk_label_set_text(GTK_LABEL(rate_label), _("Sample rate:")); | |
917 gtk_label_set_text(GTK_LABEL(rate_label_val), _("N/A")); | |
918 | |
919 gtk_label_set_text(GTK_LABEL(channel_label), _("Channels:")); | |
920 gtk_label_set_text(GTK_LABEL(channel_label_val), _("N/A")); | |
921 | |
922 gtk_label_set_text(GTK_LABEL(length_label), _("Length:")); | |
923 gtk_label_set_text(GTK_LABEL(length_label_val), _("N/A")); | |
924 | |
925 gtk_label_set_text(GTK_LABEL(filesize_label), _("File size:")); | |
926 gtk_label_set_text(GTK_LABEL(filesize_label_val), _("N/A")); | |
927 | |
928 if ((fh = vfs_fopen(vte.filename, "r")) != NULL) { | |
929 g_mutex_lock(vf_mutex); | |
930 | |
931 if (ov_open_callbacks(fh, &vf, NULL, 0, vorbis_callbacks) == 0) { | |
932 comment = ov_comment(&vf, -1); | |
933 if ((vi = ov_info(&vf, 0)) != NULL) { | |
934 bitrate = vi->bitrate_nominal / 1000; | |
935 rate = vi->rate; | |
936 channels = vi->channels; | |
937 clear_vf = TRUE; | |
938 gtk_widget_set_sensitive(GTK_WIDGET(save_button), FALSE); | |
939 gtk_widget_set_sensitive(GTK_WIDGET(remove_button), TRUE); | |
940 } | |
941 else { | |
942 bitrate = 0; | |
943 rate = 0; | |
944 channels = 0; | |
945 gtk_widget_set_sensitive(GTK_WIDGET(save_button), FALSE); | |
946 gtk_widget_set_sensitive(GTK_WIDGET(remove_button), FALSE); | |
947 } | |
948 | |
949 time = ov_time_total(&vf, -1); | |
950 minutes = time / 60; | |
951 seconds = time % 60; | |
952 vfs_fseek(fh, 0, SEEK_END); | |
953 filesize = vfs_ftell(fh); | |
954 | |
955 label_set_text(GTK_LABEL(bitrate_label_val), | |
956 _("%d KBit/s (nominal)"), bitrate); | |
957 label_set_text(GTK_LABEL(rate_label_val), _("%d Hz"), rate); | |
958 label_set_text(GTK_LABEL(channel_label_val), _("%d"), channels); | |
959 label_set_text(GTK_LABEL(length_label_val), | |
960 _("%d:%.2d"), minutes, seconds); | |
961 label_set_text(GTK_LABEL(filesize_label_val), | |
962 _("%d Bytes"), filesize); | |
963 | |
964 } | |
965 else | |
966 vfs_fclose(fh); | |
967 } | |
968 | |
969 rg_track_gain = get_comment(comment, "replaygain_track_gain"); | |
970 if (*rg_track_gain == '\0') | |
971 rg_track_gain = get_comment(comment, "rg_radio"); /* Old */ | |
972 | |
973 rg_album_gain = get_comment(comment, "replaygain_album_gain"); | |
974 if (*rg_album_gain == '\0') | |
975 rg_album_gain = get_comment(comment, "rg_audiophile"); /* Old */ | |
976 | |
977 rg_track_peak = get_comment(comment, "replaygain_track_peak"); | |
978 if (*rg_track_peak == '\0') | |
979 rg_track_peak = get_comment(comment, "rg_peak"); /* Old */ | |
980 | |
981 rg_album_peak = get_comment(comment, "replaygain_album_peak"); /* Old had no album peak */ | |
982 | |
983 /* Fill it all in .. */ | |
984 gtk_entry_set_text(GTK_ENTRY(title_entry), | |
985 get_comment(comment, "title")); | |
986 gtk_entry_set_text(GTK_ENTRY(performer_entry), | |
987 get_comment(comment, "artist")); | |
988 gtk_entry_set_text(GTK_ENTRY(album_entry), | |
989 get_comment(comment, "album")); | |
990 gtk_entry_set_text(GTK_ENTRY(user_comment_entry), | |
991 get_comment(comment, "comment")); | |
992 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), | |
993 get_comment(comment, "genre")); | |
994 gtk_entry_set_text(GTK_ENTRY(tracknumber_entry), | |
995 get_comment(comment, "tracknumber")); | |
996 gtk_entry_set_text(GTK_ENTRY(date_entry), | |
997 get_comment(comment, "date")); | |
998 #ifdef ALL_VORBIS_TAGS | |
999 gtk_entry_set_text(GTK_ENTRY(version_entry), | |
1000 get_comment(comment, "version")); | |
1001 gtk_entry_set_text(GTK_ENTRY(description_entry), | |
1002 get_comment(comment, "description")); | |
1003 gtk_entry_set_text(GTK_ENTRY(organization_entry), | |
1004 get_comment(comment, "organization")); | |
1005 gtk_entry_set_text(GTK_ENTRY(copyright_entry), | |
1006 get_comment(comment, "copyright")); | |
1007 gtk_entry_set_text(GTK_ENTRY(isrc_entry), | |
1008 get_comment(comment, "isrc")); | |
1009 gtk_entry_set_text(GTK_ENTRY(location_entry), | |
1010 get_comment(comment, "location")); | |
1011 #endif | |
1012 | |
1013 filename_utf8 = filename_to_utf8(vte.filename); | |
1014 | |
257
256b3acc87d4
[svn] Properly report Audacious instead of XMMS or BMP in all places. Patch by laci; closes bug #379.
chainsaw
parents:
61
diff
changeset
|
1015 title = g_strdup_printf(_("%s - Audacious"), g_basename(filename_utf8)); |
61 | 1016 gtk_window_set_title(GTK_WINDOW(window), title); |
1017 g_free(title); | |
1018 | |
1019 gtk_entry_set_text(GTK_ENTRY(filename_entry), filename_utf8); | |
1020 gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1); | |
1021 | |
1022 g_free(filename_utf8); | |
1023 | |
1024 gtk_entry_set_text(GTK_ENTRY(rg_track_entry), rg_track_gain); | |
1025 gtk_entry_set_text(GTK_ENTRY(rg_album_entry), rg_album_gain); | |
1026 gtk_entry_set_text(GTK_ENTRY(rg_track_peak_entry), rg_track_peak); | |
1027 gtk_editable_set_position(GTK_EDITABLE(rg_track_peak_entry), -1); | |
1028 gtk_entry_set_text(GTK_ENTRY(rg_album_peak_entry), rg_album_peak); | |
1029 gtk_editable_set_position(GTK_EDITABLE(rg_album_peak_entry), -1); | |
1030 | |
983 | 1031 /* if (*rg_track_gain == '\0' && *rg_album_gain == '\0' && |
61 | 1032 *rg_track_peak == '\0' && *rg_album_peak == '\0') { |
1033 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_show_button), | |
1034 FALSE); | |
1035 } | |
1036 else | |
1037 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_show_button), | |
983 | 1038 TRUE);*/ |
61 | 1039 |
1040 /* ov_clear closes the file */ | |
1041 if (clear_vf) ov_clear(&vf); | |
1042 g_mutex_unlock(vf_mutex); | |
1043 | |
1044 | |
1045 gtk_widget_set_sensitive(tag_frame, vfs_is_writeable(vte.filename)); | |
1046 | |
1047 g_signal_connect_swapped(title_entry, "changed", change_buttons, | |
1048 save_button); | |
1049 g_signal_connect_swapped(performer_entry, "changed", change_buttons, | |
1050 save_button); | |
1051 g_signal_connect_swapped(album_entry, "changed", change_buttons, | |
1052 save_button); | |
1053 g_signal_connect_swapped(date_entry, "changed", change_buttons, | |
1054 save_button); | |
1055 g_signal_connect_swapped(user_comment_entry, "changed", change_buttons, | |
1056 save_button); | |
1057 g_signal_connect_swapped(tracknumber_entry, "changed", change_buttons, | |
1058 save_button); | |
1059 g_signal_connect_swapped(GTK_COMBO(genre_combo)->entry, "changed", | |
1060 G_CALLBACK(change_buttons), save_button); | |
1061 | |
1062 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); | |
1063 gtk_widget_show_all(window); | |
1064 gtk_widget_hide(rg_frame); | |
1065 | |
1066 gtk_widget_set_sensitive(save_button, FALSE); | |
1067 gtk_widget_set_sensitive(remove_button, FALSE); | |
1068 } |