2
Copyright (C) 2004 Tom Szilagyi
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
$Id: options.c 583 2007-02-10 16:36:41Z peterszilagyi $
24
#include <gdk/gdkkeysyms.h>
30
#include <libxml/xmlmemory.h>
31
#include <libxml/parser.h>
35
#define _TMP_HAVE_CDDB 1
37
#endif /* HAVE_CDDB */
38
#include <cdio/cdio.h>
39
#include <cdio/paranoia.h>
42
#endif /* HAVE_CDDB */
46
#endif /* _TMP_HAVE_CDDB */
47
#endif /* HAVE_CDDA */
50
#include <samplerate.h>
55
#include "music_browser.h"
64
static int current_notebook_page = 0;
66
extern int src_type_parsed;
68
extern GtkWidget * main_window;
69
extern GtkWidget * playlist_window;
70
extern GtkWidget * play_button;
71
extern GtkTooltips * aqualung_tooltips;
73
extern PangoFontDescription *fd_playlist;
74
extern PangoFontDescription *fd_browser;
75
extern PangoFontDescription *fd_bigtimer;
76
extern PangoFontDescription *fd_smalltimer;
77
extern PangoFontDescription *fd_songtitle;
78
extern PangoFontDescription *fd_songinfo;
79
extern PangoFontDescription *fd_statusbar;
81
extern GtkWidget * bigtimer_label;
82
extern GtkWidget * smalltimer_label_1;
83
extern GtkWidget * smalltimer_label_2;
85
extern GtkWidget * label_title;
86
extern GtkWidget * label_format;
87
extern GtkWidget * label_samplerate;
88
extern GtkWidget * label_bps;
89
extern GtkWidget * label_mono;
90
extern GtkWidget * label_output;
91
extern GtkWidget * label_src_type;
93
extern GtkWidget * statusbar_total;
94
extern GtkWidget * statusbar_total_label;
95
extern GtkWidget * statusbar_selected;
96
extern GtkWidget * statusbar_selected_label;
98
extern GtkWidget * statusbar_ms;
100
extern int music_store_changed;
102
extern GtkWidget * music_tree;
103
extern GtkTreeStore * music_store;
105
extern GtkWidget * play_list;
106
extern GtkTreeViewColumn * track_column;
107
extern GtkTreeViewColumn * rva_column;
108
extern GtkTreeViewColumn * length_column;
110
extern GtkListStore * play_store;
112
extern GtkWidget* gui_stock_label_button(gchar *blabel, const gchar *bstock);
113
extern void disable_bold_font_in_playlist(void);
114
extern void playlist_selection_changed(GtkTreeSelection * sel, gpointer data);
115
extern void set_buttons_relief(void);
116
extern void show_active_position_in_playlist(void);
118
int rva_is_enabled_shadow;
120
float rva_refvol_shadow;
121
float rva_steepness_shadow;
122
int rva_use_averaging_shadow;
123
int rva_use_linear_thresh_shadow;
124
float rva_avg_linear_thresh_shadow;
125
float rva_avg_stddev_thresh_shadow;
127
int appearance_changed;
131
int track_name_in_bold_shadow;
133
GtkWidget * options_window;
134
GtkWidget * notebook;
136
GtkWidget * entry_title;
137
GtkWidget * entry_param;
138
GtkWidget * check_enable_tooltips;
139
GtkWidget * check_buttons_at_the_bottom;
140
GtkWidget * check_disable_buttons_relief;
141
GtkWidget * check_main_window_always_on_top;
142
GtkWidget * check_simple_view_in_fx;
143
GtkWidget * check_united_minimization;
144
GtkWidget * check_show_sn_title;
145
GtkWidget * check_show_hidden;
146
GtkWidget * check_tags_tab_first;
148
GtkWidget * check_playlist_is_embedded;
149
GtkWidget * check_autoplsave;
150
GtkWidget * check_playlist_is_tree;
151
GtkWidget * check_album_shuffle_mode;
152
GtkWidget * check_enable_playlist_statusbar;
153
GtkWidget * check_pl_statusbar_show_size;
154
GtkWidget * check_show_rva_in_playlist;
155
GtkWidget * check_show_length_in_playlist;
156
GtkWidget * check_show_active_track_name_in_bold;
157
GtkWidget * check_enable_pl_rules_hint;
158
GtkListStore * plistcol_store;
160
GtkWidget * check_hide_comment_pane;
161
GtkWidget * check_enable_mstore_toolbar;
162
GtkWidget * check_enable_mstore_statusbar;
163
GtkWidget * check_ms_statusbar_show_size;
164
GtkWidget * check_expand_stores;
165
GtkWidget * check_enable_ms_rules_hint;
166
GtkWidget * check_enable_ms_tree_icons;
167
GtkWidget * combo_cwidth;
168
GtkWidget * check_magnify_smaller_images;
169
GtkListStore * ms_pathlist_store = NULL;
170
GtkTreeSelection * ms_pathlist_select;
171
GtkWidget * entry_ms_pathlist;
174
GtkWidget * combo_ladspa;
175
#endif /* HAVE_LADSPA */
177
GtkWidget * combo_src;
178
#endif /* HAVE_SRC */
179
GtkWidget * label_src;
181
GtkWidget * check_rva_is_enabled;
182
GtkWidget * rva_drawing_area;
183
GdkPixmap * rva_pixmap = NULL;
184
GtkWidget * rva_viewport;
185
GtkWidget * combo_listening_env;
186
GtkWidget * spin_refvol;
187
GtkWidget * spin_steepness;
188
GtkWidget * check_rva_use_averaging;
189
GtkWidget * combo_threshold;
190
GtkWidget * spin_linthresh;
191
GtkWidget * spin_stdthresh;
192
GtkObject * adj_refvol;
193
GtkObject * adj_steepness;
194
GtkObject * adj_linthresh;
195
GtkObject * adj_stdthresh;
196
GtkWidget * label_listening_env;
197
GtkWidget * label_refvol;
198
GtkWidget * label_steepness;
199
GtkWidget * label_threshold;
200
GtkWidget * label_linthresh;
201
GtkWidget * label_stdthresh;
203
GtkWidget * check_auto_use_meta_artist;
204
GtkWidget * check_auto_use_meta_record;
205
GtkWidget * check_auto_use_meta_track;
206
GtkWidget * check_auto_use_ext_meta_artist;
207
GtkWidget * check_auto_use_ext_meta_record;
208
GtkWidget * check_auto_use_ext_meta_track;
209
GtkWidget * combo_replaygain;
212
GtkWidget * cdda_drive_speed_spinner;
213
GtkWidget * check_cdda_mode_overlap;
214
GtkWidget * check_cdda_mode_verify;
215
GtkWidget * check_cdda_mode_neverskip;
216
GtkWidget * check_cdda_force_drive_rescan;
217
GtkWidget * check_cdda_add_to_playlist;
218
GtkWidget * check_cdda_remove_from_playlist;
219
GtkWidget * label_cdda_maxretries;
220
GtkWidget * cdda_paranoia_maxretries_spinner;
221
#endif /* HAVE_CDDA */
224
GtkWidget * cddb_server_entry;
225
GtkWidget * cddb_tout_spinner;
226
GtkWidget * cddb_email_entry;
227
GtkWidget * cddb_local_entry;
228
GtkWidget * cddb_local_check;
229
GtkWidget * cddb_radio_direct;
230
GtkWidget * cddb_radio_proxy;
231
GtkWidget * cddb_proto_combo;
232
GtkWidget * cddb_proxy_entry;
233
GtkWidget * cddb_proxy_port_spinner;
234
GtkWidget * cddb_label_proto;
235
GtkWidget * cddb_label_proxy;
236
GtkWidget * cddb_label_proxy_port;
237
#endif /* HAVE_CDDB */
239
GtkWidget * check_override_skin;
241
#define DEFAULT_FONT_NAME "Sans 11"
243
GtkWidget * entry_pl_font;
244
GtkWidget * entry_ms_font;
245
GtkWidget * entry_bt_font;
246
GtkWidget * entry_st_font;
247
GtkWidget * entry_songt_font;
248
GtkWidget * entry_si_font;
249
GtkWidget * entry_sb_font;
250
GtkWidget * button_pl_font;
251
GtkWidget * button_ms_font;
252
GtkWidget * button_bt_font;
253
GtkWidget * button_st_font;
254
GtkWidget * button_songt_font;
255
GtkWidget * button_si_font;
256
GtkWidget * button_sb_font;
259
GtkWidget * color_picker;
261
void draw_rva_diagram(void);
262
void show_restart_info(void);
264
GtkListStore * restart_list_store = NULL;
268
open_font_desc(void) {
270
if (fd_playlist) pango_font_description_free(fd_playlist);
271
fd_playlist = pango_font_description_from_string(options.playlist_font);
272
if (fd_browser) pango_font_description_free(fd_browser);
273
fd_browser = pango_font_description_from_string(options.browser_font);
274
if (fd_bigtimer) pango_font_description_free(fd_bigtimer);
275
fd_bigtimer = pango_font_description_from_string(options.bigtimer_font);
276
if (fd_smalltimer) pango_font_description_free(fd_smalltimer);
277
fd_smalltimer = pango_font_description_from_string(options.smalltimer_font);
278
if (fd_songtitle) pango_font_description_free(fd_songtitle);
279
fd_songtitle = pango_font_description_from_string(options.songtitle_font);
280
if (fd_songinfo) pango_font_description_free(fd_songinfo);
281
fd_songinfo = pango_font_description_from_string(options.songinfo_font);
282
if (fd_statusbar) pango_font_description_free(fd_statusbar);
283
fd_statusbar = pango_font_description_from_string(options.statusbar_font);
287
set_option_from_toggle(GtkWidget * widget, int * opt) {
289
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
297
set_option_from_combo(GtkWidget * widget, int * opt) {
299
*opt = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
303
set_option_from_spin(GtkWidget * widget, int * opt) {
305
*opt = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
309
set_option_from_entry(GtkWidget * widget, char * opt) {
311
strncpy(opt, gtk_entry_get_text(GTK_ENTRY(widget)), MAXLEN-1);
314
options_window_accept(void) {
330
strncpy(options.title_format, gtk_entry_get_text(GTK_ENTRY(entry_title)), MAXLEN - 1);
331
strncpy(options.default_param, gtk_entry_get_text(GTK_ENTRY(entry_param)), MAXLEN - 1);
333
set_option_from_toggle(check_enable_tooltips, &options.enable_tooltips);
334
if (options.enable_tooltips) {
335
gtk_tooltips_enable(aqualung_tooltips);
337
gtk_tooltips_disable(aqualung_tooltips);
340
set_option_from_toggle(check_buttons_at_the_bottom, &options.buttons_at_the_bottom_shadow);
341
set_option_from_toggle(check_disable_buttons_relief, &options.disable_buttons_relief);
342
set_option_from_toggle(check_main_window_always_on_top, &options.main_window_always_on_top);
345
set_option_from_toggle(check_simple_view_in_fx, &options.simple_view_in_fx_shadow);
346
#endif /* HAVE_LADSPA */
347
set_option_from_toggle(check_united_minimization, &options.united_minimization);
348
set_option_from_toggle(check_show_sn_title, &options.show_sn_title);
349
set_option_from_toggle(check_show_hidden, &options.show_hidden);
350
set_option_from_toggle(check_tags_tab_first, &options.tags_tab_first);
355
set_option_from_toggle(check_autoplsave, &options.auto_save_playlist);
356
set_option_from_toggle(check_playlist_is_embedded, &options.playlist_is_embedded_shadow);
357
set_option_from_toggle(check_playlist_is_tree, &options.playlist_is_tree);
358
set_option_from_toggle(check_album_shuffle_mode, &options.album_shuffle_mode);
359
set_option_from_toggle(check_enable_playlist_statusbar, &options.enable_playlist_statusbar_shadow);
360
set_option_from_toggle(check_pl_statusbar_show_size, &options.pl_statusbar_show_size);
361
set_option_from_toggle(check_show_rva_in_playlist, &options.show_rva_in_playlist);
362
gtk_tree_view_column_set_visible(GTK_TREE_VIEW_COLUMN(rva_column),
363
options.show_rva_in_playlist);
364
set_option_from_toggle(check_show_length_in_playlist, &options.show_length_in_playlist);
365
gtk_tree_view_column_set_visible(GTK_TREE_VIEW_COLUMN(length_column),
366
options.show_length_in_playlist);
367
set_option_from_toggle(check_show_active_track_name_in_bold, &options.show_active_track_name_in_bold);
368
if (!options.show_active_track_name_in_bold) {
369
disable_bold_font_in_playlist();
372
set_option_from_toggle(check_enable_pl_rules_hint, &options.enable_pl_rules_hint);
373
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(play_list), options.enable_pl_rules_hint);
378
set_option_from_toggle(check_hide_comment_pane, &options.hide_comment_pane_shadow);
381
set_option_from_toggle(check_enable_mstore_toolbar, &options.enable_mstore_toolbar_shadow);
382
set_option_from_toggle(check_enable_mstore_statusbar, &options.enable_mstore_statusbar_shadow);
383
set_option_from_toggle(check_ms_statusbar_show_size, &options.ms_statusbar_show_size);
384
set_option_from_toggle(check_expand_stores, &options.autoexpand_stores);
386
set_option_from_toggle(check_enable_ms_rules_hint, &options.enable_ms_rules_hint);
387
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(music_tree), options.enable_ms_rules_hint);
389
set_option_from_toggle(check_enable_ms_tree_icons, &options.enable_ms_tree_icons_shadow);
391
set_option_from_combo(combo_cwidth, &options.cover_width);
392
set_option_from_toggle(check_magnify_smaller_images, &options.magnify_smaller_images);
397
options.rva_is_enabled = rva_is_enabled_shadow;
398
options.rva_env = rva_env_shadow;
399
options.rva_refvol = rva_refvol_shadow;
400
options.rva_steepness = rva_steepness_shadow;
401
options.rva_use_averaging = rva_use_averaging_shadow;
402
options.rva_use_linear_thresh = rva_use_linear_thresh_shadow;
403
options.rva_avg_linear_thresh = rva_avg_linear_thresh_shadow;
404
options.rva_avg_stddev_thresh = rva_avg_stddev_thresh_shadow;
409
set_option_from_toggle(check_auto_use_meta_artist, &options.auto_use_meta_artist);
410
set_option_from_toggle(check_auto_use_meta_record, &options.auto_use_meta_record);
411
set_option_from_toggle(check_auto_use_meta_track, &options.auto_use_meta_track);
414
set_option_from_toggle(check_auto_use_ext_meta_artist, &options.auto_use_ext_meta_artist);
415
set_option_from_toggle(check_auto_use_ext_meta_record, &options.auto_use_ext_meta_record);
416
set_option_from_toggle(check_auto_use_ext_meta_track, &options.auto_use_ext_meta_track);
418
set_option_from_combo(combo_replaygain, &options.replaygain_tag_to_use);
423
set_option_from_spin(cdda_drive_speed_spinner, &options.cdda_drive_speed);
424
options.cdda_paranoia_mode =
425
(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_cdda_mode_overlap)) ? PARANOIA_MODE_OVERLAP : 0) |
426
(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_cdda_mode_verify)) ? PARANOIA_MODE_VERIFY : 0) |
427
(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_cdda_mode_neverskip)) ? PARANOIA_MODE_NEVERSKIP : 0);
428
set_option_from_spin(cdda_paranoia_maxretries_spinner, &options.cdda_paranoia_maxretries);
429
set_option_from_toggle(check_cdda_force_drive_rescan, &options.cdda_force_drive_rescan);
430
set_option_from_toggle(check_cdda_add_to_playlist, &options.cdda_add_to_playlist);
431
set_option_from_toggle(check_cdda_remove_from_playlist, &options.cdda_remove_from_playlist);
432
#endif /* HAVE_CDDA */
437
set_option_from_entry(cddb_server_entry, options.cddb_server);
438
set_option_from_spin(cddb_tout_spinner, &options.cddb_timeout);
439
set_option_from_entry(cddb_email_entry, options.cddb_email);
440
set_option_from_entry(cddb_local_entry, options.cddb_local);
441
set_option_from_toggle(cddb_local_check, &options.cddb_cache_only);
442
set_option_from_toggle(cddb_radio_proxy, &options.cddb_use_proxy);
443
set_option_from_combo(cddb_proto_combo, &options.cddb_use_http);
444
set_option_from_entry(cddb_proxy_entry, options.cddb_proxy);
445
set_option_from_spin(cddb_proxy_port_spinner, &options.cddb_proxy_port);
446
#endif /* HAVE_CDDB */
451
set_option_from_toggle(check_override_skin, &options.override_skin_settings);
456
for (i = 0; i < 3; i++) {
459
GtkTreeViewColumn * cols[4];
462
cols[0] = track_column;
463
cols[1] = rva_column;
464
cols[2] = length_column;
467
gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(plistcol_store), &iter, NULL, i);
469
gtk_tree_model_get(GTK_TREE_MODEL(plistcol_store), &iter, 1, &pnumstr, -1);
473
gtk_tree_view_move_column_after(GTK_TREE_VIEW(play_list),
474
cols[n], cols[n_prev]);
476
options.plcol_idx[i] = n;
480
if (!track_name_in_bold_shadow && options.show_active_track_name_in_bold == 1) {
482
track_name_in_bold_shadow = 0;
485
if (options.override_skin_settings) {
491
gtk_widget_modify_font (music_tree, fd_browser);
492
gtk_widget_modify_font (play_list, fd_playlist);
494
gtk_widget_modify_font (bigtimer_label, fd_bigtimer);
495
gtk_widget_modify_font (smalltimer_label_1, fd_smalltimer);
496
gtk_widget_modify_font (smalltimer_label_2, fd_smalltimer);
497
gtk_widget_modify_font (label_title, fd_songtitle);
499
gtk_widget_modify_font (label_format, fd_songinfo);
500
gtk_widget_modify_font (label_samplerate, fd_songinfo);
501
gtk_widget_modify_font (label_bps, fd_songinfo);
502
gtk_widget_modify_font (label_mono, fd_songinfo);
503
gtk_widget_modify_font (label_output, fd_songinfo);
504
gtk_widget_modify_font (label_src_type, fd_songinfo);
506
if (options.enable_playlist_statusbar) {
507
gtk_widget_modify_font (statusbar_total, fd_statusbar);
508
gtk_widget_modify_font (statusbar_total_label, fd_statusbar);
509
gtk_widget_modify_font (statusbar_selected, fd_statusbar);
510
gtk_widget_modify_font (statusbar_selected_label, fd_statusbar);
512
if (options.enable_mstore_statusbar) {
513
gtk_widget_modify_font (statusbar_ms, fd_statusbar);
516
set_playlist_color();
518
if (appearance_changed) {
522
} else if (override_shadow) {
530
i = 1; /* 0-th store is STORE_CDDA, skip it */
533
#endif /* HAVE_CDDA */
534
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(music_store),
540
gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter, 2, &p1, -1);
544
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store),
545
&iter2, NULL, j++)) {
548
gtk_tree_model_get(GTK_TREE_MODEL(ms_pathlist_store), &iter2, 0, &p2, -1);
549
if (strcmp(p1, p2) == 0) {
551
if (access(p2, R_OK) == 0) {
567
gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter,
568
0, &name, 6, &dirty, -1);
573
dialog = gtk_message_dialog_new(GTK_WINDOW(options_window),
574
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
575
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
576
_("Do you want to save store \"%s\" before removing from Music Store?"), name + 1);
577
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
578
gtk_dialog_set_default_response(GTK_DIALOG(dialog),
580
gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
582
if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) {
583
save_music_store(&iter);
585
music_store_mark_saved(&iter);
588
gtk_widget_destroy(dialog);
592
gtk_tree_store_remove(music_store, &iter);
601
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store),
608
snprintf(sort, 4, "%03d", i);
610
gtk_tree_model_get(GTK_TREE_MODEL(ms_pathlist_store), &iter, 0, &p1, -1);
614
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(music_store),
615
&iter2, NULL, j++)) {
618
gtk_tree_model_get(GTK_TREE_MODEL(music_store),
621
if (strcmp(p1, p2) == 0) {
623
gtk_tree_store_set(music_store, &iter2, 1, sort, -1);
625
if (access(p2, W_OK) == 0) {
626
gtk_tree_store_set(music_store, &iter2, 7, 1.0f, -1);
628
gtk_tree_store_set(music_store, &iter2, 7, -1.0f, -1);
641
load_music_store(p1, sort);
647
set_buttons_relief();
649
gtk_window_set_keep_above(GTK_WINDOW(main_window), options.main_window_always_on_top);
651
playlist_content_changed();
652
playlist_selection_changed(NULL, NULL);
653
music_store_set_status_bar_info();
655
current_notebook_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
657
playlist_size_allocate(NULL, NULL);
658
show_active_position_in_playlist();
660
gtk_widget_destroy(options_window);
668
changed_ladspa_prepost(GtkWidget * widget, gpointer * data) {
670
int status = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_ladspa));
671
options.ladspa_is_postfader = status;
673
#endif /* HAVE_LADSPA */
678
changed_src_type(GtkWidget * widget, gpointer * data) {
680
options.src_type = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_src));
681
gtk_label_set_text(GTK_LABEL(label_src), src_get_description(options.src_type));
682
set_src_type_label(options.src_type);
684
#endif /* HAVE_SRC */
688
check_rva_is_enabled_toggled(GtkWidget * widget, gpointer * data) {
690
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_rva_is_enabled))) {
691
rva_is_enabled_shadow = 1;
692
gtk_widget_set_sensitive(combo_listening_env, TRUE);
693
gtk_widget_set_sensitive(label_listening_env, TRUE);
694
gtk_widget_set_sensitive(spin_refvol, TRUE);
695
gtk_widget_set_sensitive(label_refvol, TRUE);
696
gtk_widget_set_sensitive(spin_steepness, TRUE);
697
gtk_widget_set_sensitive(label_steepness, TRUE);
699
gtk_widget_set_sensitive(check_rva_use_averaging, TRUE);
701
if (rva_use_averaging_shadow) {
702
gtk_widget_set_sensitive(combo_threshold, TRUE);
703
gtk_widget_set_sensitive(label_threshold, TRUE);
704
gtk_widget_set_sensitive(spin_linthresh, TRUE);
705
gtk_widget_set_sensitive(label_linthresh, TRUE);
706
gtk_widget_set_sensitive(spin_stdthresh, TRUE);
707
gtk_widget_set_sensitive(label_stdthresh, TRUE);
710
rva_is_enabled_shadow = 0;
711
gtk_widget_set_sensitive(combo_listening_env, FALSE);
712
gtk_widget_set_sensitive(label_listening_env, FALSE);
713
gtk_widget_set_sensitive(spin_refvol, FALSE);
714
gtk_widget_set_sensitive(label_refvol, FALSE);
715
gtk_widget_set_sensitive(spin_steepness, FALSE);
716
gtk_widget_set_sensitive(label_steepness, FALSE);
718
gtk_widget_set_sensitive(check_rva_use_averaging, FALSE);
719
gtk_widget_set_sensitive(combo_threshold, FALSE);
720
gtk_widget_set_sensitive(label_threshold, FALSE);
721
gtk_widget_set_sensitive(spin_linthresh, FALSE);
722
gtk_widget_set_sensitive(label_linthresh, FALSE);
723
gtk_widget_set_sensitive(spin_stdthresh, FALSE);
724
gtk_widget_set_sensitive(label_stdthresh, FALSE);
732
check_rva_use_averaging_toggled(GtkWidget * widget, gpointer * data) {
734
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_rva_use_averaging))) {
735
rva_use_averaging_shadow = 1;
736
gtk_widget_set_sensitive(combo_threshold, TRUE);
737
gtk_widget_set_sensitive(label_threshold, TRUE);
738
gtk_widget_set_sensitive(spin_linthresh, TRUE);
739
gtk_widget_set_sensitive(label_linthresh, TRUE);
740
gtk_widget_set_sensitive(spin_stdthresh, TRUE);
741
gtk_widget_set_sensitive(label_stdthresh, TRUE);
743
rva_use_averaging_shadow = 0;
744
gtk_widget_set_sensitive(combo_threshold, FALSE);
745
gtk_widget_set_sensitive(label_threshold, FALSE);
746
gtk_widget_set_sensitive(spin_linthresh, FALSE);
747
gtk_widget_set_sensitive(label_linthresh, FALSE);
748
gtk_widget_set_sensitive(spin_stdthresh, FALSE);
749
gtk_widget_set_sensitive(label_stdthresh, FALSE);
755
changed_listening_env(GtkWidget * widget, gpointer * data) {
757
rva_env_shadow = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_listening_env));
759
switch (rva_env_shadow) {
760
case 0: /* Audiophile */
761
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_refvol), -12.0f);
762
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_steepness), 1.0f);
764
case 1: /* Living room */
765
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_refvol), -12.0f);
766
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_steepness), 0.7f);
769
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_refvol), -12.0f);
770
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_steepness), 0.4f);
772
case 3: /* Noisy workshop */
773
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_refvol), -12.0f);
774
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj_steepness), 0.1f);
777
fprintf(stderr, "programmer error: options.c/changed_listening_env(): "
778
"invalid rva_env_shadow value.\nPlease report this to the programmers!\n");
785
draw_rva_diagram(void) {
790
int width = rva_viewport->allocation.width - 4;
791
int height = rva_viewport->allocation.height - 4;
793
int dh = height / 24;
794
int xoffs = (width - 24*dw) / 2 - 1;
795
int yoffs = (height - 24*dh) / 2 - 1;
797
int px1, py1, px2, py2;
800
gdk_draw_rectangle(rva_pixmap,
801
rva_drawing_area->style->black_gc,
804
rva_drawing_area->allocation.width,
805
rva_drawing_area->allocation.height);
807
gc = gdk_gc_new(rva_pixmap);
808
if (rva_is_enabled_shadow) {
809
fg_color.red = 10000;
810
fg_color.green = 10000;
811
fg_color.blue = 10000;
814
fg_color.green = 5000;
815
fg_color.blue = 5000;
817
gdk_gc_set_rgb_fg_color(gc, &fg_color);
819
for (i = 0; i <= 24; i++) {
820
gdk_draw_line(rva_pixmap, gc,
821
xoffs + i * dw, yoffs,
822
xoffs + i * dw, yoffs + 24 * dh);
825
for (i = 0; i <= 24; i++) {
826
gdk_draw_line(rva_pixmap, gc,
827
xoffs, yoffs + i * dh,
828
xoffs + 24 * dw, yoffs + i * dh);
831
if (rva_is_enabled_shadow) {
834
fg_color.blue = 65535;
838
fg_color.blue = 30000;
840
gdk_gc_set_rgb_fg_color(gc, &fg_color);
841
gdk_draw_line(rva_pixmap, gc, xoffs, yoffs + 24 * dh, xoffs + 24 * dw, yoffs);
843
if (rva_is_enabled_shadow) {
844
fg_color.red = 65535;
848
fg_color.red = 30000;
852
gdk_gc_set_rgb_fg_color(gc, &fg_color);
856
voly = volx + (volx - rva_refvol_shadow) * (rva_steepness_shadow - 1.0f);
858
py1 = yoffs - (voly * dh);
861
voly = volx + (volx - rva_refvol_shadow) * (rva_steepness_shadow - 1.0f);
863
py2 = yoffs - (voly * dh);
865
gdk_draw_line(rva_pixmap, gc, px1, py1, px2, py2);
867
gdk_draw_drawable(rva_drawing_area->window,
868
rva_drawing_area->style->fg_gc[GTK_WIDGET_STATE(rva_drawing_area)],
878
refvol_changed(GtkWidget * widget, gpointer * data) {
880
rva_refvol_shadow = gtk_adjustment_get_value(GTK_ADJUSTMENT(widget));
886
steepness_changed(GtkWidget * widget, gpointer * data) {
888
rva_steepness_shadow = gtk_adjustment_get_value(GTK_ADJUSTMENT(widget));
894
rva_configure_event(GtkWidget * widget, GdkEventConfigure * event) {
897
g_object_unref(rva_pixmap);
899
rva_pixmap = gdk_pixmap_new(widget->window,
900
widget->allocation.width,
901
widget->allocation.height,
903
gdk_draw_rectangle(rva_pixmap,
904
widget->style->black_gc,
907
widget->allocation.width,
908
widget->allocation.height);
915
rva_expose_event(GtkWidget * widget, GdkEventExpose * event) {
917
gdk_draw_drawable(widget->window,
918
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
920
event->area.x, event->area.y,
921
event->area.x, event->area.y,
922
event->area.width, event->area.height);
928
changed_threshold(GtkWidget * widget, gpointer * data) {
930
rva_use_linear_thresh_shadow =
931
gtk_combo_box_get_active(GTK_COMBO_BOX(combo_threshold));
936
linthresh_changed(GtkWidget * widget, gpointer * data) {
938
rva_avg_linear_thresh_shadow = gtk_adjustment_get_value(GTK_ADJUSTMENT(widget));
943
stdthresh_changed(GtkWidget * widget, gpointer * data) {
945
rva_avg_stddev_thresh_shadow = gtk_adjustment_get_value(GTK_ADJUSTMENT(widget)) / 100.0f;
949
show_restart_info(void) {
951
GtkWidget * info_dialog;
953
GtkWidget * viewport;
954
GtkCellRenderer * renderer;
955
GtkTreeViewColumn * column;
957
info_dialog = gtk_message_dialog_new(GTK_WINDOW (options_window),
958
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
961
_("You will need to restart Aqualung for the following changes to take effect:"));
964
list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(restart_list_store));
965
renderer = gtk_cell_renderer_text_new();
966
column = gtk_tree_view_column_new_with_attributes("",
970
gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);
971
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);
973
viewport = gtk_viewport_new(NULL, NULL);
974
gtk_container_add(GTK_CONTAINER(viewport), list);
975
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(info_dialog)->vbox), viewport, FALSE, FALSE, 6);
978
gtk_widget_show_all(info_dialog);
979
aqualung_dialog_run(GTK_DIALOG(info_dialog));
980
gtk_widget_destroy(info_dialog);
984
playlist_font_select(GtkWidget *widget) {
987
GtkWidget *font_selector;
990
font_selector = gtk_font_selection_dialog_new ("Select a font...");
991
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
992
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
993
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.playlist_font);
994
gtk_widget_show (font_selector);
995
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
997
if (response == GTK_RESPONSE_OK) {
999
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1000
strncpy(options.playlist_font, s, MAX_FONTNAME_LEN);
1001
gtk_entry_set_text(GTK_ENTRY(entry_pl_font), s);
1006
appearance_changed = 1;
1007
gtk_widget_destroy (font_selector);
1011
browser_font_select(GtkWidget *widget) {
1014
GtkWidget *font_selector;
1017
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1018
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1019
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1020
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.browser_font);
1021
gtk_widget_show (font_selector);
1022
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1024
if (response == GTK_RESPONSE_OK) {
1026
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1027
strncpy(options.browser_font, s, MAX_FONTNAME_LEN);
1028
gtk_entry_set_text(GTK_ENTRY(entry_ms_font), s);
1033
appearance_changed = 1;
1034
gtk_widget_destroy (font_selector);
1038
bigtimer_font_select(GtkWidget *widget) {
1041
GtkWidget *font_selector;
1044
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1045
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1046
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1047
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.bigtimer_font);
1048
gtk_widget_show (font_selector);
1049
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1051
if (response == GTK_RESPONSE_OK) {
1053
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1054
strncpy(options.bigtimer_font, s, MAX_FONTNAME_LEN);
1055
gtk_entry_set_text(GTK_ENTRY(entry_bt_font), s);
1060
appearance_changed = 1;
1061
gtk_widget_destroy (font_selector);
1065
smalltimer_font_select(GtkWidget *widget) {
1068
GtkWidget *font_selector;
1071
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1072
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1073
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1074
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.smalltimer_font);
1075
gtk_widget_show (font_selector);
1076
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1078
if (response == GTK_RESPONSE_OK) {
1080
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1081
strncpy(options.smalltimer_font, s, MAX_FONTNAME_LEN);
1082
gtk_entry_set_text(GTK_ENTRY(entry_st_font), s);
1087
appearance_changed = 1;
1088
gtk_widget_destroy (font_selector);
1092
songtitle_font_select(GtkWidget *widget) {
1095
GtkWidget *font_selector;
1098
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1099
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1100
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1101
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.songtitle_font);
1102
gtk_widget_show (font_selector);
1103
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1105
if (response == GTK_RESPONSE_OK) {
1107
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1108
strncpy(options.songtitle_font, s, MAX_FONTNAME_LEN);
1109
gtk_entry_set_text(GTK_ENTRY(entry_songt_font), s);
1114
appearance_changed = 1;
1115
gtk_widget_destroy (font_selector);
1119
songinfo_font_select(GtkWidget *widget) {
1122
GtkWidget *font_selector;
1125
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1126
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1127
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1128
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.songinfo_font);
1129
gtk_widget_show (font_selector);
1130
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1132
if (response == GTK_RESPONSE_OK) {
1134
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1135
strncpy(options.songinfo_font, s, MAX_FONTNAME_LEN);
1136
gtk_entry_set_text(GTK_ENTRY(entry_si_font), s);
1141
appearance_changed = 1;
1142
gtk_widget_destroy (font_selector);
1146
statusbar_font_select(GtkWidget *widget) {
1149
GtkWidget *font_selector;
1152
font_selector = gtk_font_selection_dialog_new ("Select a font...");
1153
gtk_window_set_modal(GTK_WINDOW(font_selector), TRUE);
1154
gtk_window_set_transient_for(GTK_WINDOW(font_selector), GTK_WINDOW(options_window));
1155
gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG(font_selector), options.statusbar_font);
1156
gtk_widget_show (font_selector);
1157
response = aqualung_dialog_run (GTK_DIALOG (font_selector));
1159
if (response == GTK_RESPONSE_OK) {
1161
s = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG(font_selector));
1162
strncpy(options.statusbar_font, s, MAX_FONTNAME_LEN);
1163
gtk_entry_set_text(GTK_ENTRY(entry_sb_font), s);
1168
appearance_changed = 1;
1169
gtk_widget_destroy (font_selector);
1173
restart_active(GtkToggleButton * togglebutton, gpointer data) {
1182
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(restart_list_store), &iter, NULL, i++)) {
1184
gtk_tree_model_get(GTK_TREE_MODEL(restart_list_store), &iter, 0, &text, -1);
1186
if (!strcmp(text, (char *)data)) {
1187
gtk_list_store_remove(restart_list_store, &iter);
1188
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(restart_list_store), &iter)) {
1195
gtk_list_store_append(restart_list_store, &iter);
1196
gtk_list_store_set(restart_list_store, &iter, 0, (char *)data, -1);
1200
set_sensitive_part(void) {
1202
GtkWidget *sensitive_table[] = {
1203
entry_ms_font, entry_pl_font, entry_bt_font, entry_st_font,
1204
entry_songt_font, entry_si_font, entry_sb_font, button_ms_font,
1205
button_pl_font, button_bt_font, button_st_font, button_songt_font,
1206
button_si_font, button_sb_font, color_picker
1212
if (options.override_skin_settings) {
1218
items = sizeof(sensitive_table) / sizeof(GtkWidget*);
1220
for (n = 0; n < items; n++) {
1221
gtk_widget_set_sensitive(sensitive_table[n], state);
1226
cb_toggle_override_skin(GtkToggleButton *togglebutton, gpointer user_data) {
1228
options.override_skin_settings = options.override_skin_settings ? 0 : 1;
1229
appearance_changed = 1;
1230
set_sensitive_part();
1234
color_selected(GtkColorButton *widget, gpointer user_data) {
1237
gchar str[MAX_COLORNAME_LEN];
1239
appearance_changed = 1;
1240
gtk_color_button_get_color(widget, &c);
1241
sprintf(str, "#%02X%02X%02X", c.red * 256 / 65536, c.green * 256 / 65536, c.blue * 256 / 65536);
1243
strncpy(options.activesong_color, str, MAX_COLORNAME_LEN-1);
1247
create_notebook_tab(char * text, char * imgfile) {
1256
vbox = gtk_vbox_new(FALSE, 0);
1258
label = gtk_label_new(text);
1259
gtk_box_pack_end(GTK_BOX(vbox), label, FALSE, FALSE, 0);
1261
sprintf(path, "%s/%s", AQUALUNG_DATADIR, imgfile);
1263
pixbuf = gdk_pixbuf_new_from_file(path, NULL);
1266
image = gtk_image_new_from_pixbuf(pixbuf);
1267
gtk_box_pack_end(GTK_BOX(vbox), image, FALSE, FALSE, 0);
1270
gtk_widget_show_all(vbox);
1277
refresh_ms_pathlist_clicked(GtkWidget * widget, gpointer * data) {
1283
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store),
1284
&iter, NULL, i++)) {
1286
gtk_tree_model_get(GTK_TREE_MODEL(ms_pathlist_store), &iter, 0, &path, -1);
1288
if (access(path, R_OK | W_OK) == 0) {
1289
gtk_list_store_set(ms_pathlist_store, &iter, 2, _("rw"), -1);
1290
} else if (access(path, R_OK) == 0) {
1291
gtk_list_store_set(ms_pathlist_store, &iter, 2, _("r"), -1);
1293
gtk_list_store_set(ms_pathlist_store, &iter, 2, _("unreachable"), -1);
1302
append_ms_pathlist(char * path, char * name) {
1306
gtk_list_store_append(ms_pathlist_store, &iter);
1307
gtk_list_store_set(ms_pathlist_store, &iter, 0, path, 1, name, -1);
1309
refresh_ms_pathlist_clicked(NULL, NULL);
1314
add_ms_pathlist_clicked(GtkWidget * widget, gpointer * data) {
1321
struct stat st_file;
1323
pname = gtk_entry_get_text(GTK_ENTRY(entry_ms_pathlist));
1325
if (pname[0] == '\0') return;
1327
if (pname[0] == '~') {
1328
snprintf(name, MAXLEN - 1, "%s%s", options.home, pname + 1);
1329
} else if (pname[0] == '/') {
1330
strncpy(name, pname, MAXLEN - 1);
1335
dialog = gtk_dialog_new_with_buttons(_("Warning"),
1336
GTK_WINDOW(options_window),
1337
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
1338
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1340
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
1341
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
1342
gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
1344
label = gtk_label_new(_("Paths must either be absolute or starting with a tilde."));
1346
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, TRUE, 10);
1347
gtk_widget_show(label);
1349
aqualung_dialog_run(GTK_DIALOG(dialog));
1350
gtk_widget_destroy(dialog);
1354
if ((path = g_locale_from_utf8(name, -1, NULL, NULL, NULL)) == NULL) {
1358
if (stat(path, &st_file) != -1 && S_ISDIR(st_file.st_mode)) {
1363
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store), &iter, NULL, i++)) {
1366
gtk_tree_model_get(GTK_TREE_MODEL(ms_pathlist_store), &iter, 0, &p, -1);
1368
if (!strcmp(p, path)) {
1372
dialog = gtk_message_dialog_new(GTK_WINDOW(options_window),
1373
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1374
GTK_MESSAGE_WARNING,
1376
_("The specified store has already been added to the list."));
1377
gtk_widget_show(dialog);
1378
aqualung_dialog_run(GTK_DIALOG(dialog));
1379
gtk_widget_destroy(dialog);
1390
gtk_entry_set_text(GTK_ENTRY(entry_ms_pathlist), "");
1392
append_ms_pathlist(path, name);
1399
remove_ms_pathlist_clicked(GtkWidget * widget, gpointer data) {
1404
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store), &iter, NULL, i++)) {
1406
if (gtk_tree_selection_iter_is_selected(ms_pathlist_select, &iter)) {
1407
gtk_list_store_remove(ms_pathlist_store, &iter);
1415
browse_ms_pathlist_clicked(GtkWidget * widget, gpointer data) {
1418
const gchar * selected_filename = gtk_entry_get_text(GTK_ENTRY(data));
1421
dialog = gtk_file_chooser_dialog_new(_("Please select a Music Store database."),
1422
GTK_WINDOW(options_window),
1423
GTK_FILE_CHOOSER_ACTION_OPEN,
1424
GTK_STOCK_APPLY, GTK_RESPONSE_ACCEPT,
1425
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1428
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT);
1429
gtk_window_set_default_size(GTK_WINDOW(dialog), 580, 390);
1430
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
1432
if (strlen(selected_filename)) {
1433
char * locale = g_locale_from_utf8(selected_filename, -1, NULL, NULL, NULL);
1437
if (locale == NULL) {
1438
gtk_widget_destroy(dialog);
1442
normalize_filename(locale, tmp);
1443
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), tmp);
1446
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), options.currdir);
1449
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_show_hidden))) {
1450
gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);
1453
if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
1457
selected_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
1458
utf8 = g_locale_to_utf8(selected_filename, -1, NULL, NULL, NULL);
1461
gtk_widget_destroy(dialog);
1465
gtk_entry_set_text(GTK_ENTRY(entry_ms_pathlist), utf8);
1467
strncpy(options.currdir, selected_filename, MAXLEN-1);
1471
gtk_widget_destroy(dialog);
1476
display_title_format_help(void) {
1478
GtkWidget *help_dialog;
1480
help_dialog = gtk_message_dialog_new (GTK_WINDOW(options_window),
1481
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1482
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
1483
_("\nThe template string you enter here will be used to\n"
1484
"construct a single title line from an Artist, a Record\n"
1485
"and a Track name. These are denoted by %%a, %%r and %%t,\n"
1486
"respectively. Everything else you enter here will be\n"
1487
"literally copied into the resulting string.\n"));
1489
gtk_window_set_title(GTK_WINDOW(help_dialog), _("Help"));
1490
gtk_widget_show (help_dialog);
1491
aqualung_dialog_run(GTK_DIALOG(help_dialog));
1492
gtk_widget_destroy(help_dialog);
1497
display_implict_command_line_help(void) {
1499
GtkWidget *help_dialog;
1501
help_dialog = gtk_message_dialog_new (GTK_WINDOW(options_window),
1502
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1503
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
1504
_("\nThe string you enter here will be parsed as a command\n"
1505
"line before parsing the actual command line parameters.\n"
1506
"What you enter here will act as a default setting and may\n"
1507
"or may not be overrided from the 'real' command line.\n"
1508
"Example: enter '-o alsa -R' below to use ALSA output\n"
1509
"running realtime as a default.\n"));
1511
gtk_window_set_title(GTK_WINDOW(help_dialog), _("Help"));
1512
gtk_widget_show (help_dialog);
1513
aqualung_dialog_run(GTK_DIALOG(help_dialog));
1514
gtk_widget_destroy(help_dialog);
1519
display_pathlist_help(void) {
1521
GtkWidget *help_dialog;
1523
help_dialog = gtk_message_dialog_new (GTK_WINDOW(options_window),
1524
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1525
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
1526
_("Paths must either be absolute or starting with a tilde, which will be expanded to the user's home directory.\n\n"
1527
"Drag and drop entries in the list to set the store order in the Music Store."));
1529
gtk_window_set_title(GTK_WINDOW(help_dialog), _("Help"));
1530
gtk_widget_show (help_dialog);
1531
aqualung_dialog_run(GTK_DIALOG(help_dialog));
1532
gtk_widget_destroy(help_dialog);
1537
display_cdda_drive_speed_help(void) {
1539
GtkWidget *help_dialog;
1541
help_dialog = gtk_message_dialog_new (GTK_WINDOW(options_window),
1542
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1543
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
1544
_("\nSet the drive speed for CD playing in CD-ROM speed units.\n"
1545
"One speed unit equals to 176 kBps raw data reading speed.\n"
1546
"Warning: not all drives honor this setting.\n\n"
1548
"Lower speed usually means less drive noise. However,\n"
1549
"when using Paranoia error correction modes for increased\n"
1550
"accuracy, generally much larger speeds are required to\n"
1551
"prevent buffer underruns (and thus audible drop-outs).\n\n"
1553
"Please note that these settings do not apply to CD Ripping,\n"
1554
"which always happens with maximum available speed and\n"
1555
"with error correction modes manually set before every run."));
1557
gtk_window_set_title(GTK_WINDOW(help_dialog), _("Help"));
1558
gtk_widget_show (help_dialog);
1559
aqualung_dialog_run(GTK_DIALOG(help_dialog));
1560
gtk_widget_destroy(help_dialog);
1564
display_cdda_force_drive_rescan_help(void) {
1566
GtkWidget *help_dialog;
1568
help_dialog = gtk_message_dialog_new (GTK_WINDOW(options_window),
1569
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1570
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
1571
_("\nMost drives let Aqualung know when a CD has been inserted\n"
1572
"or removed by providing a 'media changed' flag. However,\n"
1573
"some drives don't set this flag properly, and thus it may\n"
1574
"happen that a newly inserted CD remains unnoticed to\n"
1575
"Aqualung. In such cases, enabling this option should help."));
1577
gtk_window_set_title(GTK_WINDOW(help_dialog), _("Help"));
1578
gtk_widget_show (help_dialog);
1579
aqualung_dialog_run(GTK_DIALOG(help_dialog));
1580
gtk_widget_destroy(help_dialog);
1584
cdda_toggled(GtkWidget * widget, gpointer * data) {
1586
gtk_widget_set_sensitive(cdda_paranoia_maxretries_spinner,
1587
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_cdda_mode_neverskip)));
1588
gtk_widget_set_sensitive(label_cdda_maxretries,
1589
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_cdda_mode_neverskip)));
1591
#endif /* HAVE_CDDA */
1596
cddb_radio_direct_toggled(GtkWidget * widget, gpointer * data) {
1598
gboolean state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cddb_radio_direct));
1600
gtk_widget_set_sensitive(cddb_proto_combo, state);
1601
gtk_widget_set_sensitive(cddb_label_proto, state);
1602
gtk_widget_set_sensitive(cddb_proxy_entry, !state);
1603
gtk_widget_set_sensitive(cddb_proxy_port_spinner, !state);
1604
gtk_widget_set_sensitive(cddb_label_proxy, !state);
1605
gtk_widget_set_sensitive(cddb_label_proxy_port, !state);
1607
#endif /* HAVE_CDDB */
1610
create_options_window(void) {
1612
GtkWidget * vbox_general;
1613
GtkWidget * frame_title;
1614
GtkWidget * frame_param;
1615
GtkWidget * frame_misc;
1616
GtkWidget * frame_cart;
1617
GtkWidget * hbox_title;
1618
GtkWidget * hbox_param;
1619
GtkWidget * vbox_misc;
1620
GtkWidget * vbox_cart;
1621
GtkWidget * vbox_appearance;
1623
GtkWidget * vbox_pl;
1624
GtkWidget * vbox_ms;
1625
GtkWidget * frame_ms_pathlist;
1626
GtkWidget * ms_pathlist_view;
1627
GtkWidget * vbox_ms_pathlist;
1628
GtkWidget * hbox_ms_pathlist;
1629
GtkWidget * hbox_ms_pathlist_2;
1630
GtkWidget * add_ms_pathlist;
1631
GtkWidget * browse_ms_pathlist;
1632
GtkWidget * remove_ms_pathlist;
1633
GtkWidget * refresh_ms_pathlist;
1634
GtkWidget * frame_plistcol;
1635
GtkWidget * vbox_plistcol;
1636
GtkWidget * label_plistcol;
1637
GtkWidget * viewport;
1638
GtkWidget * scrolled_win;
1639
GtkCellRenderer * renderer;
1640
GtkTreeViewColumn * column;
1642
GtkWidget * plistcol_list;
1645
GtkWidget * vbox_dsp;
1646
GtkWidget * frame_ladspa;
1647
GtkWidget * frame_src;
1648
GtkWidget * frame_fonts;
1649
GtkWidget * frame_colors;
1650
GtkWidget * vbox_ladspa;
1651
GtkWidget * vbox_src;
1652
GtkWidget * vbox_fonts;
1653
GtkWidget * vbox_colors;
1655
GtkWidget * vbox_rva;
1656
GtkWidget * table_rva;
1657
GtkWidget * label_cwidth;
1658
GtkWidget * hbox_cwidth;
1660
GtkWidget * vbox_meta;
1663
GtkWidget * table_cdda;
1664
GtkWidget * help_btn_cdda_drive_speed;
1665
GtkWidget * help_btn_cdda_force_drive_rescan;
1666
GtkWidget * frame_cdda;
1667
GtkWidget * vbox_cdda;
1668
GtkWidget * hbox_cdda;
1669
#endif /* HAVE_CDDA */
1672
GtkWidget * table_cddb;
1673
#endif /* HAVE_CDDB */
1675
GtkSizeGroup * label_size;
1679
GtkWidget * help_btn_title;
1680
GtkWidget * help_btn_param;
1681
GtkWidget * help_pathlist;
1685
#endif /* HAVE_LADSPA */
1691
appearance_changed = 0;
1693
if (!restart_list_store) {
1694
restart_list_store = gtk_list_store_new(1, G_TYPE_STRING);
1696
gtk_list_store_clear(restart_list_store);
1699
refresh_ms_pathlist_clicked(NULL, NULL);
1701
options_window = gtk_dialog_new_with_buttons(_("Settings"),
1702
GTK_WINDOW(main_window),
1703
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
1704
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1705
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
1707
gtk_window_set_position(GTK_WINDOW(options_window), GTK_WIN_POS_CENTER);
1708
gtk_dialog_set_default_response(GTK_DIALOG(options_window), GTK_RESPONSE_ACCEPT);
1709
gtk_container_set_border_width(GTK_CONTAINER(options_window), 5);
1711
notebook = gtk_notebook_new();
1712
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_LEFT);
1713
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(options_window)->vbox), notebook);
1715
label_size = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
1717
/* "General" notebook page */
1719
vbox_general = gtk_vbox_new(FALSE, 3);
1720
gtk_container_set_border_width(GTK_CONTAINER(vbox_general), 8);
1721
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_general, create_notebook_tab(_("General"), "general.png"));
1723
frame_title = gtk_frame_new(_("Title format"));
1724
gtk_box_pack_start(GTK_BOX(vbox_general), frame_title, FALSE, TRUE, 0);
1726
hbox_title = gtk_hbox_new(FALSE, 3);
1727
gtk_container_set_border_width(GTK_CONTAINER(hbox_title), 5);
1728
gtk_container_add(GTK_CONTAINER(frame_title), hbox_title);
1730
entry_title = gtk_entry_new();
1731
gtk_entry_set_max_length(GTK_ENTRY(entry_title), MAXLEN - 1);
1732
gtk_entry_set_text(GTK_ENTRY(entry_title), options.title_format);
1733
gtk_box_pack_start(GTK_BOX(hbox_title), entry_title, TRUE, TRUE, 0);
1735
help_btn_title = gtk_button_new_from_stock (GTK_STOCK_HELP);
1736
g_signal_connect(help_btn_title, "clicked", G_CALLBACK(display_title_format_help), NULL);
1737
gtk_box_pack_start(GTK_BOX(hbox_title), help_btn_title, FALSE, FALSE, 0);
1739
frame_param = gtk_frame_new(_("Implicit command line"));
1740
gtk_box_pack_start(GTK_BOX(vbox_general), frame_param, FALSE, TRUE, 5);
1743
hbox_param = gtk_hbox_new(FALSE, 3);
1744
gtk_container_set_border_width(GTK_CONTAINER(hbox_param), 5);
1745
gtk_container_add(GTK_CONTAINER(frame_param), hbox_param);
1747
entry_param = gtk_entry_new();
1748
gtk_entry_set_max_length(GTK_ENTRY(entry_param), MAXLEN - 1);
1749
gtk_entry_set_text(GTK_ENTRY(entry_param), options.default_param);
1750
gtk_box_pack_start(GTK_BOX(hbox_param), entry_param, TRUE, TRUE, 0);
1752
help_btn_param = gtk_button_new_from_stock (GTK_STOCK_HELP);
1753
g_signal_connect(help_btn_param, "clicked", G_CALLBACK(display_implict_command_line_help), NULL);
1754
gtk_box_pack_start(GTK_BOX(hbox_param), help_btn_param, FALSE, FALSE, 0);
1756
frame_misc = gtk_frame_new(_("Miscellaneous"));
1757
gtk_box_pack_start(GTK_BOX(vbox_general), frame_misc, FALSE, TRUE, 0);
1759
vbox_misc = gtk_vbox_new(FALSE, 3);
1760
gtk_container_set_border_width(GTK_CONTAINER(vbox_misc), 8);
1761
gtk_container_add(GTK_CONTAINER(frame_misc), vbox_misc);
1763
check_enable_tooltips = gtk_check_button_new_with_label(_("Enable tooltips"));
1764
gtk_widget_set_name(check_enable_tooltips, "check_on_notebook");
1765
if (options.enable_tooltips) {
1766
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_tooltips), TRUE);
1768
gtk_box_pack_start(GTK_BOX(vbox_misc), check_enable_tooltips, FALSE, FALSE, 0);
1770
check_buttons_at_the_bottom =
1771
gtk_check_button_new_with_label(_("Put control buttons at the bottom of playlist"));
1772
gtk_widget_set_name(check_buttons_at_the_bottom, "check_on_notebook");
1773
if (options.buttons_at_the_bottom_shadow) {
1774
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_buttons_at_the_bottom), TRUE);
1776
gtk_box_pack_start(GTK_BOX(vbox_misc), check_buttons_at_the_bottom, FALSE, FALSE, 0);
1777
g_signal_connect (G_OBJECT (check_buttons_at_the_bottom), "toggled",
1778
G_CALLBACK (restart_active), _("Put control buttons at the bottom of playlist"));
1780
check_disable_buttons_relief =
1781
gtk_check_button_new_with_label(_("Disable control buttons relief"));
1782
gtk_widget_set_name(check_disable_buttons_relief, "check_on_notebook");
1783
if (options.disable_buttons_relief) {
1784
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_disable_buttons_relief), TRUE);
1786
gtk_box_pack_start(GTK_BOX(vbox_misc), check_disable_buttons_relief, FALSE, FALSE, 0);
1789
check_main_window_always_on_top = gtk_check_button_new_with_label(_("Keep main window always on top"));
1790
gtk_widget_set_name(check_main_window_always_on_top, "check_on_notebook");
1791
if (options.main_window_always_on_top) {
1792
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_main_window_always_on_top), TRUE);
1794
gtk_box_pack_start(GTK_BOX(vbox_misc), check_main_window_always_on_top, FALSE, FALSE, 0);
1798
check_simple_view_in_fx =
1799
gtk_check_button_new_with_label(_("Simple view in LADSPA patch builder"));
1800
gtk_widget_set_name(check_simple_view_in_fx, "check_on_notebook");
1801
if (options.simple_view_in_fx_shadow) {
1802
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_simple_view_in_fx), TRUE);
1804
gtk_box_pack_start(GTK_BOX(vbox_misc), check_simple_view_in_fx, FALSE, FALSE, 0);
1805
g_signal_connect(G_OBJECT (check_simple_view_in_fx), "toggled",
1806
G_CALLBACK (restart_active), _("Simple view in LADSPA patch builder"));
1807
#endif /* HAVE_LADSPA */
1809
check_united_minimization =
1810
gtk_check_button_new_with_label(_("United windows minimization"));
1811
gtk_widget_set_name(check_united_minimization, "check_on_notebook");
1812
if (options.united_minimization) {
1813
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_united_minimization), TRUE);
1815
gtk_box_pack_start(GTK_BOX(vbox_misc), check_united_minimization, FALSE, FALSE, 0);
1817
check_show_sn_title =
1818
gtk_check_button_new_with_label(_("Show song name in the main window's title"));
1819
gtk_widget_set_name(check_show_sn_title, "check_on_notebook");
1820
if (options.show_sn_title) {
1821
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_show_sn_title), TRUE);
1823
gtk_box_pack_start(GTK_BOX(vbox_misc), check_show_sn_title, FALSE, FALSE, 0);
1826
check_show_hidden = gtk_check_button_new_with_label(_("Show hidden files and directories in file choosers"));
1827
gtk_widget_set_name(check_show_hidden, "check_on_notebook");
1828
if (options.show_hidden) {
1829
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_show_hidden), TRUE);
1831
gtk_box_pack_start(GTK_BOX(vbox_misc), check_show_hidden, FALSE, FALSE, 0);
1833
check_tags_tab_first = gtk_check_button_new_with_label(_("Show tags tab first in the file info dialog"));
1834
gtk_widget_set_name(check_tags_tab_first, "check_on_notebook");
1835
if (options.tags_tab_first) {
1836
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_tags_tab_first), TRUE);
1838
gtk_box_pack_start(GTK_BOX(vbox_misc), check_tags_tab_first, FALSE, FALSE, 0);
1841
/* "Playlist" notebook page */
1843
vbox_pl = gtk_vbox_new(FALSE, 3);
1844
gtk_container_set_border_width(GTK_CONTAINER(vbox_pl), 8);
1845
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_pl, create_notebook_tab(_("Playlist"), "playlist.png"));
1847
check_playlist_is_embedded =
1848
gtk_check_button_new_with_label(_("Embed playlist into main window"));
1849
gtk_widget_set_name(check_playlist_is_embedded, "check_on_notebook");
1850
if (options.playlist_is_embedded_shadow) {
1851
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_playlist_is_embedded), TRUE);
1853
gtk_box_pack_start(GTK_BOX(vbox_pl), check_playlist_is_embedded, FALSE, TRUE, 0);
1854
g_signal_connect (G_OBJECT (check_playlist_is_embedded), "toggled",
1855
G_CALLBACK (restart_active), _("Embed playlist into main window"));
1858
gtk_check_button_new_with_label(_("Save and restore the playlist on exit/startup"));
1859
gtk_widget_set_name(check_autoplsave, "check_on_notebook");
1860
if (options.auto_save_playlist) {
1861
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_autoplsave), TRUE);
1863
gtk_box_pack_start(GTK_BOX(vbox_pl), check_autoplsave, FALSE, TRUE, 0);
1865
check_playlist_is_tree =
1866
gtk_check_button_new_with_label(_("Album mode is the default when adding entire records"));
1867
gtk_widget_set_name(check_playlist_is_tree, "check_on_notebook");
1868
if (options.playlist_is_tree) {
1869
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_playlist_is_tree), TRUE);
1871
gtk_box_pack_start(GTK_BOX(vbox_pl), check_playlist_is_tree, FALSE, TRUE, 0);
1873
check_album_shuffle_mode =
1874
gtk_check_button_new_with_label(_("When shuffling, records added in Album mode "
1875
"are played in order"));
1876
gtk_widget_set_name(check_album_shuffle_mode, "check_on_notebook");
1877
if (options.album_shuffle_mode) {
1878
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_album_shuffle_mode), TRUE);
1880
gtk_box_pack_start(GTK_BOX(vbox_pl), check_album_shuffle_mode, FALSE, TRUE, 0);
1882
check_enable_playlist_statusbar =
1883
gtk_check_button_new_with_label(_("Enable statusbar"));
1884
gtk_widget_set_name(check_enable_playlist_statusbar, "check_on_notebook");
1885
if (options.enable_playlist_statusbar_shadow) {
1886
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_playlist_statusbar), TRUE);
1888
g_signal_connect(G_OBJECT(check_enable_playlist_statusbar), "toggled",
1889
G_CALLBACK(restart_active), _("Enable statusbar in playlist"));
1890
gtk_box_pack_start(GTK_BOX(vbox_pl), check_enable_playlist_statusbar, FALSE, TRUE, 0);
1892
check_pl_statusbar_show_size =
1893
gtk_check_button_new_with_label(_("Show soundfile size in statusbar"));
1894
gtk_widget_set_name(check_pl_statusbar_show_size, "check_on_notebook");
1895
if (options.pl_statusbar_show_size) {
1896
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_pl_statusbar_show_size), TRUE);
1898
gtk_box_pack_start(GTK_BOX(vbox_pl), check_pl_statusbar_show_size, FALSE, TRUE, 0);
1900
check_show_rva_in_playlist =
1901
gtk_check_button_new_with_label(_("Show RVA values"));
1902
gtk_widget_set_name(check_show_rva_in_playlist, "check_on_notebook");
1903
if (options.show_rva_in_playlist) {
1904
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_show_rva_in_playlist), TRUE);
1906
gtk_box_pack_start(GTK_BOX(vbox_pl), check_show_rva_in_playlist, FALSE, TRUE, 0);
1908
check_show_length_in_playlist =
1909
gtk_check_button_new_with_label(_("Show track lengths"));
1910
gtk_widget_set_name(check_show_length_in_playlist, "check_on_notebook");
1911
if (options.show_length_in_playlist) {
1912
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_show_length_in_playlist), TRUE);
1914
gtk_box_pack_start(GTK_BOX(vbox_pl), check_show_length_in_playlist, FALSE, TRUE, 0);
1916
check_show_active_track_name_in_bold =
1917
gtk_check_button_new_with_label(_("Show active track name in bold"));
1918
gtk_widget_set_name(check_show_active_track_name_in_bold, "check_on_notebook");
1919
track_name_in_bold_shadow = options.show_active_track_name_in_bold;
1920
if (options.show_active_track_name_in_bold) {
1921
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_show_active_track_name_in_bold), TRUE);
1923
gtk_box_pack_start(GTK_BOX(vbox_pl), check_show_active_track_name_in_bold, FALSE, TRUE, 0);
1925
check_enable_pl_rules_hint =
1926
gtk_check_button_new_with_label(_("Enable rules hint"));
1927
gtk_widget_set_name(check_enable_pl_rules_hint, "check_on_notebook");
1928
if (options.enable_pl_rules_hint) {
1929
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_pl_rules_hint), TRUE);
1931
gtk_box_pack_start(GTK_BOX(vbox_pl), check_enable_pl_rules_hint, FALSE, TRUE, 0);
1933
frame_plistcol = gtk_frame_new(_("Playlist column order"));
1934
gtk_box_pack_start(GTK_BOX(vbox_pl), frame_plistcol, FALSE, TRUE, 5);
1936
vbox_plistcol = gtk_vbox_new(FALSE, 0);
1937
gtk_container_set_border_width(GTK_CONTAINER(vbox_plistcol), 8);
1938
gtk_container_add(GTK_CONTAINER(frame_plistcol), vbox_plistcol);
1940
label_plistcol = gtk_label_new(_("Drag and drop entries in the list below \n\
1941
to set the column order in the Playlist."));
1942
gtk_box_pack_start(GTK_BOX(vbox_plistcol), label_plistcol, FALSE, TRUE, 5);
1945
plistcol_store = gtk_list_store_new(2,
1946
G_TYPE_STRING, /* Column name */
1947
G_TYPE_STRING); /* Column index */
1949
plistcol_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(plistcol_store));
1950
gtk_tree_view_set_enable_search(GTK_TREE_VIEW(plistcol_list), FALSE);
1951
renderer = gtk_cell_renderer_text_new();
1952
column = gtk_tree_view_column_new_with_attributes(_("Column"),
1956
gtk_tree_view_append_column(GTK_TREE_VIEW(plistcol_list), column);
1957
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(plistcol_list), TRUE);
1959
viewport = gtk_viewport_new(NULL, NULL);
1960
gtk_box_pack_start(GTK_BOX(vbox_plistcol), viewport, TRUE, TRUE, 5);
1962
gtk_container_add(GTK_CONTAINER(viewport), plistcol_list);
1964
for (i = 0; i < 3; i++) {
1965
switch (options.plcol_idx[i]) {
1967
gtk_list_store_append(plistcol_store, &iter);
1968
gtk_list_store_set(plistcol_store, &iter,
1969
0, _("Track titles"), 1, "0", -1);
1972
gtk_list_store_append(plistcol_store, &iter);
1973
gtk_list_store_set(plistcol_store, &iter,
1974
0, _("RVA values"), 1, "1", -1);
1977
gtk_list_store_append(plistcol_store, &iter);
1978
gtk_list_store_set(plistcol_store, &iter,
1979
0, _("Track lengths"), 1, "2", -1);
1985
/* "Music store" notebook page */
1987
vbox_ms = gtk_vbox_new(FALSE, 3);
1988
gtk_container_set_border_width(GTK_CONTAINER(vbox_ms), 8);
1989
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_ms, create_notebook_tab(_("Music Store"), "music_store.png"));
1991
check_hide_comment_pane =
1992
gtk_check_button_new_with_label(_("Hide comment pane"));
1993
gtk_widget_set_name(check_hide_comment_pane, "check_on_notebook");
1994
if (options.hide_comment_pane_shadow) {
1995
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_hide_comment_pane), TRUE);
1997
gtk_box_pack_start(GTK_BOX(vbox_ms), check_hide_comment_pane, FALSE, FALSE, 0);
1998
g_signal_connect (G_OBJECT (check_hide_comment_pane), "toggled",
1999
G_CALLBACK (restart_active), _("Hide the Music Store comment pane"));
2001
check_enable_mstore_toolbar =
2002
gtk_check_button_new_with_label(_("Enable toolbar"));
2003
gtk_widget_set_name(check_enable_mstore_toolbar, "check_on_notebook");
2004
if (options.enable_mstore_toolbar_shadow) {
2005
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_mstore_toolbar), TRUE);
2007
g_signal_connect(G_OBJECT(check_enable_mstore_toolbar), "toggled",
2008
G_CALLBACK(restart_active), _("Enable toolbar in Music Store"));
2009
gtk_box_pack_start(GTK_BOX(vbox_ms), check_enable_mstore_toolbar, FALSE, TRUE, 0);
2011
check_enable_mstore_statusbar =
2012
gtk_check_button_new_with_label(_("Enable statusbar"));
2013
gtk_widget_set_name(check_enable_mstore_statusbar, "check_on_notebook");
2014
if (options.enable_mstore_statusbar_shadow) {
2015
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_mstore_statusbar), TRUE);
2017
g_signal_connect(G_OBJECT(check_enable_mstore_statusbar), "toggled",
2018
G_CALLBACK(restart_active), _("Enable statusbar in Music Store"));
2019
gtk_box_pack_start(GTK_BOX(vbox_ms), check_enable_mstore_statusbar, FALSE, TRUE, 0);
2021
check_ms_statusbar_show_size =
2022
gtk_check_button_new_with_label(_("Show soundfile size in statusbar"));
2023
gtk_widget_set_name(check_ms_statusbar_show_size, "check_on_notebook");
2024
if (options.ms_statusbar_show_size) {
2025
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_ms_statusbar_show_size), TRUE);
2027
gtk_box_pack_start(GTK_BOX(vbox_ms), check_ms_statusbar_show_size, FALSE, TRUE, 0);
2030
check_expand_stores = gtk_check_button_new_with_label(_("Expand Stores on startup"));
2031
gtk_widget_set_name(check_expand_stores, "check_on_notebook");
2032
if (options.autoexpand_stores) {
2033
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_expand_stores), TRUE);
2035
gtk_box_pack_start(GTK_BOX(vbox_ms), check_expand_stores, FALSE, FALSE, 0);
2037
check_enable_ms_rules_hint =
2038
gtk_check_button_new_with_label(_("Enable rules hint"));
2039
gtk_widget_set_name(check_enable_ms_rules_hint, "check_on_notebook");
2040
if (options.enable_ms_rules_hint) {
2041
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_ms_rules_hint), TRUE);
2043
gtk_box_pack_start(GTK_BOX(vbox_ms), check_enable_ms_rules_hint, FALSE, TRUE, 0);
2045
check_enable_ms_tree_icons =
2046
gtk_check_button_new_with_label(_("Enable tree node icons"));
2047
gtk_widget_set_name(check_enable_ms_tree_icons, "check_on_notebook");
2048
if (options.enable_ms_tree_icons_shadow) {
2049
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_enable_ms_tree_icons), TRUE);
2051
g_signal_connect (G_OBJECT (check_enable_ms_tree_icons), "toggled",
2052
G_CALLBACK (restart_active), _("Enable Music Store tree node icons"));
2053
gtk_box_pack_start(GTK_BOX(vbox_ms), check_enable_ms_tree_icons, FALSE, TRUE, 0);
2055
frame_cart = gtk_frame_new(_("Cover art"));
2056
gtk_box_pack_start(GTK_BOX(vbox_ms), frame_cart, FALSE, TRUE, 5);
2058
vbox_cart = gtk_vbox_new(FALSE, 3);
2059
gtk_container_set_border_width(GTK_CONTAINER(vbox_cart), 10);
2060
gtk_container_add(GTK_CONTAINER(frame_cart), vbox_cart);
2062
hbox_cwidth = gtk_hbox_new(FALSE, 0);
2063
gtk_box_pack_start(GTK_BOX(vbox_cart), hbox_cwidth, FALSE, FALSE, 0);
2064
label_cwidth = gtk_label_new(_("Default cover width:"));
2065
gtk_box_pack_start(GTK_BOX(hbox_cwidth), label_cwidth, FALSE, FALSE, 0);
2067
hbox_s = gtk_hbox_new(FALSE, 0);
2068
gtk_box_pack_start(GTK_BOX(hbox_cwidth), hbox_s, TRUE, TRUE, 3);
2070
combo_cwidth = gtk_combo_box_new_text ();
2071
gtk_box_pack_start(GTK_BOX(hbox_cwidth), combo_cwidth, FALSE, FALSE, 0);
2072
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_cwidth), _("50 pixels"));
2073
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_cwidth), _("100 pixels"));
2074
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_cwidth), _("200 pixels"));
2075
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_cwidth), _("300 pixels"));
2076
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_cwidth), _("use browser window width"));
2078
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_cwidth), options.cover_width);
2080
check_magnify_smaller_images =
2081
gtk_check_button_new_with_label(_("Do not magnify images with smaller width"));
2082
gtk_widget_set_name(check_magnify_smaller_images, "check_on_notebook");
2083
if (!options.magnify_smaller_images) {
2084
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_magnify_smaller_images), TRUE);
2086
gtk_box_pack_start(GTK_BOX(vbox_cart), check_magnify_smaller_images, FALSE, FALSE, 0);
2089
frame_ms_pathlist = gtk_frame_new(_("Paths to Music Store databases"));
2090
gtk_box_pack_start(GTK_BOX(vbox_ms), frame_ms_pathlist, FALSE, TRUE, 0);
2092
vbox_ms_pathlist = gtk_vbox_new(FALSE, 0);
2093
gtk_container_set_border_width(GTK_CONTAINER(vbox_ms_pathlist), 10);
2094
gtk_container_add(GTK_CONTAINER(frame_ms_pathlist), vbox_ms_pathlist);
2096
ms_pathlist_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ms_pathlist_store));
2097
ms_pathlist_select = gtk_tree_view_get_selection(GTK_TREE_VIEW(ms_pathlist_view));
2099
renderer = gtk_cell_renderer_text_new();
2100
column = gtk_tree_view_column_new_with_attributes(_("Path"), renderer,
2103
gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
2104
gtk_tree_view_append_column(GTK_TREE_VIEW(ms_pathlist_view), column);
2106
renderer = gtk_cell_renderer_text_new();
2107
column = gtk_tree_view_column_new_with_attributes(_("Access"), renderer,
2110
gtk_tree_view_append_column(GTK_TREE_VIEW(ms_pathlist_view), column);
2112
gtk_widget_set_size_request(ms_pathlist_view, -1, 100);
2113
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(ms_pathlist_view), TRUE);
2114
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(ms_pathlist_view), TRUE);
2116
viewport = gtk_viewport_new(NULL, NULL);
2117
gtk_box_pack_start(GTK_BOX(vbox_ms_pathlist), viewport, FALSE, TRUE, 5);
2119
scrolled_win = gtk_scrolled_window_new(NULL, NULL);
2120
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_win),
2121
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2122
gtk_container_add(GTK_CONTAINER(viewport), scrolled_win);
2123
gtk_container_add(GTK_CONTAINER(scrolled_win), ms_pathlist_view);
2125
hbox_ms_pathlist = gtk_hbox_new(FALSE, FALSE);
2126
gtk_box_pack_start(GTK_BOX(vbox_ms_pathlist), hbox_ms_pathlist, FALSE, FALSE, 0);
2128
entry_ms_pathlist = gtk_entry_new();
2129
gtk_box_pack_start(GTK_BOX(hbox_ms_pathlist), entry_ms_pathlist, TRUE, TRUE, 2);
2131
browse_ms_pathlist = gui_stock_label_button(_("Browse"), GTK_STOCK_OPEN);
2132
gtk_container_set_border_width(GTK_CONTAINER(browse_ms_pathlist), 2);
2133
g_signal_connect (G_OBJECT(browse_ms_pathlist), "clicked",
2134
G_CALLBACK(browse_ms_pathlist_clicked), (gpointer)entry_ms_pathlist);
2135
gtk_box_pack_end(GTK_BOX(hbox_ms_pathlist), browse_ms_pathlist, FALSE, FALSE, 0);
2137
hbox_ms_pathlist_2 = gtk_hbox_new(FALSE, FALSE);
2138
gtk_box_pack_start(GTK_BOX(vbox_ms_pathlist), hbox_ms_pathlist_2, FALSE, FALSE, 0);
2140
help_pathlist = gtk_button_new_from_stock (GTK_STOCK_HELP);
2141
gtk_container_set_border_width(GTK_CONTAINER(help_pathlist), 2);
2142
g_signal_connect(help_pathlist, "clicked", G_CALLBACK(display_pathlist_help), NULL);
2143
gtk_box_pack_start(GTK_BOX(hbox_ms_pathlist_2), help_pathlist, FALSE, FALSE, 0);
2145
refresh_ms_pathlist = gui_stock_label_button(_("Refresh"), GTK_STOCK_REFRESH);
2146
gtk_container_set_border_width(GTK_CONTAINER(refresh_ms_pathlist), 2);
2147
g_signal_connect (G_OBJECT(refresh_ms_pathlist), "clicked",
2148
G_CALLBACK(refresh_ms_pathlist_clicked), NULL);
2149
gtk_box_pack_end(GTK_BOX(hbox_ms_pathlist_2), refresh_ms_pathlist, FALSE, FALSE, 0);
2151
remove_ms_pathlist = gui_stock_label_button(_("Remove"), GTK_STOCK_REMOVE);
2152
gtk_container_set_border_width(GTK_CONTAINER(remove_ms_pathlist), 2);
2153
g_signal_connect (G_OBJECT(remove_ms_pathlist), "clicked",
2154
G_CALLBACK(remove_ms_pathlist_clicked), NULL);
2155
gtk_box_pack_end(GTK_BOX(hbox_ms_pathlist_2), remove_ms_pathlist, FALSE, FALSE, 0);
2157
add_ms_pathlist = gui_stock_label_button(_("Add"), GTK_STOCK_ADD);
2158
gtk_container_set_border_width(GTK_CONTAINER(add_ms_pathlist), 2);
2159
g_signal_connect (G_OBJECT(add_ms_pathlist), "clicked",
2160
G_CALLBACK(add_ms_pathlist_clicked), NULL);
2161
gtk_box_pack_end(GTK_BOX(hbox_ms_pathlist_2), add_ms_pathlist, FALSE, FALSE, 0);
2164
/* "DSP" notebook page */
2166
vbox_dsp = gtk_vbox_new(FALSE, 3);
2167
gtk_container_set_border_width(GTK_CONTAINER(vbox_dsp), 8);
2168
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_dsp, create_notebook_tab(_("DSP"), "dsp.png"));
2170
frame_ladspa = gtk_frame_new(_("LADSPA plugin processing"));
2171
gtk_box_pack_start(GTK_BOX(vbox_dsp), frame_ladspa, FALSE, TRUE, 0);
2173
vbox_ladspa = gtk_vbox_new(FALSE, 3);
2174
gtk_container_set_border_width(GTK_CONTAINER(vbox_ladspa), 10);
2175
gtk_container_add(GTK_CONTAINER(frame_ladspa), vbox_ladspa);
2178
combo_ladspa = gtk_combo_box_new_text ();
2179
gtk_box_pack_start(GTK_BOX(vbox_ladspa), combo_ladspa, TRUE, TRUE, 0);
2181
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_ladspa), _("Pre Fader (before Volume & Balance)"));
2182
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_ladspa), _("Post Fader (after Volume & Balance)"));
2184
status = options.ladspa_is_postfader;
2185
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_ladspa), status);
2186
g_signal_connect(combo_ladspa, "changed", G_CALLBACK(changed_ladspa_prepost), NULL);
2189
GtkWidget * label = gtk_label_new(_("Aqualung is compiled without LADSPA plugin support.\n\
2190
See the About box and the documentation for details."));
2191
gtk_box_pack_start(GTK_BOX(vbox_ladspa), label, FALSE, TRUE, 5);
2193
#endif /* HAVE_LADSPA */
2196
frame_src = gtk_frame_new(_("Sample Rate Converter type"));
2197
gtk_box_pack_start(GTK_BOX(vbox_dsp), frame_src, FALSE, TRUE, 5);
2199
vbox_src = gtk_vbox_new(FALSE, 3);
2200
gtk_container_set_border_width(GTK_CONTAINER(vbox_src), 10);
2201
gtk_container_add(GTK_CONTAINER(frame_src), vbox_src);
2203
label_src = gtk_label_new("");
2206
combo_src = gtk_combo_box_new_text ();
2207
gtk_box_pack_start(GTK_BOX(vbox_src), combo_src, TRUE, TRUE, 0);
2212
while (src_get_name(i)) {
2213
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_src), src_get_name(i));
2219
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_src), options.src_type);
2220
g_signal_connect(combo_src, "changed", G_CALLBACK(changed_src_type), NULL);
2222
gtk_label_set_text(GTK_LABEL(label_src), src_get_description(options.src_type));
2224
gtk_label_set_text(GTK_LABEL(label_src),
2225
_("Aqualung is compiled without Sample Rate Converter support.\n\
2226
See the About box and the documentation for details."));
2228
#endif /* HAVE_SRC */
2230
gtk_box_pack_start(GTK_BOX(vbox_src), label_src, TRUE, TRUE, 0);
2233
/* "Playback RVA" notebook page */
2235
vbox_rva = gtk_vbox_new(FALSE, 3);
2236
gtk_container_set_border_width(GTK_CONTAINER(vbox_rva), 8);
2237
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_rva, create_notebook_tab(_("Playback RVA"), "rva.png"));
2239
check_rva_is_enabled = gtk_check_button_new_with_label(_("Enable playback RVA"));
2240
gtk_widget_set_name(check_rva_is_enabled, "check_on_notebook");
2241
if (options.rva_is_enabled) {
2242
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_rva_is_enabled), TRUE);
2244
rva_is_enabled_shadow = options.rva_is_enabled;
2245
g_signal_connect(G_OBJECT(check_rva_is_enabled), "toggled",
2246
G_CALLBACK(check_rva_is_enabled_toggled), NULL);
2247
gtk_box_pack_start(GTK_BOX(vbox_rva), check_rva_is_enabled, FALSE, TRUE, 0);
2250
table_rva = gtk_table_new(8, 2, FALSE);
2251
gtk_box_pack_start(GTK_BOX(vbox_rva), table_rva, TRUE, TRUE, 5);
2253
rva_viewport = gtk_viewport_new(NULL, NULL);
2254
gtk_widget_set_size_request(rva_viewport, 244, 244);
2255
gtk_table_attach(GTK_TABLE(table_rva), rva_viewport, 0, 2, 0, 1,
2256
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 2);
2258
rva_drawing_area = gtk_drawing_area_new();
2259
gtk_widget_set_size_request(GTK_WIDGET(rva_drawing_area), 240, 240);
2260
gtk_container_add(GTK_CONTAINER(rva_viewport), rva_drawing_area);
2262
g_signal_connect(G_OBJECT(rva_drawing_area), "configure_event",
2263
G_CALLBACK(rva_configure_event), NULL);
2264
g_signal_connect(G_OBJECT(rva_drawing_area), "expose_event",
2265
G_CALLBACK(rva_expose_event), NULL);
2267
hbox = gtk_hbox_new(FALSE, 0);
2268
label_listening_env = gtk_label_new(_("Listening environment:"));
2269
gtk_box_pack_start(GTK_BOX(hbox), label_listening_env, FALSE, FALSE, 0);
2270
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 1, 2,
2271
GTK_FILL, GTK_FILL, 5, 2);
2273
combo_listening_env = gtk_combo_box_new_text ();
2274
gtk_table_attach(GTK_TABLE(table_rva), combo_listening_env, 1, 2, 1, 2,
2275
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 2);
2278
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_listening_env), _("Audiophile"));
2279
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_listening_env), _("Living room"));
2280
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_listening_env), _("Office"));
2281
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_listening_env), _("Noisy workshop"));
2283
rva_env_shadow = options.rva_env;
2284
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_listening_env), options.rva_env);
2285
g_signal_connect(combo_listening_env, "changed", G_CALLBACK(changed_listening_env), NULL);
2287
hbox = gtk_hbox_new(FALSE, 0);
2288
label_refvol = gtk_label_new(_("Reference volume [dBFS] :"));
2289
gtk_box_pack_start(GTK_BOX(hbox), label_refvol, FALSE, FALSE, 0);
2290
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 2, 3,
2291
GTK_FILL, GTK_FILL, 5, 2);
2293
rva_refvol_shadow = options.rva_refvol;
2294
adj_refvol = gtk_adjustment_new(options.rva_refvol, -24.0f, 0.0f, 0.1f, 1.0f, 0.0f);
2295
spin_refvol = gtk_spin_button_new(GTK_ADJUSTMENT(adj_refvol), 0.1, 1);
2296
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_refvol), TRUE);
2297
gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_refvol), FALSE);
2298
g_signal_connect(G_OBJECT(adj_refvol), "value_changed",
2299
G_CALLBACK(refvol_changed), NULL);
2300
gtk_table_attach(GTK_TABLE(table_rva), spin_refvol, 1, 2, 2, 3,
2301
GTK_FILL, GTK_FILL, 5, 2);
2303
hbox = gtk_hbox_new(FALSE, 0);
2304
label_steepness = gtk_label_new(_("Steepness [dB/dB] :"));
2305
gtk_box_pack_start(GTK_BOX(hbox), label_steepness, FALSE, FALSE, 0);
2306
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 3, 4,
2307
GTK_FILL, GTK_FILL, 5, 2);
2309
rva_steepness_shadow = options.rva_steepness;
2310
adj_steepness = gtk_adjustment_new(options.rva_steepness, 0.0f, 1.0f, 0.01f, 0.1f, 0.0f);
2311
spin_steepness = gtk_spin_button_new(GTK_ADJUSTMENT(adj_steepness), 0.02, 2);
2312
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_steepness), TRUE);
2313
gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_steepness), FALSE);
2314
g_signal_connect(G_OBJECT(adj_steepness), "value_changed",
2315
G_CALLBACK(steepness_changed), NULL);
2316
gtk_table_attach(GTK_TABLE(table_rva), spin_steepness, 1, 2, 3, 4,
2317
GTK_FILL, GTK_FILL, 5, 2);
2321
check_rva_use_averaging =
2322
gtk_check_button_new_with_label(_("Apply averaged RVA to tracks of the same record"));
2323
gtk_widget_set_name(check_rva_use_averaging, "check_on_notebook");
2324
if (options.rva_use_averaging) {
2325
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_rva_use_averaging), TRUE);
2327
rva_use_averaging_shadow = options.rva_use_averaging;
2328
g_signal_connect(G_OBJECT(check_rva_use_averaging), "toggled",
2329
G_CALLBACK(check_rva_use_averaging_toggled), NULL);
2330
gtk_table_attach(GTK_TABLE(table_rva), check_rva_use_averaging, 0, 2, 4, 5,
2331
GTK_FILL, GTK_FILL, 5, 2);
2333
hbox = gtk_hbox_new(FALSE, 0);
2334
label_threshold = gtk_label_new(_("Drop statistical aberrations based on"));
2335
gtk_box_pack_start(GTK_BOX(hbox), label_threshold, FALSE, FALSE, 0);
2336
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 5, 6,
2337
GTK_FILL, GTK_FILL, 5, 2);
2339
combo_threshold = gtk_combo_box_new_text ();
2340
gtk_table_attach(GTK_TABLE(table_rva), combo_threshold, 1, 2, 5, 6,
2341
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 2);
2344
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_threshold), _("% of standard deviation"));
2345
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_threshold), _("Linear threshold [dB]"));
2347
rva_use_linear_thresh_shadow = options.rva_use_linear_thresh;
2348
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_threshold), options.rva_use_linear_thresh);
2349
g_signal_connect(combo_threshold, "changed", G_CALLBACK(changed_threshold), NULL);
2351
hbox = gtk_hbox_new(FALSE, 0);
2352
label_linthresh = gtk_label_new(_("Linear threshold [dB] :"));
2353
gtk_box_pack_start(GTK_BOX(hbox), label_linthresh, FALSE, FALSE, 0);
2354
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 6, 7,
2355
GTK_FILL, GTK_FILL, 5, 2);
2357
rva_avg_linear_thresh_shadow = options.rva_avg_linear_thresh;
2358
adj_linthresh = gtk_adjustment_new(options.rva_avg_linear_thresh, 0.0f, 60.0f, 0.1f, 1.0f, 0.0f);
2359
spin_linthresh = gtk_spin_button_new(GTK_ADJUSTMENT(adj_linthresh), 0.1, 1);
2360
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_linthresh), TRUE);
2361
gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_linthresh), FALSE);
2362
g_signal_connect(G_OBJECT(adj_linthresh), "value_changed",
2363
G_CALLBACK(linthresh_changed), NULL);
2364
gtk_table_attach(GTK_TABLE(table_rva), spin_linthresh, 1, 2, 6, 7,
2365
GTK_FILL, GTK_FILL, 5, 2);
2367
hbox = gtk_hbox_new(FALSE, 0);
2368
label_stdthresh = gtk_label_new(_("% of standard deviation :"));
2369
gtk_box_pack_start(GTK_BOX(hbox), label_stdthresh, FALSE, FALSE, 0);
2370
gtk_table_attach(GTK_TABLE(table_rva), hbox, 0, 1, 7, 8,
2371
GTK_FILL, GTK_FILL, 5, 2);
2373
rva_avg_stddev_thresh_shadow = options.rva_avg_stddev_thresh;
2374
adj_stdthresh = gtk_adjustment_new(options.rva_avg_stddev_thresh * 100.0f,
2375
0.0f, 500.0f, 1.0f, 10.0f, 0.0f);
2376
spin_stdthresh = gtk_spin_button_new(GTK_ADJUSTMENT(adj_stdthresh), 0.5, 0);
2377
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_stdthresh), TRUE);
2378
gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_stdthresh), FALSE);
2379
g_signal_connect(G_OBJECT(adj_stdthresh), "value_changed",
2380
G_CALLBACK(stdthresh_changed), NULL);
2381
gtk_table_attach(GTK_TABLE(table_rva), spin_stdthresh, 1, 2, 7, 8,
2382
GTK_FILL, GTK_FILL, 5, 2);
2385
if (!rva_use_averaging_shadow) {
2386
gtk_widget_set_sensitive(combo_threshold, FALSE);
2387
gtk_widget_set_sensitive(label_threshold, FALSE);
2388
gtk_widget_set_sensitive(spin_linthresh, FALSE);
2389
gtk_widget_set_sensitive(label_linthresh, FALSE);
2390
gtk_widget_set_sensitive(spin_stdthresh, FALSE);
2391
gtk_widget_set_sensitive(label_stdthresh, FALSE);
2394
if (!rva_is_enabled_shadow) {
2395
gtk_widget_set_sensitive(combo_listening_env, FALSE);
2396
gtk_widget_set_sensitive(label_listening_env, FALSE);
2397
gtk_widget_set_sensitive(spin_refvol, FALSE);
2398
gtk_widget_set_sensitive(label_refvol, FALSE);
2399
gtk_widget_set_sensitive(spin_steepness, FALSE);
2400
gtk_widget_set_sensitive(label_steepness, FALSE);
2401
gtk_widget_set_sensitive(check_rva_use_averaging, FALSE);
2402
gtk_widget_set_sensitive(combo_threshold, FALSE);
2403
gtk_widget_set_sensitive(label_threshold, FALSE);
2404
gtk_widget_set_sensitive(spin_linthresh, FALSE);
2405
gtk_widget_set_sensitive(label_linthresh, FALSE);
2406
gtk_widget_set_sensitive(spin_stdthresh, FALSE);
2407
gtk_widget_set_sensitive(label_stdthresh, FALSE);
2410
/* "Metadata" notebook page */
2412
vbox_meta = gtk_vbox_new(FALSE, 3);
2413
gtk_container_set_border_width(GTK_CONTAINER(vbox_meta), 8);
2414
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_meta, create_notebook_tab(_("Metadata"), "metadata.png"));
2416
hbox = gtk_hbox_new(FALSE, 0);
2417
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2419
label = gtk_label_new(_("When adding to playlist, use file metadata (if available) "
2420
"instead of\ninformation from the Music Store for:"));
2421
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3);
2423
hbox = gtk_hbox_new(FALSE, 0);
2424
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2425
check_auto_use_meta_artist = gtk_check_button_new_with_label(_("Artist name"));
2426
gtk_widget_set_name(check_auto_use_meta_artist, "check_on_notebook");
2427
if (options.auto_use_meta_artist) {
2428
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_meta_artist), TRUE);
2430
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_meta_artist, FALSE, TRUE, 35);
2432
hbox = gtk_hbox_new(FALSE, 0);
2433
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2434
check_auto_use_meta_record = gtk_check_button_new_with_label(_("Record name"));
2435
gtk_widget_set_name(check_auto_use_meta_record, "check_on_notebook");
2436
if (options.auto_use_meta_record) {
2437
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_meta_record), TRUE);
2439
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_meta_record, FALSE, TRUE, 35);
2441
hbox = gtk_hbox_new(FALSE, 0);
2442
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2443
check_auto_use_meta_track = gtk_check_button_new_with_label(_("Track name"));
2444
gtk_widget_set_name(check_auto_use_meta_track, "check_on_notebook");
2445
if (options.auto_use_meta_track) {
2446
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_meta_track), TRUE);
2448
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_meta_track, FALSE, TRUE, 35);
2451
hbox = gtk_hbox_new(FALSE, 0);
2452
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 5);
2454
label = gtk_label_new(_("When adding external files to playlist, use file metadata "
2455
"(if available) for:"));
2456
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3);
2458
hbox = gtk_hbox_new(FALSE, 0);
2459
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2460
check_auto_use_ext_meta_artist = gtk_check_button_new_with_label(_("Artist name"));
2461
gtk_widget_set_name(check_auto_use_ext_meta_artist, "check_on_notebook");
2462
if (options.auto_use_ext_meta_artist) {
2463
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_ext_meta_artist), TRUE);
2465
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_ext_meta_artist, FALSE, TRUE, 35);
2467
hbox = gtk_hbox_new(FALSE, 0);
2468
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2469
check_auto_use_ext_meta_record = gtk_check_button_new_with_label(_("Record name"));
2470
gtk_widget_set_name(check_auto_use_ext_meta_record, "check_on_notebook");
2471
if (options.auto_use_ext_meta_record) {
2472
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_ext_meta_record), TRUE);
2474
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_ext_meta_record, FALSE, TRUE, 35);
2476
hbox = gtk_hbox_new(FALSE, 0);
2477
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2478
check_auto_use_ext_meta_track = gtk_check_button_new_with_label(_("Track name"));
2479
gtk_widget_set_name(check_auto_use_ext_meta_track, "check_on_notebook");
2480
if (options.auto_use_ext_meta_track) {
2481
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_auto_use_ext_meta_track), TRUE);
2483
gtk_box_pack_start(GTK_BOX(hbox), check_auto_use_ext_meta_track, FALSE, TRUE, 35);
2486
hbox = gtk_hbox_new(FALSE, 0);
2487
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 5);
2489
label = gtk_label_new(_("Replaygain tag to extract from Ogg Xiph and APE tags: "));
2490
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3);
2493
hbox = gtk_hbox_new(FALSE, 0);
2494
gtk_box_pack_start(GTK_BOX(vbox_meta), hbox, FALSE, TRUE, 0);
2496
combo_replaygain = gtk_combo_box_new_text ();
2497
gtk_box_pack_start(GTK_BOX(hbox), combo_replaygain, FALSE, FALSE, 35);
2499
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_replaygain), _("Replaygain_track_gain"));
2500
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_replaygain), _("Replaygain_album_gain"));
2502
gtk_combo_box_set_active (GTK_COMBO_BOX (combo_replaygain), options.replaygain_tag_to_use);
2505
/* CDDA notebook page */
2507
table_cdda = gtk_table_new(5, 3, FALSE);
2508
gtk_container_set_border_width(GTK_CONTAINER(table_cdda), 8);
2509
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table_cdda, create_notebook_tab(_("CD Audio"), "cdda.png"));
2511
label = gtk_label_new(_("CD drive speed:"));
2512
hbox = gtk_hbox_new(FALSE, 0);
2513
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
2514
gtk_table_attach(GTK_TABLE(table_cdda), hbox, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 3);
2516
cdda_drive_speed_spinner = gtk_spin_button_new_with_range(1, 99, 1);
2517
gtk_spin_button_set_value(GTK_SPIN_BUTTON(cdda_drive_speed_spinner), options.cdda_drive_speed);
2518
gtk_table_attach(GTK_TABLE(table_cdda), cdda_drive_speed_spinner, 1, 2, 0, 1,
2519
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2521
help_btn_cdda_drive_speed = gtk_button_new_from_stock(GTK_STOCK_HELP);
2522
g_signal_connect(help_btn_cdda_drive_speed, "clicked", G_CALLBACK(display_cdda_drive_speed_help), NULL);
2523
gtk_table_attach(GTK_TABLE(table_cdda), help_btn_cdda_drive_speed, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 5, 3);
2525
frame_cdda = gtk_frame_new(_("Paranoia error correction"));
2526
gtk_table_attach(GTK_TABLE(table_cdda), frame_cdda, 0, 3, 1, 2,
2527
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2529
vbox_cdda = gtk_vbox_new(FALSE, 3);
2530
gtk_container_set_border_width(GTK_CONTAINER(vbox_cdda), 8);
2531
gtk_container_add(GTK_CONTAINER(frame_cdda), vbox_cdda);
2533
check_cdda_mode_overlap = gtk_check_button_new_with_label(_("Perform overlapped reads"));
2534
gtk_widget_set_name(check_cdda_mode_overlap, "check_on_notebook");
2535
gtk_box_pack_start(GTK_BOX(vbox_cdda), check_cdda_mode_overlap, FALSE, FALSE, 0);
2537
check_cdda_mode_verify = gtk_check_button_new_with_label(_("Verify data integrity"));
2538
gtk_widget_set_name(check_cdda_mode_verify, "check_on_notebook");
2539
gtk_box_pack_start(GTK_BOX(vbox_cdda), check_cdda_mode_verify, FALSE, FALSE, 0);
2541
check_cdda_mode_neverskip = gtk_check_button_new_with_label(_("Unlimited retry on failed reads (never skip)"));
2542
gtk_widget_set_name(check_cdda_mode_neverskip, "check_on_notebook");
2543
if (options.cdda_paranoia_mode & PARANOIA_MODE_NEVERSKIP) {
2544
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_mode_neverskip), TRUE);
2546
gtk_box_pack_start(GTK_BOX(vbox_cdda), check_cdda_mode_neverskip, FALSE, FALSE, 0);
2547
g_signal_connect(check_cdda_mode_neverskip, "toggled", G_CALLBACK(cdda_toggled), NULL);
2549
hbox_cdda = gtk_hbox_new(FALSE, 3);
2550
gtk_box_pack_start(GTK_BOX(vbox_cdda), hbox_cdda, FALSE, FALSE, 0);
2552
label_cdda_maxretries = gtk_label_new(_("\tMaximum number of retries:"));
2553
hbox = gtk_hbox_new(FALSE, 0);
2554
gtk_box_pack_start(GTK_BOX(hbox), label_cdda_maxretries, FALSE, FALSE, 5);
2555
gtk_box_pack_start(GTK_BOX(hbox_cdda), hbox, FALSE, FALSE, 0);
2557
cdda_paranoia_maxretries_spinner = gtk_spin_button_new_with_range(1, 50, 1);
2558
gtk_spin_button_set_value(GTK_SPIN_BUTTON(cdda_paranoia_maxretries_spinner), options.cdda_paranoia_maxretries);
2559
gtk_box_pack_start(GTK_BOX(hbox_cdda), cdda_paranoia_maxretries_spinner, FALSE, FALSE, 5);
2561
check_cdda_force_drive_rescan =
2562
gtk_check_button_new_with_label(_("Force TOC re-read on every drive scan"));
2563
gtk_widget_set_name(check_cdda_force_drive_rescan, "check_on_notebook");
2564
gtk_table_attach(GTK_TABLE(table_cdda), check_cdda_force_drive_rescan, 0, 2, 2, 3,
2565
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2567
help_btn_cdda_force_drive_rescan = gtk_button_new_from_stock(GTK_STOCK_HELP);
2568
g_signal_connect(help_btn_cdda_force_drive_rescan, "clicked", G_CALLBACK(display_cdda_force_drive_rescan_help), NULL);
2569
gtk_table_attach(GTK_TABLE(table_cdda), help_btn_cdda_force_drive_rescan, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 5, 3);
2571
check_cdda_add_to_playlist =
2572
gtk_check_button_new_with_label(_("Automatically add CDs to Playlist"));
2573
gtk_widget_set_name(check_cdda_add_to_playlist, "check_on_notebook");
2574
gtk_table_attach(GTK_TABLE(table_cdda), check_cdda_add_to_playlist, 0, 3, 3, 4,
2575
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2577
check_cdda_remove_from_playlist =
2578
gtk_check_button_new_with_label(_("Automatically remove CDs from Playlist"));
2579
gtk_widget_set_name(check_cdda_remove_from_playlist, "check_on_notebook");
2580
gtk_table_attach(GTK_TABLE(table_cdda), check_cdda_remove_from_playlist, 0, 3, 4, 5,
2581
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2583
if (options.cdda_force_drive_rescan) {
2584
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_force_drive_rescan), TRUE);
2587
if (options.cdda_paranoia_mode & PARANOIA_MODE_OVERLAP) {
2588
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_mode_overlap), TRUE);
2591
if (options.cdda_paranoia_mode & PARANOIA_MODE_VERIFY) {
2592
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_mode_verify), TRUE);
2595
if (options.cdda_paranoia_mode & PARANOIA_MODE_NEVERSKIP) {
2596
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_mode_neverskip), TRUE);
2597
gtk_widget_set_sensitive(cdda_paranoia_maxretries_spinner, FALSE);
2598
gtk_widget_set_sensitive(label_cdda_maxretries, FALSE);
2601
if (options.cdda_add_to_playlist) {
2602
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_add_to_playlist), TRUE);
2605
if (options.cdda_remove_from_playlist) {
2606
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_cdda_remove_from_playlist), TRUE);
2609
#endif /* HAVE_CDDA */
2612
/* CDDB notebook page */
2615
table_cddb = gtk_table_new(8, 2, FALSE);
2616
gtk_container_set_border_width(GTK_CONTAINER(table_cddb), 8);
2617
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table_cddb, create_notebook_tab(_("CDDB"), "cddb.png"));
2619
label = gtk_label_new(_("CDDB server:"));
2620
hbox = gtk_hbox_new(FALSE, 0);
2621
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
2622
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 0, 1,
2623
GTK_FILL, GTK_FILL, 5, 3);
2625
cddb_server_entry = gtk_entry_new();
2626
gtk_entry_set_text(GTK_ENTRY(cddb_server_entry), options.cddb_server);
2627
gtk_table_attach(GTK_TABLE(table_cddb), cddb_server_entry, 1, 2, 0, 1,
2628
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2630
label = gtk_label_new(_("Connection timeout [sec]:"));
2631
hbox = gtk_hbox_new(FALSE, 0);
2632
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
2633
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 1, 2,
2634
GTK_FILL, GTK_FILL, 5, 3);
2636
cddb_tout_spinner = gtk_spin_button_new_with_range(1, 60, 1);
2637
gtk_spin_button_set_value(GTK_SPIN_BUTTON(cddb_tout_spinner), options.cddb_timeout);
2638
gtk_table_attach(GTK_TABLE(table_cddb), cddb_tout_spinner, 1, 2, 1, 2,
2639
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2641
label = gtk_label_new(_("Email address for submission:"));
2642
hbox = gtk_hbox_new(FALSE, 0);
2643
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
2644
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 2, 3,
2645
GTK_FILL, GTK_FILL, 5, 3);
2647
cddb_email_entry = gtk_entry_new();
2648
gtk_entry_set_text(GTK_ENTRY(cddb_email_entry), options.cddb_email);
2649
gtk_table_attach(GTK_TABLE(table_cddb), cddb_email_entry, 1, 2, 2, 3,
2650
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2652
label = gtk_label_new(_("Local CDDB directory:"));
2653
hbox = gtk_hbox_new(FALSE, 0);
2654
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
2655
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 3, 4,
2656
GTK_FILL, GTK_FILL, 5, 3);
2658
cddb_local_entry = gtk_entry_new();
2659
gtk_entry_set_text(GTK_ENTRY(cddb_local_entry), options.cddb_local);
2660
gtk_table_attach(GTK_TABLE(table_cddb), cddb_local_entry, 1, 2, 3, 4,
2661
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2664
gtk_check_button_new_with_label(_("Use the local database only"));
2665
gtk_widget_set_name(cddb_local_check, "check_on_notebook");
2666
gtk_table_attach(GTK_TABLE(table_cddb), cddb_local_check, 0, 2, 4, 5,
2667
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2668
if (options.cddb_cache_only) {
2669
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_local_check), TRUE);
2671
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_local_check), FALSE);
2675
cddb_radio_direct = gtk_radio_button_new_with_label(NULL, _("Direct connection to CDDB server"));
2676
gtk_widget_set_name(cddb_radio_direct, "check_on_notebook");
2677
g_signal_connect(G_OBJECT(cddb_radio_direct), "toggled",
2678
G_CALLBACK(cddb_radio_direct_toggled), NULL);
2679
gtk_table_attach(GTK_TABLE(table_cddb), cddb_radio_direct, 0, 2, 5, 6,
2680
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2682
cddb_label_proto = gtk_label_new(_("Protocol for querying:"));
2683
hbox = gtk_hbox_new(FALSE, 0);
2684
gtk_box_pack_start(GTK_BOX(hbox), cddb_label_proto, FALSE, FALSE, 0);
2685
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 6, 7,
2686
GTK_FILL, GTK_FILL, 35, 3);
2688
cddb_proto_combo = gtk_combo_box_new_text();
2689
gtk_combo_box_append_text(GTK_COMBO_BOX(cddb_proto_combo), _("CDDBP (port 888)"));
2690
gtk_combo_box_append_text(GTK_COMBO_BOX(cddb_proto_combo), _("HTTP (port 80)"));
2691
if (options.cddb_use_http) {
2692
gtk_combo_box_set_active(GTK_COMBO_BOX(cddb_proto_combo), 1);
2694
gtk_combo_box_set_active(GTK_COMBO_BOX(cddb_proto_combo), 0);
2696
gtk_table_attach(GTK_TABLE(table_cddb), cddb_proto_combo, 1, 2, 6, 7,
2697
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2699
cddb_radio_proxy = gtk_radio_button_new_with_label_from_widget(
2700
GTK_RADIO_BUTTON(cddb_radio_direct), _("HTTP tunneling through proxy"));
2701
gtk_widget_set_name(cddb_radio_proxy, "check_on_notebook");
2702
gtk_table_attach(GTK_TABLE(table_cddb), cddb_radio_proxy, 0, 2, 7, 8,
2703
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2705
cddb_label_proxy = gtk_label_new(_("HTTP proxy:"));
2706
hbox = gtk_hbox_new(FALSE, 0);
2707
gtk_box_pack_start(GTK_BOX(hbox), cddb_label_proxy, FALSE, FALSE, 0);
2708
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 8, 9,
2709
GTK_FILL, GTK_FILL, 35, 3);
2711
cddb_proxy_entry = gtk_entry_new();
2712
gtk_entry_set_text(GTK_ENTRY(cddb_proxy_entry), options.cddb_proxy);
2713
gtk_table_attach(GTK_TABLE(table_cddb), cddb_proxy_entry, 1, 2, 8, 9,
2714
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2716
cddb_label_proxy_port = gtk_label_new(_("Port:"));
2717
hbox = gtk_hbox_new(FALSE, 0);
2718
gtk_box_pack_start(GTK_BOX(hbox), cddb_label_proxy_port, FALSE, FALSE, 0);
2719
gtk_table_attach(GTK_TABLE(table_cddb), hbox, 0, 1, 9, 10,
2720
GTK_FILL, GTK_FILL, 35, 3);
2722
cddb_proxy_port_spinner = gtk_spin_button_new_with_range(0, 65535, 1);
2723
gtk_spin_button_set_value(GTK_SPIN_BUTTON(cddb_proxy_port_spinner), options.cddb_proxy_port);
2724
gtk_table_attach(GTK_TABLE(table_cddb), cddb_proxy_port_spinner, 1, 2, 9, 10,
2725
GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 3);
2727
if (options.cddb_use_proxy) {
2728
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_radio_direct), TRUE);
2729
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_radio_proxy), TRUE);
2731
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_radio_proxy), TRUE);
2732
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cddb_radio_direct), TRUE);
2735
#endif /* HAVE_CDDB */
2737
/* Appearance notebook page */
2739
override_shadow = options.override_skin_settings;
2741
vbox_appearance = gtk_vbox_new(FALSE, 3);
2742
gtk_container_set_border_width(GTK_CONTAINER(vbox_appearance), 8);
2743
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_appearance, create_notebook_tab(_("Appearance"), "appearance.png"));
2745
check_override_skin =
2746
gtk_check_button_new_with_label(_("Override skin settings"));
2748
gtk_widget_set_name(check_override_skin, "check_on_notebook");
2749
if (options.override_skin_settings) {
2750
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_override_skin), TRUE);
2752
gtk_box_pack_start(GTK_BOX(vbox_appearance), check_override_skin, FALSE, FALSE, 0);
2753
g_signal_connect (G_OBJECT (check_override_skin), "toggled",
2754
G_CALLBACK (cb_toggle_override_skin), NULL);
2756
frame_fonts = gtk_frame_new(_("Fonts"));
2757
gtk_box_pack_start(GTK_BOX(vbox_appearance), frame_fonts, FALSE, TRUE, 5);
2759
vbox_fonts = gtk_vbox_new(FALSE, 3);
2760
gtk_container_set_border_width(GTK_CONTAINER(vbox_fonts), 5);
2761
gtk_container_add(GTK_CONTAINER(frame_fonts), vbox_fonts);
2765
hbox = gtk_hbox_new(FALSE, 5);
2766
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, FALSE, 0);
2768
label = gtk_label_new(_("Playlist: "));
2769
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2770
gtk_size_group_add_widget(label_size, label);
2771
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2773
entry_pl_font = gtk_entry_new();
2774
GTK_WIDGET_UNSET_FLAGS(entry_pl_font, GTK_CAN_FOCUS);
2775
gtk_box_pack_start(GTK_BOX(hbox), entry_pl_font, TRUE, TRUE, 0);
2776
gtk_editable_set_editable(GTK_EDITABLE(entry_pl_font), FALSE);
2778
if (strlen(options.playlist_font)) {
2779
gtk_entry_set_text(GTK_ENTRY(entry_pl_font), options.playlist_font);
2781
gtk_entry_set_text(GTK_ENTRY(entry_pl_font), DEFAULT_FONT_NAME);
2782
strcpy(options.playlist_font, DEFAULT_FONT_NAME);
2785
button_pl_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2786
gtk_box_pack_start(GTK_BOX(hbox), button_pl_font, FALSE, FALSE, 0);
2787
g_signal_connect (G_OBJECT (button_pl_font), "clicked",
2788
G_CALLBACK (playlist_font_select), NULL);
2790
/* music store font */
2792
hbox = gtk_hbox_new(FALSE, 5);
2793
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2795
label = gtk_label_new(_("Music Store: "));
2796
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2797
gtk_size_group_add_widget(label_size, label);
2798
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2800
entry_ms_font = gtk_entry_new();
2801
GTK_WIDGET_UNSET_FLAGS(entry_ms_font, GTK_CAN_FOCUS);
2802
gtk_box_pack_start(GTK_BOX(hbox), entry_ms_font, TRUE, TRUE, 0);
2803
gtk_editable_set_editable(GTK_EDITABLE(entry_ms_font), FALSE);
2805
if (strlen(options.browser_font)) {
2807
gtk_entry_set_text(GTK_ENTRY(entry_ms_font), options.browser_font);
2811
gtk_entry_set_text(GTK_ENTRY(entry_ms_font), DEFAULT_FONT_NAME);
2812
strcpy(options.browser_font, DEFAULT_FONT_NAME);
2816
button_ms_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2817
gtk_box_pack_start(GTK_BOX(hbox), button_ms_font, FALSE, FALSE, 0);
2818
g_signal_connect (G_OBJECT (button_ms_font), "clicked",
2819
G_CALLBACK (browser_font_select), NULL);
2822
/* big timer font */
2824
hbox = gtk_hbox_new(FALSE, 5);
2825
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2827
label = gtk_label_new(_("Big timer: "));
2828
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2829
gtk_size_group_add_widget(label_size, label);
2830
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2832
entry_bt_font = gtk_entry_new();
2833
GTK_WIDGET_UNSET_FLAGS(entry_bt_font, GTK_CAN_FOCUS);
2834
gtk_box_pack_start(GTK_BOX(hbox), entry_bt_font, TRUE, TRUE, 0);
2835
gtk_editable_set_editable(GTK_EDITABLE(entry_bt_font), FALSE);
2837
if (strlen(options.bigtimer_font)) {
2839
gtk_entry_set_text(GTK_ENTRY(entry_bt_font), options.bigtimer_font);
2843
gtk_entry_set_text(GTK_ENTRY(entry_bt_font), DEFAULT_FONT_NAME);
2844
strcpy(options.bigtimer_font, DEFAULT_FONT_NAME);
2848
button_bt_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2849
gtk_box_pack_start(GTK_BOX(hbox), button_bt_font, FALSE, FALSE, 0);
2850
g_signal_connect (G_OBJECT (button_bt_font), "clicked",
2851
G_CALLBACK (bigtimer_font_select), NULL);
2853
/* small timer font */
2855
hbox = gtk_hbox_new(FALSE, 5);
2856
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2858
label = gtk_label_new(_("Small timers: "));
2859
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2860
gtk_size_group_add_widget(label_size, label);
2861
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2863
entry_st_font = gtk_entry_new();
2864
GTK_WIDGET_UNSET_FLAGS(entry_st_font, GTK_CAN_FOCUS);
2865
gtk_box_pack_start(GTK_BOX(hbox), entry_st_font, TRUE, TRUE, 0);
2866
gtk_editable_set_editable(GTK_EDITABLE(entry_st_font), FALSE);
2868
if (strlen(options.smalltimer_font)) {
2870
gtk_entry_set_text(GTK_ENTRY(entry_st_font), options.smalltimer_font);
2874
gtk_entry_set_text(GTK_ENTRY(entry_st_font), DEFAULT_FONT_NAME);
2875
strcpy(options.smalltimer_font, DEFAULT_FONT_NAME);
2879
button_st_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2880
gtk_box_pack_start(GTK_BOX(hbox), button_st_font, FALSE, FALSE, 0);
2881
g_signal_connect (G_OBJECT (button_st_font), "clicked",
2882
G_CALLBACK (smalltimer_font_select), NULL);
2884
/* song title font */
2886
hbox = gtk_hbox_new(FALSE, 5);
2887
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2889
label = gtk_label_new(_("Song title: "));
2890
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2891
gtk_size_group_add_widget(label_size, label);
2892
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2894
entry_songt_font = gtk_entry_new();
2895
GTK_WIDGET_UNSET_FLAGS(entry_songt_font, GTK_CAN_FOCUS);
2896
gtk_box_pack_start(GTK_BOX(hbox), entry_songt_font, TRUE, TRUE, 0);
2897
gtk_editable_set_editable(GTK_EDITABLE(entry_songt_font), FALSE);
2899
if (strlen(options.songtitle_font)) {
2901
gtk_entry_set_text(GTK_ENTRY(entry_songt_font), options.songtitle_font);
2905
gtk_entry_set_text(GTK_ENTRY(entry_songt_font), DEFAULT_FONT_NAME);
2906
strcpy(options.songtitle_font, DEFAULT_FONT_NAME);
2910
button_songt_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2911
gtk_box_pack_start(GTK_BOX(hbox), button_songt_font, FALSE, FALSE, 0);
2912
g_signal_connect (G_OBJECT (button_songt_font), "clicked",
2913
G_CALLBACK (songtitle_font_select), NULL);
2915
/* song info font */
2917
hbox = gtk_hbox_new(FALSE, 5);
2918
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2920
label = gtk_label_new(_("Song info: "));
2921
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2922
gtk_size_group_add_widget(label_size, label);
2923
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2925
entry_si_font = gtk_entry_new();
2926
GTK_WIDGET_UNSET_FLAGS(entry_si_font, GTK_CAN_FOCUS);
2927
gtk_box_pack_start(GTK_BOX(hbox), entry_si_font, TRUE, TRUE, 0);
2928
gtk_editable_set_editable(GTK_EDITABLE(entry_si_font), FALSE);
2930
if (strlen(options.songinfo_font)) {
2932
gtk_entry_set_text(GTK_ENTRY(entry_si_font), options.songinfo_font);
2936
gtk_entry_set_text(GTK_ENTRY(entry_si_font), DEFAULT_FONT_NAME);
2937
strcpy(options.songinfo_font, DEFAULT_FONT_NAME);
2941
button_si_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2942
gtk_box_pack_start(GTK_BOX(hbox), button_si_font, FALSE, FALSE, 0);
2943
g_signal_connect (G_OBJECT (button_si_font), "clicked",
2944
G_CALLBACK (songinfo_font_select), NULL);
2946
/* statusbar font */
2948
hbox = gtk_hbox_new(FALSE, 5);
2949
gtk_box_pack_start(GTK_BOX(vbox_fonts), hbox, FALSE, TRUE, 0);
2951
label = gtk_label_new(_("Statusbar: "));
2952
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2953
gtk_size_group_add_widget(label_size, label);
2954
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2956
entry_sb_font = gtk_entry_new();
2957
GTK_WIDGET_UNSET_FLAGS(entry_sb_font, GTK_CAN_FOCUS);
2958
gtk_box_pack_start(GTK_BOX(hbox), entry_sb_font, TRUE, TRUE, 0);
2959
gtk_editable_set_editable(GTK_EDITABLE(entry_sb_font), FALSE);
2961
if (strlen(options.statusbar_font)) {
2963
gtk_entry_set_text(GTK_ENTRY(entry_sb_font), options.statusbar_font);
2967
gtk_entry_set_text(GTK_ENTRY(entry_sb_font), DEFAULT_FONT_NAME);
2968
strcpy(options.statusbar_font, DEFAULT_FONT_NAME);
2972
button_sb_font = gui_stock_label_button(_("Select"), GTK_STOCK_SELECT_FONT);
2973
gtk_box_pack_start(GTK_BOX(hbox), button_sb_font, FALSE, FALSE, 0);
2974
g_signal_connect (G_OBJECT (button_sb_font), "clicked",
2975
G_CALLBACK (statusbar_font_select), NULL);
2979
frame_colors = gtk_frame_new(_("Colors"));
2980
gtk_box_pack_start(GTK_BOX(vbox_appearance), frame_colors, FALSE, TRUE, 5);
2982
vbox_colors = gtk_vbox_new(FALSE, 3);
2983
gtk_container_set_border_width(GTK_CONTAINER(vbox_colors), 5);
2984
gtk_container_add(GTK_CONTAINER(frame_colors), vbox_colors);
2988
hbox = gtk_hbox_new(FALSE, 5);
2989
gtk_box_pack_start(GTK_BOX(vbox_colors), hbox, FALSE, TRUE, 0);
2991
label = gtk_label_new(_("Active song in playlist: "));
2992
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
2993
gtk_size_group_add_widget(label_size, label);
2994
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
2996
hbox_s = gtk_hbox_new(FALSE, 0);
2997
gtk_box_pack_start(GTK_BOX(hbox), hbox_s, TRUE, TRUE, 0);
2999
if (gdk_color_parse(options.activesong_color, &color) == FALSE) {
3001
color.red = play_list->style->fg[SELECTED].red;
3002
color.green = play_list->style->fg[SELECTED].green;
3003
color.blue = play_list->style->fg[SELECTED].blue;
3004
color.pixel = (gulong)((color.red & 0xff00)*256 + (color.green & 0xff00) + (color.blue & 0xff00)/256);
3007
color_picker = gtk_color_button_new_with_color (&color);
3008
gtk_widget_set_size_request(GTK_WIDGET(color_picker), 60, -1);
3009
gtk_box_pack_start(GTK_BOX(hbox), color_picker, FALSE, TRUE, 0);
3010
g_signal_connect (G_OBJECT (color_picker), "color-set",
3011
G_CALLBACK (color_selected), NULL);
3014
set_sensitive_part();
3016
/* end of notebook */
3018
gtk_widget_show_all(options_window);
3019
gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), current_notebook_page);
3021
if (aqualung_dialog_run(GTK_DIALOG(options_window)) == GTK_RESPONSE_ACCEPT) {
3022
options_window_accept();
3025
change_skin(options.skin);
3028
gtk_widget_destroy(options_window);
3033
#define SAVE_STR(Var) \
3034
xmlNewTextChild(root, NULL, (const xmlChar *) #Var, (xmlChar *) options.Var);
3036
#define SAVE_FONT(Font) \
3037
snprintf(str, MAX_FONTNAME_LEN, "%s", options.Font); \
3038
xmlNewTextChild(root, NULL, (const xmlChar *) #Font, (xmlChar *) str);
3040
#define SAVE_COLOR(Color) \
3041
snprintf(str, MAX_COLORNAME_LEN, "%s", options.Color); \
3042
xmlNewTextChild(root, NULL, (const xmlChar *) #Color, (xmlChar *) str);
3044
#define SAVE_INT(Var) \
3045
snprintf(str, 31, "%d", options.Var); \
3046
xmlNewTextChild(root, NULL, (const xmlChar *) #Var, (xmlChar *) str);
3048
#define SAVE_INT_ARRAY(Var, Idx) \
3049
snprintf(str, 31, "%d", options.Var[Idx]); \
3050
xmlNewTextChild(root, NULL, (const xmlChar *) #Var "_" #Idx, (xmlChar *) str);
3052
#define SAVE_INT_SH(Var) \
3053
snprintf(str, 31, "%d", options.Var##_shadow); \
3054
xmlNewTextChild(root, NULL, (const xmlChar *) #Var, (xmlChar *) str);
3056
#define SAVE_FLOAT(Var) \
3057
snprintf(str, 31, "%f", options.Var); \
3058
xmlNewTextChild(root, NULL, (const xmlChar *) #Var, (xmlChar *) str);
3069
char tmpname[MAXLEN];
3070
char config_file[MAXLEN];
3077
sprintf(config_file, "%s/config.xml", options.confdir);
3079
doc = xmlNewDoc((const xmlChar *) "1.0");
3080
root = xmlNewNode(NULL, (const xmlChar *) "aqualung_config");
3081
xmlDocSetRootElement(doc, root);
3085
SAVE_STR(default_param);
3086
SAVE_STR(title_format);
3089
SAVE_INT(ladspa_is_postfader);
3090
SAVE_INT(auto_save_playlist);
3091
SAVE_INT(show_rva_in_playlist);
3092
SAVE_INT(pl_statusbar_show_size);
3093
SAVE_INT(ms_statusbar_show_size);
3094
SAVE_INT(show_length_in_playlist);
3095
SAVE_INT(show_active_track_name_in_bold);
3096
SAVE_INT(enable_pl_rules_hint);
3097
SAVE_INT(enable_ms_rules_hint);
3098
SAVE_INT_SH(enable_ms_tree_icons);
3099
SAVE_INT(auto_use_meta_artist);
3100
SAVE_INT(auto_use_meta_record);
3101
SAVE_INT(auto_use_meta_track);
3102
SAVE_INT(auto_use_ext_meta_artist);
3103
SAVE_INT(auto_use_ext_meta_record);
3104
SAVE_INT(auto_use_ext_meta_track);
3105
SAVE_INT(enable_tooltips);
3106
SAVE_INT_SH(buttons_at_the_bottom);
3107
SAVE_INT(disable_buttons_relief);
3108
SAVE_INT_SH(simple_view_in_fx);
3109
SAVE_INT(show_sn_title);
3110
SAVE_INT(united_minimization);
3111
SAVE_INT(magnify_smaller_images);
3112
SAVE_INT(cover_width);
3113
SAVE_INT_SH(hide_comment_pane);
3114
SAVE_INT_SH(enable_mstore_toolbar);
3115
SAVE_INT_SH(enable_mstore_statusbar);
3116
SAVE_INT(autoexpand_stores);
3117
SAVE_INT(show_hidden);
3118
SAVE_INT(main_window_always_on_top);
3119
SAVE_INT(tags_tab_first);
3120
SAVE_INT(override_skin_settings);
3121
SAVE_INT(replaygain_tag_to_use);
3124
SAVE_INT(rva_is_enabled);
3126
SAVE_FLOAT(rva_refvol);
3127
SAVE_FLOAT(rva_steepness);
3128
SAVE_INT(rva_use_averaging);
3129
SAVE_INT(rva_use_linear_thresh);
3130
SAVE_FLOAT(rva_avg_linear_thresh);
3131
SAVE_FLOAT(rva_avg_stddev_thresh);
3132
SAVE_INT(main_pos_x);
3133
SAVE_INT(main_pos_y);
3134
SAVE_INT(main_size_x);
3136
if (options.playlist_is_embedded && !options.playlist_is_embedded_shadow && options.playlist_on) {
3137
snprintf(str, 31, "%d", options.main_size_y - playlist_window->allocation.height - 6);
3139
snprintf(str, 31, "%d", options.main_size_y);
3141
xmlNewTextChild(root, NULL, (const xmlChar *) "main_size_y", (xmlChar *) str);
3143
SAVE_INT(browser_pos_x);
3144
SAVE_INT(browser_pos_y);
3145
SAVE_INT(browser_size_x);
3146
SAVE_INT(browser_size_y);
3147
SAVE_INT(browser_on);
3148
SAVE_INT(browser_paned_pos);
3149
SAVE_INT(playlist_pos_x);
3150
SAVE_INT(playlist_pos_y);
3151
SAVE_INT(playlist_size_x);
3152
SAVE_INT(playlist_size_y);
3153
SAVE_INT(playlist_on);
3154
SAVE_INT_SH(playlist_is_embedded);
3155
SAVE_INT(playlist_is_tree);
3156
SAVE_INT(album_shuffle_mode);
3157
SAVE_INT_SH(enable_playlist_statusbar);
3158
SAVE_FONT(browser_font);
3159
SAVE_FONT(playlist_font);
3160
SAVE_FONT(bigtimer_font);
3161
SAVE_FONT(smalltimer_font);
3162
SAVE_FONT(songtitle_font);
3163
SAVE_FONT(songinfo_font);
3164
SAVE_FONT(statusbar_font);
3165
SAVE_COLOR(activesong_color);
3166
SAVE_INT(repeat_on);
3167
SAVE_INT(repeat_all_on);
3168
SAVE_INT(shuffle_on);
3169
SAVE_INT_ARRAY(time_idx, 0);
3170
SAVE_INT_ARRAY(time_idx, 1);
3171
SAVE_INT_ARRAY(time_idx, 2);
3172
SAVE_INT_ARRAY(plcol_idx, 0);
3173
SAVE_INT_ARRAY(plcol_idx, 1);
3174
SAVE_INT_ARRAY(plcol_idx, 2);
3175
SAVE_INT(search_pl_flags);
3176
SAVE_INT(search_ms_flags);
3177
SAVE_INT(cdda_drive_speed);
3178
SAVE_INT(cdda_paranoia_mode);
3179
SAVE_INT(cdda_paranoia_maxretries);
3180
SAVE_INT(cdda_force_drive_rescan);
3181
SAVE_INT(cdda_add_to_playlist);
3182
SAVE_INT(cdda_remove_from_playlist);
3183
SAVE_STR(cddb_server);
3184
SAVE_INT(cddb_timeout);
3185
SAVE_STR(cddb_email);
3186
SAVE_STR(cddb_local);
3187
SAVE_INT(cddb_cache_only);
3188
SAVE_INT(cddb_use_http);
3189
SAVE_INT(cddb_use_proxy);
3190
SAVE_STR(cddb_proxy);
3191
SAVE_INT(cddb_proxy_port);
3192
SAVE_FLOAT(loop_range_start);
3193
SAVE_FLOAT(loop_range_end);
3196
while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(ms_pathlist_store), &iter, NULL, i++)) {
3198
gtk_tree_model_get(GTK_TREE_MODEL(ms_pathlist_store), &iter, 0, &path, -1);
3199
utf8 = g_locale_to_utf8(path, -1, NULL, NULL, NULL);
3200
xmlNewTextChild(root, NULL, (const xmlChar *) "music_store", (xmlChar *) utf8);
3206
sprintf(tmpname, "%s/config.xml.temp", options.confdir);
3207
xmlSaveFormatFile(tmpname, doc, 1);
3210
if ((fin = fopen(config_file, "rt")) == NULL) {
3211
fprintf(stderr, "Error opening file: %s\n", config_file);
3214
if ((fout = fopen(tmpname, "rt")) == NULL) {
3215
fprintf(stderr, "Error opening file: %s\n", tmpname);
3220
while (((c = fgetc(fin)) != EOF) && ((d = fgetc(fout)) != EOF)) {
3224
unlink(config_file);
3225
rename(tmpname, config_file);
3236
#define LOAD_STR(Var) \
3237
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Var))) { \
3238
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3240
strncpy(options.Var, (char *) key, MAXLEN-1); \
3244
#define LOAD_FONT(Font) \
3245
if ((!xmlStrcmp(cur->name, (const xmlChar *)#Font))) { \
3246
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3248
strncpy(options.Font, (char *) key, MAX_FONTNAME_LEN-1); \
3252
#define LOAD_COLOR(Color) \
3253
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Color))) { \
3254
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3256
strncpy(options.Color, (char *) key, MAX_COLORNAME_LEN-1); \
3260
#define LOAD_INT(Var) \
3261
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Var))) { \
3262
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3264
sscanf((char *) key, "%d", &options.Var); \
3268
#define LOAD_INT_ARRAY(Var, Idx) \
3269
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Var "_" #Idx))) { \
3270
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3272
sscanf((char *) key, "%d", options.Var + Idx); \
3276
#define LOAD_INT_SH(Var) \
3277
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Var))) { \
3278
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3279
if (key != NULL) { \
3280
sscanf((char *) key, "%d", &options.Var); \
3281
options.Var##_shadow = options.Var; \
3286
#define LOAD_FLOAT(Var) \
3287
if ((!xmlStrcmp(cur->name, (const xmlChar *) #Var))) { \
3288
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); \
3289
if (key != NULL) { \
3290
options.Var = convf((char *) key); \
3303
char config_file[MAXLEN];
3307
sprintf(config_file, "%s/config.xml", options.confdir);
3309
if ((f = fopen(config_file, "rt")) == NULL) {
3310
/* no warning -- done that in core.c::load_default_cl() */
3311
doc = xmlNewDoc((const xmlChar *) "1.0");
3312
root = xmlNewNode(NULL, (const xmlChar *) "aqualung_config");
3313
xmlDocSetRootElement(doc, root);
3314
xmlSaveFormatFile(config_file, doc, 1);
3320
doc = xmlParseFile(config_file);
3322
fprintf(stderr, "An XML error occured while parsing %s\n", config_file);
3326
cur = xmlDocGetRootElement(doc);
3328
fprintf(stderr, "load_config: empty XML document\n");
3333
if (xmlStrcmp(cur->name, (const xmlChar *)"aqualung_config")) {
3334
fprintf(stderr, "load_config: XML document of the wrong type, "
3335
"root node != aqualung_config\n");
3341
options.src_type = 4;
3345
options.repeat_on = 0;
3346
options.repeat_all_on = 0;
3347
options.shuffle_on = 0;
3349
options.loop_range_start = 0.0f;
3350
options.loop_range_end = 1.0f;
3352
options.search_pl_flags = 0;
3353
options.search_ms_flags = SEARCH_F_AN | SEARCH_F_RT | SEARCH_F_TT | SEARCH_F_CO;
3355
options.browser_paned_pos = 400;
3357
options.skin[0] = '\0';
3359
options.default_param[0] = '\0';
3360
options.title_format[0] = '\0';
3361
options.enable_tooltips = 1;
3362
options.show_sn_title = 1;
3363
options.united_minimization = 1;
3364
options.buttons_at_the_bottom = options.buttons_at_the_bottom_shadow = 0;
3365
options.playlist_is_embedded = options.playlist_is_embedded_shadow = 1;
3366
options.playlist_is_tree = 1;
3368
options.enable_mstore_statusbar = options.enable_mstore_statusbar_shadow = 1;
3369
options.enable_mstore_toolbar = options.enable_mstore_toolbar_shadow = 1;
3370
options.enable_ms_tree_icons = options.enable_ms_tree_icons_shadow = 1;
3371
options.ms_statusbar_show_size = 1;
3373
options.cover_width = 2;
3375
options.autoexpand_stores = 1;
3377
options.auto_save_playlist = 1;
3378
options.show_length_in_playlist = 1;
3379
options.enable_playlist_statusbar = options.enable_playlist_statusbar_shadow = 1;
3380
options.pl_statusbar_show_size = 1;
3382
options.rva_refvol = -12.0f;
3383
options.rva_steepness = 1.0f;
3384
options.rva_use_averaging = 1;
3385
options.rva_use_linear_thresh = 0;
3386
options.rva_avg_linear_thresh = 3.0f;
3387
options.rva_avg_stddev_thresh = 2.0f;
3389
options.auto_use_ext_meta_artist = 1;
3390
options.auto_use_ext_meta_record = 1;
3391
options.auto_use_ext_meta_track = 1;
3393
options.cdda_drive_speed = 4;
3394
options.cdda_paranoia_mode = 0; /* no paranoia */
3395
options.cdda_paranoia_maxretries = 20;
3396
options.cdda_force_drive_rescan = 0;
3398
options.cddb_server[0] = '\0';
3399
options.cddb_email[0] = '\0';
3400
options.cddb_local[0] = '\0';
3401
options.cddb_proxy[0] = '\0';
3402
options.cddb_timeout = 10;
3404
options.time_idx[0] = 0;
3405
options.time_idx[1] = 1;
3406
options.time_idx[2] = 2;
3408
options.plcol_idx[0] = 0;
3409
options.plcol_idx[1] = 1;
3410
options.plcol_idx[2] = 2;
3412
ms_pathlist_store = gtk_list_store_new(3,
3413
G_TYPE_STRING, /* path */
3414
G_TYPE_STRING, /* displayed name */
3415
G_TYPE_STRING); /* state (rw, r, unreachable) */
3417
cur = cur->xmlChildrenNode;
3418
while (cur != NULL) {
3420
LOAD_STR(default_param);
3421
LOAD_STR(title_format);
3424
if (!src_type_parsed) {
3428
LOAD_INT(ladspa_is_postfader);
3429
LOAD_INT(auto_save_playlist);
3430
LOAD_INT(auto_use_meta_artist);
3431
LOAD_INT(auto_use_meta_record);
3432
LOAD_INT(auto_use_meta_track);
3433
LOAD_INT(auto_use_ext_meta_artist);
3434
LOAD_INT(auto_use_ext_meta_record);
3435
LOAD_INT(auto_use_ext_meta_track);
3436
LOAD_INT(show_rva_in_playlist);
3437
LOAD_INT(pl_statusbar_show_size);
3438
LOAD_INT(ms_statusbar_show_size);
3439
LOAD_INT(show_length_in_playlist);
3440
LOAD_INT(show_active_track_name_in_bold);
3441
LOAD_INT(enable_pl_rules_hint);
3442
LOAD_INT(enable_ms_rules_hint);
3443
LOAD_INT_SH(enable_ms_tree_icons);
3444
LOAD_INT(enable_tooltips);
3445
LOAD_INT_SH(buttons_at_the_bottom);
3446
LOAD_INT(disable_buttons_relief);
3447
LOAD_INT_SH(simple_view_in_fx);
3448
LOAD_INT(show_sn_title);
3449
LOAD_INT(united_minimization);
3450
LOAD_INT(magnify_smaller_images);
3451
LOAD_INT(cover_width);
3452
LOAD_INT_SH(hide_comment_pane);
3453
LOAD_INT_SH(enable_mstore_toolbar);
3454
LOAD_INT_SH(enable_mstore_statusbar);
3455
LOAD_INT(autoexpand_stores);
3456
LOAD_INT(show_hidden);
3457
LOAD_INT(main_window_always_on_top);
3458
LOAD_INT(tags_tab_first);
3459
LOAD_INT(override_skin_settings);
3460
LOAD_INT(replaygain_tag_to_use);
3463
LOAD_INT(rva_is_enabled);
3465
LOAD_FLOAT(rva_refvol);
3466
LOAD_FLOAT(rva_steepness);
3467
LOAD_INT(rva_use_averaging);
3468
LOAD_INT(rva_use_linear_thresh);
3469
LOAD_FLOAT(rva_avg_linear_thresh);
3470
LOAD_FLOAT(rva_avg_stddev_thresh);
3471
LOAD_INT(main_pos_x);
3472
LOAD_INT(main_pos_y);
3473
LOAD_INT(main_size_x);
3474
LOAD_INT(main_size_y);
3475
LOAD_INT(browser_pos_x);
3476
LOAD_INT(browser_pos_y);
3477
LOAD_INT(browser_size_x);
3478
LOAD_INT(browser_size_y);
3479
LOAD_INT(browser_on);
3480
LOAD_INT(browser_paned_pos);
3481
LOAD_INT(playlist_pos_x);
3482
LOAD_INT(playlist_pos_y);
3483
LOAD_INT(playlist_size_x);
3484
LOAD_INT(playlist_size_y);
3485
LOAD_INT(playlist_on);
3486
LOAD_INT_SH(playlist_is_embedded);
3487
LOAD_INT(playlist_is_tree);
3488
LOAD_INT(album_shuffle_mode);
3489
LOAD_INT_SH(enable_playlist_statusbar);
3490
LOAD_FONT(browser_font);
3491
LOAD_FONT(playlist_font);
3492
LOAD_FONT(bigtimer_font);
3493
LOAD_FONT(smalltimer_font);
3494
LOAD_FONT(songtitle_font);
3495
LOAD_FONT(songinfo_font);
3496
LOAD_FONT(statusbar_font);
3497
LOAD_COLOR(activesong_color);
3498
LOAD_INT(repeat_on);
3499
LOAD_INT(repeat_all_on);
3500
LOAD_INT(shuffle_on);
3501
LOAD_INT_ARRAY(time_idx, 0);
3502
LOAD_INT_ARRAY(time_idx, 1);
3503
LOAD_INT_ARRAY(time_idx, 2);
3504
LOAD_INT_ARRAY(plcol_idx, 0);
3505
LOAD_INT_ARRAY(plcol_idx, 1);
3506
LOAD_INT_ARRAY(plcol_idx, 2);
3507
LOAD_INT(search_pl_flags);
3508
LOAD_INT(search_ms_flags);
3509
LOAD_INT(cdda_drive_speed);
3510
LOAD_INT(cdda_paranoia_mode);
3511
LOAD_INT(cdda_paranoia_maxretries);
3512
LOAD_INT(cdda_force_drive_rescan);
3513
LOAD_INT(cdda_add_to_playlist);
3514
LOAD_INT(cdda_remove_from_playlist);
3515
LOAD_STR(cddb_server);
3516
LOAD_INT(cddb_timeout);
3517
LOAD_STR(cddb_email);
3518
LOAD_STR(cddb_local);
3519
LOAD_INT(cddb_cache_only);
3520
LOAD_INT(cddb_use_http);
3521
LOAD_STR(cddb_proxy);
3522
LOAD_INT(cddb_proxy_port);
3523
LOAD_INT(cddb_use_proxy);
3524
LOAD_FLOAT(loop_range_start);
3525
LOAD_FLOAT(loop_range_end);
3527
if ((!xmlStrcmp(cur->name, (const xmlChar *)"music_store"))) {
3528
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
3534
snprintf(path, MAXLEN - 1, "%s", (char *)key);
3535
ppath = g_locale_from_utf8(path, -1, NULL, NULL, NULL);
3537
append_ms_pathlist(ppath, path);
3551
// vim: shiftwidth=8:tabstop=8:softtabstop=8 :