23 #include <gdk/gdkkeysyms.h>
69 {
"audio.png",
N_(
"Audio")},
70 {
"connectivity.png",
N_(
"Network")},
71 {
"playlist.png",
N_(
"Playlist")},
72 {
"info.png",
N_(
"Song Info")},
73 {
"plugins.png",
N_(
"Plugins")},
79 {
N_(
"Artist") ,
"${artist}" },
80 {
N_(
"Album") ,
"${album}" },
81 {
N_(
"Title") ,
"${title}" },
82 {
N_(
"Tracknumber"),
"${track-number}" },
83 {
N_(
"Genre") ,
"${genre}" },
84 {
N_(
"Filename") ,
"${file-name}" },
85 {
N_(
"Filepath") ,
"${file-path}" },
86 {
N_(
"Date") ,
"${date}" },
87 {
N_(
"Year") ,
"${year}" },
88 {
N_(
"Comment") ,
"${comment}" },
89 {
N_(
"Codec") ,
"${codec}" },
90 {
N_(
"Quality") ,
"${quality}" },
97 {GUESS_REGION_AR,
N_(
"Arabic")},
98 {GUESS_REGION_BL,
N_(
"Baltic")},
99 {GUESS_REGION_CN,
N_(
"Chinese")},
100 {GUESS_REGION_GR,
N_(
"Greek")},
101 {GUESS_REGION_HW,
N_(
"Hebrew")},
102 {GUESS_REGION_JP,
N_(
"Japanese")},
103 {GUESS_REGION_KR,
N_(
"Korean")},
104 {GUESS_REGION_PL,
N_(
"Polish")},
105 {GUESS_REGION_RU,
N_(
"Russian")},
106 {GUESS_REGION_TW,
N_(
"Taiwanese")},
107 {GUESS_REGION_TR,
N_(
"Turkish")}};
111 { GINT_TO_POINTER(16),
"16" },
112 { GINT_TO_POINTER(24),
"24" },
113 { GINT_TO_POINTER(32),
"32" },
114 {GINT_TO_POINTER (0),
N_(
"Floating point")},
139 .cfg_type =
VALUE_INT, .cname =
"output_buffer_size",
140 .data = {.spin_btn = {100, 10000, 1000,
N_(
"ms")}}},
144 .cfg_type =
VALUE_BOOLEAN, .cname =
"software_volume_control"},
150 .cfg_type =
VALUE_BOOLEAN, .cname =
"enable_clipping_prevention"},
153 .cfg_type =
VALUE_FLOAT, .cname =
"replay_gain_preamp",
154 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}},
157 .data = {.spin_btn = {-15, 15, 0.1,
N_(
"dB")}}}};
166 .data = {.entry = {.password =
TRUE}}}};
183 .data = {.combo = {chardet_detector_presets, G_N_ELEMENTS (chardet_detector_presets)}}},
186 .cname =
"chardet_fallback", .child =
TRUE}};
191 .cfg_type =
VALUE_BOOLEAN, .cname =
"resume_playback_on_startup"},
210 {
WIDGET_LABEL,
N_(
"Search for images matching these words (comma-separated):")},
212 {
WIDGET_LABEL,
N_(
"Exclude images matching these words (comma-separated):")},
219 .cfg_type =
VALUE_INT, .cname =
"recurse_for_cover_depth",
220 .data = {.spin_btn = {0, 100, 1}}},
223 .cfg_type =
VALUE_BOOLEAN, .cname =
"show_filepopup_for_tuple"},
225 .cfg_type =
VALUE_INT, .cname =
"filepopup_delay",
226 .data = {.spin_btn = {0, 100, 1}}},
228 .cfg_type =
VALUE_BOOLEAN, .cname =
"filepopup_showprogressbar"}};
230 #define TITLESTRING_NPRESETS 6
234 "${?artist:${artist} - }${title}",
235 "${?artist:${artist} - }${?album:${album} - }${title}",
236 "${?artist:${artist} - }${?album:${album} - }${?track-number:${track-number}. }${title}",
237 "${?artist:${artist} }${?album:[ ${album} ] }${?artist:- }${?track-number:${track-number}. }${title}",
238 "${?album:${album} - }${title}"};
242 N_(
"ARTIST - TITLE"),
243 N_(
"ARTIST - ALBUM - TITLE"),
244 N_(
"ARTIST - ALBUM - TRACK. TITLE"),
245 N_(
"ARTIST [ ALBUM ] - TRACK. TITLE"),
246 N_(
"ALBUM - TITLE")};
252 GtkTreeSelection * selection)
258 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
262 gtk_notebook_set_current_page(notebook, index);
270 gtk_editable_insert_text(editable, text, strlen(text), pos);
277 const char *separator =
" - ";
278 int item = GPOINTER_TO_INT(data);
297 GtkMenu * menu = data;
310 if (gtk_combo_box_get_active (cbox) != preset)
311 gtk_combo_box_set_active (cbox, preset);
316 const char *
format = gtk_entry_get_text (entry);
324 int preset = gtk_combo_box_get_active (cbox);
334 * (
bool_t *) widget->cfg = value;
335 else if (widget->cname)
336 set_bool (widget->csect, widget->cname, value);
338 if (widget->callback)
347 return * (
bool_t *) widget->cfg;
348 else if (widget->cname)
349 return get_bool (widget->csect, widget->cname);
356 g_return_if_fail (widget->cfg_type ==
VALUE_INT);
359 * (
int *) widget->cfg = value;
360 else if (widget->cname)
361 set_int (widget->csect, widget->cname, value);
363 if (widget->callback)
369 g_return_val_if_fail (widget->cfg_type ==
VALUE_INT, 0);
372 return * (
int *) widget->cfg;
373 else if (widget->cname)
374 return get_int (widget->csect, widget->cname);
381 g_return_if_fail (widget->cfg_type ==
VALUE_FLOAT);
384 * (
float *) widget->cfg = value;
385 else if (widget->cname)
386 set_double (widget->csect, widget->cname, value);
388 if (widget->callback)
394 g_return_val_if_fail (widget->cfg_type ==
VALUE_FLOAT, 0);
397 return * (
float *) widget->cfg;
398 else if (widget->cname)
399 return get_double (widget->csect, widget->cname);
410 g_free (* (
char * *) widget->cfg);
411 * (
char * *) widget->cfg = g_strdup (value);
413 else if (widget->cname)
414 set_string (widget->csect, widget->cname, value);
416 if (widget->callback)
425 return g_strdup (* (
char * *) widget->cfg);
426 else if (widget->cname)
427 return get_string (widget->csect, widget->cname);
439 widget_set_int (widget, gtk_spin_button_get_value_as_int (button));
450 GtkCellRenderer *renderer;
451 GtkTreeViewColumn *column;
452 GtkTreeSelection *selection;
458 column = gtk_tree_view_column_new();
459 gtk_tree_view_column_set_title(column,
_(
"Category"));
460 gtk_tree_view_append_column(treeview, column);
461 gtk_tree_view_column_set_spacing(column, 2);
463 renderer = gtk_cell_renderer_pixbuf_new();
464 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
465 gtk_tree_view_column_set_attributes(column, renderer,
"pixbuf", 0,
NULL);
467 renderer = gtk_cell_renderer_text_new();
468 gtk_tree_view_column_pack_start(column, renderer,
FALSE);
469 gtk_tree_view_column_set_attributes(column, renderer,
"text", 1,
NULL);
471 g_object_set ((GObject *) renderer,
"wrap-width", 96,
"wrap-mode",
472 PANGO_WRAP_WORD_CHAR,
NULL);
475 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
476 gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
480 char * path = g_strdup_printf (
"%s/images/%s",
482 img = gdk_pixbuf_new_from_file (path,
NULL);
485 gtk_list_store_append(store, &iter);
486 gtk_list_store_set(store, &iter,
494 selection = gtk_tree_view_get_selection(treeview);
496 g_signal_connect_swapped(selection,
"changed",
514 if (gtk_toggle_button_get_active ((GtkToggleButton *) button))
524 gtk_toggle_button_set_active ((GtkToggleButton *) button,
TRUE);
534 GtkWidget * child = g_object_get_data ((GObject *) button,
"child");
536 gtk_widget_set_sensitive (child, active);
544 gtk_toggle_button_set_active ((GtkToggleButton *) button,
widget_get_bool (widget));
555 int position = gtk_combo_box_get_active (combobox);
556 widget_set_int (widget, GPOINTER_TO_INT (widget->data.combo.elements[position].value));
561 int position = gtk_combo_box_get_active (combobox);
565 static void fill_cbox (GtkWidget * combobox,
const PreferencesWidget * widget,
const char * domain)
567 for (
int i = 0; i < widget->data.combo.n_elements; i ++)
568 gtk_combo_box_text_append_text ((GtkComboBoxText *) combobox,
569 dgettext (domain, widget->data.combo.elements[i].label));
571 switch (widget->cfg_type)
576 for (
int i = 0; i < widget->data.combo.n_elements; i++)
578 if (GPOINTER_TO_INT (widget->data.combo.elements[i].value) == ivalue)
580 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
591 for(
int i = 0; i < widget->data.combo.n_elements; i++)
593 if (value && ! strcmp (widget->data.combo.elements[i].value, value))
595 gtk_combo_box_set_active ((GtkComboBox *) combobox, i);
611 label_pre, GtkWidget * * spin_btn, GtkWidget * * label_past,
const char *
616 * label_pre = gtk_label_new (dgettext (domain, widget->label));
618 *spin_btn = gtk_spin_button_new_with_range(widget->data.spin_btn.min,
619 widget->data.spin_btn.max,
620 widget->data.spin_btn.step);
624 gtk_widget_set_tooltip_text (* spin_btn, dgettext (domain,
627 if (widget->data.spin_btn.right_label) {
628 * label_past = gtk_label_new (dgettext (domain,
629 widget->data.spin_btn.right_label));
632 switch (widget->cfg_type)
635 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_int (widget));
636 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
640 gtk_spin_button_set_value ((GtkSpinButton *) * spin_btn,
widget_get_double (widget));
641 g_signal_connect (* spin_btn,
"value_changed", (GCallback)
650 GtkWidget * * font_btn,
const char * domain)
652 *font_btn = gtk_font_button_new();
653 gtk_font_button_set_use_font(GTK_FONT_BUTTON(*font_btn),
TRUE);
654 gtk_font_button_set_use_size(GTK_FONT_BUTTON(*font_btn),
TRUE);
655 gtk_widget_set_hexpand(*font_btn,
TRUE);
657 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
658 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
659 gtk_misc_set_alignment(GTK_MISC(*label), 1, 0.5);
660 gtk_label_set_justify(GTK_LABEL(*label), GTK_JUSTIFY_RIGHT);
661 gtk_label_set_mnemonic_widget(GTK_LABEL(*label), *font_btn);
664 if (widget->data.font_btn.title)
665 gtk_font_button_set_title (GTK_FONT_BUTTON (* font_btn),
666 dgettext (domain, widget->data.font_btn.title));
671 gtk_font_button_set_font_name ((GtkFontButton *) * font_btn, name);
678 static void create_entry (
const PreferencesWidget * widget, GtkWidget * * label,
679 GtkWidget * *
entry,
const char * domain)
681 *entry = gtk_entry_new();
682 gtk_entry_set_visibility(GTK_ENTRY(*entry), !widget->data.entry.password);
683 gtk_widget_set_hexpand(*entry,
TRUE);
686 * label = gtk_label_new (dgettext (domain, widget->label));
689 gtk_widget_set_tooltip_text (* entry, dgettext (domain, widget->tooltip));
696 gtk_entry_set_text ((GtkEntry *) * entry, value);
700 g_signal_connect (* entry,
"changed", (GCallback)
on_entry_changed, (
void *) widget);
704 static void create_label (
const PreferencesWidget * widget, GtkWidget * * label,
705 GtkWidget * * icon,
const char * domain)
707 if (widget->data.label.stock_id)
708 *icon = gtk_image_new_from_stock(widget->data.label.stock_id, GTK_ICON_SIZE_BUTTON);
710 * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
711 gtk_label_set_use_markup(GTK_LABEL(*label),
TRUE);
713 if (widget->data.label.single_line ==
FALSE)
714 gtk_label_set_line_wrap(GTK_LABEL(*label),
TRUE);
716 gtk_misc_set_alignment(GTK_MISC(*label), 0, 0.5);
719 static void create_cbox (
const PreferencesWidget * widget, GtkWidget * * label,
720 GtkWidget * * combobox,
const char * domain)
722 * combobox = gtk_combo_box_text_new ();
725 * label = gtk_label_new (dgettext (domain, widget->label));
731 static void fill_grid (GtkWidget * grid,
const PreferencesWidget * elements,
int
732 amt,
const char * domain)
735 GtkWidget *widget_left, *widget_middle, *widget_right;
737 for (x = 0; x < amt; ++x) {
738 widget_left = widget_middle = widget_right =
NULL;
739 switch (elements[x].
type) {
742 & widget_middle, & widget_right, domain);
745 create_label (& elements[x], & widget_middle, & widget_left,
753 create_entry (& elements[x], & widget_left, & widget_middle,
757 create_cbox (& elements[x], & widget_left, & widget_middle,
761 g_warning(
"Unsupported widget type %d in table", elements[x].type);
765 gtk_grid_attach(GTK_GRID(grid), widget_left, 0, x, 1, 1);
768 gtk_grid_attach(GTK_GRID(grid), widget_middle, 1, x, 1, 1);
771 gtk_grid_attach(GTK_GRID(grid), widget_right, 2, x, 1, 1);
777 int amt,
const char * domain)
779 GtkWidget *alignment =
NULL, *widget =
NULL;
780 GtkWidget *child_box =
NULL;
781 GSList *radio_btn_group =
NULL;
783 for (
int x = 0; x < amt; x ++)
785 GtkWidget * label =
NULL;
787 if (widget && widgets[x].child)
790 child_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
791 g_object_set_data(G_OBJECT(widget),
"child", child_box);
792 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
793 gtk_box_pack_start(box, alignment,
FALSE,
FALSE, 0);
794 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
795 gtk_container_add (GTK_CONTAINER (alignment), child_box);
797 if (GTK_IS_TOGGLE_BUTTON (widget))
798 gtk_widget_set_sensitive (child_box, gtk_toggle_button_get_active ((GtkToggleButton *) widget));
803 alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
804 gtk_alignment_set_padding ((GtkAlignment *) alignment, 6, 0, 12, 0);
805 gtk_box_pack_start(child_box ? GTK_BOX(child_box) : box, alignment,
FALSE,
FALSE, 0);
808 radio_btn_group =
NULL;
810 switch(widgets[x].
type) {
812 widget = gtk_check_button_new_with_mnemonic (dgettext (domain, widgets[x].label));
816 if (strstr (widgets[x].label,
"<b>"))
817 gtk_alignment_set_padding ((GtkAlignment *) alignment,
818 (x == 0) ? 0 : 12, 0, 0, 0);
820 GtkWidget * icon =
NULL;
826 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
827 gtk_box_pack_start(GTK_BOX(widget), icon,
FALSE,
FALSE, 0);
828 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
832 widget = gtk_radio_button_new_with_mnemonic (radio_btn_group,
833 dgettext (domain, widgets[x].label));
834 radio_btn_group = gtk_radio_button_get_group ((GtkRadioButton *) widget);
838 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
840 GtkWidget *label_pre =
NULL, *spin_btn =
NULL, *label_past =
NULL;
842 & label_past, domain);
845 gtk_box_pack_start(GTK_BOX(widget), label_pre,
FALSE,
FALSE, 0);
847 gtk_box_pack_start(GTK_BOX(widget), spin_btn,
FALSE,
FALSE, 0);
849 gtk_box_pack_start(GTK_BOX(widget), label_past,
FALSE,
FALSE, 0);
853 if (widgets[x].data.populate)
854 widget = widgets[x].data.populate();
860 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
862 GtkWidget *font_btn =
NULL;
866 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
868 gtk_box_pack_start(GTK_BOX(widget), font_btn,
FALSE,
FALSE, 0);
871 widget = gtk_grid_new();
872 fill_grid(widget, widgets[x].data.table.elem,
873 widgets[x].data.table.rows, domain);
874 gtk_grid_set_column_spacing(GTK_GRID(widget), 6);
875 gtk_grid_set_row_spacing(GTK_GRID(widget), 6);
878 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
884 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
886 gtk_box_pack_start(GTK_BOX(widget), entry,
TRUE,
TRUE, 0);
889 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
891 GtkWidget *combo =
NULL;
892 create_cbox (& widgets[x], & label, & combo, domain);
895 gtk_box_pack_start(GTK_BOX(widget), label,
FALSE,
FALSE, 0);
897 gtk_box_pack_start(GTK_BOX(widget), combo,
FALSE,
FALSE, 0);
900 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 0, 0);
902 if (widgets[x].data.box.horizontal) {
903 widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
905 widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
909 widgets[x].data.box.elem, widgets[x].data.box.n_elem, domain);
911 if (widgets[x].data.box.frame) {
915 widget = gtk_frame_new (dgettext (domain, widgets[x].label));
916 gtk_container_add(GTK_CONTAINER(widget), tmp);
920 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
922 widget = gtk_notebook_new();
925 for (i = 0; i<widgets[x].data.notebook.n_tabs; i++) {
927 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
929 widgets[x].data.notebook.tabs[i].widgets,
930 widgets[x].data.notebook.tabs[i].n_widgets, domain);
932 gtk_notebook_append_page (GTK_NOTEBOOK (widget), vbox,
933 gtk_label_new (dgettext (domain,
934 widgets[x].data.notebook.tabs[i].name)));
938 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 6, 0, 0);
940 if (widgets[x].data.separator.horizontal ==
TRUE) {
941 widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
943 widget = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
950 if (widget && !gtk_widget_get_parent(widget))
951 gtk_container_add(GTK_CONTAINER(alignment), widget);
952 if (widget && widgets[x].tooltip && widgets[x].type !=
WIDGET_SPIN_BTN)
953 gtk_widget_set_tooltip_text (widget, dgettext (domain,
954 widgets[x].tooltip));
962 GtkWidget *titlestring_tag_menu, *menu_item;
965 titlestring_tag_menu = gtk_menu_new();
967 menu_item = gtk_menu_item_new_with_label(
_(title_field_tags[i].
name));
968 gtk_menu_shell_append(GTK_MENU_SHELL(titlestring_tag_menu), menu_item);
969 g_signal_connect(menu_item,
"activate",
973 gtk_widget_show_all(titlestring_tag_menu);
975 return titlestring_tag_menu;
980 set_bool (
NULL,
"show_numbers_in_pl", gtk_toggle_button_get_active (numbers));
987 set_bool (
NULL,
"leading_zero", gtk_toggle_button_get_active (leading));
994 * cbox = gtk_combo_box_text_new ();
997 gtk_combo_box_text_append_text ((GtkComboBoxText *) * cbox,
_(
"Custom"));
999 * entry = gtk_entry_new ();
1003 gtk_entry_set_text ((GtkEntry *) * entry, format);
1014 GtkWidget *alignment55;
1016 GtkWidget *alignment56;
1018 GtkWidget *titlestring_help_button;
1023 GtkWidget * numbers_alignment, * numbers;
1025 vbox5 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1030 alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1);
1031 gtk_box_pack_start (GTK_BOX (vbox5), alignment55,
FALSE,
FALSE, 0);
1032 gtk_alignment_set_padding ((GtkAlignment *) alignment55, 12, 3, 0, 0);
1034 label60 = gtk_label_new (
_(
"<b>Song Display</b>"));
1035 gtk_container_add (GTK_CONTAINER (alignment55), label60);
1036 gtk_label_set_use_markup (GTK_LABEL (label60),
TRUE);
1037 gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
1039 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1040 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1041 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1043 numbers = gtk_check_button_new_with_label (
_(
"Show song numbers"));
1044 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
1046 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1048 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1050 numbers_alignment = gtk_alignment_new (0, 0, 0, 0);
1051 gtk_alignment_set_padding ((GtkAlignment *) numbers_alignment, 0, 0, 12, 0);
1052 gtk_box_pack_start ((GtkBox *) vbox5, numbers_alignment, 0, 0, 3);
1054 numbers = gtk_check_button_new_with_label (
_(
"Show leading zeroes (02:00 "
1055 "instead of 2:00)"));
1056 gtk_toggle_button_set_active ((GtkToggleButton *) numbers,
get_bool (
NULL,
"leading_zero"));
1057 g_signal_connect ((GObject *) numbers,
"toggled", (GCallback)
1059 gtk_container_add ((GtkContainer *) numbers_alignment, numbers);
1061 alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1);
1062 gtk_box_pack_start (GTK_BOX (vbox5), alignment56,
FALSE,
FALSE, 0);
1063 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0);
1065 grid6 = gtk_grid_new ();
1066 gtk_container_add (GTK_CONTAINER (alignment56), grid6);
1067 gtk_grid_set_row_spacing (GTK_GRID (grid6), 4);
1068 gtk_grid_set_column_spacing (GTK_GRID (grid6), 12);
1070 titlestring_help_button = gtk_button_new ();
1071 gtk_grid_attach (GTK_GRID (grid6), titlestring_help_button, 2, 1, 1, 1);
1073 gtk_widget_set_can_focus (titlestring_help_button,
FALSE);
1074 gtk_widget_set_tooltip_text (titlestring_help_button,
_(
"Show information about titlestring format"));
1075 gtk_button_set_relief (GTK_BUTTON (titlestring_help_button), GTK_RELIEF_HALF);
1076 gtk_button_set_focus_on_click (GTK_BUTTON (titlestring_help_button),
FALSE);
1078 image1 = gtk_image_new_from_stock (
"gtk-index", GTK_ICON_SIZE_BUTTON);
1079 gtk_container_add (GTK_CONTAINER (titlestring_help_button), image1);
1081 GtkWidget * titlestring_cbox;
1083 gtk_widget_set_hexpand (titlestring_cbox,
TRUE);
1085 gtk_grid_attach (GTK_GRID (grid6), titlestring_cbox, 1, 0, 1, 1);
1088 label62 = gtk_label_new (
_(
"Custom string:"));
1089 gtk_grid_attach (GTK_GRID (grid6), label62, 0, 1, 1, 1);
1090 gtk_label_set_justify (GTK_LABEL (label62), GTK_JUSTIFY_RIGHT);
1091 gtk_misc_set_alignment (GTK_MISC (label62), 1, 0.5);
1093 label61 = gtk_label_new (
_(
"Title format:"));
1094 gtk_grid_attach (GTK_GRID (grid6), label61, 0, 0, 1, 1);
1095 gtk_label_set_justify (GTK_LABEL (label61), GTK_JUSTIFY_RIGHT);
1096 gtk_misc_set_alignment (GTK_MISC (label61), 1, 0.5);
1098 g_signal_connect(titlestring_help_button,
"clicked",
1100 titlestring_tag_menu);
1105 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1115 * list = g_list_prepend (* list, plugin);
1121 static GList * list =
NULL;
1127 list = g_list_reverse (list);
1136 gtk_combo_box_set_active (combo, g_list_index (
output_get_list (), plugin));
1144 gtk_combo_box_get_active (combo));
1145 g_return_if_fail (plugin !=
NULL);
1154 gtk_combo_box_text_append_text ((GtkComboBoxText *) combo,
1166 g_return_if_fail (plugin !=
NULL);
1173 g_return_if_fail (plugin !=
NULL);
1179 GtkWidget * hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1180 gtk_box_pack_start ((GtkBox *) hbox1, gtk_label_new (
_(
"Output plugin:")),
FALSE,
FALSE, 0);
1182 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
1183 gtk_box_pack_start ((GtkBox *) hbox1, vbox,
FALSE,
FALSE, 0);
1185 GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1186 gtk_box_pack_start ((GtkBox *) vbox, hbox2,
FALSE,
FALSE, 0);
1188 GtkWidget * output_plugin_cbox = gtk_combo_box_text_new ();
1189 gtk_box_pack_start ((GtkBox *) hbox2, output_plugin_cbox,
FALSE,
FALSE, 0);
1191 GtkWidget * hbox3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
1192 gtk_box_pack_start ((GtkBox *) vbox, hbox3,
FALSE,
FALSE, 0);
1212 GtkWidget * audio_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1220 GtkWidget *connectivity_page_vbox;
1223 connectivity_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1226 vbox29 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1227 gtk_box_pack_start (GTK_BOX (connectivity_page_vbox), vbox29,
TRUE,
TRUE, 0);
1234 GtkWidget * notebook = gtk_notebook_new ();
1239 const char * names[] = {
N_(
"Transport"),
N_(
"Playlist"),
N_(
"Input"),
1240 N_(
"Effect"),
N_(
"Visualization"),
N_(
"General")};
1242 for (
int i = 0; i < G_N_ELEMENTS (types); i ++)
1244 (types[i]), gtk_label_new (
_(names[i])));
1252 gtk_widget_destroy(window);
1259 char *aud_version_string;
1263 GtkWidget *scrolledwindow6;
1264 GtkWidget *hseparator1;
1266 GtkWidget *audversionlabel;
1267 GtkWidget *prefswin_button_box;
1271 GtkAccelGroup *accel_group;
1273 accel_group = gtk_accel_group_new ();
1275 prefswin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1276 gtk_window_set_type_hint (GTK_WINDOW (
prefswin), GDK_WINDOW_TYPE_HINT_DIALOG);
1277 gtk_container_set_border_width (GTK_CONTAINER (
prefswin), 12);
1278 gtk_window_set_title (GTK_WINDOW (
prefswin),
_(
"Audacious Preferences"));
1279 gtk_window_set_position (GTK_WINDOW (
prefswin), GTK_WIN_POS_CENTER);
1280 gtk_window_set_default_size (GTK_WINDOW (
prefswin), 680, 400);
1282 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1283 gtk_container_add (GTK_CONTAINER (
prefswin), vbox);
1285 hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
1286 gtk_box_pack_start (GTK_BOX (vbox), hbox1,
TRUE,
TRUE, 0);
1288 scrolledwindow6 = gtk_scrolled_window_new (
NULL,
NULL);
1289 gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow6,
FALSE,
FALSE, 0);
1290 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1291 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN);
1295 gtk_widget_set_size_request (scrolledwindow6, 168, -1);
1312 hseparator1 = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
1313 gtk_box_pack_start (GTK_BOX (vbox), hseparator1,
FALSE,
FALSE, 6);
1315 hbox4 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1316 gtk_box_pack_start (GTK_BOX (vbox), hbox4,
FALSE,
FALSE, 0);
1318 audversionlabel = gtk_label_new (
"");
1319 gtk_box_pack_start (GTK_BOX (hbox4), audversionlabel,
FALSE,
FALSE, 0);
1320 gtk_label_set_use_markup (GTK_LABEL (audversionlabel),
TRUE);
1322 prefswin_button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
1323 gtk_box_pack_start (GTK_BOX (hbox4), prefswin_button_box,
TRUE,
TRUE, 0);
1324 gtk_button_box_set_layout (GTK_BUTTON_BOX (prefswin_button_box), GTK_BUTTONBOX_END);
1325 gtk_box_set_spacing (GTK_BOX (prefswin_button_box), 6);
1327 hbox11 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
1329 image10 = gtk_image_new_from_stock (
"gtk-refresh", GTK_ICON_SIZE_BUTTON);
1330 gtk_box_pack_start (GTK_BOX (hbox11), image10,
FALSE,
FALSE, 0);
1332 close = gtk_button_new_from_stock (
"gtk-close");
1333 gtk_container_add (GTK_CONTAINER (prefswin_button_box), close);
1334 gtk_widget_set_can_default(close,
TRUE);
1335 gtk_widget_add_accelerator (close,
"clicked", accel_group,
1336 GDK_KEY_Escape, (GdkModifierType) 0,
1340 gtk_window_add_accel_group (GTK_WINDOW (
prefswin), accel_group);
1343 g_signal_connect(G_OBJECT(
prefswin),
"delete_event",
1346 g_signal_connect_swapped(G_OBJECT(close),
"clicked",
1355 aud_version_string = g_strdup_printf
1356 (
"<span size='small'>%s (%s)</span>",
"Audacious " VERSION, BUILDSTAMP);
1358 gtk_label_set_markup( GTK_LABEL(audversionlabel) , aud_version_string );
1359 g_free(aud_version_string);
1360 gtk_widget_show_all(vbox);
1376 gtk_window_present ((GtkWindow *)
prefswin);
1383 gtk_widget_hide(GTK_WIDGET(
prefswin));
1387 const char * imgurl)
1398 category_queue = ent;
1404 category_queue = ent->
next;
1424 GtkTreeModel *model;
1426 GdkPixbuf *img =
NULL;
1436 model = gtk_tree_view_get_model(treeview);
1445 gtk_widget_show(container);
1452 img = gdk_pixbuf_new_from_file(imgurl,
NULL);
1454 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
1455 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
1461 g_object_unref(img);
1469 GtkTreeModel *model;
1486 model = gtk_tree_view_get_model(treeview);
1491 ret = gtk_tree_model_get_iter_first(model, &iter);
1499 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
1500 ret = gtk_tree_model_get_iter_first(model, &iter);
1510 ret = gtk_tree_model_iter_next(model, &iter);