41 #include <glib/gi18n.h>
44 #include "special_split.h"
45 #include "preferences_tab.h"
47 #include "multiple_files.h"
49 GtkWidget *time_label = NULL;
50 GtkWidget *spinner_time = NULL;
52 GtkWidget *equal_tracks_label = NULL;
53 GtkWidget *spinner_equal_tracks = NULL;
55 gint selected_split_mode = SELECTED_SPLIT_NORMAL;
56 gint split_file_mode = FILE_MODE_SINGLE;
58 GtkWidget *split_mode_radio_button = NULL;
59 GtkWidget *file_mode_radio_button = NULL;
61 GtkWidget *multiple_files_component = NULL;
63 GtkWidget *all_spinner_silence_number_tracks;
64 GtkWidget *all_spinner_silence_minimum;
65 GtkWidget *all_spinner_track_minimum;
66 GtkWidget *all_spinner_silence_offset;
67 GtkWidget *all_spinner_silence_threshold;
68 GtkWidget *all_spinner_trim_silence_threshold;
69 GtkWidget *all_silence_remove_silence;
71 GtkWidget *all_threshold_label;
72 GtkWidget *all_trim_threshold_label;
73 GtkWidget *all_offset_label;
74 GtkWidget *all_number_of_tracks_label;
75 GtkWidget *all_min_silence_label;
76 GtkWidget *all_min_track_label;
79 static gint get_selected_split_mode(GtkToggleButton *radio_b)
81 GSList *radio_button_list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b));
82 gint selected = SELECTED_SPLIT_NORMAL;
85 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
87 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(radio_button_list,i);
88 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(test)))
90 selected = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test),
"split_type_id"));
100 GSList *split_mode_radio_button_list =
101 gtk_radio_button_get_group(GTK_RADIO_BUTTON(split_mode_radio_button));
104 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
106 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(split_mode_radio_button_list, i);
107 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test),
"split_type_id"));
108 if (split_mode ==
id)
110 gtk_toggle_button_set_active(test, TRUE);
116 void deactivate_silence_parameters()
118 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_number_tracks), FALSE);
119 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_minimum), FALSE);
120 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_track_minimum), FALSE);
121 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_offset), FALSE);
122 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_threshold), FALSE);
123 gtk_widget_set_sensitive(GTK_WIDGET(all_silence_remove_silence), FALSE);
124 gtk_widget_set_sensitive(GTK_WIDGET(all_threshold_label), FALSE);
125 gtk_widget_set_sensitive(GTK_WIDGET(all_offset_label), FALSE);
126 gtk_widget_set_sensitive(GTK_WIDGET(all_number_of_tracks_label), FALSE);
127 gtk_widget_set_sensitive(GTK_WIDGET(all_min_silence_label), FALSE);
128 gtk_widget_set_sensitive(GTK_WIDGET(all_min_track_label), FALSE);
131 void activate_silence_parameters()
133 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_number_tracks), TRUE);
134 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_minimum), TRUE);
135 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_track_minimum), TRUE);
136 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_offset), TRUE);
137 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_threshold), TRUE);
138 gtk_widget_set_sensitive(GTK_WIDGET(all_silence_remove_silence), TRUE);
139 gtk_widget_set_sensitive(GTK_WIDGET(all_threshold_label), TRUE);
140 gtk_widget_set_sensitive(GTK_WIDGET(all_offset_label), TRUE);
141 gtk_widget_set_sensitive(GTK_WIDGET(all_number_of_tracks_label), TRUE);
142 gtk_widget_set_sensitive(GTK_WIDGET(all_min_silence_label), TRUE);
143 gtk_widget_set_sensitive(GTK_WIDGET(all_min_track_label), TRUE);
146 void deactivate_trim_parameters()
148 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_trim_silence_threshold), FALSE);
149 gtk_widget_set_sensitive(GTK_WIDGET(all_trim_threshold_label), FALSE);
152 void activate_trim_parameters()
154 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_trim_silence_threshold), TRUE);
155 gtk_widget_set_sensitive(GTK_WIDGET(all_trim_threshold_label), TRUE);
161 selected_split_mode = get_selected_split_mode(radio_b);
163 int enable_time = (selected_split_mode == SELECTED_SPLIT_TIME);
164 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), enable_time);
165 gtk_widget_set_sensitive(GTK_WIDGET(time_label), enable_time);
167 int enable_split_equal_time = (selected_split_mode == SELECTED_SPLIT_EQUAL_TIME_TRACKS);
168 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), enable_split_equal_time);
169 gtk_widget_set_sensitive(GTK_WIDGET(equal_tracks_label), enable_split_equal_time);
171 if (selected_split_mode == SELECTED_SPLIT_SILENCE)
173 activate_silence_parameters();
177 deactivate_silence_parameters();
180 if (selected_split_mode == SELECTED_SPLIT_TRIM_SILENCE)
182 activate_trim_parameters();
186 deactivate_trim_parameters();
189 save_preferences(NULL, NULL);
193 static void spinner_time_changed(GtkSpinButton *spinner, gpointer data)
195 gint time = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner));
196 gchar time_text[1024] = {
'\0' };
197 g_snprintf(time_text, 1024, _(
"Split every %2d seconds."), time);
198 gtk_label_set_text(GTK_LABEL(time_label), time_text);
200 save_preferences(NULL, NULL);
204 static void spinner_equal_tracks_changed(GtkSpinButton *spinner, gpointer data)
206 gint equal_tracks = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner));
207 gchar equal_tracks_text[1024] = {
'\0' };
208 g_snprintf(equal_tracks_text, 1024, _(
"Split in %2d equal time tracks."), equal_tracks);
209 gtk_label_set_text(GTK_LABEL(equal_tracks_label), equal_tracks_text);
211 save_preferences(NULL, NULL);
215 static void split_file_mode_changed(GtkToggleButton *radio_b, gpointer data)
217 GSList *radio_button_list =
218 gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b));
219 GtkToggleButton *current_radio_button = (GtkToggleButton *)
220 g_slist_nth_data(radio_button_list,0);
222 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(current_radio_button)))
224 split_file_mode = FILE_MODE_MULTIPLE;
225 gtk_widget_set_sensitive(multiple_files_component, TRUE);
229 split_file_mode = FILE_MODE_SINGLE;
230 gtk_widget_set_sensitive(multiple_files_component, FALSE);
233 save_preferences(NULL, NULL);
237 static GtkWidget *create_split_mode()
239 GtkWidget *local_vbox = gtk_vbox_new(FALSE, 0);
240 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3);
243 split_mode_radio_button = gtk_radio_button_new_with_label(NULL, _(
"Normal"));
244 gtk_box_pack_start (GTK_BOX (local_vbox), split_mode_radio_button,
246 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
248 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
249 GINT_TO_POINTER(SELECTED_SPLIT_NORMAL));
252 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
253 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Time"));
254 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button,
256 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
258 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
259 GINT_TO_POINTER(SELECTED_SPLIT_TIME));
262 GtkWidget *big_horiz_fake = gtk_hbox_new(FALSE, 0);
263 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
265 GtkWidget *horiz_fake = gtk_hbox_new(FALSE, 0);
266 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
268 gint default_time = 60;
270 gchar time_text[1024] = {
'\0' };
271 g_snprintf(time_text, 1024, _(
"Split every %2d seconds."), default_time);
272 time_label = gtk_label_new(time_text);
273 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label, FALSE, FALSE, 0);
276 (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
277 spinner_time = gtk_spin_button_new(adj, 1, 0);
278 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_time, FALSE, FALSE, 6);
279 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_time), default_time);
280 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), FALSE);
281 gtk_widget_set_sensitive(time_label, FALSE);
282 g_signal_connect(G_OBJECT(spinner_time),
"value-changed",
283 G_CALLBACK(spinner_time_changed), NULL);
286 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
287 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Equal time tracks"));
288 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button,
290 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
292 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
293 GINT_TO_POINTER(SELECTED_SPLIT_EQUAL_TIME_TRACKS));
296 big_horiz_fake = gtk_hbox_new(FALSE, 0);
297 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
299 horiz_fake = gtk_hbox_new(FALSE,0);
300 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
302 gint default_tracks = 10;
304 gchar equal_length_text[1024] = {
'\0' };
305 g_snprintf(equal_length_text, 1024, _(
"Split in %2d equal time tracks."), default_tracks);
306 equal_tracks_label = gtk_label_new(time_text);
307 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label, FALSE, FALSE, 0);
309 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
310 spinner_equal_tracks = gtk_spin_button_new(adj, 1, 0);
311 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_equal_tracks, FALSE, FALSE, 6);
312 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_equal_tracks), default_time);
313 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), FALSE);
314 gtk_widget_set_sensitive(equal_tracks_label, FALSE);
315 g_signal_connect(G_OBJECT(spinner_equal_tracks),
"value-changed",
316 G_CALLBACK(spinner_equal_tracks_changed), NULL);
319 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
320 (GTK_RADIO_BUTTON(split_mode_radio_button), (gchar *)_(
"Trim using silence detection"));
321 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
322 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
324 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
325 GINT_TO_POINTER(SELECTED_SPLIT_TRIM_SILENCE));
327 horiz_fake = gtk_hbox_new(FALSE,0);
328 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
330 GtkWidget *param_vbox = gtk_vbox_new(FALSE,0);
331 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
333 horiz_fake = gtk_hbox_new(FALSE,0);
334 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
336 all_trim_threshold_label = gtk_label_new(_(
"Threshold level (dB) : "));
337 gtk_box_pack_start(GTK_BOX(horiz_fake), all_trim_threshold_label, FALSE, FALSE, 0);
339 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
340 all_spinner_trim_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
341 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_trim_silence_threshold, FALSE, FALSE, 0);
344 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
345 (GTK_RADIO_BUTTON(split_mode_radio_button), (gchar *)_(
"Silence - split with silence detection"));
346 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
347 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
349 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
350 GINT_TO_POINTER(SELECTED_SPLIT_SILENCE));
352 horiz_fake = gtk_hbox_new(FALSE,0);
353 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
355 param_vbox = gtk_vbox_new(FALSE,0);
356 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
358 horiz_fake = gtk_hbox_new(FALSE,0);
359 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
361 all_threshold_label = gtk_label_new(_(
"Threshold level (dB) : "));
362 gtk_box_pack_start(GTK_BOX(horiz_fake), all_threshold_label, FALSE, FALSE, 0);
364 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
365 all_spinner_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
366 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_threshold, FALSE, FALSE, 0);
368 horiz_fake = gtk_hbox_new(FALSE,0);
369 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
371 all_offset_label = gtk_label_new(_(
"Cutpoint offset (0 is the begin of silence,and 1 the end) : "));
372 gtk_box_pack_start(GTK_BOX(horiz_fake), all_offset_label, FALSE, FALSE, 0);
374 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -2, 2, 0.05, 10.0, 0.0);
375 all_spinner_silence_offset = gtk_spin_button_new(adj, 0.05, 2);
376 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_offset, FALSE, FALSE, 0);
378 horiz_fake = gtk_hbox_new(FALSE,0);
379 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
381 all_number_of_tracks_label = gtk_label_new(_(
"Number of tracks (0 means all tracks) : "));
382 gtk_box_pack_start(GTK_BOX(horiz_fake), all_number_of_tracks_label, FALSE, FALSE, 0);
384 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 1, 10.0, 0.0);
385 all_spinner_silence_number_tracks = gtk_spin_button_new(adj, 1, 0);
386 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_number_tracks, FALSE, FALSE, 0);
388 horiz_fake = gtk_hbox_new(FALSE,0);
389 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
391 all_min_silence_label = gtk_label_new(_(
"Minimum silence length (seconds) : "));
392 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_silence_label, FALSE, FALSE, 0);
394 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
395 all_spinner_silence_minimum = gtk_spin_button_new(adj, 1, 2);
396 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_minimum, FALSE, FALSE, 0);
398 horiz_fake = gtk_hbox_new(FALSE,0);
399 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
401 all_min_track_label = gtk_label_new(_(
"Minimum track length (seconds) : "));
402 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_track_label, FALSE, FALSE, 0);
404 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
405 all_spinner_track_minimum = gtk_spin_button_new(adj, 1, 2);
406 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_track_minimum, FALSE, FALSE, 0);
408 all_silence_remove_silence =
409 gtk_check_button_new_with_label(_(
"Remove silence between tracks"));
410 gtk_box_pack_start(GTK_BOX(param_vbox), all_silence_remove_silence, FALSE, FALSE, 0);
412 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_number_tracks),
414 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_minimum),
416 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_offset),
418 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_threshold),
421 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_trim_silence_threshold),
424 deactivate_silence_parameters();
425 deactivate_trim_parameters();
428 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
429 (GTK_RADIO_BUTTON(split_mode_radio_button),
430 _(
"Wrap - split files created with mp3wrap or albumwrap (mp3 only)"));
431 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button,
433 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
435 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
436 GINT_TO_POINTER(SELECTED_SPLIT_WRAP));
439 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
440 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Error mode (mp3 only)"));
441 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button,
443 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
445 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
446 GINT_TO_POINTER(SELECTED_SPLIT_ERROR));
451 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
452 GTK_WIDGET(local_vbox));
454 return scrolled_window;
458 static GtkWidget *create_single_multiple_split_modes()
460 GtkWidget *local_vbox = gtk_vbox_new(FALSE, 0);
461 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3);
464 file_mode_radio_button =
465 gtk_radio_button_new_with_label(NULL, _(
"Single file"));
466 gtk_box_pack_start(GTK_BOX(local_vbox), file_mode_radio_button,
468 g_signal_connect(GTK_TOGGLE_BUTTON(file_mode_radio_button),
469 "toggled", G_CALLBACK(split_file_mode_changed), NULL);
472 file_mode_radio_button = gtk_radio_button_new_with_label_from_widget
473 (GTK_RADIO_BUTTON(file_mode_radio_button), _(
"Batch processing"));
474 gtk_box_pack_start(GTK_BOX(local_vbox), file_mode_radio_button,
476 g_signal_connect(GTK_TOGGLE_BUTTON(file_mode_radio_button),
477 "toggled", G_CALLBACK(split_file_mode_changed), NULL);
479 GtkWidget *multiple_files_hbox = gtk_hbox_new(FALSE, 0);
480 gtk_box_pack_start(GTK_BOX(local_vbox), multiple_files_hbox, TRUE, TRUE, 2);
482 multiple_files_component = create_multiple_files_component();
483 gtk_widget_set_sensitive(multiple_files_component, FALSE);
484 gtk_box_pack_start(GTK_BOX(multiple_files_hbox), multiple_files_component,
488 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
489 GTK_WIDGET(local_vbox));
491 return scrolled_window;
497 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);;
500 GtkWidget *notebook = gtk_notebook_new();
501 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
502 gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
503 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), TRUE);
504 gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE);
505 gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
507 GtkWidget *notebook_label = gtk_label_new(_(
"Split mode"));
508 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), create_split_mode(),
509 (GtkWidget *)notebook_label);
511 notebook_label = gtk_label_new(_(
"File mode"));
512 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
513 create_single_multiple_split_modes(), (GtkWidget *)notebook_label);