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