comparison audacious/equalizer.c @ 2198:bb5c514fc1ae trunk

[svn] - port to GtkUIManager
author nenolod
date Fri, 22 Dec 2006 06:13:13 -0800
parents ac8a7d286616
children 73aec9382028
comparison
equal deleted inserted replaced
2197:edb8ac7e7f19 2198:bb5c514fc1ae
53 enum PresetViewCols { 53 enum PresetViewCols {
54 PRESET_VIEW_COL_NAME, 54 PRESET_VIEW_COL_NAME,
55 PRESET_VIEW_N_COLS 55 PRESET_VIEW_N_COLS
56 }; 56 };
57 57
58 enum {
59 EQUALIZER_PRESETS_LOAD_PRESET,
60 EQUALIZER_PRESETS_LOAD_AUTOPRESET,
61 EQUALIZER_PRESETS_LOAD_DEFAULT,
62 EQUALIZER_PRESETS_LOAD_ZERO,
63 EQUALIZER_PRESETS_LOAD_FROM_FILE,
64 EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE,
65 EQUALIZER_PRESETS_IMPORT_WINAMPFILE,
66 EQUALIZER_PRESETS_SAVE_PRESET,
67 EQUALIZER_PRESETS_SAVE_AUTOPRESET,
68 EQUALIZER_PRESETS_SAVE_DEFAULT,
69 EQUALIZER_PRESETS_SAVE_TO_FILE,
70 EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE,
71 EQUALIZER_PRESETS_DELETE_PRESET,
72 EQUALIZER_PRESETS_DELETE_AUTOPRESET
73 };
74
75
76 struct _EqualizerPreset { 58 struct _EqualizerPreset {
77 gchar *name; 59 gchar *name;
78 gfloat preamp, bands[10]; 60 gfloat preamp, bands[10];
79 }; 61 };
80 62
95 static GdkPixmap *equalizerwin_bg, *equalizerwin_bg_x2; 77 static GdkPixmap *equalizerwin_bg, *equalizerwin_bg_x2;
96 static GdkGC *equalizerwin_gc; 78 static GdkGC *equalizerwin_gc;
97 79
98 static GList *equalizerwin_wlist = NULL; 80 static GList *equalizerwin_wlist = NULL;
99 81
100 static GtkAccelGroup *equalizerwin_accel;
101
102 static TButton *equalizerwin_on, *equalizerwin_auto; 82 static TButton *equalizerwin_on, *equalizerwin_auto;
103 83
104 static PButton *equalizerwin_presets, *equalizerwin_shade; 84 static PButton *equalizerwin_presets, *equalizerwin_shade;
105 PButton *equalizerwin_close; 85 PButton *equalizerwin_close;
106 static EqGraph *equalizerwin_graph; 86 static EqGraph *equalizerwin_graph;
107 static EqSlider *equalizerwin_preamp, *equalizerwin_bands[10]; 87 static EqSlider *equalizerwin_preamp, *equalizerwin_bands[10];
108 static HSlider *equalizerwin_volume, *equalizerwin_balance; 88 static HSlider *equalizerwin_volume, *equalizerwin_balance;
109 89
110 static GtkItemFactory *equalizerwin_presets_menu; 90 static GtkWidget *presets_menu;
111 91
112 static GList *equalizer_presets = NULL, *equalizer_auto_presets = NULL; 92 static GList *equalizer_presets = NULL, *equalizer_auto_presets = NULL;
113 93
114 94 static void action_load_preset(void);
115 static void equalizerwin_presets_menu_cb(gpointer cb_data, guint action, 95 static void action_load_auto_preset(void);
116 GtkWidget * w); 96 static void action_load_default_preset(void);
117 97 static void action_zero_preset(void);
118 static GtkItemFactoryEntry equalizerwin_presets_menu_entries[] = { 98 static void action_load_preset_file(void);
119 {N_("/Load"), NULL, NULL, 0, "<Branch>", NULL}, 99 static void action_load_preset_eqf(void);
120 {N_("/Load/Preset"), NULL, equalizerwin_presets_menu_cb, 100 static void action_import_winamp_presets(void);
121 EQUALIZER_PRESETS_LOAD_PRESET, "<Item>", NULL}, 101 static void action_save_preset(void);
122 {N_("/Load/Auto-load preset"), NULL, equalizerwin_presets_menu_cb, 102 static void action_save_auto_preset(void);
123 EQUALIZER_PRESETS_LOAD_AUTOPRESET, "<Item>", NULL}, 103 static void action_save_default_preset(void);
124 {N_("/Load/Default"), NULL, equalizerwin_presets_menu_cb, 104 static void action_save_preset_file(void);
125 EQUALIZER_PRESETS_LOAD_DEFAULT, "<Item>", NULL}, 105 static void action_save_preset_eqf(void);
126 {"/Load/-", NULL, NULL, 0, "<Separator>", NULL}, 106 static void action_delete_preset(void);
127 {N_("/Load/Zero"), NULL, equalizerwin_presets_menu_cb, 107 static void action_delete_auto_preset(void);
128 EQUALIZER_PRESETS_LOAD_ZERO, "<Item>", NULL}, 108
129 {"/Load/-", NULL, NULL, 0, "<Separator>", NULL}, 109 static GtkActionEntry equalizerwin_actions[] = {
130 {N_("/Load/From file"), NULL, equalizerwin_presets_menu_cb, 110 { "dummy", NULL, "dummy" },
131 EQUALIZER_PRESETS_LOAD_FROM_FILE, "<Item>", NULL}, 111
132 {N_("/Load/From WinAMP EQF file"), NULL, equalizerwin_presets_menu_cb, 112 { "preset load menu", NULL, N_("Load") },
133 EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE, "<Item>", NULL}, 113 { "preset import menu", NULL, N_("Import") },
134 {N_("/Import"), NULL, NULL, 0, "<Branch>", NULL}, 114 { "preset save menu", NULL, N_("Save") },
135 {N_("/Import/WinAMP Presets"), NULL, equalizerwin_presets_menu_cb, 115 { "preset delete menu", NULL, N_("Delete") },
136 EQUALIZER_PRESETS_IMPORT_WINAMPFILE, "<Item>", NULL}, 116
137 {N_("/Save"), NULL, NULL, 0, "<Branch>", NULL}, 117 { "load preset", NULL,
138 {N_("/Save/Preset"), NULL, equalizerwin_presets_menu_cb, 118 N_("Preset"), NULL,
139 EQUALIZER_PRESETS_SAVE_PRESET, "<Item>", NULL}, 119 N_("Load preset"),
140 {N_("/Save/Auto-load preset"), NULL, equalizerwin_presets_menu_cb, 120 G_CALLBACK(action_load_preset) },
141 EQUALIZER_PRESETS_SAVE_AUTOPRESET, "<Item>", NULL}, 121
142 {N_("/Save/Default"), NULL, equalizerwin_presets_menu_cb, 122 { "load auto preset", NULL,
143 EQUALIZER_PRESETS_SAVE_DEFAULT, "<Item>", NULL}, 123 N_("Auto-load preset"), NULL,
144 {"/Save/-", NULL, NULL, 0, "<Separator>", NULL}, 124 N_("Load auto-load preset"),
145 {N_("/Save/To file"), NULL, equalizerwin_presets_menu_cb, 125 G_CALLBACK(action_load_auto_preset) },
146 EQUALIZER_PRESETS_SAVE_TO_FILE, "<Item>", NULL}, 126
147 {N_("/Save/To WinAMP EQF file"), NULL, equalizerwin_presets_menu_cb, 127 { "load default preset", NULL,
148 EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE, "<Item>", NULL}, 128 N_("Default"), NULL,
149 {N_("/Delete"), NULL, NULL, 0, "<Branch>", NULL}, 129 N_("Load default preset into equalizer"),
150 {N_("/Delete/Preset"), NULL, equalizerwin_presets_menu_cb, 130 G_CALLBACK(action_load_default_preset) },
151 EQUALIZER_PRESETS_DELETE_PRESET, "<Item>", NULL}, 131
152 {N_("/Delete/Auto-load preset"), NULL, equalizerwin_presets_menu_cb, 132 { "zero preset", NULL,
153 EQUALIZER_PRESETS_DELETE_AUTOPRESET, "<Item>", NULL}, 133 N_("Zero"), NULL,
134 N_("Set equalizer preset levels to zero"),
135 G_CALLBACK(action_zero_preset) },
136
137 { "load preset file", NULL,
138 N_("From file"), NULL,
139 N_("Load preset from file"),
140 G_CALLBACK(action_load_preset_file) },
141
142 { "load preset eqf", NULL,
143 N_("From WinAMP EQF file"), NULL,
144 N_("Load preset from WinAMP EQF file"),
145 G_CALLBACK(action_load_preset_eqf) },
146
147 { "import winamp presets", NULL,
148 N_("WinAMP Presets"), NULL,
149 N_("Import WinAMP presets"),
150 G_CALLBACK(action_import_winamp_presets) },
151
152 { "save preset", NULL,
153 N_("Preset"), NULL,
154 N_("Save preset"),
155 G_CALLBACK(action_save_preset) },
156
157 { "save auto preset", NULL,
158 N_("Auto-load preset"), NULL,
159 N_("Save auto-load preset"),
160 G_CALLBACK(action_save_auto_preset) },
161
162 { "save default preset", NULL,
163 N_("Default"), NULL,
164 N_("Save default preset"),
165 G_CALLBACK(action_save_default_preset) },
166
167 { "save preset file", NULL,
168 N_("To file"), NULL,
169 N_("Save preset to file"),
170 G_CALLBACK(action_save_preset_file) },
171
172 { "save preset eqf", NULL,
173 N_("To WinAMP EQF file"), NULL,
174 N_("Save preset to WinAMP EQF file"),
175 G_CALLBACK(action_save_preset_eqf) },
176
177 { "delete preset", NULL,
178 N_("Preset"), NULL,
179 N_("Delete preset"),
180 G_CALLBACK(action_delete_preset) },
181
182 { "delete auto preset", NULL,
183 N_("Auto-load preset"), NULL,
184 N_("Delete auto-load preset"),
185 G_CALLBACK(action_delete_auto_preset) }
154 }; 186 };
155
156 static gint equalizerwin_presets_menu_entries_num =
157 G_N_ELEMENTS(equalizerwin_presets_menu_entries);
158
159 187
160 EqualizerPreset * 188 EqualizerPreset *
161 equalizer_preset_new(const gchar * name) 189 equalizer_preset_new(const gchar * name)
162 { 190 {
163 EqualizerPreset *preset = g_new0(EqualizerPreset, 1); 191 EqualizerPreset *preset = g_new0(EqualizerPreset, 1);
292 cfg.equalizer_active = toggled; 320 cfg.equalizer_active = toggled;
293 equalizerwin_eq_changed(); 321 equalizerwin_eq_changed();
294 } 322 }
295 323
296 static void 324 static void
325 menu_popup_pos_func(GtkMenu * menu,
326 gint * x,
327 gint * y,
328 gboolean * push_in,
329 gint * point)
330 {
331 *x = point[0];
332 *y = point[1];
333 *push_in = FALSE;
334 }
335
336 static void
337 menu_popup(GtkMenu * menu,
338 gint x,
339 gint y,
340 guint button,
341 guint time)
342 {
343 gint pos[2];
344
345 pos[0] = x;
346 pos[1] = y;
347
348 gtk_menu_popup(menu, NULL, NULL,
349 (GtkMenuPositionFunc) menu_popup_pos_func, pos,
350 button, time);
351 }
352
353 static void
297 equalizerwin_presets_pushed(void) 354 equalizerwin_presets_pushed(void)
298 { 355 {
299 GdkModifierType modmask; 356 GdkModifierType modmask;
300 gint x, y; 357 gint x, y;
301 358
302 gdk_window_get_pointer(NULL, &x, &y, &modmask); 359 gdk_window_get_pointer(NULL, &x, &y, &modmask);
303 util_item_factory_popup(equalizerwin_presets_menu, x, y, 1, 360 menu_popup(GTK_MENU(presets_menu), x, y, 1, GDK_CURRENT_TIME);
304 GDK_CURRENT_TIME);
305 } 361 }
306 362
307 static void 363 static void
308 equalizerwin_auto_pushed(gboolean toggled) 364 equalizerwin_auto_pushed(gboolean toggled)
309 { 365 {
874 G_CALLBACK(equalizerwin_keypress), NULL); 930 G_CALLBACK(equalizerwin_keypress), NULL);
875 g_signal_connect(equalizerwin, "scroll_event", 931 g_signal_connect(equalizerwin, "scroll_event",
876 G_CALLBACK(equalizerwin_scroll), NULL); 932 G_CALLBACK(equalizerwin_scroll), NULL);
877 } 933 }
878 934
935 static GtkWidget *
936 ui_manager_get_popup(GtkUIManager * self, const gchar * path)
937 {
938 GtkWidget *menu_item;
939
940 menu_item = gtk_ui_manager_get_widget(self, path);
941
942 if (GTK_IS_MENU_ITEM(menu_item))
943 return gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu_item));
944 else
945 return NULL;
946 }
947
879 void 948 void
880 equalizerwin_create_popup_menus(void) 949 equalizerwin_create_popup_menus(void)
881 { 950 {
882 equalizerwin_accel = gtk_accel_group_new(); 951 GtkUIManager *ui_manager;
883 gtk_window_add_accel_group(GTK_WINDOW(equalizerwin), equalizerwin_accel); 952 GtkActionGroup *action_group;
884 953 GError *error = NULL;
885 equalizerwin_presets_menu = create_menu(equalizerwin_presets_menu_entries, 954
886 equalizerwin_presets_menu_entries_num, 955 action_group = gtk_action_group_new("equalizer-window");
887 NULL); 956 gtk_action_group_add_actions(action_group,
957 equalizerwin_actions,
958 G_N_ELEMENTS(equalizerwin_actions),
959 NULL);
960
961 ui_manager = gtk_ui_manager_new();
962 gtk_ui_manager_add_ui_from_file(ui_manager,
963 DATA_DIR "/ui/equalizer.ui",
964 &error);
965
966 if (error) {
967 g_message("Error creating UI (%s)", error->message);
968 g_error_free(error);
969 return;
970 }
971
972 gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
973
974 gtk_window_add_accel_group(GTK_WINDOW(equalizerwin),
975 gtk_ui_manager_get_accel_group(ui_manager));
976
977 presets_menu = ui_manager_get_popup(ui_manager, "/equalizer-menus/preset-menu");
888 } 978 }
889 979
890 void 980 void
891 equalizerwin_create(void) 981 equalizerwin_create(void)
892 { 982 {
1495 const gchar * title, 1585 const gchar * title,
1496 GtkWidget ** window, 1586 GtkWidget ** window,
1497 GtkSelectionMode sel_mode, 1587 GtkSelectionMode sel_mode,
1498 GtkWidget ** entry, 1588 GtkWidget ** entry,
1499 const gchar * btn2_stock_name, 1589 const gchar * btn2_stock_name,
1500 const gchar * btn3_stock_name,
1501 const gchar * btn1_stock_name, 1590 const gchar * btn1_stock_name,
1502 GCallback btn2_func, 1591 GCallback btn2_func,
1503 GCallback btn3_func,
1504 GCallback select_row_func) 1592 GCallback select_row_func)
1505 { 1593 {
1506 GtkWidget *vbox, *scrolled_window, *bbox, *btn1, *btn2, *btn3, *clist; 1594 GtkWidget *vbox, *scrolled_window, *bbox, *btn1, *btn2, *btn3, *clist;
1507 gchar *preset_text[1]; 1595 gchar *preset_text[1];
1508 GList *node; 1596 GList *node;
1558 g_signal_connect_swapped(btn1, "clicked", 1646 g_signal_connect_swapped(btn1, "clicked",
1559 G_CALLBACK(gtk_widget_destroy), 1647 G_CALLBACK(gtk_widget_destroy),
1560 GTK_OBJECT(*window)); 1648 GTK_OBJECT(*window));
1561 gtk_box_pack_start(GTK_BOX(bbox), btn1, TRUE, TRUE, 0); 1649 gtk_box_pack_start(GTK_BOX(bbox), btn1, TRUE, TRUE, 0);
1562 1650
1563 if (btn3_stock_name) {
1564 btn3 = gtk_button_new_from_stock(btn3_stock_name);
1565 g_signal_connect(btn3, "clicked", G_CALLBACK(btn3_func), clist);
1566 gtk_box_pack_start(GTK_BOX(bbox), btn3, TRUE, TRUE, 0);
1567 }
1568
1569 btn2 = gtk_button_new_from_stock(btn2_stock_name); 1651 btn2 = gtk_button_new_from_stock(btn2_stock_name);
1570 g_signal_connect(btn2, "clicked", G_CALLBACK(btn2_func), clist); 1652 g_signal_connect(btn2, "clicked", G_CALLBACK(btn2_func), clist);
1571 GTK_WIDGET_SET_FLAGS(btn2, GTK_CAN_DEFAULT); 1653 GTK_WIDGET_SET_FLAGS(btn2, GTK_CAN_DEFAULT);
1572 1654
1573 gtk_box_pack_start(GTK_BOX(bbox), btn2, TRUE, TRUE, 0); 1655 gtk_box_pack_start(GTK_BOX(bbox), btn2, TRUE, TRUE, 0);
1576 1658
1577 1659
1578 gtk_widget_show_all(*window); 1660 gtk_widget_show_all(*window);
1579 1661
1580 return *window; 1662 return *window;
1581 }
1582
1583 void
1584 equalizerwin_presets_menu_cb(gpointer cb_data, guint action, GtkWidget * w)
1585 {
1586 GtkWidget *dialog;
1587
1588 switch (action) {
1589 case EQUALIZER_PRESETS_LOAD_PRESET:
1590 if (!equalizerwin_load_window)
1591 equalizerwin_create_list_window(equalizer_presets,
1592 _("Load preset"),
1593 &equalizerwin_load_window,
1594 GTK_SELECTION_SINGLE, NULL,
1595 GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL,
1596 G_CALLBACK
1597 (equalizerwin_load_ok),
1598 G_CALLBACK
1599 (equalizerwin_load_apply),
1600 G_CALLBACK
1601 (equalizerwin_load_select));
1602 else
1603 gtk_window_present(GTK_WINDOW(equalizerwin_load_window));
1604 break;
1605 case EQUALIZER_PRESETS_LOAD_AUTOPRESET:
1606 if (!equalizerwin_load_auto_window)
1607 equalizerwin_create_list_window(equalizer_auto_presets,
1608 _("Load auto-preset"),
1609 &equalizerwin_load_auto_window,
1610 GTK_SELECTION_SINGLE, NULL,
1611 GTK_STOCK_OK, NULL, GTK_STOCK_CANCEL,
1612 G_CALLBACK
1613 (equalizerwin_load_auto_ok),
1614 NULL,
1615 G_CALLBACK
1616 (equalizerwin_load_auto_select));
1617 else
1618 gtk_window_present(GTK_WINDOW(equalizerwin_load_auto_window));
1619 break;
1620 case EQUALIZER_PRESETS_LOAD_DEFAULT:
1621 equalizerwin_load_preset(equalizer_presets, "Default");
1622 break;
1623 case EQUALIZER_PRESETS_LOAD_ZERO:
1624 {
1625 gint i;
1626
1627 eqslider_set_position(equalizerwin_preamp, 0);
1628 for (i = 0; i < 10; i++)
1629 eqslider_set_position(equalizerwin_bands[i], 0);
1630 equalizerwin_eq_changed();
1631 break;
1632 }
1633 case EQUALIZER_PRESETS_LOAD_FROM_FILE:
1634 dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
1635 g_signal_connect(dialog , "response",
1636 G_CALLBACK(equalizerwin_file_chooser_on_response),
1637 load_preset_file);
1638 break;
1639 case EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE:
1640 dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
1641 g_signal_connect(dialog, "response",
1642 G_CALLBACK(equalizerwin_file_chooser_on_response),
1643 load_winamp_file);
1644 break;
1645
1646 case EQUALIZER_PRESETS_IMPORT_WINAMPFILE:
1647 dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
1648 g_signal_connect(dialog, "response",
1649 G_CALLBACK(equalizerwin_file_chooser_on_response),
1650 import_winamp_file);
1651 break;
1652
1653 case EQUALIZER_PRESETS_SAVE_PRESET:
1654 if (!equalizerwin_save_window)
1655 equalizerwin_create_list_window(equalizer_presets,
1656 _("Save preset"),
1657 &equalizerwin_save_window,
1658 GTK_SELECTION_SINGLE,
1659 &equalizerwin_save_entry,
1660 GTK_STOCK_OK, NULL, GTK_STOCK_CANCEL,
1661 G_CALLBACK
1662 (equalizerwin_save_ok),
1663 NULL,
1664 G_CALLBACK
1665 (equalizerwin_save_select));
1666 else
1667 gtk_window_present(GTK_WINDOW(equalizerwin_save_window));
1668 break;
1669
1670 case EQUALIZER_PRESETS_SAVE_AUTOPRESET:
1671 {
1672 gchar *name;
1673
1674 if (!equalizerwin_save_auto_window)
1675 equalizerwin_create_list_window(equalizer_auto_presets,
1676 _("Save auto-preset"),
1677 &equalizerwin_save_auto_window,
1678 GTK_SELECTION_SINGLE,
1679 &equalizerwin_save_auto_entry,
1680 GTK_STOCK_OK,
1681 NULL,
1682 GTK_STOCK_CANCEL,
1683 G_CALLBACK
1684 (equalizerwin_save_auto_ok),
1685 NULL,
1686 G_CALLBACK
1687 (equalizerwin_save_auto_select));
1688 else
1689 gtk_window_present(GTK_WINDOW(equalizerwin_save_auto_window));
1690
1691 name = playlist_get_filename(playlist_get_active(),
1692 playlist_get_position(playlist_get_active()));
1693
1694 if (name) {
1695 gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry),
1696 g_basename(name));
1697 g_free(name);
1698 }
1699 break;
1700 }
1701
1702 case EQUALIZER_PRESETS_SAVE_DEFAULT:
1703 equalizer_presets =
1704 equalizerwin_save_preset(equalizer_presets, "Default",
1705 "eq.preset");
1706 break;
1707
1708 case EQUALIZER_PRESETS_SAVE_TO_FILE:
1709 {
1710 gchar *songname;
1711
1712 dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
1713 g_signal_connect(dialog, "response",
1714 G_CALLBACK(equalizerwin_file_chooser_on_response),
1715 save_preset_file);
1716
1717 songname = playlist_get_filename(playlist_get_active(),
1718 playlist_get_position(playlist_get_active()));
1719 if (songname) {
1720 gchar *eqname = g_strdup_printf("%s.%s", songname,
1721 cfg.eqpreset_extension);
1722 g_free(songname);
1723 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
1724 eqname);
1725 g_free(eqname);
1726 }
1727
1728 break;
1729 }
1730
1731 case EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE:
1732 dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
1733 g_signal_connect(dialog, "response",
1734 G_CALLBACK(equalizerwin_file_chooser_on_response),
1735 save_winamp_file);
1736 break;
1737
1738 case EQUALIZER_PRESETS_DELETE_PRESET:
1739 if (!equalizerwin_delete_window)
1740 equalizerwin_create_list_window(equalizer_presets,
1741 _("Delete preset"),
1742 &equalizerwin_delete_window,
1743 GTK_SELECTION_EXTENDED, NULL,
1744 GTK_STOCK_DELETE,
1745 NULL,
1746 GTK_STOCK_CLOSE,
1747 G_CALLBACK
1748 (equalizerwin_delete_delete),
1749 NULL,
1750 NULL);
1751 else
1752 gtk_window_present(GTK_WINDOW(equalizerwin_delete_window));
1753
1754 break;
1755
1756 case EQUALIZER_PRESETS_DELETE_AUTOPRESET:
1757 if (!equalizerwin_delete_auto_window)
1758 equalizerwin_create_list_window(equalizer_auto_presets,
1759 _("Delete auto-preset"),
1760 &equalizerwin_delete_auto_window,
1761 GTK_SELECTION_EXTENDED, NULL,
1762 GTK_STOCK_DELETE,
1763 NULL,
1764 GTK_STOCK_CLOSE,
1765 G_CALLBACK
1766 (equalizerwin_delete_auto_delete),
1767 NULL,
1768 NULL);
1769 else
1770 gtk_window_present(GTK_WINDOW(equalizerwin_delete_auto_window));
1771
1772 break;
1773 }
1774 } 1663 }
1775 1664
1776 void 1665 void
1777 equalizerwin_load_auto_preset(const gchar * filename) 1666 equalizerwin_load_auto_preset(const gchar * filename)
1778 { 1667 {
1841 equalizerwin_get_band(gint band) 1730 equalizerwin_get_band(gint band)
1842 { 1731 {
1843 g_return_val_if_fail(band >= 0 && band < 10, 0); 1732 g_return_val_if_fail(band >= 0 && band < 10, 0);
1844 return eqslider_get_position(equalizerwin_bands[band]); 1733 return eqslider_get_position(equalizerwin_bands[band]);
1845 } 1734 }
1735
1736 static void
1737 action_load_preset(void)
1738 {
1739 if (equalizerwin_load_window) {
1740 gtk_window_present(GTK_WINDOW(equalizerwin_load_window));
1741 return;
1742 }
1743
1744 equalizerwin_create_list_window(equalizer_presets,
1745 Q_("Load preset"),
1746 &equalizerwin_load_window,
1747 GTK_SELECTION_SINGLE, NULL,
1748 GTK_STOCK_OK, GTK_STOCK_CANCEL,
1749 G_CALLBACK(equalizerwin_load_ok),
1750 G_CALLBACK(equalizerwin_load_select));
1751 }
1752
1753 static void
1754 action_load_auto_preset(void)
1755 {
1756 if (equalizerwin_load_auto_window) {
1757 gtk_window_present(GTK_WINDOW(equalizerwin_load_auto_window));
1758 return;
1759 }
1760
1761 equalizerwin_create_list_window(equalizer_auto_presets,
1762 Q_("Load auto-preset"),
1763 &equalizerwin_load_auto_window,
1764 GTK_SELECTION_SINGLE, NULL,
1765 GTK_STOCK_OK, GTK_STOCK_CANCEL,
1766 G_CALLBACK(equalizerwin_load_auto_ok),
1767 G_CALLBACK(equalizerwin_load_auto_select));
1768 }
1769
1770 static void
1771 action_load_default_preset(void)
1772 {
1773 equalizerwin_load_preset(equalizer_presets, "Default");
1774 }
1775
1776 static void
1777 action_zero_preset(void)
1778 {
1779 gint i;
1780
1781 eqslider_set_position(equalizerwin_preamp, 0);
1782 for (i = 0; i < 10; i++)
1783 eqslider_set_position(equalizerwin_bands[i], 0);
1784
1785 equalizerwin_eq_changed();
1786 }
1787
1788 static void
1789 action_load_preset_file(void)
1790 {
1791 GtkWidget *dialog;
1792
1793 dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
1794 g_signal_connect(dialog , "response",
1795 G_CALLBACK(equalizerwin_file_chooser_on_response),
1796 load_preset_file);
1797 }
1798
1799 static void
1800 action_load_preset_eqf(void)
1801 {
1802 GtkWidget *dialog;
1803
1804 dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
1805 g_signal_connect(dialog, "response",
1806 G_CALLBACK(equalizerwin_file_chooser_on_response),
1807 load_winamp_file);
1808 }
1809
1810 static void
1811 action_import_winamp_presets(void)
1812 {
1813 GtkWidget *dialog;
1814
1815 dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
1816 g_signal_connect(dialog, "response",
1817 G_CALLBACK(equalizerwin_file_chooser_on_response),
1818 import_winamp_file);
1819 }
1820
1821 static void
1822 action_save_preset(void)
1823 {
1824 if (equalizerwin_save_window) {
1825 gtk_window_present(GTK_WINDOW(equalizerwin_save_window));
1826 return;
1827 }
1828
1829 equalizerwin_create_list_window(equalizer_presets,
1830 Q_("Save preset"),
1831 &equalizerwin_save_window,
1832 GTK_SELECTION_SINGLE,
1833 &equalizerwin_save_entry,
1834 GTK_STOCK_OK, GTK_STOCK_CANCEL,
1835 G_CALLBACK(equalizerwin_save_ok),
1836 G_CALLBACK(equalizerwin_save_select));
1837 }
1838
1839 static void
1840 action_save_auto_preset(void)
1841 {
1842 gchar *name;
1843 Playlist *playlist = playlist_get_active();
1844
1845 if (equalizerwin_save_auto_window)
1846 equalizerwin_create_list_window(equalizer_auto_presets,
1847 Q_("Save auto-preset"),
1848 &equalizerwin_save_auto_window,
1849 GTK_SELECTION_SINGLE,
1850 &equalizerwin_save_auto_entry,
1851 GTK_STOCK_OK,
1852 GTK_STOCK_CANCEL,
1853 G_CALLBACK(equalizerwin_save_auto_ok),
1854 G_CALLBACK(equalizerwin_save_auto_select));
1855 else
1856 gtk_window_present(GTK_WINDOW(equalizerwin_save_auto_window));
1857
1858 name = playlist_get_filename(playlist, playlist_get_position(playlist));
1859 if (name) {
1860 gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry),
1861 g_basename(name));
1862 g_free(name);
1863 }
1864 }
1865
1866 static void
1867 action_save_default_preset(void)
1868 {
1869 equalizer_presets = equalizerwin_save_preset(equalizer_presets, "Default",
1870 "eq.preset");
1871 }
1872
1873 static void
1874 action_save_preset_file(void)
1875 {
1876 GtkWidget *dialog;
1877 gchar *songname;
1878 Playlist *playlist = playlist_get_active();
1879
1880 dialog = make_filebrowser(Q_("Save equalizer preset"), TRUE);
1881 g_signal_connect(dialog, "response",
1882 G_CALLBACK(equalizerwin_file_chooser_on_response),
1883 save_preset_file);
1884
1885 songname = playlist_get_filename(playlist, playlist_get_position(playlist));
1886 if (songname) {
1887 gchar *eqname = g_strdup_printf("%s.%s", songname,
1888 cfg.eqpreset_extension);
1889 g_free(songname);
1890 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
1891 eqname);
1892 g_free(eqname);
1893 }
1894 }
1895
1896 static void
1897 action_save_preset_eqf(void)
1898 {
1899 GtkWidget *dialog;
1900
1901 dialog = make_filebrowser(Q_("Save equalizer preset"), TRUE);
1902 g_signal_connect(dialog, "response",
1903 G_CALLBACK(equalizerwin_file_chooser_on_response),
1904 save_winamp_file);
1905 }
1906
1907 static void
1908 action_delete_preset(void)
1909 {
1910 if (equalizerwin_delete_window) {
1911 gtk_window_present(GTK_WINDOW(equalizerwin_delete_window));
1912 return;
1913 }
1914
1915 equalizerwin_create_list_window(equalizer_presets,
1916 Q_("Delete preset"),
1917 &equalizerwin_delete_window,
1918 GTK_SELECTION_EXTENDED, NULL,
1919 GTK_STOCK_DELETE,
1920 GTK_STOCK_CLOSE,
1921 G_CALLBACK(equalizerwin_delete_delete),
1922 NULL);
1923 }
1924
1925 static void
1926 action_delete_auto_preset(void)
1927 {
1928 if (equalizerwin_delete_auto_window) {
1929 gtk_window_present(GTK_WINDOW(equalizerwin_delete_auto_window));
1930 return;
1931 }
1932
1933 equalizerwin_create_list_window(equalizer_auto_presets,
1934 Q_("Delete auto-preset"),
1935 &equalizerwin_delete_auto_window,
1936 GTK_SELECTION_EXTENDED, NULL,
1937 GTK_STOCK_DELETE,
1938 GTK_STOCK_CLOSE,
1939 G_CALLBACK(equalizerwin_delete_auto_delete),
1940 NULL);
1941 }