comparison src/vorbis/configure.c @ 12:3da1b8942b8b trunk

[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
author nenolod
date Mon, 18 Sep 2006 03:14:20 -0700
parents src/Input/vorbis/configure.c@088092a52fea
children 1a82af4f13cf
comparison
equal deleted inserted replaced
11:cff1d04026ae 12:3da1b8942b8b
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 "audacious/configdb.h"
14 #include "audacious/dirbrowser.h"
15 #include "audacious/titlestring.h"
16 #include "audacious/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
24 static GtkWidget *streaming_save_entry;
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 }