1 /*
2 Asunder
3 
4 Copyright(C) 2005 Eric Lathrop <eric@ericlathrop.com>
5 Copyright(C) 2007 Andrew Smith <http://littlesvr.ca/contact.php>
6 
7 Any code in this file may be redistributed or modified under the terms of
8 the GNU General Public Licence as published by the Free Software
9 Foundation; version 2 of the licence.
10 
11 */
12 #ifdef HAVE_CONFIG_H
13 #    include <config.h>
14 #endif
15 
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <unistd.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <stdio.h>
22 
23 #include <gdk/gdkkeysyms.h>
24 #include <gtk/gtk.h>
25 
26 #include "main.h"
27 #include "prefs.h"
28 #include "callbacks.h"
29 #include "interface.h"
30 #include "support.h"
31 #include "completion.h"
32 
33 #define GLADE_HOOKUP_OBJECT(component,widget,name) \
34     g_object_set_data_full (G_OBJECT (component), name, \
35         gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
36 
37 #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
38     g_object_set_data (G_OBJECT (component), name, widget)
39 
40 GtkWidget*
create_main(void)41 create_main (void)
42 {
43     GtkWidget *main_win;
44     GdkPixbuf *main_icon_pixbuf;
45     GtkWidget *vbox1;
46     GtkWidget *toolbar1;
47     GtkWidget *lookup;
48     GtkWidget *preferences;
49     GtkWidget *separatortoolitem1;
50     GtkWidget *table2;
51     GtkWidget *album_artist;
52     GtkWidget *album_title;
53     GtkWidget *pick_disc;
54     GtkWidget *disc;
55     GtkWidget *artist_label;
56     GtkWidget *title_label;
57     GtkWidget *single_artist;
58     GtkWidget *scrolledwindow1;
59     GtkWidget *tracklist;
60     GtkWidget *rip_button;
61     GtkWidget *alignment3;
62     GtkWidget *hbox4;
63     GtkWidget *image1;
64     GtkWidget *label8;
65     GtkWidget* hbox5;
66     GtkWidget* fillerBox;
67     GtkWidget* statusLbl;
68     GtkWidget *album_genre;			// lnr
69     GtkWidget *genre_label;			// lnr
70 
71     main_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
72     gtk_window_set_title (GTK_WINDOW (main_win), "Asunder");
73 
74     gtk_window_set_default_size (GTK_WINDOW (main_win), global_prefs->main_window_width, global_prefs->main_window_height);
75     main_icon_pixbuf = create_pixbuf ("asunder.svg");
76     if (main_icon_pixbuf)
77     {
78         gtk_window_set_icon (GTK_WINDOW (main_win), main_icon_pixbuf);
79         g_object_unref (main_icon_pixbuf);
80     }
81 
82     vbox1 = gtk_vbox_new (FALSE, 0);
83     gtk_widget_show (vbox1);
84     gtk_container_add (GTK_CONTAINER (main_win), vbox1);
85 
86     toolbar1 = gtk_toolbar_new ();
87     gtk_widget_show (toolbar1);
88     gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
89     gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_BOTH_HORIZ);
90 
91     GtkWidget* icon;
92     icon = gtk_image_new_from_stock(GTK_STOCK_REFRESH, gtk_toolbar_get_icon_size(GTK_TOOLBAR(toolbar1)));
93     gtk_widget_show (icon);
94     lookup = (GtkWidget*)gtk_tool_button_new(icon, _("CDDB Lookup"));
95     gtk_widget_show (lookup);
96     gtk_container_add (GTK_CONTAINER (toolbar1), lookup);
97     gtk_tool_item_set_is_important (GTK_TOOL_ITEM (lookup), TRUE);
98 
99     preferences = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-preferences");
100     gtk_widget_show (preferences);
101     gtk_container_add (GTK_CONTAINER (toolbar1), preferences);
102     gtk_tool_item_set_is_important (GTK_TOOL_ITEM (preferences), TRUE);
103 
104     separatortoolitem1 = (GtkWidget*) gtk_separator_tool_item_new ();
105     gtk_widget_show (separatortoolitem1);
106     gtk_container_add (GTK_CONTAINER (toolbar1), separatortoolitem1);
107 
108     GtkWidget *about;
109     about = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-about");
110     gtk_widget_show (about);
111     gtk_container_add (GTK_CONTAINER (toolbar1), about);
112     gtk_tool_item_set_is_important (GTK_TOOL_ITEM (about), TRUE);
113 
114     table2 = gtk_table_new (5, 3, FALSE);
115     gtk_widget_show (table2);
116     gtk_box_pack_start (GTK_BOX (vbox1), table2, FALSE, TRUE, 3);
117 
118     album_artist = gtk_entry_new ();
119     create_completion(album_artist, "album_artist");
120     gtk_widget_show (album_artist);
121     gtk_table_attach (GTK_TABLE (table2), album_artist, 1, 2, 1, 2,
122                       (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
123                       (GtkAttachOptions) (0), 0, 0);
124 
125     album_title = gtk_entry_new ();
126     gtk_widget_show (album_title);
127     create_completion(album_title, "album_title");
128     gtk_table_attach (GTK_TABLE (table2), album_title, 1, 2, 2, 3,
129                       (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
130                       (GtkAttachOptions) (0), 0, 0);
131 
132     pick_disc = gtk_combo_box_new ();
133     gtk_table_attach (GTK_TABLE (table2), pick_disc, 1, 2, 0, 1,
134                       (GtkAttachOptions) (GTK_FILL),
135                       (GtkAttachOptions) (GTK_FILL), 0, 0);
136 
137     album_genre = gtk_entry_new();						// lnr
138     create_completion(album_genre, "album_genre");
139     gtk_widget_show( album_genre );
140     gtk_table_attach( GTK_TABLE( table2 ), album_genre, 1, 2, 3, 4,
141                       (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
142                       (GtkAttachOptions) (0), 0, 0);
143 
144     disc = gtk_label_new (_("Disc:"));
145     gtk_table_attach (GTK_TABLE (table2), disc, 0, 1, 0, 1,
146                       (GtkAttachOptions) (GTK_FILL),
147                       (GtkAttachOptions) (0), 3, 0);
148     gtk_misc_set_alignment (GTK_MISC (disc), 0, 0.49);
149 
150     artist_label = gtk_label_new (_("Album Artist:"));
151     gtk_misc_set_alignment (GTK_MISC (artist_label), 0, 0);
152     gtk_widget_show (artist_label);
153     gtk_table_attach (GTK_TABLE (table2), artist_label, 0, 1, 1, 2,
154                       (GtkAttachOptions) (GTK_FILL),
155                       (GtkAttachOptions) (0), 3, 0);
156 
157     title_label = gtk_label_new (_("Album Title:"));
158     gtk_misc_set_alignment (GTK_MISC (title_label), 0, 0);
159     gtk_widget_show (title_label);
160     gtk_table_attach (GTK_TABLE (table2), title_label, 0, 1, 2, 3,
161                       (GtkAttachOptions) (GTK_FILL),
162                       (GtkAttachOptions) (0), 3, 0);
163 
164     single_artist = gtk_check_button_new_with_mnemonic (_("Single Artist"));
165     gtk_widget_show (single_artist);
166     gtk_table_attach (GTK_TABLE (table2), single_artist, 2, 3, 1, 2,
167                       (GtkAttachOptions) (GTK_FILL),
168                       (GtkAttachOptions) (0), 3, 0);
169 
170     GtkWidget* tn_hbox = gtk_hbox_new(FALSE, 5);
171     gtk_widget_hide(tn_hbox);
172     gtk_table_attach (GTK_TABLE (table2), tn_hbox, 0, 3, 4, 5,
173                       (GtkAttachOptions) (GTK_FILL),
174                       (GtkAttachOptions) (0), 3, 0);
175 
176     GtkWidget *tn_labelo = gtk_label_new (_("First track number:"));
177     gtk_misc_set_alignment (GTK_MISC (tn_labelo), 0, 0.5);
178     gtk_widget_show (tn_labelo);
179     gtk_box_pack_start(GTK_BOX (tn_hbox), tn_labelo, FALSE, TRUE, 0);
180 
181     GtkWidget* tn_first = gtk_entry_new();
182     gtk_widget_show(tn_first);
183     gtk_box_pack_start(GTK_BOX (tn_hbox), tn_first, FALSE, TRUE, 0);
184     gtk_entry_set_width_chars(GTK_ENTRY (tn_first), 4);
185     char txt[16];
186     snprintf(txt, 16, "%d", global_prefs->first_track_num_offset + 1);
187     gtk_entry_set_text(GTK_ENTRY (tn_first), txt);
188 
189     GtkWidget* tn_labelw = gtk_label_new (_("Track number width in filename:"));
190     gtk_misc_set_alignment (GTK_MISC (tn_labelw), 0, 0.5);
191     gtk_widget_show (tn_labelw);
192     gtk_box_pack_start(GTK_BOX (tn_hbox), tn_labelw, FALSE, TRUE, 0);
193 
194     GtkWidget* tn_width = gtk_combo_box_new();
195     gtk_widget_show(tn_width);
196     gtk_box_pack_start(GTK_BOX (tn_hbox), tn_width, FALSE, TRUE, 0);
197 
198     GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
199     gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(tn_width), renderer, TRUE);
200     gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(tn_width), renderer,
201                                                     "text", 0,
202                                                     NULL);
203     GtkListStore * store = gtk_list_store_new(1, G_TYPE_STRING);
204     GtkTreeIter iter;
205     for (int i = 1; i <= 4; ++i) {
206         char buff[2];
207         snprintf(buff, 2, "%d", i);
208         gtk_list_store_append(store, &iter);
209         gtk_list_store_set(store, &iter, 0, buff, -1);
210     }
211     gtk_combo_box_set_model(GTK_COMBO_BOX(tn_width), GTK_TREE_MODEL(store));
212     g_object_unref(store);
213     gtk_combo_box_set_active(GTK_COMBO_BOX(tn_width), global_prefs->track_num_width - 1);
214 
215     genre_label	= gtk_label_new (_("Genre / Year:"));								// lnr
216     gtk_misc_set_alignment (GTK_MISC ( genre_label ), 0, 0);
217     gtk_widget_show (genre_label);
218     gtk_table_attach (GTK_TABLE (table2), genre_label, 0, 1, 3, 4,
219                       (GtkAttachOptions) (GTK_FILL),
220                       (GtkAttachOptions) (0), 3, 0);
221 
222     GtkWidget* album_year = gtk_entry_new();
223     gtk_widget_show(album_year);
224     gtk_table_attach( GTK_TABLE( table2 ), album_year, 2, 3, 3, 4,
225                       (GtkAttachOptions) ( GTK_FILL ),
226                       (GtkAttachOptions) (0), 3, 0);
227 
228     scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
229     gtk_widget_show (scrolledwindow1);
230     gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0);
231     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
232 
233     tracklist = gtk_tree_view_new ();
234     gtk_widget_show (tracklist);
235     gtk_container_add (GTK_CONTAINER (scrolledwindow1), tracklist);
236     gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tracklist), TRUE);
237     gtk_tree_view_set_enable_search (GTK_TREE_VIEW (tracklist), FALSE);
238 
239     hbox5 = gtk_hbox_new(FALSE, 5);
240     gtk_box_pack_start(GTK_BOX (vbox1), hbox5, FALSE, TRUE, 5);
241     gtk_widget_show(hbox5);
242 
243     statusLbl = gtk_label_new("");
244     gtk_label_set_use_markup(GTK_LABEL(statusLbl), TRUE);
245     gtk_misc_set_alignment(GTK_MISC(statusLbl), 0, 0.5);
246     gtk_box_pack_start(GTK_BOX (hbox5), statusLbl, TRUE, TRUE, 0);
247     gtk_widget_show(statusLbl);
248 
249     fillerBox = gtk_hbox_new(FALSE, 0);
250     gtk_box_pack_start(GTK_BOX (hbox5), fillerBox, TRUE, TRUE, 0);
251     gtk_widget_show(hbox5);
252 
253     rip_button = gtk_button_new ();
254     gtk_widget_show(rip_button);
255     gtk_box_pack_start(GTK_BOX (hbox5), rip_button, FALSE, FALSE, 5);
256 
257     alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
258     gtk_widget_show (alignment3);
259     gtk_container_add (GTK_CONTAINER (rip_button), alignment3);
260 
261     hbox4 = gtk_hbox_new (FALSE, 2);
262     gtk_widget_show (hbox4);
263     gtk_container_add (GTK_CONTAINER (alignment3), hbox4);
264 
265     image1 = gtk_image_new_from_stock ("gtk-cdrom", GTK_ICON_SIZE_BUTTON);
266     gtk_widget_show (image1);
267     gtk_box_pack_start (GTK_BOX (hbox4), image1, FALSE, FALSE, 0);
268 
269     label8 = gtk_label_new_with_mnemonic (_("Rip"));
270     gtk_widget_show (label8);
271     gtk_box_pack_start (GTK_BOX (hbox4), label8, FALSE, FALSE, 0);
272 
273     g_signal_connect ((gpointer) main_win, "delete_event",
274                                         G_CALLBACK (on_window_close),
275                                         NULL);
276 
277     g_signal_connect((gpointer) tracklist, "button-press-event",
278                                         G_CALLBACK (on_tracklist_mouse_click),
279                                         NULL);
280 
281     g_signal_connect ((gpointer) lookup, "clicked",
282                                         G_CALLBACK (on_lookup_clicked),
283                                         NULL);
284     g_signal_connect ((gpointer) preferences, "clicked",
285                                         G_CALLBACK (on_preferences_clicked),
286                                         NULL);
287     g_signal_connect ((gpointer) about, "clicked",
288                                         G_CALLBACK (on_about_clicked),
289                                         NULL);
290     g_signal_connect ((gpointer) album_artist, "focus_out_event",
291                                         G_CALLBACK (on_album_artist_focus_out_event),
292                                         NULL);
293     g_signal_connect ((gpointer) album_title, "focus_out_event",
294                                         G_CALLBACK (on_album_title_focus_out_event),
295                                         NULL);
296     g_signal_connect ((gpointer) pick_disc, "changed",
297                                         G_CALLBACK (on_pick_disc_changed),
298                                         NULL);
299     g_signal_connect ((gpointer) single_artist, "toggled",
300                                         G_CALLBACK (on_single_artist_toggled),
301                                         NULL);
302     g_signal_connect ((gpointer) rip_button, "clicked",
303                                         G_CALLBACK (on_rip_button_clicked),
304                                         NULL);
305     g_signal_connect ((gpointer) album_genre, "focus_out_event",					// lnr
306                                         G_CALLBACK (on_album_genre_focus_out_event),
307                                         NULL);
308     g_signal_connect ((gpointer) album_year, "focus_out_event",
309                                         G_CALLBACK (on_year_focus_out_event),
310                                         NULL);
311     g_signal_connect ((gpointer) tn_first, "focus_out_event",
312                                         G_CALLBACK (on_tracknum_first_focus_out_event),
313                                         NULL);
314     g_signal_connect ((gpointer) tn_width, "changed",
315                                         G_CALLBACK (on_tracknum_width_changed_event),
316                                         NULL);
317 
318     /* KEYBOARD accelerators */
319     GtkAccelGroup* accelGroup;
320     guint accelKey;
321     GdkModifierType accelModifier;
322     GClosure *closure = NULL;
323 
324     accelGroup = gtk_accel_group_new();
325     gtk_window_add_accel_group(GTK_WINDOW(main_win), accelGroup);
326 
327     gtk_accelerator_parse("<Control>W", &accelKey, &accelModifier);
328     closure = g_cclosure_new(G_CALLBACK(on_window_close), NULL, NULL);
329     gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
330 
331     gtk_accelerator_parse("<Control>Q", &accelKey, &accelModifier);
332     closure = g_cclosure_new(G_CALLBACK(on_window_close), NULL, NULL);
333     gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
334 
335     gtk_accelerator_parse("F2", &accelKey, &accelModifier);
336     closure = g_cclosure_new(G_CALLBACK(on_press_f2), NULL, NULL);
337     gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
338     /* END KEYBOARD accelerators */
339 
340     /* Store pointers to all widgets, for use by lookup_widget(). */
341     GLADE_HOOKUP_OBJECT_NO_REF (main_win, main_win, "main");
342     GLADE_HOOKUP_OBJECT (main_win, vbox1, "vbox1");
343     GLADE_HOOKUP_OBJECT (main_win, toolbar1, "toolbar1");
344     GLADE_HOOKUP_OBJECT (main_win, lookup, "lookup");
345     GLADE_HOOKUP_OBJECT (main_win, preferences, "preferences");
346     GLADE_HOOKUP_OBJECT (main_win, separatortoolitem1, "separatortoolitem1");
347     GLADE_HOOKUP_OBJECT (main_win, about, "about");
348     GLADE_HOOKUP_OBJECT (main_win, table2, "table2");
349     GLADE_HOOKUP_OBJECT (main_win, album_artist, "album_artist");
350     GLADE_HOOKUP_OBJECT (main_win, album_title, "album_title");
351     GLADE_HOOKUP_OBJECT (main_win, pick_disc, "pick_disc");
352     GLADE_HOOKUP_OBJECT (main_win, disc, "disc");
353     GLADE_HOOKUP_OBJECT (main_win, artist_label, "artist_label");
354     GLADE_HOOKUP_OBJECT (main_win, title_label, "title_label");
355     GLADE_HOOKUP_OBJECT (main_win, single_artist, "single_artist");
356     GLADE_HOOKUP_OBJECT (main_win, scrolledwindow1, "scrolledwindow1");
357     GLADE_HOOKUP_OBJECT (main_win, tracklist, "tracklist");
358     GLADE_HOOKUP_OBJECT (main_win, rip_button, "rip_button");
359     GLADE_HOOKUP_OBJECT (main_win, alignment3, "alignment3");
360     GLADE_HOOKUP_OBJECT (main_win, hbox4, "hbox4");
361     GLADE_HOOKUP_OBJECT (main_win, image1, "image1");
362     GLADE_HOOKUP_OBJECT (main_win, label8, "label8");
363     GLADE_HOOKUP_OBJECT (main_win, statusLbl, "statusLbl");
364     GLADE_HOOKUP_OBJECT (main_win, album_genre, "album_genre");			// lnr
365     GLADE_HOOKUP_OBJECT (main_win, genre_label, "genre_label" );		// lnr
366     GLADE_HOOKUP_OBJECT (main_win, album_year, "album_year");
367     GLADE_HOOKUP_OBJECT (main_win, tn_hbox, "tn_hbox");
368     GLADE_HOOKUP_OBJECT (main_win, tn_first, "tn_first");
369     GLADE_HOOKUP_OBJECT (main_win, tn_width, "tn_width");
370 
371     return main_win;
372 }
373 
374 GtkWidget*
create_prefs(void)375 create_prefs (void)
376 {
377     GtkWidget *label;
378     GtkWidget *prefs;
379     GtkWidget *notebook1;
380     GtkWidget *vbox;
381     GtkWidget *vbox2;
382     GtkWidget *music_dir;
383     GtkWidget *make_playlist;
384     GtkWidget *hbox12;
385     GtkWidget *cdrom;
386     GtkWidget *frame2;
387     GtkWidget *table1;
388     GtkWidget *format_music;
389     GtkWidget *format_albumdir;
390     GtkWidget *format_playlist;
391     GtkWidget *rip_wav;
392     GtkWidget *frame3;
393     GtkWidget *alignment8;
394     GtkWidget *mp3_vbr;
395     GtkWidget *hbox9;
396     GtkWidget *rip_mp3;
397     GtkWidget *vbox2X;
398     GtkWidget *frame3X;
399     GtkWidget *alignment8X;
400     GtkWidget *hbox9X;
401     GtkWidget *rip_fdkaac;
402     GtkWidget *frame4;
403     GtkWidget *alignment9;
404     GtkWidget *hbox10;
405     GtkWidget *frame5;
406     GtkWidget *alignment10;
407     GtkWidget *hbox11;
408     GtkWidget *rip_flac;
409     GtkWidget *dialog_action_area1;
410     GtkWidget *cancelbutton1;
411     GtkWidget *okbutton1;
412     GtkWidget *eject_on_done;
413     GtkTooltips *tooltips;
414     GtkWidget* hboxFill;
415 
416     prefs = gtk_dialog_new ();
417     gtk_window_set_transient_for (GTK_WINDOW(prefs), GTK_WINDOW(win_main));
418     gtk_window_set_title (GTK_WINDOW (prefs), _("Preferences"));
419     gtk_window_set_modal (GTK_WINDOW (prefs), TRUE);
420     gtk_window_set_type_hint (GTK_WINDOW (prefs), GDK_WINDOW_TYPE_HINT_DIALOG);
421 
422     vbox = GTK_DIALOG (prefs)->vbox;
423     gtk_widget_show (vbox);
424 
425     notebook1 = gtk_notebook_new ();
426     gtk_widget_show (notebook1);
427     gtk_box_pack_start (GTK_BOX (vbox), notebook1, TRUE, TRUE, 0);
428 
429     /* GENERAL tab */
430     vbox = gtk_vbox_new (FALSE, 5);
431     gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
432     gtk_widget_show (vbox);
433     gtk_container_add (GTK_CONTAINER (notebook1), vbox);
434 
435     label = gtk_label_new (_("Destination folder"));
436     gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
437     gtk_widget_show (label);
438     gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
439     gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
440 
441     music_dir = gtk_file_chooser_button_new(_("Destination folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
442     gtk_widget_show (music_dir);
443     gtk_box_pack_start (GTK_BOX (vbox), music_dir, FALSE, FALSE, 0);
444 
445     make_playlist = gtk_check_button_new_with_mnemonic (_("Create M3U playlist"));
446     gtk_widget_show (make_playlist);
447     gtk_box_pack_start (GTK_BOX (vbox), make_playlist, FALSE, FALSE, 0);
448 
449     hbox12 = gtk_hbox_new (FALSE, 0);
450     gtk_widget_show (hbox12);
451     gtk_box_pack_start (GTK_BOX (vbox), hbox12, FALSE, FALSE, 0);
452 
453     label = gtk_label_new (_("CD-ROM device: "));
454     gtk_widget_show (label);
455     gtk_box_pack_start (GTK_BOX (hbox12), label, FALSE, FALSE, 0);
456 
457     cdrom = gtk_entry_new ();
458     gtk_widget_show (cdrom);
459     gtk_box_pack_start (GTK_BOX (hbox12), cdrom, TRUE, TRUE, 0);
460 
461     tooltips = gtk_tooltips_new ();
462     gtk_tooltips_set_tip (tooltips, cdrom, _("Default: /dev/cdrom\n"
463                                               "Other example: /dev/hdc\n"
464                                               "Other example: /dev/sr0"), NULL);
465 
466     eject_on_done = gtk_check_button_new_with_mnemonic (_("Eject disc when finished"));
467     gtk_widget_show (eject_on_done);
468     gtk_box_pack_start (GTK_BOX (vbox), eject_on_done, FALSE, FALSE, 5);
469 
470     hboxFill = gtk_hbox_new (FALSE, 0);
471     gtk_widget_show (hboxFill);
472     gtk_box_pack_start (GTK_BOX (vbox), hboxFill, TRUE, TRUE, 0);
473 
474     label = gtk_label_new (_("General"));
475     gtk_widget_show (label);
476     gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label);
477     /* END GENERAL tab */
478 
479     /* FILENAMES tab */
480     vbox2 = gtk_vbox_new (FALSE, 5);
481     gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5);
482     gtk_widget_show (vbox2);
483     gtk_container_add (GTK_CONTAINER (notebook1), vbox2);
484 
485     frame2 = gtk_frame_new (NULL);
486     gtk_widget_show (frame2);
487     gtk_box_pack_start (GTK_BOX (vbox2), frame2, FALSE, FALSE, 0);
488 
489     vbox = gtk_vbox_new (FALSE, 0);
490     gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
491     gtk_widget_show (vbox);
492     gtk_container_add (GTK_CONTAINER (frame2), vbox);
493 
494     label = gtk_label_new (_("%A - Artist\n%L - Album\n%N - Track number (2-digit)\n%Y - Year (4-digit or \"0\")\n%T - Song title"));
495     gtk_widget_show (label);
496     gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
497     gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
498 
499     label = gtk_label_new (_("%G - Genre"));
500     gtk_widget_show (label);
501     gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
502     gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
503 
504     // problem is that the same albumdir is used (threads.c) for all formats
505     //~ label = gtk_label_new (_("%F - Format (e.g. FLAC)"));
506     //~ gtk_widget_show (label);
507     //~ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
508     //~ gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
509 
510     table1 = gtk_table_new (3, 2, FALSE);
511     gtk_widget_show (table1);
512     gtk_box_pack_start (GTK_BOX (vbox), table1, TRUE, TRUE, 0);
513 
514     label = gtk_label_new (_("Album directory: "));
515     gtk_widget_show (label);
516     gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 0, 1,
517                                         (GtkAttachOptions) (GTK_FILL),
518                                         (GtkAttachOptions) (0), 0, 0);
519     gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
520 
521     label = gtk_label_new (_("Playlist file: "));
522     gtk_widget_show (label);
523     gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 1, 2,
524                                         (GtkAttachOptions) (GTK_FILL),
525                                         (GtkAttachOptions) (0), 0, 0);
526     gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
527 
528     label = gtk_label_new (_("Music file: "));
529     gtk_widget_show (label);
530     gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 2, 3,
531                                         (GtkAttachOptions) (GTK_FILL),
532                                         (GtkAttachOptions) (0), 0, 0);
533     gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
534 
535     format_albumdir = gtk_entry_new ();
536     gtk_widget_show (format_albumdir);
537     gtk_table_attach (GTK_TABLE (table1), format_albumdir, 1, 2, 0, 1,
538                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
539                                         (GtkAttachOptions) (0), 0, 0);
540 
541     tooltips = gtk_tooltips_new ();
542     gtk_tooltips_set_tip (tooltips, format_albumdir, _("This is relative to the destination folder (from the General tab).\n"
543                                                         "Can be blank.\n"
544                                                         "Default: %A - %L\n"
545                                                         "Other example: %A/%L"), NULL);
546 
547     format_playlist = gtk_entry_new ();
548     gtk_widget_show (format_playlist);
549     gtk_table_attach (GTK_TABLE (table1), format_playlist, 1, 2, 1, 2,
550                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
551                                         (GtkAttachOptions) (0), 0, 0);
552 
553     tooltips = gtk_tooltips_new ();
554     gtk_tooltips_set_tip (tooltips, format_playlist, _("This will be stored in the album directory.\n"
555                                                         "Can be blank.\n"
556                                                         "Default: %A - %L"), NULL);
557 
558     format_music = gtk_entry_new ();
559     gtk_widget_show (format_music);
560     gtk_table_attach (GTK_TABLE (table1), format_music, 1, 2, 2, 3,
561                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
562                                         (GtkAttachOptions) (0), 0, 0);
563 
564     tooltips = gtk_tooltips_new ();
565     gtk_tooltips_set_tip (tooltips, format_music, _("This will be stored in the album directory.\n"
566                                                      "Cannot be blank.\n"
567                                                      "Default: %A - %T\n"
568                                                      "Other example: %N - %T"), NULL);
569 
570     label = gtk_label_new (_("Filename formats"));
571     gtk_widget_show (label);
572     gtk_frame_set_label_widget (GTK_FRAME (frame2), label);
573     gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
574 
575     GtkWidget * allow_tracknum = gtk_check_button_new_with_label (_("Allow changing first track number"));
576     gtk_widget_show (allow_tracknum);
577     gtk_box_pack_start (GTK_BOX (vbox2), allow_tracknum, FALSE, FALSE, 5);
578     GLADE_HOOKUP_OBJECT (prefs, allow_tracknum, "allow_tracknum");
579 
580     label = gtk_label_new (_("Filenames"));
581     gtk_widget_show (label);
582     gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label);
583     /* END FILENAMES tab */
584 
585     /* ENCODE tab */
586     GtkWidget *mp3bitrate;
587     GtkWidget *fdkaac_bitrate;
588     GtkWidget *oggLbl;
589     GtkWidget *oggquality;
590     GtkWidget *rip_ogg;
591     GtkWidget *flacLbl;
592     GtkWidget *flaccompression;
593 
594     vbox = gtk_vbox_new (FALSE, 5);
595     gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
596     gtk_widget_show (vbox);
597     gtk_container_add (GTK_CONTAINER (notebook1), vbox);
598 
599     /* WAV */
600     //frame3 = gtk_frame_new (NULL);
601     //gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_IN);
602     //gtk_widget_show (frame3);
603     //gtk_box_pack_start (GTK_BOX (vbox), frame3, FALSE, FALSE, 0);
604 
605     //alignment8 = gtk_alignment_new (0.5, 0.5, 1, 1);
606     //gtk_widget_show (alignment8);
607     //gtk_container_add (GTK_CONTAINER (frame3), alignment8);
608     //gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8), 2, 2, 12, 2);
609 
610     //vbox2 = gtk_vbox_new (FALSE, 0);
611     //gtk_widget_show (vbox2);
612     //gtk_container_add (GTK_CONTAINER (alignment8), vbox2);
613 
614     rip_wav = gtk_check_button_new_with_mnemonic (_("WAV (uncompressed)"));
615     gtk_widget_show (rip_wav);
616     gtk_box_pack_start (GTK_BOX (vbox), rip_wav, FALSE, FALSE, 0);
617     //gtk_frame_set_label_widget (GTK_FRAME (frame3), rip_wav);
618     /* END WAV */
619 
620     /* MP3 */
621     frame3 = gtk_frame_new (NULL);
622     gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_IN);
623     gtk_widget_show (frame3);
624     gtk_box_pack_start (GTK_BOX (vbox), frame3, FALSE, FALSE, 0);
625 
626     alignment8 = gtk_alignment_new (0.5, 0.5, 1, 1);
627     gtk_widget_show (alignment8);
628     gtk_container_add (GTK_CONTAINER (frame3), alignment8);
629     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8), 2, 2, 12, 2);
630 
631     vbox2 = gtk_vbox_new (FALSE, 0);
632     gtk_widget_show (vbox2);
633     gtk_container_add (GTK_CONTAINER (alignment8), vbox2);
634 
635     mp3_vbr = gtk_check_button_new_with_mnemonic (_("Variable bit rate (VBR)"));
636     gtk_widget_show (mp3_vbr);
637     gtk_box_pack_start (GTK_BOX (vbox2), mp3_vbr, FALSE, FALSE, 0);
638     g_signal_connect ((gpointer) mp3_vbr, "toggled",
639                                         G_CALLBACK (on_vbr_toggled),
640                                         NULL);
641 
642     tooltips = gtk_tooltips_new ();
643     gtk_tooltips_set_tip (tooltips, mp3_vbr, _("Better quality for the same size."), NULL);
644 
645     hbox9 = gtk_hbox_new (FALSE, 0);
646     gtk_widget_show (hbox9);
647     gtk_box_pack_start (GTK_BOX (vbox2), hbox9, TRUE, TRUE, 0);
648 
649     label = gtk_label_new (_("Bitrate"));
650     gtk_widget_show (label);
651     gtk_box_pack_start (GTK_BOX (hbox9), label, FALSE, FALSE, 0);
652     GLADE_HOOKUP_OBJECT (prefs, label, "bitrate_lbl");
653 
654     mp3bitrate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 14, 1, 1, 1)));
655     gtk_widget_show (mp3bitrate);
656     gtk_box_pack_start (GTK_BOX (hbox9), mp3bitrate, TRUE, TRUE, 5);
657     gtk_scale_set_draw_value (GTK_SCALE (mp3bitrate), FALSE);
658     gtk_scale_set_digits (GTK_SCALE (mp3bitrate), 0);
659     g_signal_connect ((gpointer) mp3bitrate, "value_changed",
660                                         G_CALLBACK (on_mp3bitrate_value_changed),
661                                         NULL);
662 
663     tooltips = gtk_tooltips_new ();
664     gtk_tooltips_set_tip (tooltips, mp3bitrate, _("Higher bitrate is better quality but also bigger file. Most people use 192Kbps."), NULL);
665 
666     char kbps_text[10];
667     snprintf(kbps_text, 10, _("%dKbps"), 32);
668     label = gtk_label_new (kbps_text);
669     gtk_widget_show (label);
670     gtk_box_pack_start (GTK_BOX (hbox9), label, FALSE, FALSE, 0);
671     GLADE_HOOKUP_OBJECT (prefs, label, "bitrate_lbl_2");
672 
673     rip_mp3 = gtk_check_button_new_with_mnemonic (_("MP3 (lossy compression)"));
674     gtk_widget_show (rip_mp3);
675     gtk_frame_set_label_widget (GTK_FRAME (frame3), rip_mp3);
676     g_signal_connect ((gpointer) rip_mp3, "toggled",
677                                         G_CALLBACK (on_rip_mp3_toggled),
678                                         NULL);
679     /* END MP3 */
680 
681     /* OGG */
682     frame4 = gtk_frame_new (NULL);
683     gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_IN);
684     gtk_widget_show (frame4);
685     gtk_box_pack_start (GTK_BOX (vbox), frame4, FALSE, FALSE, 0);
686 
687     alignment9 = gtk_alignment_new (0.5, 0.5, 1, 1);
688     gtk_widget_show (alignment9);
689     gtk_container_add (GTK_CONTAINER (frame4), alignment9);
690     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment9), 2, 2, 12, 2);
691 
692     hbox10 = gtk_hbox_new (FALSE, 0);
693     gtk_widget_show (hbox10);
694     gtk_container_add (GTK_CONTAINER (alignment9), hbox10);
695 
696     oggLbl = gtk_label_new (_("Quality"));
697     gtk_widget_show (oggLbl);
698     gtk_box_pack_start (GTK_BOX (hbox10), oggLbl, FALSE, FALSE, 0);
699 
700     oggquality = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (6, 0, 11, 1, 1, 1)));
701     gtk_widget_show (oggquality);
702     gtk_box_pack_start (GTK_BOX (hbox10), oggquality, TRUE, TRUE, 5);
703     gtk_scale_set_value_pos (GTK_SCALE (oggquality), GTK_POS_RIGHT);
704     gtk_scale_set_digits (GTK_SCALE (oggquality), 0);
705 
706     tooltips = gtk_tooltips_new ();
707     gtk_tooltips_set_tip (tooltips, oggquality, _("Higher quality means bigger file. Default is 6."), NULL);
708 
709     rip_ogg = gtk_check_button_new_with_mnemonic (_("OGG Vorbis (lossy compression)"));
710     gtk_widget_show (rip_ogg);
711     gtk_frame_set_label_widget (GTK_FRAME (frame4), rip_ogg);
712     g_signal_connect ((gpointer) rip_ogg, "toggled",
713                                         G_CALLBACK (on_rip_ogg_toggled),
714                                         NULL);
715     /* END OGG */
716 
717     /* FDK-AAC  */
718     frame3X = gtk_frame_new (NULL);
719     gtk_frame_set_shadow_type(GTK_FRAME(frame3X), GTK_SHADOW_IN);
720     gtk_widget_show (frame3X);
721     gtk_box_pack_start (GTK_BOX (vbox), frame3X, FALSE, FALSE, 0);
722 
723     alignment8X = gtk_alignment_new (0.5, 0.5, 1, 1);
724     gtk_widget_show (alignment8X);
725     gtk_container_add (GTK_CONTAINER (frame3X), alignment8X);
726     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8X), 2, 2, 12, 2);
727 
728     vbox2X = gtk_vbox_new (FALSE, 0);
729     gtk_widget_show (vbox2X);
730     gtk_container_add (GTK_CONTAINER (alignment8X), vbox2X);
731 
732     hbox9X = gtk_hbox_new (FALSE, 0);
733     gtk_widget_show (hbox9X);
734     gtk_box_pack_start (GTK_BOX (vbox2X), hbox9X, TRUE, TRUE, 0);
735 
736     label = gtk_label_new (_("Bitrate"));
737     gtk_widget_show (label);
738     gtk_box_pack_start (GTK_BOX (hbox9X), label, FALSE, FALSE, 0);
739     GLADE_HOOKUP_OBJECT (prefs, label, "fdkaac_bitrate_lbl");
740 
741     fdkaac_bitrate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 14, 1, 1, 1)));
742     gtk_widget_show (fdkaac_bitrate);
743     gtk_box_pack_start (GTK_BOX (hbox9X), fdkaac_bitrate, TRUE, TRUE, 5);
744     gtk_scale_set_draw_value (GTK_SCALE (fdkaac_bitrate), FALSE);
745     gtk_scale_set_digits (GTK_SCALE (fdkaac_bitrate), 0);
746     g_signal_connect ((gpointer) fdkaac_bitrate, "value_changed",
747                                         G_CALLBACK (on_fdkaac_bitrate_value_changed),
748                                         NULL);
749 
750     tooltips = gtk_tooltips_new ();
751     gtk_tooltips_set_tip (tooltips, fdkaac_bitrate, _("Higher bitrate is better quality but also bigger file. Most people use 192Kbps."), NULL);
752 
753     char kbps_textX[10];
754     snprintf(kbps_textX, 10, _("%dKbps"), 32);
755     label = gtk_label_new (kbps_textX);
756     gtk_widget_show (label);
757     gtk_box_pack_start (GTK_BOX (hbox9X), label, FALSE, FALSE, 0);
758     GLADE_HOOKUP_OBJECT (prefs, label, "fdkaac_bitrate_lbl_2");
759 
760     rip_fdkaac = gtk_check_button_new_with_mnemonic (_("AAC (lossy compression)"));
761     gtk_widget_show (rip_fdkaac);
762     gtk_frame_set_label_widget (GTK_FRAME (frame3X), rip_fdkaac);
763     g_signal_connect ((gpointer) rip_fdkaac, "toggled",
764                                         G_CALLBACK (on_rip_fdkaac_toggled),
765                                         NULL);
766     /* END FDK-AAC */
767 
768     /* FLAC */
769     frame5 = gtk_frame_new (NULL);
770     gtk_frame_set_shadow_type(GTK_FRAME(frame5), GTK_SHADOW_IN);
771     gtk_widget_show (frame5);
772     gtk_box_pack_start (GTK_BOX (vbox), frame5, FALSE, FALSE, 0);
773 
774     alignment10 = gtk_alignment_new (0.5, 0.5, 1, 1);
775     gtk_widget_show (alignment10);
776     gtk_container_add (GTK_CONTAINER (frame5), alignment10);
777     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment10), 2, 2, 12, 2);
778 
779     hbox11 = gtk_hbox_new (FALSE, 0);
780     gtk_widget_show (hbox11);
781     gtk_container_add (GTK_CONTAINER (alignment10), hbox11);
782 
783     flacLbl = gtk_label_new (_("Compression level"));
784     gtk_widget_show (flacLbl);
785     gtk_box_pack_start (GTK_BOX (hbox11), flacLbl, FALSE, FALSE, 0);
786 
787     flaccompression = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 9, 1, 1, 1)));
788     gtk_widget_show (flaccompression);
789     gtk_box_pack_start (GTK_BOX (hbox11), flaccompression, TRUE, TRUE, 5);
790     gtk_scale_set_value_pos (GTK_SCALE (flaccompression), GTK_POS_RIGHT);
791     gtk_scale_set_digits (GTK_SCALE (flaccompression), 0);
792 
793     tooltips = gtk_tooltips_new ();
794     gtk_tooltips_set_tip (tooltips, flaccompression, _("This does not affect the quality. Higher number means smaller file."), NULL);
795 
796     rip_flac = gtk_check_button_new_with_mnemonic (_("FLAC (lossless compression)"));
797     gtk_widget_show (rip_flac);
798     gtk_frame_set_label_widget (GTK_FRAME (frame5), rip_flac);
799     g_signal_connect ((gpointer) rip_flac, "toggled",
800                                         G_CALLBACK (on_rip_flac_toggled),
801                                         NULL);
802     /* END FLAC */
803 
804     GtkWidget* expander;
805     GtkWidget* frame6;
806     GtkWidget* frame7;
807     GtkWidget* alignment11;
808     GtkWidget* hbox13;
809     GtkWidget* rip_wavpack;
810     GtkWidget* wavpackcompression;
811     GtkWidget* hybridwavpack;
812     GtkWidget* wavpackbitrate;
813     GtkWidget* hiddenbox;
814 
815     expander = gtk_expander_new(_("More formats"));
816     gtk_widget_show (expander);
817     gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
818     GLADE_HOOKUP_OBJECT (prefs, expander, "more_formats_expander");
819 
820     hiddenbox = gtk_vbox_new (FALSE, 0);
821     gtk_widget_show (hiddenbox);
822     gtk_container_add (GTK_CONTAINER (expander), hiddenbox);
823 
824     /* OPUS */
825     GtkWidget *opusLbl;
826     GtkWidget *opusrate;
827     GtkWidget *rip_opus;
828     GtkWidget *opus_frame;
829     GtkWidget *opushbox;
830     GtkWidget *opusalignment;
831     char opus_kbps[10];
832 
833     opus_frame = gtk_frame_new(NULL);
834     gtk_frame_set_shadow_type(GTK_FRAME(opus_frame), GTK_SHADOW_IN);
835     gtk_widget_show (opus_frame);
836     gtk_box_pack_start (GTK_BOX(hiddenbox), opus_frame, FALSE, FALSE, 0);
837 
838     opusalignment = gtk_alignment_new (0.5, 0.5, 1, 1);
839     gtk_widget_show(opusalignment);
840     gtk_container_add (GTK_CONTAINER(opus_frame),opusalignment);
841     gtk_alignment_set_padding (GTK_ALIGNMENT(opusalignment), 2, 2, 12, 2);
842 
843     opushbox = gtk_hbox_new(FALSE,0);
844     gtk_widget_show (opushbox);
845     gtk_container_add (GTK_CONTAINER(opusalignment), opushbox);
846 
847     opusLbl = gtk_label_new (_("Bitrate"));
848     gtk_widget_show(opusLbl);
849     gtk_box_pack_start (GTK_BOX(opushbox), opusLbl, FALSE, FALSE,0);
850     GLADE_HOOKUP_OBJECT (prefs, opusLbl, "opus_lbl");
851 
852     opusrate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 13, 1, 1, 1)));
853     gtk_widget_show(opusrate);
854     gtk_box_pack_start(GTK_BOX(opushbox), opusrate, TRUE, TRUE, 5);
855     gtk_scale_set_draw_value (GTK_SCALE (opusrate), FALSE);
856     gtk_scale_set_digits (GTK_SCALE (opusrate), 0);
857     g_signal_connect ((gpointer) opusrate, "value_changed",
858                                         G_CALLBACK (on_opusrate_value_changed),
859                                         NULL);
860     tooltips = gtk_tooltips_new ();
861     gtk_tooltips_set_tip (tooltips, opusrate, _("Higher bitrate is better quality but also bigger file. Most people use 160Kbps."), NULL);
862     GLADE_HOOKUP_OBJECT (prefs, opusrate, "opusrate");
863     snprintf(opus_kbps, 10, _("%dKbps"), 32);
864     label = gtk_label_new (kbps_text);
865     gtk_widget_show (label);
866     gtk_box_pack_start (GTK_BOX (opushbox), label, FALSE, FALSE, 0);
867     GLADE_HOOKUP_OBJECT (prefs, label, "bitrate_lbl_4");
868 
869     rip_opus = gtk_check_button_new_with_mnemonic (_("OPUS (lossy compression)"));
870     gtk_widget_show (rip_opus);
871     gtk_frame_set_label_widget(GTK_FRAME(opus_frame), rip_opus);
872     g_signal_connect((gpointer) rip_opus, "toggled",
873                      G_CALLBACK (on_rip_opus_toggled),
874                      NULL);
875     GLADE_HOOKUP_OBJECT (prefs, rip_opus, "rip_opus");
876     /* END OPUS */
877 
878     /* WAVPACK */
879     GtkWidget* flacVbox;
880 
881     frame6 = gtk_frame_new (NULL);
882     gtk_frame_set_shadow_type(GTK_FRAME(frame6), GTK_SHADOW_IN);
883     gtk_widget_show (frame6);
884     gtk_box_pack_start (GTK_BOX (hiddenbox), frame6, FALSE, FALSE, 0);
885 
886     alignment11 = gtk_alignment_new (0.5, 0.5, 1, 1);
887     gtk_widget_show (alignment11);
888     gtk_container_add (GTK_CONTAINER (frame6), alignment11);
889     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment11), 2, 2, 12, 2);
890 
891     flacVbox = gtk_vbox_new (FALSE, 0);
892     gtk_widget_show (flacVbox);
893     gtk_container_add (GTK_CONTAINER (alignment11), flacVbox);
894 
895     hbox13 = gtk_hbox_new (FALSE, 0);
896     gtk_widget_show (hbox13);
897     gtk_box_pack_start (GTK_BOX (flacVbox), hbox13, FALSE, FALSE, 0);
898 
899     label = gtk_label_new (_("Compression level"));
900     gtk_widget_show (label);
901     gtk_box_pack_start (GTK_BOX (hbox13), label, FALSE, FALSE, 0);
902     GLADE_HOOKUP_OBJECT (prefs, label, "wavpack_compression_lbl");
903 
904     wavpackcompression = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (1, 0, 4, 1, 1, 1)));
905     gtk_widget_show (wavpackcompression);
906     gtk_box_pack_start (GTK_BOX (hbox13), wavpackcompression, TRUE, TRUE, 5);
907     gtk_scale_set_digits (GTK_SCALE (wavpackcompression), 0);
908     gtk_scale_set_value_pos (GTK_SCALE (wavpackcompression), GTK_POS_RIGHT);
909     GLADE_HOOKUP_OBJECT (prefs, wavpackcompression, "wavpack_compression");
910 
911     tooltips = gtk_tooltips_new ();
912     gtk_tooltips_set_tip (tooltips, wavpackcompression, _("This does not affect the quality. Higher number means smaller file. Default is 1 (recommended)."), NULL);
913 
914     frame7 = gtk_frame_new (NULL);
915     gtk_widget_show (frame7);
916     gtk_box_pack_start (GTK_BOX (flacVbox), frame7, FALSE, FALSE, 0);
917 
918     hybridwavpack = gtk_check_button_new_with_mnemonic (_("Hybrid compression"));
919     gtk_widget_show (hybridwavpack);
920     gtk_frame_set_label_widget (GTK_FRAME (frame7), hybridwavpack);
921     GLADE_HOOKUP_OBJECT (prefs, hybridwavpack, "wavpack_hybrid");
922     g_signal_connect ((gpointer) hybridwavpack, "toggled",
923                                         G_CALLBACK (on_hybrid_toggled),
924                                         NULL);
925 
926     tooltips = gtk_tooltips_new ();
927     gtk_tooltips_set_tip (tooltips, hybridwavpack, _("The format is lossy but a correction file is created for restoring the lossless original."), NULL);
928 
929     hbox9 = gtk_hbox_new (FALSE, 0);
930     gtk_widget_show (hbox9);
931     gtk_container_add (GTK_CONTAINER (frame7), hbox9);
932 
933     label = gtk_label_new (_("Bitrate"));
934     gtk_widget_show (label);
935     gtk_box_pack_start (GTK_BOX (hbox9), label, FALSE, FALSE, 2);
936     GLADE_HOOKUP_OBJECT (prefs, label, "wavpack_bitrate_lbl");
937 
938     wavpackbitrate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 6, 1, 1, 1)));
939     gtk_widget_show (wavpackbitrate);
940     gtk_box_pack_start (GTK_BOX (hbox9), wavpackbitrate, TRUE, TRUE, 5);
941     gtk_scale_set_digits (GTK_SCALE (wavpackbitrate), 0);
942     gtk_scale_set_value_pos (GTK_SCALE (wavpackbitrate), GTK_POS_RIGHT);
943     GLADE_HOOKUP_OBJECT (prefs, wavpackbitrate, "wavpack_bitrate_slider");
944     g_signal_connect ((gpointer)wavpackbitrate, "format-value",
945                                         G_CALLBACK (format_wavpack_bitrate),
946                                         NULL);
947 
948     rip_wavpack = gtk_check_button_new_with_mnemonic ("WavPack");
949     gtk_widget_show (rip_wavpack);
950     gtk_frame_set_label_widget (GTK_FRAME (frame6), rip_wavpack);
951     g_signal_connect ((gpointer) rip_wavpack, "toggled",
952                                         G_CALLBACK (on_rip_wavpack_toggled),
953                                         NULL);
954     GLADE_HOOKUP_OBJECT (prefs, rip_wavpack, "rip_wavpack");
955     /* END WAVPACK */
956 
957     /* MUSEPACK */
958     GtkWidget* frame9;
959     GtkWidget* rip_musepack;
960     GtkWidget* musepackBitrate;
961     GtkWidget* musepackVbox;
962 
963     frame9 = gtk_frame_new (NULL);
964     gtk_frame_set_shadow_type(GTK_FRAME(frame9), GTK_SHADOW_IN);
965     gtk_widget_show (frame9);
966     gtk_box_pack_start (GTK_BOX (hiddenbox), frame9, FALSE, FALSE, 0);
967 
968     alignment11 = gtk_alignment_new (0.5, 0.5, 1, 1);
969     gtk_widget_show (alignment11);
970     gtk_container_add (GTK_CONTAINER (frame9), alignment11);
971     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment11), 2, 2, 12, 2);
972 
973     musepackVbox = gtk_vbox_new (FALSE, 0);
974     gtk_widget_show (musepackVbox);
975     gtk_container_add (GTK_CONTAINER (alignment11), musepackVbox);
976 
977     hbox13 = gtk_hbox_new (FALSE, 0);
978     gtk_widget_show (hbox13);
979     gtk_box_pack_start (GTK_BOX (musepackVbox), hbox13, FALSE, FALSE, 0);
980 
981     label = gtk_label_new (_("Bitrate"));
982     gtk_widget_show (label);
983     gtk_box_pack_start (GTK_BOX (hbox13), label, FALSE, FALSE, 0);
984     GLADE_HOOKUP_OBJECT (prefs, label, "musepack_bitrate_lbl");
985 
986     musepackBitrate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 5, 1, 1, 1)));
987     gtk_widget_show (musepackBitrate);
988     gtk_box_pack_start (GTK_BOX (hbox13), musepackBitrate, TRUE, TRUE, 5);
989     gtk_scale_set_draw_value (GTK_SCALE (musepackBitrate), FALSE);
990     gtk_scale_set_digits (GTK_SCALE (musepackBitrate), 0);
991     g_signal_connect ((gpointer) musepackBitrate, "value_changed",
992                                         G_CALLBACK (on_musepackbitrate_value_changed),
993                                         NULL);
994     GLADE_HOOKUP_OBJECT (prefs, musepackBitrate, "musepack_bitrate_slider");
995 
996     tooltips = gtk_tooltips_new ();
997     gtk_tooltips_set_tip (tooltips, musepackBitrate, _("Higher bitrate is better quality but also bigger file."), NULL);
998 
999     snprintf(kbps_text, 10, _("%dKbps"), 90);
1000     label = gtk_label_new (kbps_text);
1001     gtk_widget_show (label);
1002     gtk_box_pack_start (GTK_BOX (hbox13), label, FALSE, FALSE, 0);
1003     GLADE_HOOKUP_OBJECT (prefs, label, "bitrate_lbl_3");
1004 
1005     rip_musepack = gtk_check_button_new_with_mnemonic (_("Musepack (lossy compression)"));
1006     gtk_widget_show (rip_musepack);
1007     gtk_frame_set_label_widget (GTK_FRAME (frame9), rip_musepack);
1008     g_signal_connect ((gpointer) rip_musepack, "toggled",
1009                                         G_CALLBACK (on_rip_musepack_toggled),
1010                                         NULL);
1011     GLADE_HOOKUP_OBJECT (prefs, rip_musepack, "rip_musepack");
1012     /* END MUSEPACK */
1013 
1014     /* MONKEY */
1015     GtkWidget* frame8;
1016     GtkWidget* rip_monkey;
1017     GtkWidget* monkeyCompression;
1018     GtkWidget* monkeyVbox;
1019 
1020     frame8 = gtk_frame_new (NULL);
1021     gtk_frame_set_shadow_type(GTK_FRAME(frame8), GTK_SHADOW_IN);
1022     gtk_widget_show (frame8);
1023     gtk_box_pack_start (GTK_BOX (hiddenbox), frame8, FALSE, FALSE, 0);
1024 
1025     alignment11 = gtk_alignment_new (0.5, 0.5, 1, 1);
1026     gtk_widget_show (alignment11);
1027     gtk_container_add (GTK_CONTAINER (frame8), alignment11);
1028     gtk_alignment_set_padding (GTK_ALIGNMENT (alignment11), 2, 2, 12, 2);
1029 
1030     monkeyVbox = gtk_vbox_new (FALSE, 0);
1031     gtk_widget_show (monkeyVbox);
1032     gtk_container_add (GTK_CONTAINER (alignment11), monkeyVbox);
1033 
1034     hbox13 = gtk_hbox_new (FALSE, 0);
1035     gtk_widget_show (hbox13);
1036     gtk_box_pack_start (GTK_BOX (monkeyVbox), hbox13, FALSE, FALSE, 0);
1037 
1038     label = gtk_label_new (_("Compression level"));
1039     gtk_widget_show (label);
1040     gtk_box_pack_start (GTK_BOX (hbox13), label, FALSE, FALSE, 0);
1041     GLADE_HOOKUP_OBJECT (prefs, label, "monkey_compression_lbl");
1042 
1043     monkeyCompression = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 5, 1, 1, 1)));
1044     gtk_widget_show (monkeyCompression);
1045     gtk_box_pack_start (GTK_BOX (hbox13), monkeyCompression, TRUE, TRUE, 5);
1046     gtk_scale_set_value_pos (GTK_SCALE (monkeyCompression), GTK_POS_RIGHT);
1047     gtk_scale_set_digits (GTK_SCALE (monkeyCompression), 0);
1048     GLADE_HOOKUP_OBJECT (prefs, monkeyCompression, "monkey_compression_slider");
1049 
1050     tooltips = gtk_tooltips_new ();
1051     gtk_tooltips_set_tip (tooltips, monkeyCompression, _("This does not affect the quality. Higher number means smaller file."), NULL);
1052 
1053     rip_monkey = gtk_check_button_new_with_mnemonic (_("Monkey's Audio (lossless compression)"));
1054     gtk_widget_show (rip_monkey);
1055     gtk_frame_set_label_widget (GTK_FRAME (frame8), rip_monkey);
1056     g_signal_connect ((gpointer) rip_monkey, "toggled",
1057                                         G_CALLBACK (on_rip_monkey_toggled),
1058                                         NULL);
1059     GLADE_HOOKUP_OBJECT (prefs, rip_monkey, "rip_monkey");
1060     /* END MONKEY */
1061 
1062     //~ expander = gtk_expander_new(_("Proprietary encoders"));
1063     //~ gtk_widget_show (expander);
1064     //~ gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
1065     //~ GLADE_HOOKUP_OBJECT (prefs, expander, "proprietary_formats_expander");
1066 
1067     //~ hiddenbox = gtk_vbox_new (FALSE, 0);
1068     //~ gtk_widget_show (hiddenbox);
1069     //~ gtk_container_add (GTK_CONTAINER (expander), hiddenbox);
1070 
1071     label = gtk_label_new (_("Encode"));
1072     gtk_widget_show (label);
1073     gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label);
1074     /* END ENCODE tab */
1075 
1076     /* ADVANCED tab */
1077     GtkWidget* do_cddb_updates;
1078     GtkWidget* frame;
1079     GtkWidget* hbox;
1080     GtkWidget* cddbServerName;
1081     GtkWidget* cddbPortNum;
1082     GtkWidget* useProxy;
1083     GtkWidget* serverName;
1084     GtkWidget* portNum;
1085     GtkWidget* frameVbox;
1086     GtkWidget* concatenated_track_separator;
1087     GtkWidget* do_log;
1088     GtkWidget* do_fast_rip;
1089 
1090     vbox = gtk_vbox_new (FALSE, 5);
1091     gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
1092     gtk_widget_show (vbox);
1093     gtk_container_add (GTK_CONTAINER (notebook1), vbox);
1094 
1095     frame = gtk_frame_new (NULL);
1096     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
1097     gtk_frame_set_label(GTK_FRAME(frame), "CDDB");
1098     gtk_widget_show (frame);
1099     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1100 
1101     frameVbox = gtk_vbox_new (FALSE, 0);
1102     gtk_widget_show (frameVbox);
1103     gtk_container_add (GTK_CONTAINER (frame), frameVbox);
1104 
1105     do_cddb_updates = gtk_check_button_new_with_mnemonic (_("Get disc info from the internet automatically"));
1106     gtk_widget_show (do_cddb_updates);
1107     gtk_box_pack_start (GTK_BOX (frameVbox), do_cddb_updates, FALSE, FALSE, 0);
1108 
1109     hbox = gtk_hbox_new (FALSE, 0);
1110     gtk_widget_show (hbox);
1111     gtk_box_pack_start (GTK_BOX (frameVbox), hbox, FALSE, FALSE, 1);
1112 
1113     label = gtk_label_new (_("Server: "));
1114     gtk_widget_show (label);
1115     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
1116 
1117     cddbServerName = gtk_entry_new ();
1118     gtk_widget_show (cddbServerName);
1119     gtk_box_pack_start (GTK_BOX (hbox), cddbServerName, TRUE, TRUE, 5);
1120     GLADE_HOOKUP_OBJECT (prefs, cddbServerName, "cddb_server_name");
1121 
1122     tooltips = gtk_tooltips_new ();
1123     gtk_tooltips_set_tip (tooltips, cddbServerName, _("The CDDB server to get disc info from (default is freedb.freedb.org)"), NULL);
1124 
1125     hbox = gtk_hbox_new (FALSE, 0);
1126     gtk_widget_show (hbox);
1127     gtk_box_pack_start (GTK_BOX (frameVbox), hbox, FALSE, FALSE, 1);
1128 
1129     label = gtk_label_new (_("Port: "));
1130     gtk_widget_show (label);
1131     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
1132 
1133     cddbPortNum = gtk_entry_new ();
1134     gtk_widget_show (cddbPortNum);
1135     gtk_box_pack_start (GTK_BOX (hbox), cddbPortNum, TRUE, TRUE, 5);
1136     GLADE_HOOKUP_OBJECT (prefs, cddbPortNum, "cddb_port_number");
1137 
1138     tooltips = gtk_tooltips_new ();
1139     gtk_tooltips_set_tip (tooltips, cddbPortNum, _("The CDDB server port (default is 8880)"), NULL);
1140 
1141     frame = gtk_frame_new (NULL);
1142     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
1143     gtk_widget_show (frame);
1144     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1145 
1146     useProxy = gtk_check_button_new_with_mnemonic (_("Use an HTTP proxy to connect to the internet"));
1147     gtk_widget_show (useProxy);
1148     gtk_frame_set_label_widget (GTK_FRAME (frame), useProxy);
1149     GLADE_HOOKUP_OBJECT (prefs, useProxy, "use_proxy");
1150 
1151     frameVbox = gtk_vbox_new (FALSE, 0);
1152     gtk_widget_show (frameVbox);
1153     gtk_container_add (GTK_CONTAINER (frame), frameVbox);
1154 
1155     hbox = gtk_hbox_new (FALSE, 0);
1156     gtk_widget_show (hbox);
1157     gtk_box_pack_start (GTK_BOX (frameVbox), hbox, FALSE, FALSE, 1);
1158 
1159     label = gtk_label_new (_("Server: "));
1160     gtk_widget_show (label);
1161     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
1162 
1163     serverName = gtk_entry_new ();
1164     gtk_widget_show (serverName);
1165     gtk_box_pack_start (GTK_BOX (hbox), serverName, TRUE, TRUE, 5);
1166     GLADE_HOOKUP_OBJECT (prefs, serverName, "server_name");
1167 
1168     hbox = gtk_hbox_new (FALSE, 0);
1169     gtk_widget_show (hbox);
1170     gtk_box_pack_start (GTK_BOX (frameVbox), hbox, FALSE, FALSE, 1);
1171 
1172     label = gtk_label_new (_("Port: "));
1173     gtk_widget_show (label);
1174     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
1175 
1176     portNum = gtk_entry_new ();
1177     gtk_widget_show (portNum);
1178     gtk_box_pack_start (GTK_BOX (hbox), portNum, TRUE, TRUE, 5);
1179     GLADE_HOOKUP_OBJECT (prefs, portNum, "port_number");
1180 
1181     frame = gtk_frame_new (NULL);
1182     gtk_widget_show (frame);
1183     gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1184     gtk_frame_set_label(GTK_FRAME(frame), "Right-click options");
1185 
1186     frameVbox = gtk_vbox_new (FALSE, 0);
1187     gtk_widget_show (frameVbox);
1188     gtk_container_add (GTK_CONTAINER (frame), frameVbox);
1189 
1190     hbox = gtk_hbox_new (FALSE, 0);
1191     gtk_widget_show (hbox);
1192     gtk_box_pack_start (GTK_BOX (frameVbox), hbox, FALSE, FALSE, 1);
1193 
1194     label = gtk_label_new (_("Artist/Title separator: "));
1195     gtk_widget_show (label);
1196     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
1197 
1198     concatenated_track_separator = gtk_entry_new();
1199     gtk_entry_set_max_length(GTK_ENTRY(concatenated_track_separator), 1);
1200     gtk_widget_show(concatenated_track_separator);
1201     gtk_box_pack_start (GTK_BOX (hbox), concatenated_track_separator, TRUE, TRUE, 5);
1202     GLADE_HOOKUP_OBJECT (prefs, concatenated_track_separator,
1203             "concatenated_track_separator");
1204 
1205     do_log = gtk_check_button_new_with_label (_("Log to /var/log/asunder.log"));
1206     gtk_widget_show (do_log);
1207     gtk_box_pack_start (GTK_BOX (vbox), do_log, FALSE, FALSE, 0);
1208     GLADE_HOOKUP_OBJECT (prefs, do_log, "do_log");
1209 
1210     do_fast_rip = gtk_check_button_new_with_label (_("Faster ripping (no error correction)"));
1211     gtk_widget_show (do_fast_rip);
1212     gtk_box_pack_start (GTK_BOX (vbox), do_fast_rip, FALSE, FALSE, 0);
1213     GLADE_HOOKUP_OBJECT (prefs, do_fast_rip, "do_fast_rip");
1214 
1215     hboxFill = gtk_hbox_new (FALSE, 0);
1216     gtk_widget_show (hboxFill);
1217     gtk_box_pack_start (GTK_BOX (vbox), hboxFill, TRUE, TRUE, 0);
1218 
1219     label = gtk_label_new (_("Advanced"));
1220     gtk_widget_show (label);
1221     gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label);
1222     /* END ADVANCED tab */
1223 
1224     dialog_action_area1 = GTK_DIALOG (prefs)->action_area;
1225     gtk_widget_show (dialog_action_area1);
1226     gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
1227 
1228     cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
1229     gtk_widget_show (cancelbutton1);
1230     gtk_dialog_add_action_widget (GTK_DIALOG (prefs), cancelbutton1, GTK_RESPONSE_CANCEL);
1231     GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
1232 
1233     okbutton1 = gtk_button_new_from_stock ("gtk-ok");
1234     gtk_widget_show (okbutton1);
1235     gtk_dialog_add_action_widget (GTK_DIALOG (prefs), okbutton1, GTK_RESPONSE_OK);
1236     GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
1237 
1238     g_signal_connect ((gpointer) prefs, "response",
1239                                         G_CALLBACK (on_prefs_response),
1240                                         NULL);
1241     g_signal_connect ((gpointer) prefs, "realize",
1242                                         G_CALLBACK (on_prefs_show),
1243                                         NULL);
1244 
1245     /* Store pointers to all widgets, for use by lookup_widget(). */
1246     GLADE_HOOKUP_OBJECT_NO_REF (prefs, prefs, "prefs");
1247     GLADE_HOOKUP_OBJECT (prefs, notebook1, "notebook1");
1248     GLADE_HOOKUP_OBJECT (prefs, music_dir, "music_dir");
1249     GLADE_HOOKUP_OBJECT (prefs, make_playlist, "make_playlist");
1250     GLADE_HOOKUP_OBJECT (prefs, cdrom, "cdrom");
1251     GLADE_HOOKUP_OBJECT (prefs, eject_on_done, "eject_on_done");
1252     GLADE_HOOKUP_OBJECT (prefs, format_music, "format_music");
1253     GLADE_HOOKUP_OBJECT (prefs, format_albumdir, "format_albumdir");
1254     GLADE_HOOKUP_OBJECT (prefs, format_playlist, "format_playlist");
1255     GLADE_HOOKUP_OBJECT (prefs, rip_wav, "rip_wav");
1256     GLADE_HOOKUP_OBJECT (prefs, mp3_vbr, "mp3_vbr");
1257     GLADE_HOOKUP_OBJECT (prefs, mp3bitrate, "mp3bitrate");
1258     GLADE_HOOKUP_OBJECT (prefs, rip_mp3, "rip_mp3");
1259     GLADE_HOOKUP_OBJECT (prefs, oggLbl, "ogg_lbl");
1260     GLADE_HOOKUP_OBJECT (prefs, oggquality, "oggquality");
1261     GLADE_HOOKUP_OBJECT (prefs, rip_ogg, "rip_ogg");
1262     GLADE_HOOKUP_OBJECT (prefs, rip_fdkaac, "rip_fdkaac");
1263     GLADE_HOOKUP_OBJECT (prefs, fdkaac_bitrate, "fdkaac_bitrate");
1264     GLADE_HOOKUP_OBJECT (prefs, flacLbl, "flac_lbl");
1265     GLADE_HOOKUP_OBJECT (prefs, flaccompression, "flaccompression");
1266     GLADE_HOOKUP_OBJECT (prefs, rip_flac, "rip_flac");
1267     GLADE_HOOKUP_OBJECT (prefs, do_cddb_updates, "do_cddb_updates");
1268     GLADE_HOOKUP_OBJECT_NO_REF (prefs, dialog_action_area1, "dialog_action_area1");
1269     GLADE_HOOKUP_OBJECT (prefs, cancelbutton1, "cancelbutton1");
1270     GLADE_HOOKUP_OBJECT (prefs, okbutton1, "okbutton1");
1271 
1272     return prefs;
1273 }
1274 
1275 GtkWidget*
create_ripping(void)1276 create_ripping (void)
1277 {
1278     GtkWidget *ripping;
1279     GtkWidget *dialog_vbox2;
1280     GtkWidget *table3;
1281     GtkWidget *progress_total;
1282     GtkWidget *progress_rip;
1283     GtkWidget *progress_encode;
1284     GtkWidget *label25;
1285     GtkWidget *label26;
1286     GtkWidget *label27;
1287     GtkWidget *dialog_action_area2;
1288     GtkWidget *cancel;
1289 
1290     ripping = gtk_dialog_new ();
1291     gtk_window_set_transient_for (GTK_WINDOW(ripping), GTK_WINDOW(win_main));
1292     gtk_window_set_title (GTK_WINDOW (ripping), _("Ripping"));
1293     gtk_window_set_modal (GTK_WINDOW (ripping), TRUE);
1294     gtk_window_set_type_hint (GTK_WINDOW (ripping), GDK_WINDOW_TYPE_HINT_DIALOG);
1295 
1296     dialog_vbox2 = GTK_DIALOG (ripping)->vbox;
1297     gtk_widget_show (dialog_vbox2);
1298 
1299     table3 = gtk_table_new (3, 2, FALSE);
1300     gtk_widget_show (table3);
1301     gtk_box_pack_start (GTK_BOX (dialog_vbox2), table3, TRUE, TRUE, 0);
1302 
1303     progress_total = gtk_progress_bar_new ();
1304     gtk_widget_show (progress_total);
1305     gtk_table_attach (GTK_TABLE (table3), progress_total, 1, 2, 0, 1,
1306                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1307                                         (GtkAttachOptions) (0), 0, 0);
1308 
1309     progress_rip = gtk_progress_bar_new ();
1310     gtk_widget_show (progress_rip);
1311     gtk_table_attach (GTK_TABLE (table3), progress_rip, 1, 2, 1, 2,
1312                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1313                                         (GtkAttachOptions) (0), 0, 0);
1314 
1315     progress_encode = gtk_progress_bar_new ();
1316     gtk_widget_show (progress_encode);
1317     gtk_table_attach (GTK_TABLE (table3), progress_encode, 1, 2, 2, 3,
1318                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1319                                         (GtkAttachOptions) (0), 0, 0);
1320 
1321     label25 = gtk_label_new (_("Total progress"));
1322     gtk_widget_show (label25);
1323     gtk_table_attach (GTK_TABLE (table3), label25, 0, 1, 0, 1,
1324                                         (GtkAttachOptions) (GTK_FILL),
1325                                         (GtkAttachOptions) (0), 5, 0);
1326     gtk_misc_set_alignment (GTK_MISC (label25), 0, 0.5);
1327 
1328     label26 = gtk_label_new (_("Ripping"));
1329     gtk_widget_show (label26);
1330     gtk_table_attach (GTK_TABLE (table3), label26, 0, 1, 1, 2,
1331                                         (GtkAttachOptions) (GTK_FILL),
1332                                         (GtkAttachOptions) (0), 5, 0);
1333     gtk_misc_set_alignment (GTK_MISC (label26), 0, 0.5);
1334 
1335     label27 = gtk_label_new (_("Encoding"));
1336     gtk_widget_show (label27);
1337     gtk_table_attach (GTK_TABLE (table3), label27, 0, 1, 2, 3,
1338                                         (GtkAttachOptions) (GTK_FILL),
1339                                         (GtkAttachOptions) (0), 5, 0);
1340     gtk_misc_set_alignment (GTK_MISC (label27), 0, 0.5);
1341 
1342     dialog_action_area2 = GTK_DIALOG (ripping)->action_area;
1343     gtk_widget_show (dialog_action_area2);
1344     gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
1345 
1346     cancel = gtk_button_new_from_stock ("gtk-cancel");
1347     gtk_widget_show (cancel);
1348     gtk_dialog_add_action_widget (GTK_DIALOG (ripping), cancel, GTK_RESPONSE_CANCEL);
1349     GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT);
1350 
1351     g_signal_connect ((gpointer) cancel, "clicked",
1352                                         G_CALLBACK (on_cancel_clicked),
1353                                         NULL);
1354 
1355     /* Store pointers to all widgets, for use by lookup_widget(). */
1356     GLADE_HOOKUP_OBJECT_NO_REF (ripping, ripping, "ripping");
1357     GLADE_HOOKUP_OBJECT_NO_REF (ripping, dialog_vbox2, "dialog_vbox2");
1358     GLADE_HOOKUP_OBJECT (ripping, table3, "table3");
1359     GLADE_HOOKUP_OBJECT (ripping, progress_total, "progress_total");
1360     GLADE_HOOKUP_OBJECT (ripping, progress_rip, "progress_rip");
1361     GLADE_HOOKUP_OBJECT (ripping, progress_encode, "progress_encode");
1362     GLADE_HOOKUP_OBJECT (ripping, label25, "label25");
1363     GLADE_HOOKUP_OBJECT (ripping, label26, "label26");
1364     GLADE_HOOKUP_OBJECT (ripping, label27, "label27");
1365     GLADE_HOOKUP_OBJECT_NO_REF (ripping, dialog_action_area2, "dialog_action_area2");
1366     GLADE_HOOKUP_OBJECT (ripping, cancel, "cancel");
1367 
1368     return ripping;
1369 }
1370 
disable_all_main_widgets(void)1371 void disable_all_main_widgets(void)
1372 {
1373     gtk_widget_set_sensitive(lookup_widget(win_main, "lookup"), FALSE);
1374     gtk_widget_set_sensitive(lookup_widget(win_main, "preferences"), FALSE);
1375     gtk_widget_set_sensitive(lookup_widget(win_main, "about"), FALSE);
1376     gtk_widget_set_sensitive(lookup_widget(win_main, "disc"), FALSE);
1377     gtk_widget_set_sensitive(lookup_widget(win_main, "album_artist"), FALSE);
1378     gtk_widget_set_sensitive(lookup_widget(win_main, "artist_label"), FALSE);
1379     gtk_widget_set_sensitive(lookup_widget(win_main, "title_label"), FALSE);
1380     gtk_widget_set_sensitive(lookup_widget(win_main, "album_title"), FALSE);
1381     gtk_widget_set_sensitive(lookup_widget(win_main, "single_artist"), FALSE);
1382     gtk_widget_set_sensitive(tracklist, FALSE);
1383     gtk_widget_set_sensitive(lookup_widget(win_main, "rip_button"), FALSE);
1384     gtk_widget_set_sensitive(lookup_widget(win_main, "album_genre"), FALSE);	// lnr
1385     gtk_widget_set_sensitive(lookup_widget(win_main, "genre_label"), FALSE);	// lnr
1386     gtk_widget_set_sensitive(lookup_widget(win_main, "album_year"), FALSE);
1387 }
1388 
enable_all_main_widgets(void)1389 void enable_all_main_widgets(void)
1390 {
1391     gtk_widget_set_sensitive(lookup_widget(win_main, "lookup"), TRUE);
1392     gtk_widget_set_sensitive(lookup_widget(win_main, "preferences"), TRUE);
1393     gtk_widget_set_sensitive(lookup_widget(win_main, "about"), TRUE);
1394     gtk_widget_set_sensitive(lookup_widget(win_main, "disc"), TRUE);
1395     gtk_widget_set_sensitive(lookup_widget(win_main, "album_artist"), TRUE);
1396     gtk_widget_set_sensitive(lookup_widget(win_main, "artist_label"), TRUE);
1397     gtk_widget_set_sensitive(lookup_widget(win_main, "title_label"), TRUE);
1398     gtk_widget_set_sensitive(lookup_widget(win_main, "album_title"), TRUE);
1399     gtk_widget_set_sensitive(lookup_widget(win_main, "single_artist"), TRUE);
1400     gtk_widget_set_sensitive(tracklist, TRUE);
1401     gtk_widget_set_sensitive(lookup_widget(win_main, "rip_button"), TRUE);
1402     gtk_widget_set_sensitive(lookup_widget(win_main, "album_genre"), TRUE);		// lnr
1403     gtk_widget_set_sensitive(lookup_widget(win_main, "genre_label"), TRUE);		// lnr
1404     gtk_widget_set_sensitive(lookup_widget(win_main, "album_year"), TRUE);
1405 }
1406 
disable_mp3_widgets(void)1407 void disable_mp3_widgets(void)
1408 {
1409     gtk_widget_set_sensitive(lookup_widget(win_prefs, "mp3_vbr"), FALSE);
1410     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl"), FALSE);
1411     gtk_widget_set_sensitive(lookup_widget(win_prefs, "mp3bitrate"), FALSE);
1412     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl_2"), FALSE);
1413 }
1414 
enable_mp3_widgets(void)1415 void enable_mp3_widgets(void)
1416 {
1417     gtk_widget_set_sensitive(lookup_widget(win_prefs, "mp3_vbr"), TRUE);
1418     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl"), TRUE);
1419     gtk_widget_set_sensitive(lookup_widget(win_prefs, "mp3bitrate"), TRUE);
1420     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl_2"), TRUE);
1421 }
1422 
disable_fdkaac_widgets(void)1423 void disable_fdkaac_widgets(void)
1424 {
1425     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate_lbl"), FALSE);
1426     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate"), FALSE);
1427     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate_lbl_2"), FALSE);
1428 }
1429 
enable_fdkaac_widgets(void)1430 void enable_fdkaac_widgets(void)
1431 {
1432     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate_lbl"), TRUE);
1433     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate"), TRUE);
1434     gtk_widget_set_sensitive(lookup_widget(win_prefs, "fdkaac_bitrate_lbl_2"), TRUE);
1435 }
1436 
disable_ogg_widgets(void)1437 void disable_ogg_widgets(void)
1438 {
1439     gtk_widget_set_sensitive(lookup_widget(win_prefs, "ogg_lbl"), FALSE);
1440     gtk_widget_set_sensitive(lookup_widget(win_prefs, "oggquality"), FALSE);
1441 }
1442 
enable_ogg_widgets(void)1443 void enable_ogg_widgets(void)
1444 {
1445     gtk_widget_set_sensitive(lookup_widget(win_prefs, "ogg_lbl"), TRUE);
1446     gtk_widget_set_sensitive(lookup_widget(win_prefs, "oggquality"), TRUE);
1447 }
1448 
disable_opus_widgets(void)1449 void disable_opus_widgets(void)
1450 {
1451     gtk_widget_set_sensitive(lookup_widget(win_prefs, "opus_lbl"),FALSE);
1452     gtk_widget_set_sensitive(lookup_widget(win_prefs,"opusrate"), FALSE);
1453     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl_4"), FALSE);
1454 }
1455 
enable_opus_widgets(void)1456 void enable_opus_widgets(void)
1457 {
1458     gtk_widget_set_sensitive(lookup_widget(win_prefs, "opus_lbl"),TRUE);
1459     gtk_widget_set_sensitive(lookup_widget(win_prefs,"opusrate"), TRUE);
1460     gtk_widget_set_sensitive(lookup_widget(win_prefs, "bitrate_lbl_4"), TRUE);
1461 }
1462 
disable_flac_widgets(void)1463 void disable_flac_widgets(void)
1464 {
1465     gtk_widget_set_sensitive(lookup_widget(win_prefs, "flac_lbl"), FALSE);
1466     gtk_widget_set_sensitive(lookup_widget(win_prefs, "flaccompression"), FALSE);
1467 }
1468 
enable_flac_widgets(void)1469 void enable_flac_widgets(void)
1470 {
1471     gtk_widget_set_sensitive(lookup_widget(win_prefs, "flac_lbl"), TRUE);
1472     gtk_widget_set_sensitive(lookup_widget(win_prefs, "flaccompression"), TRUE);
1473 }
1474 
disable_wavpack_widgets(void)1475 void disable_wavpack_widgets(void)
1476 {
1477     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_compression_lbl"), FALSE);
1478     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_compression"), FALSE);
1479     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_hybrid"), FALSE);
1480     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_lbl"), FALSE);
1481     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_slider"), FALSE);
1482 }
1483 
enable_wavpack_widgets(void)1484 void enable_wavpack_widgets(void)
1485 {
1486     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_compression_lbl"), TRUE);
1487     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_compression"), TRUE);
1488     gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_hybrid"), TRUE);
1489     if (global_prefs->wavpack_hybrid)
1490     {
1491         gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_lbl"), TRUE);
1492         gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_slider"), TRUE);
1493     }
1494     else
1495     {
1496         gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_lbl"), FALSE);
1497         gtk_widget_set_sensitive(lookup_widget(win_prefs, "wavpack_bitrate_slider"), FALSE);
1498     }
1499 }
1500 
disable_monkey_widgets(void)1501 void disable_monkey_widgets(void)
1502 {
1503     gtk_widget_set_sensitive(lookup_widget(win_prefs, "monkey_compression_lbl"), FALSE);
1504     gtk_widget_set_sensitive(lookup_widget(win_prefs, "monkey_compression_slider"), FALSE);
1505 }
1506 
enable_monkey_widgets(void)1507 void enable_monkey_widgets(void)
1508 {
1509     gtk_widget_set_sensitive(lookup_widget(win_prefs, "monkey_compression_lbl"), TRUE);
1510     gtk_widget_set_sensitive(lookup_widget(win_prefs, "monkey_compression_slider"), TRUE);
1511 }
1512 
disable_musepack_widgets(void)1513 void disable_musepack_widgets(void)
1514 {
1515     gtk_widget_set_sensitive(lookup_widget(win_prefs, "musepack_bitrate_lbl"), FALSE);
1516     gtk_widget_set_sensitive(lookup_widget(win_prefs, "musepack_bitrate_slider"), FALSE);
1517 }
1518 
enable_musepack_widgets(void)1519 void enable_musepack_widgets(void)
1520 {
1521     gtk_widget_set_sensitive(lookup_widget(win_prefs, "musepack_bitrate_lbl"), TRUE);
1522     gtk_widget_set_sensitive(lookup_widget(win_prefs, "musepack_bitrate_slider"), TRUE);
1523 }
1524 
1525 void
toggle_allow_tracknum(void)1526 toggle_allow_tracknum(void)
1527 {
1528     // "Toggle Track Offset/Width control"
1529     GtkWidget* tn_hbox = lookup_widget(win_main, "tn_hbox");
1530     GtkWidget* tn_first = lookup_widget(win_main, "tn_first");
1531     GtkWidget* tn_width = lookup_widget(win_main, "tn_width");
1532     gboolean active = global_prefs->allow_first_track_num_change;
1533 
1534     if (!active)
1535     {
1536         global_prefs->first_track_num_offset = 0;
1537         global_prefs->track_num_width = 2;
1538         gtk_widget_hide(tn_hbox);
1539     }
1540     else
1541     {
1542         char txt[16];
1543         snprintf(txt, 16, "%d", global_prefs->first_track_num_offset + 1);
1544         gtk_entry_set_text(GTK_ENTRY (tn_first), txt);
1545         gtk_combo_box_set_active(GTK_COMBO_BOX(tn_width), global_prefs->track_num_width - 1);
1546         gtk_widget_show(tn_hbox);
1547     }
1548     update_track_offsets();
1549 }
1550 
1551 const char*
1552 GBLprogramName = "Asunder 2.9.6";
1553 
1554 static const char*
1555 GBLauthors[2] = {
1556 "Many thanks to all the following people:\n"
1557 "\n"
1558 "Andrew Smith\n"
1559 "http://littlesvr.ca/contact.php\n"
1560 "2005 - 2019\n"
1561 "- maintainer\n"
1562 "\n"
1563 "Eric Lathrop\n"
1564 "http://ericlathrop.com/\n"
1565 "- original author\n"
1566 "- 'eject when finished' feature\n"
1567 "\n"
1568 "Gregory Margo\n"
1569 "- Shorten requested filenames that are longer than the filesystem can handle\n"
1570 "- Work around cdparanoia's filename length limits\n"
1571 "- Fixed bug where multiple CDDB entries would only show once\n"
1572 "- Improved the refresh/lookup system to work much better with more complicated CDs\n"
1573 "- Fixed FLAC progress scanner. Both to make the percentage more reliable and to prevent a possible crash\n"
1574 "- Added feature to select/deselect all tracks by clicking on rip checkbox header\n"
1575 "- Fixed autocomplete file loading\n"
1576 "- Fixed several potential buffer overflow bugs\n"
1577 "- Fixed some minor memory leaks\n"
1578 "- Fixed race condition during abort\n"
1579 "- Improved completion percentage feedback\n"
1580 "- Added feature to make the artist and title columns resizable\n"
1581 "- Remove 'single genre' code that's been unused since 2010.\n"
1582 "- Added features to automatically fix some common mistakes in CDDB entries.\n"
1583 "- Fixed the wavpack and mpc encoders to include APEv2 metadata.\n"
1584 "- Allow changing the first track number and the width of the track number in the filename.\n"
1585 "(A few patches were mistakenly attributed to \"Gregory Montego\" and \"Gergory Margo\")\n"
1586 "\n"
1587 "Andreas Ronnquist\n"
1588 "- Moved the config file to ~/.config/asunder without breaking old configs\n"
1589 "- Moved the autocomplete files to ~/.cache/asunder without breaking old caches\n"
1590 "\n"
1591 "Fraser Tweedale\n"
1592 "- FreeBSD port\n"
1593 "\n"
1594 "Dave Tyson\n"
1595 "- NetBSD port\n"
1596 "\n"
1597 "Lorraine Reed, aka Lightning Rose\n"
1598 "http://www.lightning-rose.com/\n"
1599 "- Editable genre feature to version 1.9.2\n"
1600 "- Added invalid MS file chars to trim_chars()\n"
1601 "\n"
1602 "Radu Potop\n"
1603 "http://wooptoo.com/\n"
1604 "- The new Asunder icon\n"
1605 "\n"
1606 "Pader Reszo\n"
1607 "- Made the about description translatable\n"
1608 "\n"
1609 "Cyril Brulebois\n"
1610 "- A kFreeBSD fix.\n"
1611 "\n"
1612 "Richard Gill\n"
1613 "- Support for XDG_CONFIG_HOME\n"
1614 "- Support for XDG_CACHE_HOME\n"
1615 "\n"
1616 "Hiroyuki Ito\n"
1617 "- Support for autocompletion in artist/album/genre fields.\n"
1618 "\n"
1619 "Jonathan 'theJPster' Pallant\n"
1620 "- Move from neroAacEnc to fdkaac.\n"
1621 "- Tag AAC files using neroAacTag.\n"
1622 "\n"
1623 "Micah Lindstrom\n"
1624 "- Support for invalid filesystem characters in metadata.\n"
1625 "\n"
1626 "Tim Allen\n"
1627 "- Fix to make the MusicBrainz CDDB gateway work with Asunder.\n"
1628 "\n"
1629 "Tudor\n"
1630 "- Desktop file trick to add Asunder to the list of audio CD apps in Gnome.\n"
1631 "\n"
1632 "Felix Braun\n"
1633 "- Support for encoding into OPUS.\n"
1634 "\n"
1635 "Nicolas Leveille\n"
1636 "- Fix for: don't reset the track info edited by the user by doing an unnecessary CDDB lookup.\n"
1637 "\n"
1638 "Pierre Lestringant (whz)\n"
1639 "- Fixed musepack and aac playlist generation\n"
1640 "\n"
1641 "Matthew (mw)\n"
1642 "- Add the ALBUMARTIST tag to flac files when \"Single artist\" is not checked.\n"
1643 "\n"
1644 "Antony Gelberg\n"
1645 "- Fixed when the CD is ejected to avoid problems before a full rip/encode cycle is completed.\n"
1646 "\n"
1647 "Tom Bailey\n"
1648 "- Added support for joining artist and title in title field.\n"
1649 "\n"
1650 "Packages:\n"
1651 "\n"
1652 "Kevin \"Eonfge\" Degeling\n"
1653 "- Flatpak/Flathub setup for Asunder, version 2.9.6\n"
1654 "\n"
1655 "Toni Graffy\n"
1656 "Maintainer of many SuSE packages at PackMan\n"
1657 "- SuSE packages of Asunder, versions 0.1 - 1.6\n"
1658 "\n"
1659 "Joao Pinto\n"
1660 "- 64bit Debian and Ubuntu packages of Asunder, versions 1.0.1 - 1.0.2, 1.6\n"
1661 "\n"
1662 "Trent Weddington\n"
1663 "http://rtfm.insomnia.org/~qg/\n"
1664 "- Debian packages of Asunder, versions 0.8 - 1.0.1\n"
1665 "\n"
1666 "Daniel Baumann\n"
1667 "- Debian maintainer for Asunder, version 1.6.2\n"
1668 "\n"
1669 "Marcin Zajaczkowski (Szpak)\n"
1670 "http://timeoff.wsisiz.edu.pl/rpms.html\n"
1671 "- Fedora packages of Asunder, versions 0.8.1 - 1.6\n"
1672 "\n"
1673 "Adam Williamson\n"
1674 "http://www.happyassassin.net/\n"
1675 "- Mandriva packages of Asunder, versions 0.9 - 1.6\n"
1676 "\n"
1677 "Tom Nardi\n"
1678 "- Slackware packages of Asunder, versions 0.8.1 - 1.6\n"
1679 "\n"
1680 "vktgz\n"
1681 "http://www.vktgz.homelinux.net/\n"
1682 "- Gentoo ebuilds for Asunder, versions 0.8 - 0.8.1, 1.6\n"
1683 "\n"
1684 "Ronald van Haren\n"
1685 "- Arch package of Asunder, versions 1.5 - 1.6\n"
1686 "\n"
1687 "Sebastien Piccand\n"
1688 "- Arch packages of Asunder, versions 0.8.1 - 1.0.2\n"
1689 "\n"
1690 "Alexey Rusakov\n"
1691 "- ALT packages of Asunder, versions 0.8.1 - 1.5\n"
1692 "\n"
1693 "Fraser Tweedale\n"
1694 "- FreeBSD ports of Asunder, versions 0.8.1 - 0.9\n"
1695 "\n"
1696 "Philip Muller\n"
1697 "- Paldo package of Asunder, version 0.8.1\n"
1698 "\n"
1699 "Christophe Lincoln\n"
1700 "- Slitaz package of Asunder, version 1.0.2\n"
1701 "\n"
1702 "coolpup\n"
1703 "- Puppy package of Asunder, version 1.6.2\n"
1704 "\n"
1705 ,
1706 NULL};
1707 
1708 static const char*
1709 GBLtranslators =
1710 "Mohamed Magdy\n"
1711 "http://wiki.arabeyes.org/Translation_requests\n"
1712 "- ar (Arabic) translation of Asunder version 1.9\n"
1713 "\n"
1714 "Muhammad Ali Makki\n"
1715 "http://makki.urducoder.com/\n"
1716 "- ar (Arabic) translation of Asunder version 2.0\n"
1717 "\n"
1718 "Ihar Hrachyshka\n"
1719 "- be (Belarusian) translation of Asunder versions 1.0.2 - 1.5\n"
1720 "\n"
1721 "Emil Krumov\n"
1722 "- bg (Bulgarian) translation of Asunder versions 1.0.2 - 2.2\n"
1723 "\n"
1724 "Rajib Lochan Dhibar\n"
1725 "- bn_IN (Bengali / India) translation of Asunder version 2.3\n"
1726 "\n"
1727 "Davor Buday\n"
1728 "- bs_BA (Bosnian / Bosnia and Herzegovina) translation of Asunder version 2.1\n"
1729 "\n"
1730 "Siegfried-Angel Gevatter Pujals\n"
1731 "- ca (Catalan) translation of Asunder versions 0.8.1 - 1.9\n"
1732 "\n"
1733 "Toni Estevez\n"
1734 "- ca (Catalan) translation of Asunder versions 2.8 - 2.9.5\n"
1735 "\n"
1736 "Schmaki\n"
1737 "- cs (Czeck) translation of Asunder versions 0.8 - 1.0, 1.9\n"
1738 "\n"
1739 "Petr Simacek\n"
1740 "- cs (Czeck) translation of Asunder versions 2.2, 2.5\n"
1741 "\n"
1742 "Joe Hansen\n"
1743 "- da (Danish) translation of Asunder version 1.9\n"
1744 "\n"
1745 "Joe Dalton\n"
1746 "- da (Danish) translation of Asunder version 2.7\n"
1747 "\n"
1748 "Rene Schmidt\n"
1749 "- de (German) translation of Asunder versions 0.8 - 1.5\n"
1750 "\n"
1751 "Christian Faulhammer\n"
1752 "- de (German) translation of Asunder version 2.0\n"
1753 "\n"
1754 "Mike Kranidis\n"
1755 "- el (Greek) translation of Asunder versions 0.8 - 1.0, 1.9\n"
1756 "\n"
1757 "George Vlahavas\n"
1758 "- el (Greek) translation of Asunder version 1.5\n"
1759 "\n"
1760 "Formiko\n"
1761 "- eo (Esperanto) translation of Asunder version 2.1\n"
1762 "\n"
1763 "Juan Garcia-Murga Monago\n"
1764 "- es (Spanish) translation of Asunder versions 0.8 - 1.9\n"
1765 "\n"
1766 "Marco Antonio\n"
1767 "- es (Spanish) translation of Asunder versions 1.9.3 - 2.2\n"
1768 "\n"
1769 "Esteban Samela\n"
1770 "- es (Spanish) translation of Asunder version 2.4\n"
1771 "\n"
1772 "Guillermo Gras\n"
1773 "- eu (Basque) translation of Asunder version 2.0\n"
1774 "\n"
1775 "Eero Salokannel\n"
1776 "- fi (Finnish) translation of Asunder versions 0.8 - 2.2\n"
1777 "\n"
1778 "janikinnunen\n"
1779 "- fi (Finnish) translation of Asunder versions 2.9.3\n"
1780 "\n"
1781 "Christophe Legras\n"
1782 "- fr (French) translation of Asunder versions 0.8 - 1.9\n"
1783 "\n"
1784 "Fabrice Le Goff\n"
1785 "- fr (French) translation of Asunder version 1.6\n"
1786 "\n"
1787 "Clement Raievsky\n"
1788 "- fr (French) translation of Asunder versions 2.1 - 2.2\n"
1789 "\n"
1790 "Miguel Anxo Bouzada\n"
1791 "- gl (Galician) translation of Asunder version 2.2\n"
1792 "\n"
1793 "Genghis Khan\n"
1794 "- he (Hebrew) translation of Asunder version 2.2\n"
1795 "\n"
1796 "Peter Polonkai\n"
1797 "- hu (Hungarian) translation of Asunder versions 0.8 - 1.9\n"
1798 "\n"
1799 "Petar Kulic\n"
1800 "- hr (Croatian) translation of Asunder versions 1.9-2.8\n"
1801 "\n"
1802 "Pader Rezso\n"
1803 "- hu (Hungarian) translation of Asunder versions 1.9.2 - 2.3\n"
1804 "\n"
1805 "Valerio Guaglianone\n"
1806 "- it (Italian) translation of Asunder versions 0.8 - 0.8.1, 1.6 - 1.9\n"
1807 "\n"
1808 "Fabio Vergnani\n"
1809 "- it (Italian) translation of Asunder version 1.0\n"
1810 "\n"
1811 "Fabio Boccaletti\n"
1812 "- it (Italian) translation of Asunder version 2.3\n"
1813 "\n"
1814 "Albano Battistella\n"
1815 "- it (Italian) translation of Asunder version 2.9.5\n"
1816 "\n"
1817 "UTUMI Hirosi\n"
1818 "- ja (Japanese) translation of Asunder versions 1.0 - 1.5\n"
1819 "\n"
1820 "Hiroyuki Ito\n"
1821 "- ja (Japanese) translation of Asunder version 2.1\n"
1822 "\n"
1823 "Kristaps Kulis\n"
1824 "- lv (Latvian) translation of Asunder version 1.6\n"
1825 "\n"
1826 "Robert Groenning\n"
1827 "- nb (Norwegian Bokmal) translation of Asunder version 0.8\n"
1828 "\n"
1829 "Aka Sikrom\n"
1830 "- nb (Norwegian Bokmal) translation of Asunder versions 2.5 - 2.8\n"
1831 "\n"
1832 "Wolven\n"
1833 "- nb (Norwegian Bokmal) translation of Asunder version 1.6\n"
1834 "\n"
1835 "Stephen Brandt\n"
1836 "- nl (Dutch) translation of Asunder versions 0.8 - 1.0, 1.9\n"
1837 "\n"
1838 "Kristof Bal\n"
1839 "- nl (Dutch) translation of Asunder versions 1.0.2 - 1.5\n"
1840 "\n"
1841 "Pjotr Vertaalt\n"
1842 "- nl (Dutch) translation of Asunder version 2.8\n"
1843 "\n"
1844 "Robert Groenning\n"
1845 "- nn (Norwegian Nynorsk) translation of Asunder version 0.8\n"
1846 "\n"
1847 "Kevin Brubeck Unhammer\n"
1848 "- nn (Norwegian Nynorsk) translation of Asunder version 2.7\n"
1849 "\n"
1850 "Marcin Gasiorowski\n"
1851 "- pl (Polish) translation of Asunder versions 1.0 - 1.9\n"
1852 "\n"
1853 "Piotr Strebski\n"
1854 "- pl (Polish) translation of Asunder version 2.8\n"
1855 "\n"
1856 "Antonio Sousa\n"
1857 "- pt (Portuguese) translation of Asunder version 1.5\n"
1858 "\n"
1859 "Sergio Marques\n"
1860 "- pt (Portuguese) translation of Asunder version 1.9\n"
1861 "\n"
1862 "Ricardo Simões\n"
1863 "- pt (Portuguese) translation of Asunder version 2.9.5\n"
1864 "\n"
1865 "Flipe Augusto\n"
1866 "- pt_BR (Portuguese/Brazil) translation of Asunder versions 0.8.1 - 1.9\n"
1867 "\n"
1868 "Sergio Brandao Cipolla\n"
1869 "- pt_BR (Portuguese/Brazil) translation of Asunder version 1.9.1\n"
1870 "\n"
1871 "Pedro Henrique\n"
1872 "- pt_BR (Portuguese/Brazil) translation of Asunder version 2.1\n"
1873 "\n"
1874 "Neliton Pereira Jr\n"
1875 "- pt_BR (Portuguese/Brazil) translation of Asunder version 2.2\n"
1876 "\n"
1877 "Paulo Roberto de Oliveira Castro\n"
1878 "- pt_BR (Portuguese/Brazil) translation of Asunder version 2.2\n"
1879 "\n"
1880 "Gilberto F da Silva\n"
1881 "- pt_BR (Portuguese/Brazil) translation of Asunder version 2.9.5\n"
1882 "\n"
1883 "Alexandre Prokoudine\n"
1884 "- ru (Russian) translation of Asunder version 1.9.2\n"
1885 "\n"
1886 "Alexey Sivakov\n"
1887 "- ru (Russian) translation of Asunder versions 0.8 - 1.0, 1.9 - 2.7\n"
1888 "\n"
1889 "Evgenii Terechkov\n"
1890 "- ru (Russian) translation of Asunder versions 1.0.2 - 1.5\n"
1891 "\n"
1892 "Tomas Vadina\n"
1893 "- sk (Slovak) translation of Asunder version 1.6.3\n"
1894 "\n"
1895 "Uros Golob\n"
1896 "- sl (Slovenian) translation of Asunder versions 1.9 - 2.1\n"
1897 "\n"
1898 "Besnik Bleta\n"
1899 "- sq (Albanian) translation of Asunder versions 0.8 - 2.9.4\n"
1900 "\n"
1901 "Milan Puzic\n"
1902 "- sr (Serbian) translation of Asunder versions 1.0, 1.9\n"
1903 "\n"
1904 "Milan Puzic\n"
1905 "- sr@latin (Serbian/latin) translation of Asunder versions 1.0, 1.9\n"
1906 "\n"
1907 "Daniel Nylander\n"
1908 "- sv (Swedish) translation of Asunder versions 0.8 - 1.9\n"
1909 "\n"
1910 "Andreas Ronnquist\n"
1911 "- sv (Swedish) translation of Asunder versions 2.2-2.9\n"
1912 "\n"
1913 "Savas Sen\n"
1914 "- tr (Turkish) translation of Asunder version 1.9\n"
1915 "\n"
1916 "Yilmaz Hanemer\n"
1917 "- tr (Turkish) translation of Asunder version 2.8\n"
1918 "\n"
1919 "Muhammad Ali Makki\n"
1920 "http://makki.urducoder.com/\n"
1921 "- ur_PK (Urdu/Pakistan) translation of Asunder version 2.0\n"
1922 "\n"
1923 "Shixiong Tian\n"
1924 "- zh_CN (Simplified Chineese) translation of Asunder versions 2.3, 2.9.5\n"
1925 "\n"
1926 "Jeff Bai\n"
1927 "- zh_CN (Simplified Chineese) translation of Asunder version 2.5\n"
1928 "\n"
1929 "Cheng-Wei Chien\n"
1930 "- zh_TW (Chineese/Taiwan) translation of Asunder versions 0.8 - 1.9\n"
1931 "\n";
1932 
1933 static const char*
1934 GBLcomments =
1935 N_("An application to save tracks from an Audio CD \n"
1936 "as WAV, MP3, OGG, FLAC, Wavpack, Opus, Musepack, Monkey's Audio, and/or "
1937 "AAC files.");
1938 
1939 static const char*
1940 GBLcopyright =
1941 "Copyright 2005 Eric Lathrop\n"
1942 "Copyright 2007 - 2019 Andrew Smith";
1943 
1944 static const char*
1945 GBLwebsite = "http://littlesvr.ca/asunder/";
1946 
1947 static const char*
1948 GBLlicense =
1949 "Asunder is distributed under the GNU General Public Licence\n"
1950 "version 2, please see COPYING file for the complete text\n";
1951 
1952 void
show_aboutbox(void)1953 show_aboutbox (void)
1954 {
1955     gtk_show_about_dialog(GTK_WINDOW(lookup_widget(win_main, "main")),
1956                           "name", GBLprogramName,
1957                           "program-name", GBLprogramName,
1958                           "authors", GBLauthors,
1959                           "translator-credits", GBLtranslators,
1960                           "comments", _(GBLcomments),
1961                           "copyright", GBLcopyright,
1962                           "license", GBLlicense,
1963                           "website", GBLwebsite,
1964                           NULL);
1965 }
1966 
show_completed_dialog(int numOk,int numFailed)1967 void show_completed_dialog(int numOk, int numFailed)
1968 {
1969     GtkWidget* dialog;
1970 
1971     if (numFailed == 0)
1972     {
1973         dialog = gtk_message_dialog_new(GTK_WINDOW(win_main),
1974                                         GTK_DIALOG_DESTROY_WITH_PARENT,
1975                                         GTK_MESSAGE_INFO,
1976                                         GTK_BUTTONS_CLOSE,
1977                                         ngettext("%d file created successfully", "%d files created successfully", numOk),
1978                                         numOk);
1979     }
1980     else
1981     {
1982         dialog = gtk_message_dialog_new(GTK_WINDOW(win_main),
1983                                         GTK_DIALOG_DESTROY_WITH_PARENT,
1984                                         GTK_MESSAGE_ERROR,
1985                                         GTK_BUTTONS_CLOSE,
1986                                         ngettext("There was an error creating %d file", "There was an error creating %d files", numFailed),
1987                                         numFailed);
1988     }
1989 
1990     gtk_dialog_run (GTK_DIALOG (dialog));
1991     gtk_widget_destroy (dialog);
1992 }
1993