23 #include <gdk/gdkkeysyms.h>
85 {
"audio.png",
N_(
"Audio")},
86 {
"connectivity.png",
N_(
"Network")},
87 {
"playlist.png",
N_(
"Playlist")},
88 {
"plugins.png",
N_(
"Plugins")},
94 {
N_(
"Artist") ,
"${artist}" },
95 {
N_(
"Album") ,
"${album}" },
96 {
N_(
"Title") ,
"${title}" },
97 {
N_(
"Tracknumber"),
"${track-number}" },
98 {
N_(
"Genre") ,
"${genre}" },
99 {
N_(
"Filename") ,
"${file-name}" },
100 {
N_(
"Filepath") ,
"${file-path}" },
101 {
N_(
"Date") ,
"${date}" },
102 {
N_(
"Year") ,
"${year}" },
103 {
N_(
"Comment") ,
"${comment}" },
104 {
N_(
"Codec") ,
"${codec}" },
105 {
N_(
"Quality") ,
"${quality}" },
112 {GUESS_REGION_AR,
N_(
"Arabic")},
113 {GUESS_REGION_BL,
N_(
"Baltic")},
114 {GUESS_REGION_CN,
N_(
"Chinese")},
115 {GUESS_REGION_GR,
N_(
"Greek")},
116 {GUESS_REGION_HW,
N_(
"Hebrew")},
117 {GUESS_REGION_JP,
N_(
"Japanese")},
118 {GUESS_REGION_KR,
N_(
"Korean")},
119 {GUESS_REGION_PL,
N_(
"Polish")},
120 {GUESS_REGION_RU,
N_(
"Russian")},
121 {GUESS_REGION_TW,
N_(
"Taiwanese")},
122 {GUESS_REGION_TR,
N_(
"Turkish")}};
126 { GINT_TO_POINTER(16),
"16" },
127 { GINT_TO_POINTER(24),
"24" },
128 { GINT_TO_POINTER(32),
"32" },
129 {GINT_TO_POINTER (0),
"Floating point"},
150 .cfg_type =
VALUE_INT, .cname =
"output_bit_depth",
153 .cfg_type =
VALUE_INT, .cname =
"output_buffer_size",
154 .data = {.spin_btn = {100, 10000, 1000,
N_(
"ms")}}},
162 .cfg_type =
VALUE_BOOLEAN, .cname =
"enable_clipping_prevention"},
165 .cfg_type =
VALUE_FLOAT, .cname =
"replay_gain_preamp",
166 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}},
169 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}}};
178 .data = {.entry = {.password =
TRUE}}}};
195 .data = {.combo = {chardet_detector_presets,
196 G_N_ELEMENTS (chardet_detector_presets),
TRUE}}},
199 .cname =
"chardet_fallback", .child =
TRUE}};
204 .cfg_type =
VALUE_BOOLEAN, .cname =
"resume_playback_on_startup"},
219 #define TITLESTRING_NPRESETS 6
223 "${?artist:${artist} - }${title}",
224 "${?artist:${artist} - }${?album:${album} - }${title}",
225 "${?artist:${artist} - }${?album:${album} - }${?track-number:${track-number}. }${title}",
226 "${?artist:${artist} }${?album:[ ${album} ] }${?artist:- }${?track-number:${track-number}. }${title}",
227 "${?album:${album} - }${title}"};
231 N_(
"ARTIST - TITLE"),
232 N_(
"ARTIST - ALBUM - TITLE"),
233 N_(
"ARTIST - ALBUM - TRACK. TITLE"),
234 N_(
"ARTIST [ ALBUM ] - TRACK. TITLE"),
235 N_(
"ALBUM - TITLE")};
241 GtkTreeSelection * selection)
247 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
251 gtk_notebook_set_current_page(notebook, index);
259 gtk_editable_insert_text(editable, text, strlen(text), pos);
266 const char *separator =
" - ";
267 int item = GPOINTER_TO_INT(data);
286 GtkMenu * menu =
data;
299 if (gtk_combo_box_get_active (cbox) != preset)
300 gtk_combo_box_set_active (cbox, preset);
305 const char *
format = gtk_entry_get_text (entry);
313 int preset = gtk_combo_box_get_active (cbox);
323 * (
bool_t *) widget->cfg = value;
324 else if (widget->cname)
325 set_bool (widget->csect, widget->cname, value);
327 if (widget->callback)
336 return * (
bool_t *) widget->cfg;
337 else if (widget->cname)
338 return get_bool (widget->csect, widget->cname);
345 g_return_if_fail (widget->cfg_type ==
VALUE_INT);
348 * (
int *) widget->cfg = value;
349 else if (widget->cname)
350 set_int (widget->csect, widget->cname, value);
352 if (widget->callback)
358 g_return_val_if_fail (widget->cfg_type ==
VALUE_INT, 0);
361 return * (
int *) widget->cfg;
362 else if (widget->cname)
363 return get_int (widget->csect, widget->cname);
370 g_return_if_fail (widget->cfg_type ==
VALUE_FLOAT);
373 * (
float *) widget->cfg = value;
374 else if (widget->cname)
375 set_double (widget->csect, widget->cname, value);
377 if (widget->callback)
383 g_return_val_if_fail (widget->cfg_type ==
VALUE_FLOAT, 0);
386 return * (
float *) widget->cfg;
387 else if (widget->cname)
388 return get_double (widget->csect, widget->cname);
399 g_free (* (
char * *) widget->cfg);
400 * (
char * *) widget->cfg = g_strdup (value);
402 else if (widget->cname)
403 set_string (widget->csect, widget->cname, value);
405 if (widget->callback)
414 return g_strdup (* (
char * *) widget->cfg);
415 else if (widget->cname)
416 return get_string (widget->csect, widget->cname);
432 gtk_widget_destroy(GTK_WIDGET(settings->data));
445 if (settings->cancel)
448 gtk_widget_destroy(GTK_WIDGET(settings->data));
453 gtk_widget_destroy(widget);
455 if (settings->cleanup)
458 settings->data =
NULL;
464 GtkWidget *vbox, *bbox, *ok, *apply, *cancel;
466 if (settings->data !=
NULL) {
467 gtk_widget_show(GTK_WIDGET(settings->data));
474 const char * d = settings->domain;
477 printf (
"WARNING: PluginPreferences window with title \"%s\" did not "
478 "declare its gettext domain. Text may not be translated correctly.\n",
480 d =
"audacious-plugins";
483 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
484 gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
487 gtk_window_set_title ((GtkWindow *) window, dgettext (d, settings->title));
489 gtk_container_set_border_width(GTK_CONTAINER(window), 10);
490 g_signal_connect(G_OBJECT(window),
"destroy",
493 vbox = gtk_vbox_new(
FALSE, 10);
495 settings->n_prefs, d);
496 gtk_container_add(GTK_CONTAINER(window), vbox);
498 bbox = gtk_hbutton_box_new();
499 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
500 gtk_box_set_spacing(GTK_BOX(bbox), 5);
501 gtk_box_pack_start(GTK_BOX(vbox), bbox,
FALSE,
FALSE, 0);
503 ok = gtk_button_new_from_stock(GTK_STOCK_OK);
504 g_signal_connect(G_OBJECT(ok),
"clicked",
506 gtk_box_pack_start(GTK_BOX(bbox), ok,
TRUE,
TRUE, 0);
508 gtk_widget_grab_default(ok);
510 apply = gtk_button_new_from_stock(GTK_STOCK_APPLY);
511 g_signal_connect(G_OBJECT(apply),
"clicked",
513 gtk_box_pack_start(GTK_BOX(bbox), apply,
TRUE,
TRUE, 0);
515 cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
516 g_signal_connect(G_OBJECT(cancel),
"clicked",
518 gtk_box_pack_start(GTK_BOX(bbox), cancel,
TRUE,
TRUE, 0);
520 gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(
prefswin));
521 gtk_widget_show_all(window);
522 settings->data = (gpointer)window;
529 gtk_widget_destroy (p->data);
536 widget_set_int (widget, gtk_spin_button_get_value_as_int (button));
547 GtkCellRenderer *renderer;
548 GtkTreeViewColumn *column;
549 GtkTreeSelection *selection;
555 column = gtk_tree_view_column_new();
556 gtk_tree_view_column_set_title(column,
_(
"Category"));
557 gtk_tree_view_append_column(treeview, column);
558 gtk_tree_view_column_set_spacing(column, 2);
560 renderer = gtk_cell_renderer_pixbuf_new();
561 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
562 gtk_tree_view_column_set_attributes(column, renderer,
"pixbuf", 0,
NULL);
564 renderer = gtk_cell_renderer_text_new();
565 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
566 gtk_tree_view_column_set_attributes(column, renderer,
"text", 1,
NULL);
568 g_object_set ((GObject *) renderer,
"wrap-width", 96,
"wrap-mode",
569 PANGO_WRAP_WORD_CHAR,
NULL);
572 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
573 gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
577 char * path = g_strdup_printf (
"%s/images/%s",
579 img = gdk_pixbuf_new_from_file (path,
NULL);
582 gtk_list_store_append(store, &iter);
583 gtk_list_store_set(store, &iter,
591 selection = gtk_tree_view_get_selection(treeview);
593 g_signal_connect_swapped(selection,
"changed",
674 GtkWidget * child = g_object_get_data ((GObject *) button,
"child");
676 gtk_widget_set_sensitive (child, active);
684 gtk_toggle_button_set_active ((GtkToggleButton *) button,
widget_get_bool (widget));
695 int position = gtk_combo_box_get_active (combobox);
696 widget_set_int (widget, GPOINTER_TO_INT (widget->data.combo.elements[position].value));
701 int position = gtk_combo_box_get_active (combobox);
705 static void fill_cbox (GtkWidget * combobox, PreferencesWidget * widget,
const char * domain)
707 for (
int i = 0; i < widget->data.combo.n_elements; i ++)
709 dgettext (domain, widget->data.combo.elements[i].label));
711 switch (widget->cfg_type)
716 for (
int i = 0; i < widget->data.combo.n_elements; i++)
718 if (GPOINTER_TO_INT (widget->data.combo.elements[i].value) == ivalue)
720 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
731 for(
int i = 0; i < widget->data.combo.n_elements; i++)
733 if (value && ! strcmp (widget->data.combo.elements[i].value, value))
735 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
756 GtkWidget *label_cover_retrieve;
757 GtkWidget *label_cover_search;
758 GtkWidget *label_exclude;
759 GtkWidget *label_include;
760 GtkWidget *label_search_depth;
761 GtkWidget *label_misc;
762 GtkWidget *label_delay;
764 GtkAdjustment *recurse_for_cover_depth_adj;
765 GtkAdjustment *delay_adj;
766 GtkWidget *alignment;
769 GtkWidget *hbuttonbox;
770 GtkWidget *btn_cancel;
776 gtk_window_set_position(GTK_WINDOW(
filepopup_settings), GTK_WIN_POS_CENTER_ON_PARENT);
778 gtk_window_set_type_hint(GTK_WINDOW(
filepopup_settings), GDK_WINDOW_TYPE_HINT_DIALOG);
781 vbox = gtk_vbox_new(
FALSE, 12);
784 label_cover_retrieve = gtk_label_new(
_(
"<b>Cover image retrieve</b>"));
785 gtk_box_pack_start(GTK_BOX(vbox), label_cover_retrieve,
FALSE,
FALSE, 0);
786 gtk_label_set_use_markup(GTK_LABEL(label_cover_retrieve),
TRUE);
787 gtk_misc_set_alignment(GTK_MISC(label_cover_retrieve), 0, 0.5);
789 label_cover_search = gtk_label_new(
_(
"While searching for the album's cover, Audacious looks for certain words in the filename. You can specify those words in the lists below, separated using commas."));
790 gtk_box_pack_start(GTK_BOX(vbox), label_cover_search,
FALSE,
FALSE, 0);
791 gtk_label_set_line_wrap(GTK_LABEL(label_cover_search),
TRUE);
792 gtk_misc_set_alignment(GTK_MISC(label_cover_search), 0, 0);
793 gtk_misc_set_padding(GTK_MISC(label_cover_search), 12, 0);
795 table = gtk_table_new(2, 2,
FALSE);
796 gtk_box_pack_start(GTK_BOX(vbox), table,
FALSE,
FALSE, 0);
797 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
798 gtk_table_set_col_spacings(GTK_TABLE(table), 4);
802 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
803 (GtkAttachOptions) (0), 0, 0);
806 label_exclude = gtk_label_new(
_(
"Exclude:"));
807 gtk_table_attach(GTK_TABLE(table), label_exclude, 0, 1, 1, 2,
808 (GtkAttachOptions) (0),
809 (GtkAttachOptions) (0), 0, 0);
810 gtk_misc_set_alignment(GTK_MISC(label_exclude), 0, 0.5);
811 gtk_misc_set_padding(GTK_MISC(label_exclude), 12, 0);
813 label_include = gtk_label_new(
_(
"Include:"));
814 gtk_table_attach(GTK_TABLE(table), label_include, 0, 1, 0, 1,
815 (GtkAttachOptions) (0),
816 (GtkAttachOptions) (0), 0, 0);
817 gtk_misc_set_alignment(GTK_MISC(label_include), 0, 0.5);
818 gtk_misc_set_padding(GTK_MISC(label_include), 12, 0);
822 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
823 (GtkAttachOptions) (0), 0, 0);
826 alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
827 gtk_box_pack_start(GTK_BOX(vbox), alignment,
TRUE,
TRUE, 0);
828 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0);
830 filepopup_recurse = gtk_check_button_new_with_mnemonic(
_(
"Recursively search for cover"));
833 alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
834 gtk_box_pack_start(GTK_BOX(vbox), alignment,
FALSE,
FALSE, 0);
835 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 45, 0);
840 label_search_depth = gtk_label_new(
_(
"Search depth: "));
842 gtk_misc_set_padding(GTK_MISC(label_search_depth), 4, 0);
844 recurse_for_cover_depth_adj = (GtkAdjustment *) gtk_adjustment_new (0, 0,
850 alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
851 gtk_box_pack_start(GTK_BOX(vbox), alignment,
TRUE,
TRUE, 0);
852 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0);
857 label_misc = gtk_label_new(
_(
"<b>Miscellaneous</b>"));
858 gtk_box_pack_start(GTK_BOX(vbox), label_misc,
FALSE,
FALSE, 0);
859 gtk_label_set_use_markup(GTK_LABEL(label_misc),
TRUE);
860 gtk_misc_set_alignment(GTK_MISC(label_misc), 0, 0.5);
862 alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
863 gtk_box_pack_start(GTK_BOX(vbox), alignment,
FALSE,
FALSE, 0);
864 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0);
869 alignment = gtk_alignment_new(0, 0.5, 1, 1);
870 gtk_box_pack_start(GTK_BOX(vbox), alignment,
TRUE,
TRUE, 0);
871 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0);
873 hbox = gtk_hbox_new(
FALSE, 0);
874 gtk_container_add(GTK_CONTAINER(alignment), hbox);
876 label_delay = gtk_label_new(
_(
"Delay until filepopup comes up: "));
877 gtk_box_pack_start(GTK_BOX(hbox), label_delay,
TRUE,
TRUE, 0);
878 gtk_misc_set_alignment(GTK_MISC(label_delay), 0, 0.5);
879 gtk_misc_set_padding(GTK_MISC(label_delay), 12, 0);
881 delay_adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 100, 1, 10, 0);
882 filepopup_delay = gtk_spin_button_new(GTK_ADJUSTMENT(delay_adj), 1, 0);
886 hbuttonbox = gtk_hbutton_box_new();
887 gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox,
FALSE,
FALSE, 0);
888 gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END);
889 gtk_box_set_spacing(GTK_BOX(hbuttonbox), 6);
891 btn_cancel = gtk_button_new_from_stock(
"gtk-cancel");
892 gtk_container_add(GTK_CONTAINER(hbuttonbox), btn_cancel);
894 btn_ok = gtk_button_new_from_stock(
"gtk-ok");
895 gtk_container_add(GTK_CONTAINER(hbuttonbox), btn_ok);
899 G_CALLBACK(gtk_widget_hide_on_delete),
901 g_signal_connect(G_OBJECT(btn_cancel),
"clicked",
904 g_signal_connect(G_OBJECT(btn_ok),
"clicked",
908 gtk_widget_grab_default(btn_ok);
909 gtk_widget_show_all(vbox);
913 label_pre, GtkWidget * * spin_btn, GtkWidget * * label_past,
const char *
918 * label_pre = gtk_label_new (dgettext (domain, widget->label));
920 *spin_btn = gtk_spin_button_new_with_range(widget->data.spin_btn.min,
921 widget->data.spin_btn.max,
922 widget->data.spin_btn.step);
926 gtk_widget_set_tooltip_text (* spin_btn, dgettext (domain,
929 if (widget->data.spin_btn.right_label) {
930 * label_past = gtk_label_new (dgettext (domain,
931 widget->data.spin_btn.right_label));
934 switch (widget->cfg_type)
937 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_int (widget));
941 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_double (widget));
942 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
951 GtkWidget * * font_btn,
const char * domain)
953 *font_btn = gtk_font_button_new();
954 gtk_font_button_set_use_font(GTK_FONT_BUTTON(*font_btn),
TRUE);
955 gtk_font_button_set_use_size(GTK_FONT_BUTTON(*font_btn),
TRUE);
957 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
958 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
959 gtk_misc_set_alignment(GTK_MISC(*label), 1, 0.5);
960 gtk_label_set_justify(GTK_LABEL(*label), GTK_JUSTIFY_RIGHT);
961 gtk_label_set_mnemonic_widget(GTK_LABEL(*label), *font_btn);
964 if (widget->data.font_btn.title)
965 gtk_font_button_set_title (GTK_FONT_BUTTON (* font_btn),
966 dgettext (domain, widget->data.font_btn.title));
971 gtk_font_button_set_font_name ((GtkFontButton *) * font_btn, name);
978 static void create_entry (PreferencesWidget * widget, GtkWidget * * label,
979 GtkWidget * *
entry,
const char * domain)
981 *entry = gtk_entry_new();
982 gtk_entry_set_visibility(GTK_ENTRY(*entry), !widget->data.entry.password);
985 * label = gtk_label_new (dgettext (domain, widget->label));
988 gtk_widget_set_tooltip_text (* entry, dgettext (domain, widget->tooltip));
995 gtk_entry_set_text ((GtkEntry *) * entry, value);
999 g_signal_connect (* entry,
"changed", (GCallback)
on_entry_changed, widget);
1004 GtkWidget * * icon,
const char * domain)
1006 if (widget->data.label.stock_id)
1007 *icon = gtk_image_new_from_stock(widget->data.label.stock_id, GTK_ICON_SIZE_BUTTON);
1009 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
1010 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
1012 if (widget->data.label.single_line ==
FALSE)
1013 gtk_label_set_line_wrap(GTK_LABEL(*label),
TRUE);
1015 gtk_misc_set_alignment(GTK_MISC(*label), 0, 0.5);
1018 static void create_cbox (PreferencesWidget * widget, GtkWidget * * label,
1019 GtkWidget * * combobox,
const char * domain)
1023 if (widget->label) {
1024 * label = gtk_label_new (dgettext (domain, widget->label));
1031 amt,
const char * domain)
1034 GtkWidget *widget_left, *widget_middle, *widget_right;
1035 GtkAttachOptions middle_policy = (GtkAttachOptions) (0);
1037 for (x = 0; x < amt; ++x) {
1038 widget_left = widget_middle = widget_right =
NULL;
1039 switch (elements[x].
type) {
1042 & widget_middle, & widget_right, domain);
1043 middle_policy = (GtkAttachOptions) (GTK_FILL);
1046 create_label (& elements[x], & widget_middle, & widget_left,
1048 middle_policy = (GtkAttachOptions) (GTK_FILL);
1053 middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
1056 create_entry (& elements[x], & widget_left, & widget_middle,
1058 middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
1061 create_cbox (& elements[x], & widget_left, & widget_middle,
1063 middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
1066 g_warning(
"Unsupported widget type %d in table", elements[x].type);
1070 gtk_table_attach(GTK_TABLE (table), widget_left, 0, 1, x, x+1,
1071 (GtkAttachOptions) (0),
1072 (GtkAttachOptions) (0), 0, 0);
1075 gtk_table_attach(GTK_TABLE(table), widget_middle, 1, widget_right ? 2 : 3, x, x+1,
1077 (GtkAttachOptions) (0), 4, 0);
1080 gtk_table_attach(GTK_TABLE(table), widget_right, 2, 3, x, x+1,
1081 (GtkAttachOptions) (0),
1082 (GtkAttachOptions) (0), 0, 0);
1089 amt,
const char * domain)
1092 GtkWidget *alignment =
NULL, *widget =
NULL;
1093 GtkWidget *child_box =
NULL;
1094 GSList *radio_btn_group =
NULL;
1096 for (x = 0; x < amt; ++x) {
1097 if (widget && widgets[x].child)
1100 child_box = gtk_vbox_new(
FALSE, 0);
1101 g_object_set_data(G_OBJECT(widget),
"child", child_box);
1102 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
1103 gtk_box_pack_start(box, alignment,
FALSE,
FALSE, 0);
1104 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
1105 gtk_container_add (GTK_CONTAINER (alignment), child_box);
1107 if (GTK_IS_TOGGLE_BUTTON (widget))
1108 gtk_widget_set_sensitive (child_box, gtk_toggle_button_get_active ((GtkToggleButton *) widget));
1113 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
1114 gtk_alignment_set_padding ((GtkAlignment *) alignment, 6, 0, 12, 0);
1115 gtk_box_pack_start(child_box ? GTK_BOX(child_box) : box, alignment,
FALSE,
FALSE, 0);
1118 radio_btn_group =
NULL;
1120 switch(widgets[x].
type) {
1122 widget = gtk_check_button_new_with_mnemonic (dgettext (domain, widgets[x].label));
1126 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 12, 0, 0, 0);
1128 GtkWidget *label =
NULL, *icon =
NULL;
1134 widget = gtk_hbox_new(
FALSE, 6);
1135 gtk_box_pack_start(GTK_BOX(widget), icon,
FALSE,
FALSE, 0);
1136 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
1140 widget = gtk_radio_button_new_with_mnemonic (radio_btn_group,
1141 dgettext (domain, widgets[x].label));
1142 radio_btn_group = gtk_radio_button_get_group ((GtkRadioButton *) widget);
1146 widget = gtk_hbox_new(
FALSE, 6);
1148 GtkWidget *label_pre =
NULL, *spin_btn =
NULL, *label_past =
NULL;
1150 & label_past, domain);
1153 gtk_box_pack_start(GTK_BOX(widget), label_pre,
FALSE,
FALSE, 0);
1155 gtk_box_pack_start(GTK_BOX(widget), spin_btn,
FALSE,
FALSE, 0);
1157 gtk_box_pack_start(GTK_BOX(widget), label_past,
FALSE,
FALSE, 0);
1161 if (widgets[x].
data.populate)
1162 widget = widgets[x].data.populate();
1168 widget = gtk_hbox_new(
FALSE, 6);
1170 GtkWidget *font_btn =
NULL;
1174 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
1176 gtk_box_pack_start(GTK_BOX(widget), font_btn,
FALSE,
FALSE, 0);
1179 widget = gtk_table_new(widgets[x].
data.table.rows, 3,
FALSE);
1181 widgets[x].data.table.rows, domain);
1182 gtk_table_set_row_spacings(GTK_TABLE(widget), 6);
1185 widget = gtk_hbox_new(
FALSE, 6);
1191 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
1193 gtk_box_pack_start(GTK_BOX(widget), entry,
TRUE,
TRUE, 0);
1196 widget = gtk_hbox_new(
FALSE, 6);
1198 GtkWidget *combo =
NULL;
1199 create_cbox (& widgets[x], & label, & combo, domain);
1202 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
1204 gtk_box_pack_start(GTK_BOX(widget), combo,
FALSE,
FALSE, 0);
1207 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 0, 0);
1209 if (widgets[x].
data.box.horizontal) {
1210 widget = gtk_hbox_new(
FALSE, 0);
1212 widget = gtk_vbox_new(
FALSE, 0);
1216 widgets[x].
data.box.elem, widgets[x].data.box.n_elem, domain);
1218 if (widgets[x].
data.box.frame) {
1222 widget = gtk_frame_new (dgettext (domain, widgets[x].label));
1223 gtk_container_add(GTK_CONTAINER(widget), tmp);
1227 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
1229 widget = gtk_notebook_new();
1232 for (i = 0; i<widgets[x].data.notebook.n_tabs; i++) {
1234 vbox = gtk_vbox_new(
FALSE, 5);
1236 widgets[x].
data.notebook.tabs[i].settings,
1237 widgets[x].data.notebook.tabs[i].n_settings, domain);
1239 gtk_notebook_append_page (GTK_NOTEBOOK (widget), vbox,
1240 gtk_label_new (dgettext (domain,
1241 widgets[x].
data.notebook.tabs[i].
name)));
1245 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 6, 0, 0);
1247 if (widgets[x].
data.separator.horizontal ==
TRUE) {
1248 widget = gtk_hseparator_new();
1250 widget = gtk_vseparator_new();
1257 if (widget && !gtk_widget_get_parent(widget))
1258 gtk_container_add(GTK_CONTAINER(alignment), widget);
1259 if (widget && widgets[x].tooltip && widgets[x].type !=
WIDGET_SPIN_BTN)
1260 gtk_widget_set_tooltip_text (widget, dgettext (domain,
1261 widgets[x].tooltip));
1269 GtkWidget *titlestring_tag_menu, *menu_item;
1272 titlestring_tag_menu = gtk_menu_new();
1274 menu_item = gtk_menu_item_new_with_label(
_(title_field_tags[i].
name));
1275 gtk_menu_shell_append(GTK_MENU_SHELL(titlestring_tag_menu), menu_item);
1276 g_signal_connect(menu_item,
"activate",
1278 GINT_TO_POINTER(i));
1280 gtk_widget_show_all(titlestring_tag_menu);
1282 return titlestring_tag_menu;
1287 set_bool (
NULL,
"show_numbers_in_pl", gtk_toggle_button_get_active (numbers));
1294 set_bool (
NULL,
"leading_zero", gtk_toggle_button_get_active (leading));
1306 * entry = gtk_entry_new ();
1310 gtk_entry_set_text ((GtkEntry *) * entry, format);
1321 GtkWidget *alignment55;
1323 GtkWidget *alignment56;
1325 GtkWidget *titlestring_help_button;
1329 GtkWidget *alignment85;
1331 GtkWidget *alignment86;
1336 GtkWidget * numbers_alignment, * numbers;
1338 vbox5 = gtk_vbox_new (
FALSE, 0);
1343 alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1);
1344 gtk_box_pack_start (GTK_BOX (vbox5), alignment55,
FALSE,
FALSE, 0);
1345 gtk_alignment_set_padding ((GtkAlignment *) alignment55, 12, 3, 0, 0);
1347 label60 = gtk_label_new (
_(
"<b>Song Display</b>"));
1348 gtk_container_add (GTK_CONTAINER (alignment55), label60);
1349 gtk_label_set_use_markup (GTK_LABEL (label60),
TRUE);
1350 gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
1352 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1353 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1354 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1356 numbers = gtk_check_button_new_with_label (
_(
"Show song numbers"));
1357 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
1359 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1361 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1363 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1364 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1365 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1367 numbers = gtk_check_button_new_with_label (
_(
"Show leading zeroes (02:00 "
1368 "instead of 2:00)"));
1369 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
get_bool (
NULL,
"leading_zero"));
1370 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1372 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1374 alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1);
1375 gtk_box_pack_start (GTK_BOX (vbox5), alignment56,
FALSE,
FALSE, 0);
1376 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0);
1378 table6 = gtk_table_new (2, 3,
FALSE);
1379 gtk_container_add (GTK_CONTAINER (alignment56), table6);
1380 gtk_table_set_row_spacings (GTK_TABLE (table6), 4);
1381 gtk_table_set_col_spacings (GTK_TABLE (table6), 12);
1383 titlestring_help_button = gtk_button_new ();
1384 gtk_table_attach (GTK_TABLE (table6), titlestring_help_button, 2, 3, 1, 2,
1385 (GtkAttachOptions) (0),
1386 (GtkAttachOptions) (0), 0, 0);
1389 gtk_widget_set_tooltip_text (titlestring_help_button,
_(
"Show information about titlestring format"));
1390 gtk_button_set_relief (GTK_BUTTON (titlestring_help_button), GTK_RELIEF_HALF);
1391 gtk_button_set_focus_on_click (GTK_BUTTON (titlestring_help_button),
FALSE);
1393 image1 = gtk_image_new_from_stock (
"gtk-index", GTK_ICON_SIZE_BUTTON);
1394 gtk_container_add (GTK_CONTAINER (titlestring_help_button), image1);
1396 GtkWidget * titlestring_cbox;
1398 gtk_table_attach (GTK_TABLE (table6), titlestring_cbox, 1, 3, 0, 1,
1399 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1400 (GtkAttachOptions) (0), 0, 0);
1402 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1403 (GtkAttachOptions) (0), 0, 0);
1405 label62 = gtk_label_new (
_(
"Custom string:"));
1406 gtk_table_attach (GTK_TABLE (table6), label62, 0, 1, 1, 2,
1407 (GtkAttachOptions) (0),
1408 (GtkAttachOptions) (0), 0, 0);
1409 gtk_label_set_justify (GTK_LABEL (label62), GTK_JUSTIFY_RIGHT);
1410 gtk_misc_set_alignment (GTK_MISC (label62), 1, 0.5);
1412 label61 = gtk_label_new (
_(
"Title format:"));
1413 gtk_table_attach (GTK_TABLE (table6), label61, 0, 1, 0, 1,
1414 (GtkAttachOptions) (0),
1415 (GtkAttachOptions) (0), 0, 0);
1416 gtk_label_set_justify (GTK_LABEL (label61), GTK_JUSTIFY_RIGHT);
1417 gtk_misc_set_alignment (GTK_MISC (label61), 1, 0.5);
1419 alignment85 = gtk_alignment_new (0.5, 0.5, 1, 1);
1420 gtk_box_pack_start (GTK_BOX (vbox5), alignment85,
FALSE,
FALSE, 0);
1421 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment85), 12, 12, 0, 0);
1423 label84 = gtk_label_new (
_(
"<b>Popup Information</b>"));
1424 gtk_container_add (GTK_CONTAINER (alignment85), label84);
1425 gtk_label_set_use_markup (GTK_LABEL (label84),
TRUE);
1426 gtk_misc_set_alignment (GTK_MISC (label84), 0, 0.5);
1428 alignment86 = gtk_alignment_new (0.5, 0.5, 1, 1);
1429 gtk_box_pack_start (GTK_BOX (vbox5), alignment86,
FALSE,
FALSE, 0);
1430 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment86), 0, 0, 12, 0);
1432 hbox9 = gtk_hbox_new (
FALSE, 12);
1433 gtk_container_add (GTK_CONTAINER (alignment86), hbox9);
1435 vbox34 = gtk_vbox_new (
FALSE, 0);
1436 gtk_box_pack_start (GTK_BOX (hbox9), vbox34,
TRUE,
TRUE, 0);
1438 filepopupbutton = gtk_check_button_new_with_mnemonic (
_(
"Show popup information for playlist entries"));
1439 gtk_widget_set_tooltip_text (
filepopupbutton,
_(
"Toggles popup information window for the pointed entry in the playlist. The window shows title of song, name of album, genre, year of publish, track number, track length, and artwork."));
1453 image8 = gtk_image_new_from_stock (
"gtk-properties", GTK_ICON_SIZE_BUTTON);
1465 g_signal_connect(titlestring_help_button,
"clicked",
1467 titlestring_tag_menu);
1477 * list = g_list_prepend (* list, plugin);
1483 static GList * list =
NULL;
1489 list = g_list_reverse (list);
1498 gtk_combo_box_set_active (combo, g_list_index (
output_get_list (), plugin));
1506 gtk_combo_box_get_active (combo));
1507 g_return_if_fail (plugin !=
NULL);
1523 g_return_if_fail (op !=
NULL);
1524 if (op->configure !=
NULL)
1526 else if (op->settings !=
NULL)
1533 g_return_if_fail (op !=
NULL);
1534 if (op->about !=
NULL)
1540 GtkWidget * hbox1 = gtk_hbox_new (
FALSE, 6);
1541 gtk_box_pack_start ((GtkBox *) hbox1, gtk_label_new (
_(
"Output plugin:")),
FALSE,
FALSE, 0);
1543 GtkWidget * vbox = gtk_vbox_new (
FALSE, 6);
1544 gtk_box_pack_start ((GtkBox *) hbox1, vbox,
FALSE,
FALSE, 0);
1546 GtkWidget * hbox2 = gtk_hbox_new (
FALSE, 6);
1547 gtk_box_pack_start ((GtkBox *) vbox, hbox2,
FALSE,
FALSE, 0);
1550 gtk_box_pack_start ((GtkBox *) hbox2, output_plugin_cbox,
FALSE,
FALSE, 0);
1552 GtkWidget * hbox3 = gtk_hbox_new (
FALSE, 6);
1553 gtk_box_pack_start ((GtkBox *) vbox, hbox3,
FALSE,
FALSE, 0);
1573 GtkWidget * audio_page_vbox = gtk_vbox_new (
FALSE, 0);
1581 GtkWidget *connectivity_page_vbox;
1584 connectivity_page_vbox = gtk_vbox_new (
FALSE, 0);
1587 vbox29 = gtk_vbox_new (
FALSE, 0);
1588 gtk_box_pack_start (GTK_BOX (connectivity_page_vbox), vbox29,
TRUE,
TRUE, 0);
1595 GtkWidget * notebook = gtk_notebook_new ();
1600 const char * names[] = {
N_(
"Transport"),
N_(
"Playlist"),
N_(
"Input"),
1601 N_(
"Effect"),
N_(
"Visualization"),
N_(
"General")};
1603 for (
int i = 0; i < G_N_ELEMENTS (types); i ++)
1605 (types[i]), gtk_label_new (
_(names[i])));
1615 gtk_widget_destroy(window);
1622 char *aud_version_string;
1626 GtkWidget *scrolledwindow6;
1627 GtkWidget *hseparator1;
1629 GtkWidget *audversionlabel;
1630 GtkWidget *prefswin_button_box;
1634 GtkAccelGroup *accel_group;
1636 accel_group = gtk_accel_group_new ();
1638 prefswin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1639 gtk_window_set_type_hint (GTK_WINDOW (
prefswin), GDK_WINDOW_TYPE_HINT_DIALOG);
1640 gtk_container_set_border_width (GTK_CONTAINER (
prefswin), 12);
1641 gtk_window_set_title (GTK_WINDOW (
prefswin),
_(
"Audacious Preferences"));
1642 gtk_window_set_position (GTK_WINDOW (
prefswin), GTK_WIN_POS_CENTER);
1643 gtk_window_set_default_size (GTK_WINDOW (
prefswin), 680, 400);
1645 vbox = gtk_vbox_new (
FALSE, 0);
1646 gtk_container_add (GTK_CONTAINER (
prefswin), vbox);
1648 hbox1 = gtk_hbox_new (
FALSE, 8);
1649 gtk_box_pack_start (GTK_BOX (vbox), hbox1,
TRUE,
TRUE, 0);
1651 scrolledwindow6 = gtk_scrolled_window_new (
NULL,
NULL);
1652 gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow6,
FALSE,
FALSE, 0);
1653 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1654 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN);
1658 gtk_widget_set_size_request (scrolledwindow6, 168, -1);
1674 hseparator1 = gtk_hseparator_new ();
1675 gtk_box_pack_start (GTK_BOX (vbox), hseparator1,
FALSE,
FALSE, 6);
1677 hbox4 = gtk_hbox_new (
FALSE, 0);
1678 gtk_box_pack_start (GTK_BOX (vbox), hbox4,
FALSE,
FALSE, 0);
1680 audversionlabel = gtk_label_new (
"");
1681 gtk_box_pack_start (GTK_BOX (hbox4), audversionlabel,
FALSE,
FALSE, 0);
1682 gtk_label_set_use_markup (GTK_LABEL (audversionlabel),
TRUE);
1684 prefswin_button_box = gtk_hbutton_box_new ();
1685 gtk_box_pack_start (GTK_BOX (hbox4), prefswin_button_box,
TRUE,
TRUE, 0);
1686 gtk_button_box_set_layout (GTK_BUTTON_BOX (prefswin_button_box), GTK_BUTTONBOX_END);
1687 gtk_box_set_spacing (GTK_BOX (prefswin_button_box), 6);
1689 hbox11 = gtk_hbox_new (
FALSE, 2);
1691 image10 = gtk_image_new_from_stock (
"gtk-refresh", GTK_ICON_SIZE_BUTTON);
1692 gtk_box_pack_start (GTK_BOX (hbox11), image10,
FALSE,
FALSE, 0);
1694 close = gtk_button_new_from_stock (
"gtk-close");
1695 gtk_container_add (GTK_CONTAINER (prefswin_button_box), close);
1697 gtk_widget_add_accelerator (close,
"clicked", accel_group,
1698 GDK_Escape, (GdkModifierType) 0,
1702 gtk_window_add_accel_group (GTK_WINDOW (
prefswin), accel_group);
1705 g_signal_connect(G_OBJECT(
prefswin),
"delete_event",
1708 g_signal_connect_swapped(G_OBJECT(close),
"clicked",
1717 aud_version_string = g_strdup_printf
1718 (
"<span size='small'>%s (%s)</span>",
"Audacious " VERSION, BUILDSTAMP);
1720 gtk_label_set_markup( GTK_LABEL(audversionlabel) , aud_version_string );
1721 g_free(aud_version_string);
1722 gtk_widget_show_all(vbox);
1738 gtk_window_present ((GtkWindow *)
prefswin);
1745 gtk_widget_hide(GTK_WIDGET(
prefswin));
1749 const char * imgurl)
1760 category_queue = ent;
1766 category_queue = ent->
next;
1786 GtkTreeModel *model;
1788 GdkPixbuf *img =
NULL;
1798 model = gtk_tree_view_get_model(treeview);
1807 gtk_widget_show(container);
1814 img = gdk_pixbuf_new_from_file(imgurl,
NULL);
1816 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
1817 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
1823 g_object_unref(img);
1831 GtkTreeModel *model;
1848 model = gtk_tree_view_get_model(treeview);
1853 ret = gtk_tree_model_get_iter_first(model, &iter);
1861 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
1862 ret = gtk_tree_model_get_iter_first(model, &iter);
1872 ret = gtk_tree_model_iter_next(model, &iter);