23 #include <gdk/gdkkeysyms.h>
67 {
"audio.png",
N_(
"Audio")},
68 {
"connectivity.png",
N_(
"Network")},
69 {
"playlist.png",
N_(
"Playlist")},
70 {
"info.png",
N_(
"Song Info")},
71 {
"plugins.png",
N_(
"Plugins")},
77 {
N_(
"Artist") ,
"${artist}" },
78 {
N_(
"Album") ,
"${album}" },
79 {
N_(
"Title") ,
"${title}" },
80 {
N_(
"Tracknumber"),
"${track-number}" },
81 {
N_(
"Genre") ,
"${genre}" },
82 {
N_(
"Filename") ,
"${file-name}" },
83 {
N_(
"Filepath") ,
"${file-path}" },
84 {
N_(
"Date") ,
"${date}" },
85 {
N_(
"Year") ,
"${year}" },
86 {
N_(
"Comment") ,
"${comment}" },
87 {
N_(
"Codec") ,
"${codec}" },
88 {
N_(
"Quality") ,
"${quality}" },
95 {GUESS_REGION_AR,
N_(
"Arabic")},
96 {GUESS_REGION_BL,
N_(
"Baltic")},
97 {GUESS_REGION_CN,
N_(
"Chinese")},
98 {GUESS_REGION_GR,
N_(
"Greek")},
99 {GUESS_REGION_HW,
N_(
"Hebrew")},
100 {GUESS_REGION_JP,
N_(
"Japanese")},
101 {GUESS_REGION_KR,
N_(
"Korean")},
102 {GUESS_REGION_PL,
N_(
"Polish")},
103 {GUESS_REGION_RU,
N_(
"Russian")},
104 {GUESS_REGION_TW,
N_(
"Taiwanese")},
105 {GUESS_REGION_TR,
N_(
"Turkish")}};
109 { GINT_TO_POINTER(16),
"16" },
110 { GINT_TO_POINTER(24),
"24" },
111 { GINT_TO_POINTER(32),
"32" },
112 {GINT_TO_POINTER (0),
N_(
"Floating point")},
128 .cfg_type =
VALUE_INT, .cname =
"output_buffer_size",
129 .data = {.spin_btn = {100, 10000, 1000,
N_(
"ms")}}},
133 .cfg_type =
VALUE_BOOLEAN, .cname =
"software_volume_control"},
139 .cfg_type =
VALUE_BOOLEAN, .cname =
"enable_clipping_prevention"},
142 .cfg_type =
VALUE_FLOAT, .cname =
"replay_gain_preamp",
143 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}},
146 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}}};
155 .data = {.entry = {.password =
TRUE}}}};
172 .data = {.combo = {chardet_detector_presets, G_N_ELEMENTS (chardet_detector_presets)}}},
175 .cname =
"chardet_fallback", .child =
TRUE}};
180 .cfg_type =
VALUE_BOOLEAN, .cname =
"resume_playback_on_startup"},
199 {
WIDGET_LABEL,
N_(
"Search for images matching these words (comma-separated):")},
201 {
WIDGET_LABEL,
N_(
"Exclude images matching these words (comma-separated):")},
208 .cfg_type =
VALUE_INT, .cname =
"recurse_for_cover_depth",
209 .data = {.spin_btn = {0, 100, 1}}},
212 .cfg_type =
VALUE_BOOLEAN, .cname =
"show_filepopup_for_tuple"},
214 .cfg_type =
VALUE_INT, .cname =
"filepopup_delay",
215 .data = {.spin_btn = {0, 100, 1}}},
217 .cfg_type =
VALUE_BOOLEAN, .cname =
"filepopup_showprogressbar"}};
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")};
239 GtkTreeSelection * selection)
245 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
249 gtk_notebook_set_current_page(notebook, index);
256 const char *separator =
" - ";
257 int item = GPOINTER_TO_INT(data);
266 gtk_editable_insert_text(GTK_EDITABLE(
titlestring_entry),
_(title_field_tags[item].tag), -1, &pos);
274 GtkMenu * menu = data;
287 if (gtk_combo_box_get_active (cbox) != preset)
288 gtk_combo_box_set_active (cbox, preset);
293 const char *
format = gtk_entry_get_text (entry);
301 int preset = gtk_combo_box_get_active (cbox);
311 * (
bool_t *) widget->cfg = value;
312 else if (widget->cname)
313 set_bool (widget->csect, widget->cname, value);
315 if (widget->callback)
324 return * (
bool_t *) widget->cfg;
325 else if (widget->cname)
326 return get_bool (widget->csect, widget->cname);
333 g_return_if_fail (widget->cfg_type ==
VALUE_INT);
336 * (
int *) widget->cfg = value;
337 else if (widget->cname)
338 set_int (widget->csect, widget->cname, value);
340 if (widget->callback)
346 g_return_val_if_fail (widget->cfg_type ==
VALUE_INT, 0);
349 return * (
int *) widget->cfg;
350 else if (widget->cname)
351 return get_int (widget->csect, widget->cname);
358 g_return_if_fail (widget->cfg_type ==
VALUE_FLOAT);
361 * (
float *) widget->cfg = value;
362 else if (widget->cname)
363 set_double (widget->csect, widget->cname, value);
365 if (widget->callback)
371 g_return_val_if_fail (widget->cfg_type ==
VALUE_FLOAT, 0);
374 return * (
float *) widget->cfg;
375 else if (widget->cname)
376 return get_double (widget->csect, widget->cname);
387 g_free (* (
char * *) widget->cfg);
388 * (
char * *) widget->cfg = g_strdup (value);
390 else if (widget->cname)
391 set_string (widget->csect, widget->cname, value);
393 if (widget->callback)
402 return g_strdup (* (
char * *) widget->cfg);
403 else if (widget->cname)
404 return get_string (widget->csect, widget->cname);
416 widget_set_int (widget, gtk_spin_button_get_value_as_int (button));
427 GtkCellRenderer *renderer;
428 GtkTreeViewColumn *column;
429 GtkTreeSelection *selection;
434 column = gtk_tree_view_column_new();
435 gtk_tree_view_column_set_title(column,
_(
"Category"));
436 gtk_tree_view_append_column(treeview, column);
437 gtk_tree_view_column_set_spacing(column, 2);
439 renderer = gtk_cell_renderer_pixbuf_new();
440 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
441 gtk_tree_view_column_set_attributes(column, renderer,
"pixbuf", 0,
NULL);
443 renderer = gtk_cell_renderer_text_new();
444 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
445 gtk_tree_view_column_set_attributes(column, renderer,
"text", 1,
NULL);
447 g_object_set ((GObject *) renderer,
"wrap-width", 96,
"wrap-mode",
448 PANGO_WRAP_WORD_CHAR,
NULL);
451 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
452 gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
456 char * path = g_strdup_printf (
"%s/images/%s",
458 img = gdk_pixbuf_new_from_file (path,
NULL);
461 gtk_list_store_append(store, &iter);
462 gtk_list_store_set(store, &iter,
470 selection = gtk_tree_view_get_selection(treeview);
472 g_signal_connect_swapped(selection,
"changed",
478 if (gtk_toggle_button_get_active ((GtkToggleButton *) button))
488 gtk_toggle_button_set_active ((GtkToggleButton *) button,
TRUE);
498 GtkWidget * child = g_object_get_data ((GObject *) button,
"child");
500 gtk_widget_set_sensitive (child, active);
508 gtk_toggle_button_set_active ((GtkToggleButton *) button,
widget_get_bool (widget));
519 int position = gtk_combo_box_get_active (combobox);
520 widget_set_int (widget, GPOINTER_TO_INT (widget->data.combo.elements[position].value));
525 int position = gtk_combo_box_get_active (combobox);
529 static void fill_cbox (GtkWidget * combobox,
const PreferencesWidget * widget,
const char * domain)
531 for (
int i = 0; i < widget->data.combo.n_elements; i ++)
532 gtk_combo_box_text_append_text ((GtkComboBoxText *) combobox,
533 dgettext (domain, widget->data.combo.elements[i].label));
535 switch (widget->cfg_type)
540 for (
int i = 0; i < widget->data.combo.n_elements; i++)
542 if (GPOINTER_TO_INT (widget->data.combo.elements[i].value) == ivalue)
544 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
555 for(
int i = 0; i < widget->data.combo.n_elements; i++)
557 if (value && ! strcmp (widget->data.combo.elements[i].value, value))
559 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
575 label_pre, GtkWidget * * spin_btn, GtkWidget * * label_past,
const char *
580 * label_pre = gtk_label_new (dgettext (domain, widget->label));
582 *spin_btn = gtk_spin_button_new_with_range(widget->data.spin_btn.min,
583 widget->data.spin_btn.max,
584 widget->data.spin_btn.step);
588 gtk_widget_set_tooltip_text (* spin_btn, dgettext (domain,
591 if (widget->data.spin_btn.right_label) {
592 * label_past = gtk_label_new (dgettext (domain,
593 widget->data.spin_btn.right_label));
596 switch (widget->cfg_type)
599 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_int (widget));
600 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
604 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_double (widget));
605 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
614 GtkWidget * * font_btn,
const char * domain)
616 *font_btn = gtk_font_button_new();
617 gtk_font_button_set_use_font(GTK_FONT_BUTTON(*font_btn),
TRUE);
618 gtk_font_button_set_use_size(GTK_FONT_BUTTON(*font_btn),
TRUE);
619 gtk_widget_set_hexpand(*font_btn,
TRUE);
621 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
622 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
623 gtk_misc_set_alignment(GTK_MISC(*label), 1, 0.5);
624 gtk_label_set_justify(GTK_LABEL(*label), GTK_JUSTIFY_RIGHT);
625 gtk_label_set_mnemonic_widget(GTK_LABEL(*label), *font_btn);
628 if (widget->data.font_btn.title)
629 gtk_font_button_set_title (GTK_FONT_BUTTON (* font_btn),
630 dgettext (domain, widget->data.font_btn.title));
635 gtk_font_button_set_font_name ((GtkFontButton *) * font_btn, name);
642 static void create_entry (
const PreferencesWidget * widget, GtkWidget * * label,
643 GtkWidget * *
entry,
const char * domain)
645 *entry = gtk_entry_new();
646 gtk_entry_set_visibility(GTK_ENTRY(*entry), !widget->data.entry.password);
647 gtk_widget_set_hexpand(*entry,
TRUE);
650 * label = gtk_label_new (dgettext (domain, widget->label));
653 gtk_widget_set_tooltip_text (* entry, dgettext (domain, widget->tooltip));
660 gtk_entry_set_text ((GtkEntry *) * entry, value);
664 g_signal_connect (* entry,
"changed", (GCallback)
on_entry_changed, (
void *) widget);
668 static void create_label (
const PreferencesWidget * widget, GtkWidget * * label,
669 GtkWidget * * icon,
const char * domain)
671 if (widget->data.label.stock_id)
672 *icon = gtk_image_new_from_stock(widget->data.label.stock_id, GTK_ICON_SIZE_BUTTON);
674 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
675 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
677 if (widget->data.label.single_line ==
FALSE)
678 gtk_label_set_line_wrap(GTK_LABEL(*label),
TRUE);
680 gtk_misc_set_alignment(GTK_MISC(*label), 0, 0.5);
683 static void create_cbox (
const PreferencesWidget * widget, GtkWidget * * label,
684 GtkWidget * * combobox,
const char * domain)
686 * combobox = gtk_combo_box_text_new ();
689 * label = gtk_label_new (dgettext (domain, widget->label));
695 static void fill_grid (GtkWidget * grid,
const PreferencesWidget * elements,
int
696 amt,
const char * domain)
699 GtkWidget *widget_left, *widget_middle, *widget_right;
701 for (x = 0; x < amt; ++x) {
702 widget_left = widget_middle = widget_right =
NULL;
703 switch (elements[x].
type) {
706 & widget_middle, & widget_right, domain);
709 create_label (& elements[x], & widget_middle, & widget_left,
717 create_entry (& elements[x], & widget_left, & widget_middle,
721 create_cbox (& elements[x], & widget_left, & widget_middle,
725 g_warning(
"Unsupported widget type %d in table", elements[x].type);
729 gtk_grid_attach(GTK_GRID(grid), widget_left, 0, x, 1, 1);
732 gtk_grid_attach(GTK_GRID(grid), widget_middle, 1, x, 1, 1);
735 gtk_grid_attach(GTK_GRID(grid), widget_right, 2, x, 1, 1);
741 int amt,
const char * domain)
743 GtkWidget *alignment =
NULL, *widget =
NULL;
744 GtkWidget *child_box =
NULL;
745 GSList *radio_btn_group =
NULL;
747 for (
int x = 0; x < amt; x ++)
749 GtkWidget * label =
NULL;
751 if (widget && widgets[x].child)
754 child_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
755 g_object_set_data(G_OBJECT(widget),
"child", child_box);
756 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
757 gtk_box_pack_start(box, alignment,
FALSE,
FALSE, 0);
758 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
759 gtk_container_add (GTK_CONTAINER (alignment), child_box);
761 if (GTK_IS_TOGGLE_BUTTON (widget))
762 gtk_widget_set_sensitive (child_box, gtk_toggle_button_get_active ((GtkToggleButton *) widget));
767 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
768 gtk_alignment_set_padding ((GtkAlignment *) alignment, 6, 0, 12, 0);
769 gtk_box_pack_start(child_box ? GTK_BOX(child_box) : box, alignment,
FALSE,
FALSE, 0);
772 radio_btn_group =
NULL;
774 switch(widgets[x].
type) {
776 widget = gtk_check_button_new_with_mnemonic (dgettext (domain, widgets[x].label));
780 if (strstr (widgets[x].label,
"<b>"))
781 gtk_alignment_set_padding ((GtkAlignment *) alignment,
782 (x == 0) ? 0 : 12, 0, 0, 0);
784 GtkWidget * icon =
NULL;
790 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
791 gtk_box_pack_start(GTK_BOX(widget), icon,
FALSE,
FALSE, 0);
792 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
796 widget = gtk_radio_button_new_with_mnemonic (radio_btn_group,
797 dgettext (domain, widgets[x].label));
798 radio_btn_group = gtk_radio_button_get_group ((GtkRadioButton *) widget);
802 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
804 GtkWidget *label_pre =
NULL, *spin_btn =
NULL, *label_past =
NULL;
806 & label_past, domain);
809 gtk_box_pack_start(GTK_BOX(widget), label_pre,
FALSE,
FALSE, 0);
811 gtk_box_pack_start(GTK_BOX(widget), spin_btn,
FALSE,
FALSE, 0);
813 gtk_box_pack_start(GTK_BOX(widget), label_past,
FALSE,
FALSE, 0);
817 if (widgets[x].data.populate)
818 widget = widgets[x].data.populate();
824 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
826 GtkWidget *font_btn =
NULL;
830 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
832 gtk_box_pack_start(GTK_BOX(widget), font_btn,
FALSE,
FALSE, 0);
835 widget = gtk_grid_new();
836 fill_grid(widget, widgets[x].data.table.elem,
837 widgets[x].data.table.rows, domain);
838 gtk_grid_set_column_spacing(GTK_GRID(widget), 6);
839 gtk_grid_set_row_spacing(GTK_GRID(widget), 6);
842 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
848 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
850 gtk_box_pack_start(GTK_BOX(widget), entry,
TRUE,
TRUE, 0);
853 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
855 GtkWidget *combo =
NULL;
856 create_cbox (& widgets[x], & label, & combo, domain);
859 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
861 gtk_box_pack_start(GTK_BOX(widget), combo,
FALSE,
FALSE, 0);
864 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 0, 0);
866 if (widgets[x].data.box.horizontal) {
867 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
869 widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
873 widgets[x].data.box.elem, widgets[x].data.box.n_elem, domain);
875 if (widgets[x].data.box.frame) {
879 widget = gtk_frame_new (dgettext (domain, widgets[x].label));
880 gtk_container_add(GTK_CONTAINER(widget), tmp);
884 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
886 widget = gtk_notebook_new();
889 for (i = 0; i<widgets[x].data.notebook.n_tabs; i++) {
891 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
893 widgets[x].data.notebook.tabs[i].widgets,
894 widgets[x].data.notebook.tabs[i].n_widgets, domain);
896 gtk_notebook_append_page (GTK_NOTEBOOK (widget), vbox,
897 gtk_label_new (dgettext (domain,
898 widgets[x].data.notebook.tabs[i].name)));
902 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 6, 0, 0);
904 if (widgets[x].data.separator.horizontal ==
TRUE) {
905 widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
907 widget = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
914 if (widget && !gtk_widget_get_parent(widget))
915 gtk_container_add(GTK_CONTAINER(alignment), widget);
916 if (widget && widgets[x].tooltip && widgets[x].type !=
WIDGET_SPIN_BTN)
917 gtk_widget_set_tooltip_text (widget, dgettext (domain,
918 widgets[x].tooltip));
926 GtkWidget *titlestring_tag_menu, *menu_item;
929 titlestring_tag_menu = gtk_menu_new();
931 menu_item = gtk_menu_item_new_with_label(
_(title_field_tags[i].
name));
932 gtk_menu_shell_append(GTK_MENU_SHELL(titlestring_tag_menu), menu_item);
933 g_signal_connect(menu_item,
"activate",
937 gtk_widget_show_all(titlestring_tag_menu);
939 return titlestring_tag_menu;
944 set_bool (
NULL,
"show_numbers_in_pl", gtk_toggle_button_get_active (numbers));
951 set_bool (
NULL,
"leading_zero", gtk_toggle_button_get_active (leading));
958 * cbox = gtk_combo_box_text_new ();
961 gtk_combo_box_text_append_text ((GtkComboBoxText *) * cbox,
_(
"Custom"));
963 * entry = gtk_entry_new ();
967 gtk_entry_set_text ((GtkEntry *) * entry, format);
978 GtkWidget *alignment55;
980 GtkWidget *alignment56;
982 GtkWidget *titlestring_help_button;
987 GtkWidget * numbers_alignment, * numbers;
989 vbox5 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
994 alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1);
995 gtk_box_pack_start (GTK_BOX (vbox5), alignment55,
FALSE,
FALSE, 0);
996 gtk_alignment_set_padding ((GtkAlignment *) alignment55, 12, 3, 0, 0);
998 label60 = gtk_label_new (
_(
"<b>Song Display</b>"));
999 gtk_container_add (GTK_CONTAINER (alignment55), label60);
1000 gtk_label_set_use_markup (GTK_LABEL (label60),
TRUE);
1001 gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
1003 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1004 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1005 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1007 numbers = gtk_check_button_new_with_label (
_(
"Show song numbers"));
1008 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
1010 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1012 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1014 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1015 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1016 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1018 numbers = gtk_check_button_new_with_label (
_(
"Show leading zeroes (02:00 "
1019 "instead of 2:00)"));
1020 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
get_bool (
NULL,
"leading_zero"));
1021 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1023 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1025 alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1);
1026 gtk_box_pack_start (GTK_BOX (vbox5), alignment56,
FALSE,
FALSE, 0);
1027 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0);
1029 grid6 = gtk_grid_new ();
1030 gtk_container_add (GTK_CONTAINER (alignment56), grid6);
1031 gtk_grid_set_row_spacing (GTK_GRID (grid6), 4);
1032 gtk_grid_set_column_spacing (GTK_GRID (grid6), 12);
1034 titlestring_help_button = gtk_button_new ();
1035 gtk_grid_attach (GTK_GRID (grid6), titlestring_help_button, 2, 1, 1, 1);
1037 gtk_widget_set_can_focus (titlestring_help_button,
FALSE);
1038 gtk_widget_set_tooltip_text (titlestring_help_button,
_(
"Show information about titlestring format"));
1039 gtk_button_set_relief (GTK_BUTTON (titlestring_help_button), GTK_RELIEF_HALF);
1040 gtk_button_set_focus_on_click (GTK_BUTTON (titlestring_help_button),
FALSE);
1042 image1 = gtk_image_new_from_stock (
"gtk-index", GTK_ICON_SIZE_BUTTON);
1043 gtk_container_add (GTK_CONTAINER (titlestring_help_button), image1);
1045 GtkWidget * titlestring_cbox;
1047 gtk_widget_set_hexpand (titlestring_cbox,
TRUE);
1049 gtk_grid_attach (GTK_GRID (grid6), titlestring_cbox, 1, 0, 1, 1);
1052 label62 = gtk_label_new (
_(
"Custom string:"));
1053 gtk_grid_attach (GTK_GRID (grid6), label62, 0, 1, 1, 1);
1054 gtk_label_set_justify (GTK_LABEL (label62), GTK_JUSTIFY_RIGHT);
1055 gtk_misc_set_alignment (GTK_MISC (label62), 1, 0.5);
1057 label61 = gtk_label_new (
_(
"Title format:"));
1058 gtk_grid_attach (GTK_GRID (grid6), label61, 0, 0, 1, 1);
1059 gtk_label_set_justify (GTK_LABEL (label61), GTK_JUSTIFY_RIGHT);
1060 gtk_misc_set_alignment (GTK_MISC (label61), 1, 0.5);
1062 g_signal_connect(titlestring_help_button,
"clicked",
1064 titlestring_tag_menu);
1069 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1079 * list = g_list_prepend (* list, plugin);
1085 static GList * list =
NULL;
1091 list = g_list_reverse (list);
1100 gtk_combo_box_set_active (combo, g_list_index (
output_get_list (), plugin));
1108 gtk_combo_box_get_active (combo));
1109 g_return_if_fail (plugin !=
NULL);
1118 gtk_combo_box_text_append_text ((GtkComboBoxText *) combo,
1130 g_return_if_fail (plugin !=
NULL);
1137 g_return_if_fail (plugin !=
NULL);
1143 GtkWidget * hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1144 gtk_box_pack_start ((GtkBox *) hbox1, gtk_label_new (
_(
"Output plugin:")),
FALSE,
FALSE, 0);
1146 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
1147 gtk_box_pack_start ((GtkBox *) hbox1, vbox,
FALSE,
FALSE, 0);
1149 GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1150 gtk_box_pack_start ((GtkBox *) vbox, hbox2,
FALSE,
FALSE, 0);
1152 GtkWidget * output_plugin_cbox = gtk_combo_box_text_new ();
1153 gtk_box_pack_start ((GtkBox *) hbox2, output_plugin_cbox,
FALSE,
FALSE, 0);
1155 GtkWidget * hbox3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1156 gtk_box_pack_start ((GtkBox *) vbox, hbox3,
FALSE,
FALSE, 0);
1176 GtkWidget * audio_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1184 GtkWidget *connectivity_page_vbox;
1187 connectivity_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1190 vbox29 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1191 gtk_box_pack_start (GTK_BOX (connectivity_page_vbox), vbox29,
TRUE,
TRUE, 0);
1198 GtkWidget * notebook = gtk_notebook_new ();
1203 const char * names[] = {
N_(
"Transport"),
N_(
"Playlist"),
N_(
"Input"),
1204 N_(
"Effect"),
N_(
"Visualization"),
N_(
"General")};
1206 for (
int i = 0; i < G_N_ELEMENTS (types); i ++)
1208 (types[i]), gtk_label_new (
_(names[i])));
1216 gtk_widget_destroy(window);
1222 char *aud_version_string;
1226 GtkWidget *scrolledwindow6;
1227 GtkWidget *hseparator1;
1229 GtkWidget *audversionlabel;
1230 GtkWidget *prefswin_button_box;
1232 GtkAccelGroup *accel_group;
1234 accel_group = gtk_accel_group_new ();
1236 prefswin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1237 gtk_window_set_type_hint (GTK_WINDOW (
prefswin), GDK_WINDOW_TYPE_HINT_DIALOG);
1238 gtk_container_set_border_width (GTK_CONTAINER (
prefswin), 12);
1239 gtk_window_set_title (GTK_WINDOW (
prefswin),
_(
"Audacious Preferences"));
1240 gtk_window_set_position (GTK_WINDOW (
prefswin), GTK_WIN_POS_CENTER);
1241 gtk_window_set_default_size (GTK_WINDOW (
prefswin), 680, 400);
1243 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1244 gtk_container_add (GTK_CONTAINER (
prefswin), vbox);
1246 hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
1247 gtk_box_pack_start (GTK_BOX (vbox), hbox1,
TRUE,
TRUE, 0);
1249 scrolledwindow6 = gtk_scrolled_window_new (
NULL,
NULL);
1250 gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow6,
FALSE,
FALSE, 0);
1251 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1252 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN);
1256 gtk_widget_set_size_request (scrolledwindow6, 168, -1);
1273 hseparator1 = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
1274 gtk_box_pack_start (GTK_BOX (vbox), hseparator1,
FALSE,
FALSE, 6);
1276 hbox4 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1277 gtk_box_pack_start (GTK_BOX (vbox), hbox4,
FALSE,
FALSE, 0);
1279 audversionlabel = gtk_label_new (
"");
1280 gtk_box_pack_start (GTK_BOX (hbox4), audversionlabel,
FALSE,
FALSE, 0);
1281 gtk_label_set_use_markup (GTK_LABEL (audversionlabel),
TRUE);
1283 prefswin_button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
1284 gtk_box_pack_start (GTK_BOX (hbox4), prefswin_button_box,
TRUE,
TRUE, 0);
1285 gtk_button_box_set_layout (GTK_BUTTON_BOX (prefswin_button_box), GTK_BUTTONBOX_END);
1286 gtk_box_set_spacing (GTK_BOX (prefswin_button_box), 6);
1288 close = gtk_button_new_from_stock (
"gtk-close");
1289 gtk_container_add (GTK_CONTAINER (prefswin_button_box), close);
1290 gtk_widget_set_can_default(close,
TRUE);
1291 gtk_widget_add_accelerator (close,
"clicked", accel_group,
1292 GDK_KEY_Escape, (GdkModifierType) 0,
1296 gtk_window_add_accel_group (GTK_WINDOW (
prefswin), accel_group);
1299 g_signal_connect(G_OBJECT(
prefswin),
"delete_event",
1302 g_signal_connect_swapped(G_OBJECT(close),
"clicked",
1311 aud_version_string = g_strdup_printf
1312 (
"<span size='small'>%s (%s)</span>",
"Audacious " VERSION, BUILDSTAMP);
1314 gtk_label_set_markup( GTK_LABEL(audversionlabel) , aud_version_string );
1315 g_free(aud_version_string);
1316 gtk_widget_show_all(vbox);
1330 gtk_window_present ((GtkWindow *)
prefswin);
1336 gtk_widget_hide(GTK_WIDGET(
prefswin));
#define TITLESTRING_NPRESETS
static void output_combo_changed(GtkComboBox *combo)
static void change_category(GtkNotebook *notebook, GtkTreeSelection *selection)
static void titlestring_tag_menu_callback(GtkMenuItem *menuitem, void *data)
static void on_font_btn_font_set(GtkFontButton *button, const PreferencesWidget *widget)
static void create_connectivity_category(void)
void playlist_reformat_titles(void)
static void create_titlestring_widgets(GtkWidget **cbox, GtkWidget **entry)
void show_prefs_window(void)
static void widget_set_string(const PreferencesWidget *widget, const char *value)
static const char *const titlestring_preset_names[TITLESTRING_NPRESETS]
static GtkWidget * category_notebook
PluginHandle * output_plugin_get_current(void)
static void on_titlestring_entry_changed(GtkEntry *entry, GtkComboBox *cbox)
static void fill_category_list(GtkTreeView *treeview, GtkNotebook *notebook)
char * get_string(const char *section, const char *name)
static bool_t prefswin_destroy(GtkWidget *window, GdkEvent *event, void *data)
static void fill_grid(GtkWidget *grid, const PreferencesWidget *elements, int amt, const char *domain)
static void create_cbox(const PreferencesWidget *widget, GtkWidget **label, GtkWidget **combobox, const char *domain)
static PreferencesWidget chardet_elements[]
static PreferencesWidget proxy_host_port_elements[]
static TitleFieldTag title_field_tags[]
double get_double(const char *section, const char *name)
static void create_spin_button(const PreferencesWidget *widget, GtkWidget **label_pre, GtkWidget **spin_btn, GtkWidget **label_past, const char *domain)
void destroy_prefs_window(void)
void set_string(const char *section, const char *name, const char *value)
static PreferencesWidget song_info_page_widgets[]
static ComboBoxElements bitdepth_elements[]
static bool_t output_enum_cb(PluginHandle *plugin, GList **list)
static GtkWidget * create_titlestring_tag_menu(void)
void set_bool(const char *section, const char *name, bool_t value)
static void on_titlestring_help_button_clicked(GtkButton *button, void *data)
PluginHandle * plugin_get_current(int type)
static void on_cbox_changed_string(GtkComboBox *combobox, const PreferencesWidget *widget)
static void create_audio_category(void)
static void on_toggle_button_toggled(GtkToggleButton *button, const PreferencesWidget *widget)
static void create_plugin_category(void)
static Category categories[]
void plugin_do_configure(PluginHandle *plugin)
static PreferencesWidget audio_page_widgets[]
static void on_spin_btn_changed_int(GtkSpinButton *button, const PreferencesWidget *widget)
static PreferencesWidget proxy_auth_elements[]
static void on_entry_changed(GtkEntry *entry, const PreferencesWidget *widget)
static PreferencesWidget rg_mode_widgets[]
void playlist_trigger_scan(void)
static void create_prefs_window(void)
static void output_do_about(void)
static void create_entry(const PreferencesWidget *widget, GtkWidget **label, GtkWidget **entry, const char *domain)
void set_int(const char *section, const char *name, int value)
static void on_cbox_changed_int(GtkComboBox *combobox, const PreferencesWidget *widget)
bool_t plugin_has_about(PluginHandle *plugin)
static char * widget_get_string(const PreferencesWidget *widget)
static void output_combo_fill(GtkComboBox *combo)
static void show_numbers_cb(GtkToggleButton *numbers, void *unused)
bool_t plugin_has_configure(PluginHandle *plugin)
void set_double(const char *section, const char *name, double value)
bool_t(* PluginForEachFunc)(PluginHandle *plugin, void *data)
static void create_label(const PreferencesWidget *widget, GtkWidget **label, GtkWidget **icon, const char *domain)
static void on_radio_button_toggled(GtkWidget *button, const PreferencesWidget *widget)
bool_t get_bool(const char *section, const char *name)
const char PluginHandle decoder const char PluginHandle decoder const char PluginHandle decoder void const PreferencesWidget widgets
static void fill_cbox(GtkWidget *combobox, const PreferencesWidget *widget, const char *domain)
bool_t plugin_enable(PluginHandle *plugin, bool_t enable)
void hide_prefs_window(void)
static void update_titlestring_cbox(GtkComboBox *cbox, const char *format)
static void output_bit_depth_changed(void)
GtkWidget * titlestring_entry
static GtkWidget * category_treeview
static void * create_output_plugin_box(void)
static void output_combo_update(GtkComboBox *combo)
const char * get_path(int id)
static void widget_set_double(const PreferencesWidget *widget, double value)
static void output_do_config(void)
static PreferencesWidget playlist_page_widgets[]
void create_font_btn(const PreferencesWidget *widget, GtkWidget **label, GtkWidget **font_btn, const char *domain)
void create_widgets_with_domain(void *box, const PreferencesWidget *widgets, int amt, const char *domain)
static GList * output_get_list(void)
static GtkWidget * output_about_button
static void widget_set_bool(const PreferencesWidget *widget, bool_t value)
void plugin_do_about(PluginHandle *plugin)
void output_reset(int type)
static void widget_set_int(const PreferencesWidget *widget, int value)
EXPORT void hook_call(const char *name, void *data)
static void create_song_info_category(void)
static int widget_get_int(const PreferencesWidget *widget)
const char PluginHandle decoder const char PluginHandle decoder const char PluginHandle decoder void box
int get_int(const char *section, const char *name)
static const char *const titlestring_presets[TITLESTRING_NPRESETS]
static double widget_get_double(const PreferencesWidget *widget)
static PreferencesWidget connectivity_page_widgets[]
void data PluginHandle plugin
static void on_titlestring_cbox_changed(GtkComboBox *cbox, GtkEntry *entry)
static void leading_zero_cb(GtkToggleButton *leading)
static void init_toggle_button(GtkWidget *button, const PreferencesWidget *widget)
void plugin_for_each(int type, PluginForEachFunc func, void *data)
const char * plugin_get_name(PluginHandle *plugin)
static bool_t widget_get_bool(const PreferencesWidget *widget)
static void create_playlist_category(void)
GtkWidget * plugin_view_new(int type)
static GtkWidget * output_config_button
static void init_radio_button(GtkWidget *button, const PreferencesWidget *widget)
static void on_spin_btn_changed_float(GtkSpinButton *button, const PreferencesWidget *widget)
static const unsigned int n_title_field_tags