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")},
137 .cfg_type =
VALUE_INT, .cname =
"output_buffer_size",
138 .data = {.spin_btn = {100, 10000, 1000,
N_(
"ms")}}},
142 .cfg_type =
VALUE_BOOLEAN, .cname =
"software_volume_control"},
148 .cfg_type =
VALUE_BOOLEAN, .cname =
"enable_clipping_prevention"},
151 .cfg_type =
VALUE_FLOAT, .cname =
"replay_gain_preamp",
152 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}},
155 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}}};
164 .data = {.entry = {.password =
TRUE}}}};
181 .data = {.combo = {chardet_detector_presets, G_N_ELEMENTS (chardet_detector_presets)}}},
184 .cname =
"chardet_fallback", .child =
TRUE}};
189 .cfg_type =
VALUE_BOOLEAN, .cname =
"resume_playback_on_startup"},
208 {
WIDGET_LABEL,
N_(
"Search for images matching these words (comma-separated):")},
210 {
WIDGET_LABEL,
N_(
"Exclude images matching these words (comma-separated):")},
217 .cfg_type =
VALUE_INT, .cname =
"recurse_for_cover_depth",
218 .data = {.spin_btn = {0, 100, 1}}},
221 .cfg_type =
VALUE_BOOLEAN, .cname =
"show_filepopup_for_tuple"},
223 .cfg_type =
VALUE_INT, .cname =
"filepopup_delay",
224 .data = {.spin_btn = {0, 100, 1}}},
226 .cfg_type =
VALUE_BOOLEAN, .cname =
"filepopup_showprogressbar"}};
228 #define TITLESTRING_NPRESETS 6
232 "${?artist:${artist} - }${title}",
233 "${?artist:${artist} - }${?album:${album} - }${title}",
234 "${?artist:${artist} - }${?album:${album} - }${?track-number:${track-number}. }${title}",
235 "${?artist:${artist} }${?album:[ ${album} ] }${?artist:- }${?track-number:${track-number}. }${title}",
236 "${?album:${album} - }${title}"};
240 N_(
"ARTIST - TITLE"),
241 N_(
"ARTIST - ALBUM - TITLE"),
242 N_(
"ARTIST - ALBUM - TRACK. TITLE"),
243 N_(
"ARTIST [ ALBUM ] - TRACK. TITLE"),
244 N_(
"ALBUM - TITLE")};
250 GtkTreeSelection * selection)
256 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
260 gtk_notebook_set_current_page(notebook, index);
268 gtk_editable_insert_text(editable, text, strlen(text), pos);
275 const char *separator =
" - ";
276 int item = GPOINTER_TO_INT(data);
295 GtkMenu * menu = data;
308 if (gtk_combo_box_get_active (cbox) != preset)
309 gtk_combo_box_set_active (cbox, preset);
314 const char *
format = gtk_entry_get_text (entry);
322 int preset = gtk_combo_box_get_active (cbox);
332 * (
bool_t *) widget->cfg = value;
333 else if (widget->cname)
334 set_bool (widget->csect, widget->cname, value);
336 if (widget->callback)
345 return * (
bool_t *) widget->cfg;
346 else if (widget->cname)
347 return get_bool (widget->csect, widget->cname);
354 g_return_if_fail (widget->cfg_type ==
VALUE_INT);
357 * (
int *) widget->cfg = value;
358 else if (widget->cname)
359 set_int (widget->csect, widget->cname, value);
361 if (widget->callback)
367 g_return_val_if_fail (widget->cfg_type ==
VALUE_INT, 0);
370 return * (
int *) widget->cfg;
371 else if (widget->cname)
372 return get_int (widget->csect, widget->cname);
379 g_return_if_fail (widget->cfg_type ==
VALUE_FLOAT);
382 * (
float *) widget->cfg = value;
383 else if (widget->cname)
384 set_double (widget->csect, widget->cname, value);
386 if (widget->callback)
392 g_return_val_if_fail (widget->cfg_type ==
VALUE_FLOAT, 0);
395 return * (
float *) widget->cfg;
396 else if (widget->cname)
397 return get_double (widget->csect, widget->cname);
408 g_free (* (
char * *) widget->cfg);
409 * (
char * *) widget->cfg = g_strdup (value);
411 else if (widget->cname)
412 set_string (widget->csect, widget->cname, value);
414 if (widget->callback)
423 return g_strdup (* (
char * *) widget->cfg);
424 else if (widget->cname)
425 return get_string (widget->csect, widget->cname);
437 widget_set_int (widget, gtk_spin_button_get_value_as_int (button));
448 GtkCellRenderer *renderer;
449 GtkTreeViewColumn *column;
450 GtkTreeSelection *selection;
456 column = gtk_tree_view_column_new();
457 gtk_tree_view_column_set_title(column,
_(
"Category"));
458 gtk_tree_view_append_column(treeview, column);
459 gtk_tree_view_column_set_spacing(column, 2);
461 renderer = gtk_cell_renderer_pixbuf_new();
462 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
463 gtk_tree_view_column_set_attributes(column, renderer,
"pixbuf", 0,
NULL);
465 renderer = gtk_cell_renderer_text_new();
466 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
467 gtk_tree_view_column_set_attributes(column, renderer,
"text", 1,
NULL);
469 g_object_set ((GObject *) renderer,
"wrap-width", 96,
"wrap-mode",
470 PANGO_WRAP_WORD_CHAR,
NULL);
473 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
474 gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
478 char * path = g_strdup_printf (
"%s/images/%s",
480 img = gdk_pixbuf_new_from_file (path,
NULL);
483 gtk_list_store_append(store, &iter);
484 gtk_list_store_set(store, &iter,
492 selection = gtk_tree_view_get_selection(treeview);
494 g_signal_connect_swapped(selection,
"changed",
512 if (gtk_toggle_button_get_active ((GtkToggleButton *) button))
522 gtk_toggle_button_set_active ((GtkToggleButton *) button,
TRUE);
532 GtkWidget * child = g_object_get_data ((GObject *) button,
"child");
534 gtk_widget_set_sensitive (child, active);
542 gtk_toggle_button_set_active ((GtkToggleButton *) button,
widget_get_bool (widget));
553 int position = gtk_combo_box_get_active (combobox);
554 widget_set_int (widget, GPOINTER_TO_INT (widget->data.combo.elements[position].value));
559 int position = gtk_combo_box_get_active (combobox);
563 static void fill_cbox (GtkWidget * combobox,
const PreferencesWidget * widget,
const char * domain)
565 for (
int i = 0; i < widget->data.combo.n_elements; i ++)
566 gtk_combo_box_text_append_text ((GtkComboBoxText *) combobox,
567 dgettext (domain, widget->data.combo.elements[i].label));
569 switch (widget->cfg_type)
574 for (
int i = 0; i < widget->data.combo.n_elements; i++)
576 if (GPOINTER_TO_INT (widget->data.combo.elements[i].value) == ivalue)
578 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
589 for(
int i = 0; i < widget->data.combo.n_elements; i++)
591 if (value && ! strcmp (widget->data.combo.elements[i].value, value))
593 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
609 label_pre, GtkWidget * * spin_btn, GtkWidget * * label_past,
const char *
614 * label_pre = gtk_label_new (dgettext (domain, widget->label));
616 *spin_btn = gtk_spin_button_new_with_range(widget->data.spin_btn.min,
617 widget->data.spin_btn.max,
618 widget->data.spin_btn.step);
622 gtk_widget_set_tooltip_text (* spin_btn, dgettext (domain,
625 if (widget->data.spin_btn.right_label) {
626 * label_past = gtk_label_new (dgettext (domain,
627 widget->data.spin_btn.right_label));
630 switch (widget->cfg_type)
633 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_int (widget));
634 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
638 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_double (widget));
639 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
648 GtkWidget * * font_btn,
const char * domain)
650 *font_btn = gtk_font_button_new();
651 gtk_font_button_set_use_font(GTK_FONT_BUTTON(*font_btn),
TRUE);
652 gtk_font_button_set_use_size(GTK_FONT_BUTTON(*font_btn),
TRUE);
653 gtk_widget_set_hexpand(*font_btn,
TRUE);
655 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
656 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
657 gtk_misc_set_alignment(GTK_MISC(*label), 1, 0.5);
658 gtk_label_set_justify(GTK_LABEL(*label), GTK_JUSTIFY_RIGHT);
659 gtk_label_set_mnemonic_widget(GTK_LABEL(*label), *font_btn);
662 if (widget->data.font_btn.title)
663 gtk_font_button_set_title (GTK_FONT_BUTTON (* font_btn),
664 dgettext (domain, widget->data.font_btn.title));
669 gtk_font_button_set_font_name ((GtkFontButton *) * font_btn, name);
676 static void create_entry (
const PreferencesWidget * widget, GtkWidget * * label,
677 GtkWidget * *
entry,
const char * domain)
679 *entry = gtk_entry_new();
680 gtk_entry_set_visibility(GTK_ENTRY(*entry), !widget->data.entry.password);
681 gtk_widget_set_hexpand(*entry,
TRUE);
684 * label = gtk_label_new (dgettext (domain, widget->label));
687 gtk_widget_set_tooltip_text (* entry, dgettext (domain, widget->tooltip));
694 gtk_entry_set_text ((GtkEntry *) * entry, value);
698 g_signal_connect (* entry,
"changed", (GCallback)
on_entry_changed, (
void *) widget);
702 static void create_label (
const PreferencesWidget * widget, GtkWidget * * label,
703 GtkWidget * * icon,
const char * domain)
705 if (widget->data.label.stock_id)
706 *icon = gtk_image_new_from_stock(widget->data.label.stock_id, GTK_ICON_SIZE_BUTTON);
708 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
709 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
711 if (widget->data.label.single_line ==
FALSE)
712 gtk_label_set_line_wrap(GTK_LABEL(*label),
TRUE);
714 gtk_misc_set_alignment(GTK_MISC(*label), 0, 0.5);
717 static void create_cbox (
const PreferencesWidget * widget, GtkWidget * * label,
718 GtkWidget * * combobox,
const char * domain)
720 * combobox = gtk_combo_box_text_new ();
723 * label = gtk_label_new (dgettext (domain, widget->label));
729 static void fill_grid (GtkWidget * grid,
const PreferencesWidget * elements,
int
730 amt,
const char * domain)
733 GtkWidget *widget_left, *widget_middle, *widget_right;
735 for (x = 0; x < amt; ++x) {
736 widget_left = widget_middle = widget_right =
NULL;
737 switch (elements[x].
type) {
740 & widget_middle, & widget_right, domain);
743 create_label (& elements[x], & widget_middle, & widget_left,
751 create_entry (& elements[x], & widget_left, & widget_middle,
755 create_cbox (& elements[x], & widget_left, & widget_middle,
759 g_warning(
"Unsupported widget type %d in table", elements[x].type);
763 gtk_grid_attach(GTK_GRID(grid), widget_left, 0, x, 1, 1);
766 gtk_grid_attach(GTK_GRID(grid), widget_middle, 1, x, 1, 1);
769 gtk_grid_attach(GTK_GRID(grid), widget_right, 2, x, 1, 1);
775 int amt,
const char * domain)
777 GtkWidget *alignment =
NULL, *widget =
NULL;
778 GtkWidget *child_box =
NULL;
779 GSList *radio_btn_group =
NULL;
781 for (
int x = 0; x < amt; x ++)
783 GtkWidget * label =
NULL;
785 if (widget && widgets[x].child)
788 child_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
789 g_object_set_data(G_OBJECT(widget),
"child", child_box);
790 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
791 gtk_box_pack_start(box, alignment,
FALSE,
FALSE, 0);
792 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
793 gtk_container_add (GTK_CONTAINER (alignment), child_box);
795 if (GTK_IS_TOGGLE_BUTTON (widget))
796 gtk_widget_set_sensitive (child_box, gtk_toggle_button_get_active ((GtkToggleButton *) widget));
801 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
802 gtk_alignment_set_padding ((GtkAlignment *) alignment, 6, 0, 12, 0);
803 gtk_box_pack_start(child_box ? GTK_BOX(child_box) : box, alignment,
FALSE,
FALSE, 0);
806 radio_btn_group =
NULL;
808 switch(widgets[x].
type) {
810 widget = gtk_check_button_new_with_mnemonic (dgettext (domain, widgets[x].label));
814 if (strstr (widgets[x].label,
"<b>"))
815 gtk_alignment_set_padding ((GtkAlignment *) alignment,
816 (x == 0) ? 0 : 12, 0, 0, 0);
818 GtkWidget * icon =
NULL;
824 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
825 gtk_box_pack_start(GTK_BOX(widget), icon,
FALSE,
FALSE, 0);
826 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
830 widget = gtk_radio_button_new_with_mnemonic (radio_btn_group,
831 dgettext (domain, widgets[x].label));
832 radio_btn_group = gtk_radio_button_get_group ((GtkRadioButton *) widget);
836 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
838 GtkWidget *label_pre =
NULL, *spin_btn =
NULL, *label_past =
NULL;
840 & label_past, domain);
843 gtk_box_pack_start(GTK_BOX(widget), label_pre,
FALSE,
FALSE, 0);
845 gtk_box_pack_start(GTK_BOX(widget), spin_btn,
FALSE,
FALSE, 0);
847 gtk_box_pack_start(GTK_BOX(widget), label_past,
FALSE,
FALSE, 0);
851 if (widgets[x].data.populate)
852 widget = widgets[x].data.populate();
858 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
860 GtkWidget *font_btn =
NULL;
864 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
866 gtk_box_pack_start(GTK_BOX(widget), font_btn,
FALSE,
FALSE, 0);
869 widget = gtk_grid_new();
870 fill_grid(widget, widgets[x].data.table.elem,
871 widgets[x].data.table.rows, domain);
872 gtk_grid_set_column_spacing(GTK_GRID(widget), 6);
873 gtk_grid_set_row_spacing(GTK_GRID(widget), 6);
876 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
882 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
884 gtk_box_pack_start(GTK_BOX(widget), entry,
TRUE,
TRUE, 0);
887 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
889 GtkWidget *combo =
NULL;
890 create_cbox (& widgets[x], & label, & combo, domain);
893 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
895 gtk_box_pack_start(GTK_BOX(widget), combo,
FALSE,
FALSE, 0);
898 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 0, 0);
900 if (widgets[x].data.box.horizontal) {
901 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
903 widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
907 widgets[x].data.box.elem, widgets[x].data.box.n_elem, domain);
909 if (widgets[x].data.box.frame) {
913 widget = gtk_frame_new (dgettext (domain, widgets[x].label));
914 gtk_container_add(GTK_CONTAINER(widget), tmp);
918 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
920 widget = gtk_notebook_new();
923 for (i = 0; i<widgets[x].data.notebook.n_tabs; i++) {
925 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
927 widgets[x].data.notebook.tabs[i].widgets,
928 widgets[x].data.notebook.tabs[i].n_widgets, domain);
930 gtk_notebook_append_page (GTK_NOTEBOOK (widget), vbox,
931 gtk_label_new (dgettext (domain,
932 widgets[x].data.notebook.tabs[i].name)));
936 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 6, 0, 0);
938 if (widgets[x].data.separator.horizontal ==
TRUE) {
939 widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
941 widget = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
948 if (widget && !gtk_widget_get_parent(widget))
949 gtk_container_add(GTK_CONTAINER(alignment), widget);
950 if (widget && widgets[x].tooltip && widgets[x].type !=
WIDGET_SPIN_BTN)
951 gtk_widget_set_tooltip_text (widget, dgettext (domain,
952 widgets[x].tooltip));
960 GtkWidget *titlestring_tag_menu, *menu_item;
963 titlestring_tag_menu = gtk_menu_new();
965 menu_item = gtk_menu_item_new_with_label(
_(title_field_tags[i].
name));
966 gtk_menu_shell_append(GTK_MENU_SHELL(titlestring_tag_menu), menu_item);
967 g_signal_connect(menu_item,
"activate",
971 gtk_widget_show_all(titlestring_tag_menu);
973 return titlestring_tag_menu;
978 set_bool (
NULL,
"show_numbers_in_pl", gtk_toggle_button_get_active (numbers));
985 set_bool (
NULL,
"leading_zero", gtk_toggle_button_get_active (leading));
992 * cbox = gtk_combo_box_text_new ();
995 gtk_combo_box_text_append_text ((GtkComboBoxText *) * cbox,
_(
"Custom"));
997 * entry = gtk_entry_new ();
1001 gtk_entry_set_text ((GtkEntry *) * entry, format);
1012 GtkWidget *alignment55;
1014 GtkWidget *alignment56;
1016 GtkWidget *titlestring_help_button;
1021 GtkWidget * numbers_alignment, * numbers;
1023 vbox5 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1028 alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1);
1029 gtk_box_pack_start (GTK_BOX (vbox5), alignment55,
FALSE,
FALSE, 0);
1030 gtk_alignment_set_padding ((GtkAlignment *) alignment55, 12, 3, 0, 0);
1032 label60 = gtk_label_new (
_(
"<b>Song Display</b>"));
1033 gtk_container_add (GTK_CONTAINER (alignment55), label60);
1034 gtk_label_set_use_markup (GTK_LABEL (label60),
TRUE);
1035 gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
1037 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1038 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1039 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1041 numbers = gtk_check_button_new_with_label (
_(
"Show song numbers"));
1042 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
1044 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1046 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1048 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1049 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1050 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1052 numbers = gtk_check_button_new_with_label (
_(
"Show leading zeroes (02:00 "
1053 "instead of 2:00)"));
1054 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
get_bool (
NULL,
"leading_zero"));
1055 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1057 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1059 alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1);
1060 gtk_box_pack_start (GTK_BOX (vbox5), alignment56,
FALSE,
FALSE, 0);
1061 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0);
1063 grid6 = gtk_grid_new ();
1064 gtk_container_add (GTK_CONTAINER (alignment56), grid6);
1065 gtk_grid_set_row_spacing (GTK_GRID (grid6), 4);
1066 gtk_grid_set_column_spacing (GTK_GRID (grid6), 12);
1068 titlestring_help_button = gtk_button_new ();
1069 gtk_grid_attach (GTK_GRID (grid6), titlestring_help_button, 2, 1, 1, 1);
1071 gtk_widget_set_can_focus (titlestring_help_button,
FALSE);
1072 gtk_widget_set_tooltip_text (titlestring_help_button,
_(
"Show information about titlestring format"));
1073 gtk_button_set_relief (GTK_BUTTON (titlestring_help_button), GTK_RELIEF_HALF);
1074 gtk_button_set_focus_on_click (GTK_BUTTON (titlestring_help_button),
FALSE);
1076 image1 = gtk_image_new_from_stock (
"gtk-index", GTK_ICON_SIZE_BUTTON);
1077 gtk_container_add (GTK_CONTAINER (titlestring_help_button), image1);
1079 GtkWidget * titlestring_cbox;
1081 gtk_widget_set_hexpand (titlestring_cbox,
TRUE);
1083 gtk_grid_attach (GTK_GRID (grid6), titlestring_cbox, 1, 0, 1, 1);
1086 label62 = gtk_label_new (
_(
"Custom string:"));
1087 gtk_grid_attach (GTK_GRID (grid6), label62, 0, 1, 1, 1);
1088 gtk_label_set_justify (GTK_LABEL (label62), GTK_JUSTIFY_RIGHT);
1089 gtk_misc_set_alignment (GTK_MISC (label62), 1, 0.5);
1091 label61 = gtk_label_new (
_(
"Title format:"));
1092 gtk_grid_attach (GTK_GRID (grid6), label61, 0, 0, 1, 1);
1093 gtk_label_set_justify (GTK_LABEL (label61), GTK_JUSTIFY_RIGHT);
1094 gtk_misc_set_alignment (GTK_MISC (label61), 1, 0.5);
1096 g_signal_connect(titlestring_help_button,
"clicked",
1098 titlestring_tag_menu);
1103 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1113 * list = g_list_prepend (* list, plugin);
1119 static GList * list =
NULL;
1125 list = g_list_reverse (list);
1134 gtk_combo_box_set_active (combo, g_list_index (
output_get_list (), plugin));
1142 gtk_combo_box_get_active (combo));
1143 g_return_if_fail (plugin !=
NULL);
1152 gtk_combo_box_text_append_text ((GtkComboBoxText *) combo,
1164 g_return_if_fail (plugin !=
NULL);
1171 g_return_if_fail (plugin !=
NULL);
1177 GtkWidget * hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1178 gtk_box_pack_start ((GtkBox *) hbox1, gtk_label_new (
_(
"Output plugin:")),
FALSE,
FALSE, 0);
1180 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
1181 gtk_box_pack_start ((GtkBox *) hbox1, vbox,
FALSE,
FALSE, 0);
1183 GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1184 gtk_box_pack_start ((GtkBox *) vbox, hbox2,
FALSE,
FALSE, 0);
1186 GtkWidget * output_plugin_cbox = gtk_combo_box_text_new ();
1187 gtk_box_pack_start ((GtkBox *) hbox2, output_plugin_cbox,
FALSE,
FALSE, 0);
1189 GtkWidget * hbox3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1190 gtk_box_pack_start ((GtkBox *) vbox, hbox3,
FALSE,
FALSE, 0);
1210 GtkWidget * audio_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1218 GtkWidget *connectivity_page_vbox;
1221 connectivity_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1224 vbox29 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1225 gtk_box_pack_start (GTK_BOX (connectivity_page_vbox), vbox29,
TRUE,
TRUE, 0);
1232 GtkWidget * notebook = gtk_notebook_new ();
1237 const char * names[] = {
N_(
"Transport"),
N_(
"Playlist"),
N_(
"Input"),
1238 N_(
"Effect"),
N_(
"Visualization"),
N_(
"General")};
1240 for (
int i = 0; i < G_N_ELEMENTS (types); i ++)
1242 (types[i]), gtk_label_new (
_(names[i])));
1250 gtk_widget_destroy(window);
1257 char *aud_version_string;
1261 GtkWidget *scrolledwindow6;
1262 GtkWidget *hseparator1;
1264 GtkWidget *audversionlabel;
1265 GtkWidget *prefswin_button_box;
1269 GtkAccelGroup *accel_group;
1271 accel_group = gtk_accel_group_new ();
1273 prefswin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1274 gtk_window_set_type_hint (GTK_WINDOW (
prefswin), GDK_WINDOW_TYPE_HINT_DIALOG);
1275 gtk_container_set_border_width (GTK_CONTAINER (
prefswin), 12);
1276 gtk_window_set_title (GTK_WINDOW (
prefswin),
_(
"Audacious Preferences"));
1277 gtk_window_set_position (GTK_WINDOW (
prefswin), GTK_WIN_POS_CENTER);
1278 gtk_window_set_default_size (GTK_WINDOW (
prefswin), 680, 400);
1280 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1281 gtk_container_add (GTK_CONTAINER (
prefswin), vbox);
1283 hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
1284 gtk_box_pack_start (GTK_BOX (vbox), hbox1,
TRUE,
TRUE, 0);
1286 scrolledwindow6 = gtk_scrolled_window_new (
NULL,
NULL);
1287 gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow6,
FALSE,
FALSE, 0);
1288 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1289 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN);
1293 gtk_widget_set_size_request (scrolledwindow6, 168, -1);
1310 hseparator1 = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
1311 gtk_box_pack_start (GTK_BOX (vbox), hseparator1,
FALSE,
FALSE, 6);
1313 hbox4 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1314 gtk_box_pack_start (GTK_BOX (vbox), hbox4,
FALSE,
FALSE, 0);
1316 audversionlabel = gtk_label_new (
"");
1317 gtk_box_pack_start (GTK_BOX (hbox4), audversionlabel,
FALSE,
FALSE, 0);
1318 gtk_label_set_use_markup (GTK_LABEL (audversionlabel),
TRUE);
1320 prefswin_button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
1321 gtk_box_pack_start (GTK_BOX (hbox4), prefswin_button_box,
TRUE,
TRUE, 0);
1322 gtk_button_box_set_layout (GTK_BUTTON_BOX (prefswin_button_box), GTK_BUTTONBOX_END);
1323 gtk_box_set_spacing (GTK_BOX (prefswin_button_box), 6);
1325 hbox11 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
1327 image10 = gtk_image_new_from_stock (
"gtk-refresh", GTK_ICON_SIZE_BUTTON);
1328 gtk_box_pack_start (GTK_BOX (hbox11), image10,
FALSE,
FALSE, 0);
1330 close = gtk_button_new_from_stock (
"gtk-close");
1331 gtk_container_add (GTK_CONTAINER (prefswin_button_box), close);
1332 gtk_widget_set_can_default(close,
TRUE);
1333 gtk_widget_add_accelerator (close,
"clicked", accel_group,
1334 GDK_KEY_Escape, (GdkModifierType) 0,
1338 gtk_window_add_accel_group (GTK_WINDOW (
prefswin), accel_group);
1341 g_signal_connect(G_OBJECT(
prefswin),
"delete_event",
1344 g_signal_connect_swapped(G_OBJECT(close),
"clicked",
1353 aud_version_string = g_strdup_printf
1354 (
"<span size='small'>%s (%s)</span>",
"Audacious " VERSION, BUILDSTAMP);
1356 gtk_label_set_markup( GTK_LABEL(audversionlabel) , aud_version_string );
1357 g_free(aud_version_string);
1358 gtk_widget_show_all(vbox);
1374 gtk_window_present ((GtkWindow *)
prefswin);
1381 gtk_widget_hide(GTK_WIDGET(
prefswin));
1385 const char * imgurl)
1396 category_queue = ent;
1402 category_queue = ent->
next;
1422 GtkTreeModel *model;
1424 GdkPixbuf *img =
NULL;
1434 model = gtk_tree_view_get_model(treeview);
1443 gtk_widget_show(container);
1450 img = gdk_pixbuf_new_from_file(imgurl,
NULL);
1452 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
1453 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
1459 g_object_unref(img);
1467 GtkTreeModel *model;
1484 model = gtk_tree_view_get_model(treeview);
1489 ret = gtk_tree_model_get_iter_first(model, &iter);
1497 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
1498 ret = gtk_tree_model_get_iter_first(model, &iter);
1508 ret = gtk_tree_model_iter_next(model, &iter);