40 #include "split_mode_window.h"
43 static gint get_selected_split_mode(GtkToggleButton *radio_b)
45 GSList *radio_button_list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b));
48 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
50 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(radio_button_list,i);
51 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(test)))
53 return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test),
"split_type_id"));
57 return SELECTED_SPLIT_NORMAL;
63 GSList *split_mode_radio_button_list =
64 gtk_radio_button_get_group(GTK_RADIO_BUTTON(ui->gui->split_mode_radio_button));
67 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
69 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(split_mode_radio_button_list, i);
70 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test),
"split_type_id"));
73 gtk_toggle_button_set_active(test, TRUE);
79 gint get_selected_split_mode_safe(
ui_state *ui)
81 lock_mutex(&ui->variables_mutex);
82 gint selected_split_mode = ui->status->selected_split_mode;
83 unlock_mutex(&ui->variables_mutex);
84 return selected_split_mode;
87 void set_selected_split_mode_safe(gint value,
ui_state *ui)
89 lock_mutex(&ui->variables_mutex);
90 ui->status->selected_split_mode = value;
91 unlock_mutex(&ui->variables_mutex);
94 static void deactivate_silence_parameters(
gui_state *gui)
96 gtk_widget_set_sensitive(gui->all_spinner_silence_number_tracks, FALSE);
97 gtk_widget_set_sensitive(gui->all_spinner_silence_minimum, FALSE);
98 gtk_widget_set_sensitive(gui->all_spinner_track_minimum, FALSE);
99 gtk_widget_set_sensitive(gui->all_spinner_silence_offset, FALSE);
100 gtk_widget_set_sensitive(gui->all_spinner_silence_threshold, FALSE);
101 gtk_widget_set_sensitive(gui->all_silence_remove_silence, FALSE);
102 gtk_widget_set_sensitive(gui->all_threshold_label, FALSE);
103 gtk_widget_set_sensitive(gui->all_offset_label, FALSE);
104 gtk_widget_set_sensitive(gui->all_number_of_tracks_label, FALSE);
105 gtk_widget_set_sensitive(gui->all_min_silence_label, FALSE);
106 gtk_widget_set_sensitive(gui->all_min_track_label, FALSE);
109 static void activate_silence_parameters(
gui_state *gui)
111 gtk_widget_set_sensitive(gui->all_spinner_silence_number_tracks, TRUE);
112 gtk_widget_set_sensitive(gui->all_spinner_silence_minimum, TRUE);
113 gtk_widget_set_sensitive(gui->all_spinner_track_minimum, TRUE);
114 gtk_widget_set_sensitive(gui->all_spinner_silence_offset, TRUE);
115 gtk_widget_set_sensitive(gui->all_spinner_silence_threshold, TRUE);
116 gtk_widget_set_sensitive(gui->all_silence_remove_silence, TRUE);
117 gtk_widget_set_sensitive(gui->all_threshold_label, TRUE);
118 gtk_widget_set_sensitive(gui->all_offset_label, TRUE);
119 gtk_widget_set_sensitive(gui->all_number_of_tracks_label, TRUE);
120 gtk_widget_set_sensitive(gui->all_min_silence_label, TRUE);
121 gtk_widget_set_sensitive(gui->all_min_track_label, TRUE);
124 static void deactivate_trim_parameters(
gui_state *gui)
126 gtk_widget_set_sensitive(gui->all_spinner_trim_silence_threshold, FALSE);
127 gtk_widget_set_sensitive(gui->all_trim_threshold_label, FALSE);
130 static void activate_trim_parameters(
gui_state *gui)
132 gtk_widget_set_sensitive(gui->all_spinner_trim_silence_threshold, TRUE);
133 gtk_widget_set_sensitive(gui->all_trim_threshold_label, TRUE);
137 static void split_mode_changed(GtkToggleButton *radio_b,
ui_state *ui)
139 gint selected_split_mode = get_selected_split_mode(radio_b);
140 set_selected_split_mode_safe(selected_split_mode, ui);
142 int enable_time = (selected_split_mode == SELECTED_SPLIT_TIME);
143 gtk_widget_set_sensitive(ui->gui->spinner_time, enable_time);
144 gtk_widget_set_sensitive(ui->gui->time_label, enable_time);
145 gtk_widget_set_sensitive(ui->gui->time_label_after, enable_time);
147 int enable_split_equal_time = (selected_split_mode == SELECTED_SPLIT_EQUAL_TIME_TRACKS);
148 gtk_widget_set_sensitive(ui->gui->spinner_equal_tracks, enable_split_equal_time);
149 gtk_widget_set_sensitive(ui->gui->equal_tracks_label, enable_split_equal_time);
150 gtk_widget_set_sensitive(ui->gui->equal_tracks_label_after, enable_split_equal_time);
152 if (selected_split_mode == SELECTED_SPLIT_SILENCE)
154 activate_silence_parameters(ui->gui);
158 deactivate_silence_parameters(ui->gui);
161 if (selected_split_mode == SELECTED_SPLIT_TRIM_SILENCE)
163 activate_trim_parameters(ui->gui);
167 deactivate_trim_parameters(ui->gui);
170 ui_save_preferences(NULL, ui);
174 static void spinner_time_changed(GtkSpinButton *spinner,
ui_state *ui)
176 ui_save_preferences(NULL, ui);
180 static void spinner_equal_tracks_changed(GtkSpinButton *spinner,
ui_state *ui)
182 ui_save_preferences(NULL, ui);
186 static GtkWidget *create_split_mode(
ui_state *ui)
188 GtkWidget *local_vbox = wh_vbox_new();
189 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3);
192 GtkWidget *split_mode_radio_button =
193 gtk_radio_button_new_with_label(NULL, _(
"Use manual single file splitpoints"));
194 ui->gui->split_mode_radio_button = split_mode_radio_button;
195 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
196 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
197 "toggled", G_CALLBACK(split_mode_changed), ui);
198 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
199 GINT_TO_POINTER(SELECTED_SPLIT_NORMAL));
202 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
203 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Time"));
204 ui->gui->split_mode_radio_button = split_mode_radio_button;
205 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
206 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
207 G_CALLBACK(split_mode_changed), ui);
208 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
209 GINT_TO_POINTER(SELECTED_SPLIT_TIME));
212 GtkWidget *big_horiz_fake = wh_hbox_new();
213 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
215 GtkWidget *horiz_fake = wh_hbox_new();
216 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
218 gint default_time = 60;
220 GtkWidget *time_label = gtk_label_new(_(
"Split every"));
221 ui->gui->time_label = time_label;
222 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label, FALSE, FALSE, 0);
224 GtkAdjustment *adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
225 GtkWidget *spinner_time = gtk_spin_button_new(adj, 1, 0);
226 ui->gui->spinner_time = spinner_time;
227 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_time, FALSE, FALSE, 6);
228 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_time), default_time);
229 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), FALSE);
230 gtk_widget_set_sensitive(time_label, FALSE);
231 g_signal_connect(G_OBJECT(spinner_time),
"value-changed", G_CALLBACK(spinner_time_changed), ui);
233 GtkWidget *time_label_after = gtk_label_new(_(
"seconds."));
234 ui->gui->time_label_after = time_label_after;
235 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label_after, FALSE, FALSE, 0);
236 gtk_widget_set_sensitive(time_label_after, FALSE);
239 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
240 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Equal time tracks"));
241 ui->gui->split_mode_radio_button = split_mode_radio_button;
242 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
243 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
244 G_CALLBACK(split_mode_changed), ui);
245 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
246 GINT_TO_POINTER(SELECTED_SPLIT_EQUAL_TIME_TRACKS));
249 big_horiz_fake = wh_hbox_new();
250 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
252 horiz_fake = wh_hbox_new();
253 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
255 gint default_tracks = 10;
257 GtkWidget *equal_tracks_label = gtk_label_new(_(
"Split in"));
258 ui->gui->equal_tracks_label = equal_tracks_label;
259 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label, FALSE, FALSE, 0);
261 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
262 GtkWidget *spinner_equal_tracks = gtk_spin_button_new(adj, 1, 0);
263 ui->gui->spinner_equal_tracks = spinner_equal_tracks;
264 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_equal_tracks, FALSE, FALSE, 6);
265 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_equal_tracks), default_time);
266 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), FALSE);
267 gtk_widget_set_sensitive(equal_tracks_label, FALSE);
268 g_signal_connect(G_OBJECT(spinner_equal_tracks),
"value-changed",
269 G_CALLBACK(spinner_equal_tracks_changed), ui);
271 GtkWidget *equal_tracks_label_after = gtk_label_new(_(
"equal tracks."));
272 ui->gui->equal_tracks_label_after = equal_tracks_label_after;
273 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label_after, FALSE, FALSE, 0);
274 gtk_widget_set_sensitive(equal_tracks_label_after, FALSE);
277 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
278 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Trim using silence detection"));
279 ui->gui->split_mode_radio_button = split_mode_radio_button;
280 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
281 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
282 G_CALLBACK(split_mode_changed), ui);
283 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
284 GINT_TO_POINTER(SELECTED_SPLIT_TRIM_SILENCE));
286 horiz_fake = wh_hbox_new();
287 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
289 GtkWidget *param_vbox = wh_vbox_new();
290 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
292 horiz_fake = wh_hbox_new();
293 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
295 GtkWidget *all_trim_threshold_label = gtk_label_new(_(
"Threshold level (dB) : "));
296 ui->gui->all_trim_threshold_label = all_trim_threshold_label;
297 gtk_box_pack_start(GTK_BOX(horiz_fake), all_trim_threshold_label, FALSE, FALSE, 0);
299 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
300 GtkWidget *all_spinner_trim_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
301 ui->gui->all_spinner_trim_silence_threshold = all_spinner_trim_silence_threshold;
302 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_trim_silence_threshold, FALSE, FALSE, 0);
305 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
306 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Silence - split with silence detection"));
307 ui->gui->split_mode_radio_button = split_mode_radio_button;
308 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
309 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
310 G_CALLBACK(split_mode_changed), ui);
311 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
312 GINT_TO_POINTER(SELECTED_SPLIT_SILENCE));
314 horiz_fake = wh_hbox_new();
315 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
317 param_vbox = wh_vbox_new();
318 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
320 horiz_fake = wh_hbox_new();
321 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
323 GtkWidget *all_threshold_label = gtk_label_new(_(
"Threshold level (dB) : "));
324 ui->gui->all_threshold_label = all_threshold_label;
325 gtk_box_pack_start(GTK_BOX(horiz_fake), all_threshold_label, FALSE, FALSE, 0);
327 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
328 GtkWidget *all_spinner_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
329 ui->gui->all_spinner_silence_threshold = all_spinner_silence_threshold;
330 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_threshold, FALSE, FALSE, 0);
332 horiz_fake = wh_hbox_new();
333 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
335 GtkWidget *all_offset_label = gtk_label_new(_(
"Cutpoint offset (0 is the begin of silence,and 1 the end) : "));
336 ui->gui->all_offset_label = all_offset_label;
337 gtk_box_pack_start(GTK_BOX(horiz_fake), all_offset_label, FALSE, FALSE, 0);
339 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -2, 2, 0.05, 10.0, 0.0);
340 GtkWidget *all_spinner_silence_offset = gtk_spin_button_new(adj, 0.05, 2);
341 ui->gui->all_spinner_silence_offset = all_spinner_silence_offset;
342 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_offset, FALSE, FALSE, 0);
344 horiz_fake = wh_hbox_new();
345 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
347 GtkWidget *all_number_of_tracks_label = gtk_label_new(_(
"Number of tracks (0 means all tracks) : "));
348 ui->gui->all_number_of_tracks_label = all_number_of_tracks_label;
349 gtk_box_pack_start(GTK_BOX(horiz_fake), all_number_of_tracks_label, FALSE, FALSE, 0);
351 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 1, 10.0, 0.0);
352 GtkWidget *all_spinner_silence_number_tracks = gtk_spin_button_new(adj, 1, 0);
353 ui->gui->all_spinner_silence_number_tracks = all_spinner_silence_number_tracks;
354 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_number_tracks, FALSE, FALSE, 0);
356 horiz_fake = wh_hbox_new();
357 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
359 GtkWidget *all_min_silence_label = gtk_label_new(_(
"Minimum silence length (seconds) : "));
360 ui->gui->all_min_silence_label = all_min_silence_label;
361 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_silence_label, FALSE, FALSE, 0);
363 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
364 GtkWidget *all_spinner_silence_minimum = gtk_spin_button_new(adj, 1, 2);
365 ui->gui->all_spinner_silence_minimum = all_spinner_silence_minimum;
366 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_minimum, FALSE, FALSE, 0);
368 horiz_fake = wh_hbox_new();
369 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
371 GtkWidget *all_min_track_label = gtk_label_new(_(
"Minimum track length (seconds) : "));
372 ui->gui->all_min_track_label = all_min_track_label;
373 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_track_label, FALSE, FALSE, 0);
375 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
376 GtkWidget *all_spinner_track_minimum = gtk_spin_button_new(adj, 1, 2);
377 ui->gui->all_spinner_track_minimum = all_spinner_track_minimum;
378 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_track_minimum, FALSE, FALSE, 0);
380 GtkWidget *all_silence_remove_silence =
381 gtk_check_button_new_with_label(_(
"Remove silence between tracks"));
382 ui->gui->all_silence_remove_silence = all_silence_remove_silence;
383 gtk_box_pack_start(GTK_BOX(param_vbox), all_silence_remove_silence, FALSE, FALSE, 0);
385 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_number_tracks),
387 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_minimum),
389 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_offset),
391 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_threshold),
393 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_trim_silence_threshold),
396 deactivate_silence_parameters(ui->gui);
397 deactivate_trim_parameters(ui->gui);
400 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
401 (GTK_RADIO_BUTTON(split_mode_radio_button),
402 _(
"Wrap - split files created with mp3wrap or albumwrap (mp3 only)"));
403 ui->gui->split_mode_radio_button = split_mode_radio_button;
404 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
405 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
406 G_CALLBACK(split_mode_changed), ui);
407 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
408 GINT_TO_POINTER(SELECTED_SPLIT_WRAP));
411 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
412 (GTK_RADIO_BUTTON(split_mode_radio_button), _(
"Error mode (mp3 only)"));
413 ui->gui->split_mode_radio_button = split_mode_radio_button;
414 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
415 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
"toggled",
416 G_CALLBACK(split_mode_changed), ui);
417 g_object_set_data(G_OBJECT(split_mode_radio_button),
"split_type_id",
418 GINT_TO_POINTER(SELECTED_SPLIT_ERROR));
423 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
424 GTK_WIDGET(local_vbox));
426 return scrolled_window;
430 static GtkWidget *create_single_multiple_split_modes(
ui_state *ui)
432 GtkWidget *local_vbox = wh_vbox_new();
433 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 0);
435 GtkWidget *multiple_files_hbox = wh_hbox_new();
436 gtk_box_pack_start(GTK_BOX(local_vbox), multiple_files_hbox, TRUE, TRUE, 0);
438 GtkWidget *multiple_files_component = create_multiple_files_component(ui);
439 gtk_box_pack_start(GTK_BOX(multiple_files_hbox), multiple_files_component, TRUE, TRUE, 0);
440 ui->gui->multiple_files_component = multiple_files_component;
443 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
444 GTK_WIDGET(local_vbox));
446 return scrolled_window;
452 GtkWidget *vbox = wh_vbox_new();;
454 #if GTK_MAJOR_VERSION <= 2
455 GtkWidget *paned_widget = gtk_vpaned_new();
457 GtkWidget *paned_widget = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
460 gtk_box_pack_start(GTK_BOX(vbox), paned_widget, TRUE, TRUE, 0);
462 gtk_paned_add1(GTK_PANED(paned_widget), create_single_multiple_split_modes(ui));
463 gtk_paned_add2(GTK_PANED(paned_widget), create_split_mode(ui));
465 gtk_paned_set_position(GTK_PANED(paned_widget), 150);