Mercurial > audlegacy
annotate Plugins/Input/vorbis/configure.c @ 1352:8b249765fdd1 trunk
[svn] - GList cannot handle circular queues, so I integrated one into CategoryQueueEntry. No fuss, no muss.
author | nenolod |
---|---|
date | Wed, 28 Jun 2006 15:32:15 -0700 |
parents | 0e5e176379e9 |
children |
rev | line source |
---|---|
61 | 1 #ifdef HAVE_CONFIG_H |
2 # include "config.h" | |
3 #endif | |
4 | |
5 #include "vorbis.h" | |
6 | |
7 #include <glib.h> | |
8 #include <glib/gi18n.h> | |
9 #include <gtk/gtk.h> | |
10 #include <stdlib.h> | |
11 #include <string.h> | |
12 | |
13 #include "libaudacious/configdb.h" | |
14 #include "libaudacious/dirbrowser.h" | |
15 #include "libaudacious/titlestring.h" | |
16 #include "libaudacious/util.h" | |
17 #include "audacious/plugin.h" | |
18 | |
19 extern GMutex *vf_mutex; | |
20 | |
21 static GtkWidget *vorbis_configurewin = NULL; | |
22 static GtkWidget *vbox, *notebook; | |
23 | |
1071
592ef16386aa
[svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents:
281
diff
changeset
|
24 static GtkWidget *streaming_save_entry; |
61 | 25 static GtkWidget *streaming_save_use, *streaming_size_spin, |
26 *streaming_pre_spin; | |
27 static GtkWidget *streaming_save_dirbrowser, *streaming_save_hbox; | |
28 static GtkWidget *title_tag_override, *title_tag_box, *title_tag_entry, | |
29 *title_desc; | |
30 static GtkWidget *rg_switch, *rg_clip_switch, *rg_booster_switch, | |
31 *rg_track_gain; | |
32 | |
33 vorbis_config_t vorbis_cfg; | |
34 | |
35 static void | |
36 vorbis_configurewin_ok(GtkWidget * widget, gpointer data) | |
37 { | |
38 ConfigDb *db; | |
39 GtkToggleButton *tb; | |
40 | |
41 vorbis_cfg.http_buffer_size = | |
42 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON | |
43 (streaming_size_spin)); | |
44 vorbis_cfg.http_prebuffer = | |
45 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(streaming_pre_spin)); | |
46 | |
47 vorbis_cfg.save_http_stream = | |
48 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use)); | |
49 g_free(vorbis_cfg.save_http_path); | |
50 vorbis_cfg.save_http_path = | |
51 g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_save_entry))); | |
52 g_free(vorbis_cfg.tag_format); | |
53 vorbis_cfg.tag_format = | |
54 g_strdup(gtk_entry_get_text(GTK_ENTRY(title_tag_entry))); | |
55 | |
56 tb = GTK_TOGGLE_BUTTON(title_tag_override); | |
57 vorbis_cfg.tag_override = gtk_toggle_button_get_active(tb); | |
58 tb = GTK_TOGGLE_BUTTON(rg_switch); | |
59 vorbis_cfg.use_replaygain = gtk_toggle_button_get_active(tb); | |
60 tb = GTK_TOGGLE_BUTTON(rg_clip_switch); | |
61 vorbis_cfg.use_anticlip = gtk_toggle_button_get_active(tb); | |
62 tb = GTK_TOGGLE_BUTTON(rg_booster_switch); | |
63 vorbis_cfg.use_booster = gtk_toggle_button_get_active(tb); | |
64 tb = GTK_TOGGLE_BUTTON(rg_track_gain); | |
65 if (gtk_toggle_button_get_active(tb)) | |
66 vorbis_cfg.replaygain_mode = REPLAYGAIN_MODE_TRACK; | |
67 else | |
68 vorbis_cfg.replaygain_mode = REPLAYGAIN_MODE_ALBUM; | |
69 | |
70 db = bmp_cfg_db_open(); | |
71 | |
72 bmp_cfg_db_set_int(db, "vorbis", "http_buffer_size", | |
73 vorbis_cfg.http_buffer_size); | |
74 bmp_cfg_db_set_int(db, "vorbis", "http_prebuffer", | |
75 vorbis_cfg.http_prebuffer); | |
76 bmp_cfg_db_set_bool(db, "vorbis", "save_http_stream", | |
77 vorbis_cfg.save_http_stream); | |
78 bmp_cfg_db_set_string(db, "vorbis", "save_http_path", | |
79 vorbis_cfg.save_http_path); | |
80 bmp_cfg_db_set_bool(db, "vorbis", "tag_override", | |
81 vorbis_cfg.tag_override); | |
82 bmp_cfg_db_set_string(db, "vorbis", "tag_format", vorbis_cfg.tag_format); | |
83 bmp_cfg_db_set_bool(db, "vorbis", "use_anticlip", | |
84 vorbis_cfg.use_anticlip); | |
85 bmp_cfg_db_set_bool(db, "vorbis", "use_replaygain", | |
86 vorbis_cfg.use_replaygain); | |
87 bmp_cfg_db_set_int(db, "vorbis", "replaygain_mode", | |
88 vorbis_cfg.replaygain_mode); | |
89 bmp_cfg_db_set_bool(db, "vorbis", "use_booster", vorbis_cfg.use_booster); | |
90 bmp_cfg_db_close(db); | |
91 gtk_widget_destroy(vorbis_configurewin); | |
92 } | |
93 | |
94 static void | |
95 streaming_save_dirbrowser_cb(gchar * dir) | |
96 { | |
97 gtk_entry_set_text(GTK_ENTRY(streaming_save_entry), dir); | |
98 } | |
99 | |
100 static void | |
101 streaming_save_browse_cb(GtkWidget * w, gpointer data) | |
102 { | |
103 if (streaming_save_dirbrowser) | |
104 return; | |
105 | |
106 streaming_save_dirbrowser = | |
107 xmms_create_dir_browser(_("Select the directory where you want " | |
108 "to store the Ogg Vorbis streams:"), | |
109 vorbis_cfg.save_http_path, | |
110 GTK_SELECTION_SINGLE, | |
111 streaming_save_dirbrowser_cb); | |
112 g_signal_connect(G_OBJECT(streaming_save_dirbrowser), | |
113 "destroy", G_CALLBACK(gtk_widget_destroyed), | |
114 &streaming_save_dirbrowser); | |
115 gtk_window_set_transient_for(GTK_WINDOW(streaming_save_dirbrowser), | |
116 GTK_WINDOW(vorbis_configurewin)); | |
117 gtk_widget_show(streaming_save_dirbrowser); | |
118 } | |
119 | |
120 static void | |
121 streaming_save_use_cb(GtkWidget * w, gpointer data) | |
122 { | |
123 gboolean save_stream; | |
124 | |
125 save_stream = | |
126 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use)); | |
127 | |
128 gtk_widget_set_sensitive(streaming_save_hbox, save_stream); | |
129 } | |
130 | |
131 static void | |
132 configure_destroy(GtkWidget * w, gpointer data) | |
133 { | |
134 /* if (streaming_save_dirbrowser) */ | |
135 /* gtk_widget_destroy(streaming_save_dirbrowser); */ | |
136 } | |
137 | |
138 static void | |
139 title_tag_override_cb(GtkWidget * w, gpointer data) | |
140 { | |
141 gboolean override; | |
142 override = | |
143 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_tag_override)); | |
144 gtk_widget_set_sensitive(title_tag_box, override); | |
145 gtk_widget_set_sensitive(title_desc, override); | |
146 } | |
147 | |
148 static void | |
149 rg_switch_cb(GtkWidget * w, gpointer data) | |
150 { | |
151 gtk_widget_set_sensitive(GTK_WIDGET(data), | |
152 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON | |
153 (w))); | |
154 } | |
155 | |
156 void | |
157 vorbis_configure(void) | |
158 { | |
159 GtkWidget *streaming_vbox; | |
160 GtkWidget *streaming_buf_frame, *streaming_buf_hbox; | |
161 GtkWidget *streaming_size_box, *streaming_size_label; | |
162 GtkWidget *streaming_pre_box, *streaming_pre_label; | |
163 GtkWidget *streaming_save_frame, *streaming_save_vbox; | |
164 GtkWidget *streaming_save_label, *streaming_save_browse; | |
165 GtkWidget *title_frame, *title_tag_vbox, *title_tag_label; | |
166 GtkWidget *rg_frame, *rg_vbox; | |
167 GtkWidget *bbox, *ok, *cancel; | |
168 GtkWidget *rg_type_frame, *rg_type_vbox, *rg_album_gain; | |
169 GtkObject *streaming_size_adj, *streaming_pre_adj; | |
170 | |
171 if (vorbis_configurewin != NULL) { | |
172 gtk_window_present(GTK_WINDOW(vorbis_configurewin)); | |
173 return; | |
174 } | |
175 | |
176 vorbis_configurewin = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
177 gtk_window_set_type_hint(GTK_WINDOW(vorbis_configurewin), | |
178 GDK_WINDOW_TYPE_HINT_DIALOG); | |
179 gtk_window_set_position(GTK_WINDOW(vorbis_configurewin), | |
180 GTK_WIN_POS_CENTER); | |
181 g_signal_connect(G_OBJECT(vorbis_configurewin), "destroy", | |
182 G_CALLBACK(gtk_widget_destroyed), &vorbis_configurewin); | |
183 g_signal_connect(G_OBJECT(vorbis_configurewin), "destroy", | |
184 G_CALLBACK(configure_destroy), &vorbis_configurewin); | |
185 gtk_window_set_title(GTK_WINDOW(vorbis_configurewin), | |
186 _("Ogg Vorbis Audio Plugin Configuration")); | |
187 gtk_window_set_resizable(GTK_WINDOW(vorbis_configurewin), FALSE); | |
188 gtk_container_border_width(GTK_CONTAINER(vorbis_configurewin), 10); | |
189 | |
190 vbox = gtk_vbox_new(FALSE, 10); | |
191 gtk_container_add(GTK_CONTAINER(vorbis_configurewin), vbox); | |
192 | |
193 notebook = gtk_notebook_new(); | |
194 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); | |
195 | |
196 streaming_vbox = gtk_vbox_new(FALSE, 0); | |
197 | |
198 streaming_buf_frame = gtk_frame_new(_("Buffering:")); | |
199 gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_frame), 5); | |
200 gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_buf_frame, FALSE, | |
201 FALSE, 0); | |
202 | |
203 streaming_buf_hbox = gtk_hbox_new(TRUE, 5); | |
204 gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_hbox), 5); | |
205 gtk_container_add(GTK_CONTAINER(streaming_buf_frame), streaming_buf_hbox); | |
206 | |
207 streaming_size_box = gtk_hbox_new(FALSE, 5); | |
208 gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_size_box, | |
209 TRUE, TRUE, 0); | |
210 streaming_size_label = gtk_label_new(_("Buffer size (kb):")); | |
211 gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_label, | |
212 FALSE, FALSE, 0); | |
213 streaming_size_adj = | |
214 gtk_adjustment_new(vorbis_cfg.http_buffer_size, 4, 4096, 4, 4, 4); | |
215 streaming_size_spin = | |
216 gtk_spin_button_new(GTK_ADJUSTMENT(streaming_size_adj), 8, 0); | |
217 gtk_widget_set_usize(streaming_size_spin, 60, -1); | |
218 gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_spin, | |
219 FALSE, FALSE, 0); | |
220 | |
221 streaming_pre_box = gtk_hbox_new(FALSE, 5); | |
222 gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_pre_box, | |
223 TRUE, TRUE, 0); | |
224 streaming_pre_label = gtk_label_new(_("Pre-buffer (percent):")); | |
225 gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_label, | |
226 FALSE, FALSE, 0); | |
227 streaming_pre_adj = | |
228 gtk_adjustment_new(vorbis_cfg.http_prebuffer, 0, 90, 1, 1, 1); | |
229 streaming_pre_spin = | |
230 gtk_spin_button_new(GTK_ADJUSTMENT(streaming_pre_adj), 1, 0); | |
231 gtk_widget_set_usize(streaming_pre_spin, 60, -1); | |
232 gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_spin, | |
233 FALSE, FALSE, 0); | |
234 | |
235 /* | |
236 * Save to disk config. | |
237 */ | |
238 streaming_save_frame = gtk_frame_new(_("Save stream to disk:")); | |
239 gtk_container_set_border_width(GTK_CONTAINER(streaming_save_frame), 5); | |
240 gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_save_frame, | |
241 FALSE, FALSE, 0); | |
242 | |
243 streaming_save_vbox = gtk_vbox_new(FALSE, 5); | |
244 gtk_container_set_border_width(GTK_CONTAINER(streaming_save_vbox), 5); | |
245 gtk_container_add(GTK_CONTAINER(streaming_save_frame), | |
246 streaming_save_vbox); | |
247 | |
248 streaming_save_use = | |
249 gtk_check_button_new_with_label(_("Save stream to disk")); | |
250 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_save_use), | |
251 vorbis_cfg.save_http_stream); | |
252 g_signal_connect(G_OBJECT(streaming_save_use), "clicked", | |
253 G_CALLBACK(streaming_save_use_cb), NULL); | |
254 gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_use, | |
255 FALSE, FALSE, 0); | |
256 | |
257 streaming_save_hbox = gtk_hbox_new(FALSE, 5); | |
258 gtk_widget_set_sensitive(streaming_save_hbox, | |
259 vorbis_cfg.save_http_stream); | |
260 gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_hbox, | |
261 FALSE, FALSE, 0); | |
262 | |
263 streaming_save_label = gtk_label_new(_("Path:")); | |
264 gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_label, | |
265 FALSE, FALSE, 0); | |
266 | |
267 streaming_save_entry = gtk_entry_new(); | |
268 gtk_entry_set_text(GTK_ENTRY(streaming_save_entry), | |
269 vorbis_cfg.save_http_path); | |
270 gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_entry, | |
271 TRUE, TRUE, 0); | |
272 | |
273 streaming_save_browse = gtk_button_new_with_label(_("Browse")); | |
274 g_signal_connect(G_OBJECT(streaming_save_browse), "clicked", | |
275 G_CALLBACK(streaming_save_browse_cb), NULL); | |
276 gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_browse, | |
277 FALSE, FALSE, 0); | |
278 | |
279 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), streaming_vbox, | |
280 gtk_label_new(_("Streaming"))); | |
281 | |
282 /* Title config.. */ | |
283 | |
284 title_frame = gtk_frame_new(_("Ogg Vorbis Tags:")); | |
285 gtk_container_border_width(GTK_CONTAINER(title_frame), 5); | |
286 | |
287 title_tag_vbox = gtk_vbox_new(FALSE, 10); | |
288 gtk_container_border_width(GTK_CONTAINER(title_tag_vbox), 5); | |
289 gtk_container_add(GTK_CONTAINER(title_frame), title_tag_vbox); | |
290 | |
291 title_tag_override = | |
292 gtk_check_button_new_with_label(_("Override generic titles")); | |
293 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_tag_override), | |
294 vorbis_cfg.tag_override); | |
295 g_signal_connect(G_OBJECT(title_tag_override), "clicked", | |
296 G_CALLBACK(title_tag_override_cb), NULL); | |
297 gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_tag_override, FALSE, | |
298 FALSE, 0); | |
299 | |
300 title_tag_box = gtk_hbox_new(FALSE, 5); | |
301 gtk_widget_set_sensitive(title_tag_box, vorbis_cfg.tag_override); | |
302 gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_tag_box, FALSE, | |
303 FALSE, 0); | |
304 | |
305 title_tag_label = gtk_label_new(_("Title format:")); | |
306 gtk_box_pack_start(GTK_BOX(title_tag_box), title_tag_label, FALSE, | |
307 FALSE, 0); | |
308 | |
309 title_tag_entry = gtk_entry_new(); | |
310 gtk_entry_set_text(GTK_ENTRY(title_tag_entry), vorbis_cfg.tag_format); | |
311 gtk_box_pack_start(GTK_BOX(title_tag_box), title_tag_entry, TRUE, TRUE, | |
312 0); | |
313 | |
314 title_desc = xmms_titlestring_descriptions("pafFetndgc", 2); | |
315 gtk_widget_set_sensitive(title_desc, vorbis_cfg.tag_override); | |
316 gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_desc, FALSE, FALSE, 0); | |
317 | |
318 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), title_frame, | |
319 gtk_label_new(_("Title"))); | |
320 | |
321 /* Replay Gain.. */ | |
322 | |
323 rg_frame = gtk_frame_new(_("ReplayGain Settings:")); | |
324 gtk_container_border_width(GTK_CONTAINER(rg_frame), 5); | |
325 | |
326 rg_vbox = gtk_vbox_new(FALSE, 10); | |
327 gtk_container_border_width(GTK_CONTAINER(rg_vbox), 5); | |
328 gtk_container_add(GTK_CONTAINER(rg_frame), rg_vbox); | |
329 | |
330 rg_clip_switch = | |
331 gtk_check_button_new_with_label(_("Enable Clipping Prevention")); | |
332 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_clip_switch), | |
333 vorbis_cfg.use_anticlip); | |
334 gtk_box_pack_start(GTK_BOX(rg_vbox), rg_clip_switch, FALSE, FALSE, 0); | |
335 | |
336 rg_switch = gtk_check_button_new_with_label(_("Enable ReplayGain")); | |
337 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_switch), | |
338 vorbis_cfg.use_replaygain); | |
339 gtk_box_pack_start(GTK_BOX(rg_vbox), rg_switch, FALSE, FALSE, 0); | |
340 | |
341 rg_type_frame = gtk_frame_new(_("ReplayGain Type:")); | |
342 gtk_box_pack_start(GTK_BOX(rg_vbox), rg_type_frame, FALSE, FALSE, 0); | |
343 | |
344 g_signal_connect(G_OBJECT(rg_switch), "toggled", | |
345 G_CALLBACK(rg_switch_cb), rg_type_frame); | |
346 | |
347 rg_type_vbox = gtk_vbox_new(FALSE, 5); | |
348 gtk_container_set_border_width(GTK_CONTAINER(rg_type_vbox), 5); | |
349 gtk_container_add(GTK_CONTAINER(rg_type_frame), rg_type_vbox); | |
350 | |
351 rg_track_gain = | |
352 gtk_radio_button_new_with_label(NULL, _("use Track Gain/Peak")); | |
353 if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_TRACK) | |
354 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_track_gain), TRUE); | |
355 else | |
356 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_track_gain), FALSE); | |
357 gtk_box_pack_start(GTK_BOX(rg_type_vbox), rg_track_gain, FALSE, FALSE, 0); | |
358 | |
359 rg_album_gain = | |
360 gtk_radio_button_new_with_label(gtk_radio_button_group | |
361 (GTK_RADIO_BUTTON(rg_track_gain)), | |
362 _("use Album Gain/Peak")); | |
363 if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_ALBUM) | |
364 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_album_gain), TRUE); | |
365 else | |
366 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_album_gain), FALSE); | |
367 gtk_box_pack_start(GTK_BOX(rg_type_vbox), rg_album_gain, FALSE, FALSE, 0); | |
368 | |
369 if (!vorbis_cfg.use_replaygain) | |
370 gtk_widget_set_sensitive(rg_type_frame, FALSE); | |
371 | |
372 rg_booster_switch = | |
373 gtk_check_button_new_with_label(_ | |
374 ("Enable 6dB Boost + Hard Limiting")); | |
375 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_booster_switch), | |
376 vorbis_cfg.use_booster); | |
377 gtk_box_pack_start(GTK_BOX(rg_vbox), rg_booster_switch, FALSE, FALSE, 0); | |
378 | |
379 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), rg_frame, | |
380 gtk_label_new(_("ReplayGain"))); | |
381 | |
382 /* Buttons */ | |
383 | |
384 bbox = gtk_hbutton_box_new(); | |
385 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); | |
386 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); | |
387 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); | |
388 | |
389 cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL); | |
390 gtk_button_set_use_stock(GTK_BUTTON(cancel), TRUE); | |
391 g_signal_connect_swapped(G_OBJECT(cancel), "clicked", | |
392 G_CALLBACK(gtk_widget_destroy), | |
393 G_OBJECT(vorbis_configurewin)); | |
394 GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT); | |
395 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0); | |
396 | |
397 ok = gtk_button_new_from_stock(GTK_STOCK_OK); | |
398 gtk_button_set_use_stock(GTK_BUTTON(ok), TRUE); | |
399 g_signal_connect(G_OBJECT(ok), "clicked", | |
400 G_CALLBACK(vorbis_configurewin_ok), NULL); | |
401 GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT); | |
402 gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0); | |
403 gtk_widget_grab_default(ok); | |
404 | |
405 gtk_widget_show_all(vorbis_configurewin); | |
406 } |