mp3splt-gtk 0.9.2
Loading...
Searching...
No Matches
split_mode_window.c
Go to the documentation of this file.
1/**********************************************************
2 *
3 * mp3splt-gtk -- utility based on mp3splt,
4 * for mp3/ogg splitting without decoding
5 *
6 * Copyright: (C) 2005-2014 Alexandru Munteanu
7 * Contact: m@ioalex.net
8 *
9 * http://mp3splt.sourceforge.net/
10 *
11 *********************************************************/
12
13/**********************************************************
14 *
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
28 * USA.
29 *
30 *********************************************************/
31
32/*!********************************************************
33 * \file
34 * The batch processing tab
35 *
36 * this file is for the special split tab, where automatic
37 * split modes can be selected
38 *..*******************************************************/
39
40#include "split_mode_window.h"
41
43static gint get_selected_split_mode_(GtkToggleButton *radio_b)
44{
45 GSList *radio_button_list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b));
46
47 gint i = 0;
48 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
49 {
50 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(radio_button_list,i);
51 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(test)))
52 {
53 return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test), "split_type_id"));
54 }
55 }
56
57 return SELECTED_SPLIT_NORMAL;
58}
59
61void select_split_mode(int split_mode, ui_state *ui)
62{
63 GSList *split_mode_radio_button_list =
64 gtk_radio_button_get_group(GTK_RADIO_BUTTON(ui->gui->split_mode_radio_button));
65
66 gint i = 0;
67 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++)
68 {
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"));
71 if (split_mode == id)
72 {
73 gtk_toggle_button_set_active(test, TRUE);
74 return;
75 }
76 }
77}
78
79gint get_selected_split_mode(ui_state *ui)
80{
81 return ui->status->selected_split_mode;
82}
83
84void set_selected_split_mode(gint value, ui_state *ui)
85{
86 ui->status->selected_split_mode = value;
87}
88
89static void deactivate_silence_parameters(gui_state *gui)
90{
91 gtk_widget_set_sensitive(gui->all_spinner_silence_number_tracks, FALSE);
92 gtk_widget_set_sensitive(gui->all_spinner_silence_minimum, FALSE);
93 gtk_widget_set_sensitive(gui->all_spinner_track_minimum, FALSE);
94 gtk_widget_set_sensitive(gui->all_spinner_silence_offset, FALSE);
95 gtk_widget_set_sensitive(gui->all_spinner_silence_threshold, FALSE);
96 gtk_widget_set_sensitive(gui->all_silence_remove_silence, FALSE);
97 gtk_widget_set_sensitive(gui->all_threshold_label, FALSE);
98 gtk_widget_set_sensitive(gui->all_offset_label, FALSE);
99 gtk_widget_set_sensitive(gui->all_number_of_tracks_label, FALSE);
100 gtk_widget_set_sensitive(gui->all_min_silence_label, FALSE);
101 gtk_widget_set_sensitive(gui->all_min_track_label, FALSE);
102}
103
104static void activate_silence_parameters(gui_state *gui)
105{
106 gtk_widget_set_sensitive(gui->all_spinner_silence_number_tracks, TRUE);
107 gtk_widget_set_sensitive(gui->all_spinner_silence_minimum, TRUE);
108 gtk_widget_set_sensitive(gui->all_spinner_track_minimum, TRUE);
109 gtk_widget_set_sensitive(gui->all_spinner_silence_offset, TRUE);
110 gtk_widget_set_sensitive(gui->all_spinner_silence_threshold, TRUE);
111 gtk_widget_set_sensitive(gui->all_silence_remove_silence, TRUE);
112 gtk_widget_set_sensitive(gui->all_threshold_label, TRUE);
113 gtk_widget_set_sensitive(gui->all_offset_label, TRUE);
114 gtk_widget_set_sensitive(gui->all_number_of_tracks_label, TRUE);
115 gtk_widget_set_sensitive(gui->all_min_silence_label, TRUE);
116 gtk_widget_set_sensitive(gui->all_min_track_label, TRUE);
117}
118
119static void deactivate_trim_parameters(gui_state *gui)
120{
121 gtk_widget_set_sensitive(gui->all_spinner_trim_silence_threshold, FALSE);
122 gtk_widget_set_sensitive(gui->all_trim_threshold_label, FALSE);
123}
124
125static void activate_trim_parameters(gui_state *gui)
126{
127 gtk_widget_set_sensitive(gui->all_spinner_trim_silence_threshold, TRUE);
128 gtk_widget_set_sensitive(gui->all_trim_threshold_label, TRUE);
129}
130
132static void split_mode_changed(GtkToggleButton *radio_b, ui_state *ui)
133{
134 gint selected_split_mode = get_selected_split_mode_(radio_b);
135 set_selected_split_mode(selected_split_mode, ui);
136
137 int enable_time = (selected_split_mode == SELECTED_SPLIT_TIME);
138 gtk_widget_set_sensitive(ui->gui->spinner_time, enable_time);
139 gtk_widget_set_sensitive(ui->gui->time_label, enable_time);
140 gtk_widget_set_sensitive(ui->gui->time_label_after, enable_time);
141
142 int enable_split_equal_time = (selected_split_mode == SELECTED_SPLIT_EQUAL_TIME_TRACKS);
143 gtk_widget_set_sensitive(ui->gui->spinner_equal_tracks, enable_split_equal_time);
144 gtk_widget_set_sensitive(ui->gui->equal_tracks_label, enable_split_equal_time);
145 gtk_widget_set_sensitive(ui->gui->equal_tracks_label_after, enable_split_equal_time);
146
147 if (selected_split_mode == SELECTED_SPLIT_SILENCE)
148 {
149 activate_silence_parameters(ui->gui);
150 }
151 else
152 {
153 deactivate_silence_parameters(ui->gui);
154 }
155
156 if (selected_split_mode == SELECTED_SPLIT_TRIM_SILENCE)
157 {
158 activate_trim_parameters(ui->gui);
159 }
160 else
161 {
162 deactivate_trim_parameters(ui->gui);
163 }
164
165 ui_save_preferences(NULL, ui);
166}
167
169static void spinner_time_changed(GtkSpinButton *spinner, ui_state *ui)
170{
171 ui_save_preferences(NULL, ui);
172}
173
175static void spinner_equal_tracks_changed(GtkSpinButton *spinner, ui_state *ui)
176{
177 ui_save_preferences(NULL, ui);
178}
179
181static GtkWidget *create_split_mode(ui_state *ui)
182{
183 GtkWidget *local_vbox = wh_vbox_new();
184 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3);
185
186 //normal split
187 GtkWidget *split_mode_radio_button =
188 gtk_radio_button_new_with_label(NULL, _("Use manual single file splitpoints"));
189 gtk_widget_set_tooltip_text(split_mode_radio_button,
190 _("Split files using the manually defined splitpoints"));
191 ui->gui->split_mode_radio_button = split_mode_radio_button;
192 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
193 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button),
194 "toggled", G_CALLBACK(split_mode_changed), ui);
195 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
196 GINT_TO_POINTER(SELECTED_SPLIT_NORMAL));
197
198 //time split
199 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
200 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Time"));
201 gtk_widget_set_tooltip_text(split_mode_radio_button,
202 _("Split every fixed time length; last track will most likely be smaller"));
203 ui->gui->split_mode_radio_button = split_mode_radio_button;
204 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
205 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
206 G_CALLBACK(split_mode_changed), ui);
207 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
208 GINT_TO_POINTER(SELECTED_SPLIT_TIME));
209
210 //
211 GtkWidget *big_horiz_fake = wh_hbox_new();
212 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
213
214 GtkWidget *horiz_fake = wh_hbox_new();
215 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
216
217 gint default_time = 60;
218
219 GtkWidget *time_label = gtk_label_new(_("Split every"));
220 ui->gui->time_label = time_label;
221 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label, FALSE, FALSE, 0);
222
223 GtkAdjustment *adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
224 GtkWidget *spinner_time = gtk_spin_button_new(adj, 1, 0);
225 ui->gui->spinner_time = spinner_time;
226 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_time, FALSE, FALSE, 6);
227 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_time), default_time);
228 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), FALSE);
229 gtk_widget_set_sensitive(time_label, FALSE);
230 g_signal_connect(G_OBJECT(spinner_time), "value-changed", G_CALLBACK(spinner_time_changed), ui);
231
232 GtkWidget *time_label_after = gtk_label_new(_("seconds."));
233 ui->gui->time_label_after = time_label_after;
234 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label_after, FALSE, FALSE, 0);
235 gtk_widget_set_sensitive(time_label_after, FALSE);
236
237 //split in equal length
238 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
239 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Equal time tracks"));
240 gtk_widget_set_tooltip_text(split_mode_radio_button,
241 _("Create smaller tracks having exactly the same time length"));
242 ui->gui->split_mode_radio_button = split_mode_radio_button;
243 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
244 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
245 G_CALLBACK(split_mode_changed), ui);
246 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
247 GINT_TO_POINTER(SELECTED_SPLIT_EQUAL_TIME_TRACKS));
248
249 //
250 big_horiz_fake = wh_hbox_new();
251 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0);
252
253 horiz_fake = wh_hbox_new();
254 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25);
255
256 GtkWidget *equal_tracks_label = gtk_label_new(_("Split in"));
257 ui->gui->equal_tracks_label = equal_tracks_label;
258 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label, FALSE, FALSE, 0);
259
260 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0);
261 GtkWidget *spinner_equal_tracks = gtk_spin_button_new(adj, 1, 0);
262 ui->gui->spinner_equal_tracks = spinner_equal_tracks;
263 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_equal_tracks, FALSE, FALSE, 6);
264 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_equal_tracks), default_time);
265 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), FALSE);
266 gtk_widget_set_sensitive(equal_tracks_label, FALSE);
267 g_signal_connect(G_OBJECT(spinner_equal_tracks), "value-changed",
268 G_CALLBACK(spinner_equal_tracks_changed), ui);
269
270 GtkWidget *equal_tracks_label_after = gtk_label_new(_("equal tracks."));
271 ui->gui->equal_tracks_label_after = equal_tracks_label_after;
272 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label_after, FALSE, FALSE, 0);
273 gtk_widget_set_sensitive(equal_tracks_label_after, FALSE);
274
275 //trim using silence detection
276 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
277 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Trim using silence detection"));
278 gtk_widget_set_tooltip_text(split_mode_radio_button,
279 _("Split by discarding silence from the begin and from the end\n"
280 "If no silence is found, the output file is still created"));
281 ui->gui->split_mode_radio_button = split_mode_radio_button;
282 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
283 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
284 G_CALLBACK(split_mode_changed), ui);
285 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
286 GINT_TO_POINTER(SELECTED_SPLIT_TRIM_SILENCE));
287
288 horiz_fake = wh_hbox_new();
289 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
290
291 GtkWidget *param_vbox = wh_vbox_new();
292 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
293
294 horiz_fake = wh_hbox_new();
295 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
296
297 GtkWidget *all_trim_threshold_label = gtk_label_new(_("Threshold level (dB) : "));
298 ui->gui->all_trim_threshold_label = all_trim_threshold_label;
299 gtk_box_pack_start(GTK_BOX(horiz_fake), all_trim_threshold_label, FALSE, FALSE, 0);
300
301 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
302 GtkWidget *all_spinner_trim_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
303 ui->gui->all_spinner_trim_silence_threshold = all_spinner_trim_silence_threshold;
304 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_trim_silence_threshold, FALSE, FALSE, 0);
305
306 //silence split
307 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
308 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Silence - split with silence detection"));
309 gtk_widget_set_tooltip_text(split_mode_radio_button, _("Split where silence is found"));
310 ui->gui->split_mode_radio_button = split_mode_radio_button;
311 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
312 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
313 G_CALLBACK(split_mode_changed), ui);
314 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
315 GINT_TO_POINTER(SELECTED_SPLIT_SILENCE));
316
317 horiz_fake = wh_hbox_new();
318 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0);
319
320 param_vbox = wh_vbox_new();
321 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
322
323 horiz_fake = wh_hbox_new();
324 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
325
326 GtkWidget *all_threshold_label = gtk_label_new(_("Threshold level (dB) : "));
327 ui->gui->all_threshold_label = all_threshold_label;
328 gtk_box_pack_start(GTK_BOX(horiz_fake), all_threshold_label, FALSE, FALSE, 0);
329
330 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
331 GtkWidget *all_spinner_silence_threshold = gtk_spin_button_new(adj, 0.5, 2);
332 ui->gui->all_spinner_silence_threshold = all_spinner_silence_threshold;
333 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_threshold, FALSE, FALSE, 0);
334
335 horiz_fake = wh_hbox_new();
336 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
337
338 GtkWidget *all_offset_label = gtk_label_new(_("Cutpoint offset (0 is the begin of silence,and 1 the end) : "));
339 ui->gui->all_offset_label = all_offset_label;
340 gtk_box_pack_start(GTK_BOX(horiz_fake), all_offset_label, FALSE, FALSE, 0);
341
342 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -2, 2, 0.05, 10.0, 0.0);
343 GtkWidget *all_spinner_silence_offset = gtk_spin_button_new(adj, 0.05, 2);
344 ui->gui->all_spinner_silence_offset = all_spinner_silence_offset;
345 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_offset, FALSE, FALSE, 0);
346
347 horiz_fake = wh_hbox_new();
348 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
349
350 GtkWidget *all_number_of_tracks_label = gtk_label_new(_("Number of tracks (0 means all tracks) : "));
351 ui->gui->all_number_of_tracks_label = all_number_of_tracks_label;
352 gtk_box_pack_start(GTK_BOX(horiz_fake), all_number_of_tracks_label, FALSE, FALSE, 0);
353
354 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 1, 10.0, 0.0);
355 GtkWidget *all_spinner_silence_number_tracks = gtk_spin_button_new(adj, 1, 0);
356 ui->gui->all_spinner_silence_number_tracks = all_spinner_silence_number_tracks;
357 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_number_tracks, FALSE, FALSE, 0);
358
359 horiz_fake = wh_hbox_new();
360 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
361
362 GtkWidget *all_min_silence_label = gtk_label_new(_("Minimum silence length (seconds) : "));
363 ui->gui->all_min_silence_label = all_min_silence_label;
364 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_silence_label, FALSE, FALSE, 0);
365
366 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
367 GtkWidget *all_spinner_silence_minimum = gtk_spin_button_new(adj, 1, 2);
368 ui->gui->all_spinner_silence_minimum = all_spinner_silence_minimum;
369 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_minimum, FALSE, FALSE, 0);
370
371 horiz_fake = wh_hbox_new();
372 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
373
374 GtkWidget *all_min_track_label = gtk_label_new(_("Minimum track length (seconds) : "));
375 ui->gui->all_min_track_label = all_min_track_label;
376 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_track_label, FALSE, FALSE, 0);
377
378 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
379 GtkWidget *all_spinner_track_minimum = gtk_spin_button_new(adj, 1, 2);
380 ui->gui->all_spinner_track_minimum = all_spinner_track_minimum;
381 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_track_minimum, FALSE, FALSE, 0);
382
383 GtkWidget *all_silence_remove_silence =
384 gtk_check_button_new_with_label(_("Remove silence between tracks"));
385 ui->gui->all_silence_remove_silence = all_silence_remove_silence;
386 gtk_box_pack_start(GTK_BOX(param_vbox), all_silence_remove_silence, FALSE, FALSE, 0);
387
388 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_number_tracks),
389 SPLT_DEFAULT_PARAM_TRACKS);
390 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_minimum),
391 SPLT_DEFAULT_PARAM_MINIMUM_LENGTH);
392 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_offset),
393 SPLT_DEFAULT_PARAM_OFFSET);
394 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_threshold),
395 SPLT_DEFAULT_PARAM_THRESHOLD);
396 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_trim_silence_threshold),
397 SPLT_DEFAULT_PARAM_THRESHOLD);
398
399 deactivate_silence_parameters(ui->gui);
400 deactivate_trim_parameters(ui->gui);
401
402 //wrap split
403 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
404 (GTK_RADIO_BUTTON(split_mode_radio_button),
405 _("Wrap - split files created with mp3wrap or albumwrap (mp3 only)"));
406 ui->gui->split_mode_radio_button = split_mode_radio_button;
407 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
408 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
409 G_CALLBACK(split_mode_changed), ui);
410 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
411 GINT_TO_POINTER(SELECTED_SPLIT_WRAP));
412
413 //error mode split
414 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
415 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Synchronisation error mode (mp3 only)"));
416 gtk_widget_set_tooltip_text(split_mode_radio_button,
417 _("Split where synchronisation errors are found\n"
418 "Useful for splitting concatenated files"));
419 ui->gui->split_mode_radio_button = split_mode_radio_button;
420 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
421 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
422 G_CALLBACK(split_mode_changed), ui);
423 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
424 GINT_TO_POINTER(SELECTED_SPLIT_ERROR));
425
426 //internal sheet mode split
427 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
428 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Internal sheet mode (CUE sheet for FLAC and ID3v2 chapters for MP3)"));
429 gtk_widget_set_tooltip_text(split_mode_radio_button, _("Split using internal sheet"));
430 ui->gui->split_mode_radio_button = split_mode_radio_button;
431 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
432 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
433 G_CALLBACK(split_mode_changed), ui);
434 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
435 GINT_TO_POINTER(SELECTED_SPLIT_INTERNAL_SHEET));
436
437 //CUE file with the same name as the input file
438 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
439 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Use CUE file with similar name as the input file"));
440 gtk_widget_set_tooltip_text(split_mode_radio_button,
441 _("Split using CUE file having similar name as the input file\n"
442 "Example: test.cue will be looked for when splitting test.mp3"));
443 ui->gui->split_mode_radio_button = split_mode_radio_button;
444 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
445 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
446 G_CALLBACK(split_mode_changed), ui);
447 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
448 GINT_TO_POINTER(SELECTED_SPLIT_CUE_FILE));
449
450 //CDDB file with the same name as the input file
451 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget
452 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Use CDDB file with similar name as the input file"));
453 gtk_widget_set_tooltip_text(split_mode_radio_button,
454 _("Split using CDDB file having similar name as the input file\n"
455 "Example: test.cddb will be looked for when splitting test.mp3"));
456 ui->gui->split_mode_radio_button = split_mode_radio_button;
457 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2);
458 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled",
459 G_CALLBACK(split_mode_changed), ui);
460 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id",
461 GINT_TO_POINTER(SELECTED_SPLIT_CDDB_FILE));
462
463 select_split_mode(SELECTED_SPLIT_NORMAL, ui);
464
465 GtkWidget *scrolled_window = wh_create_scrolled_window();
466 wh_add_box_to_scrolled_window(local_vbox, scrolled_window);
467 return scrolled_window;
468}
469
471static GtkWidget *create_single_multiple_split_modes(ui_state *ui)
472{
473 GtkWidget *local_vbox = wh_vbox_new();
474 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 0);
475
476 GtkWidget *multiple_files_hbox = wh_hbox_new();
477 gtk_box_pack_start(GTK_BOX(local_vbox), multiple_files_hbox, TRUE, TRUE, 0);
478
479 GtkWidget *multiple_files_component = create_multiple_files_component(ui);
480 gtk_box_pack_start(GTK_BOX(multiple_files_hbox), multiple_files_component, TRUE, TRUE, 0);
481 ui->gui->multiple_files_component = multiple_files_component;
482
483 return local_vbox;
484}
485
488{
489 GtkWidget *vbox = wh_vbox_new();;
490
491 GtkWidget *paned_widget = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
492
493 gtk_box_pack_start(GTK_BOX(vbox), paned_widget, TRUE, TRUE, 0);
494
495 gtk_paned_add1(GTK_PANED(paned_widget), create_single_multiple_split_modes(ui));
496 gtk_paned_add2(GTK_PANED(paned_widget), create_split_mode(ui));
497
498 gtk_paned_set_position(GTK_PANED(paned_widget), 150);
499
500 return vbox;
501}
502
void select_split_mode(int split_mode, ui_state *ui)
Set the split mode.
GtkWidget * create_special_split_page(ui_state *ui)
creates the special split page
GtkWidget * wh_create_scrolled_window()
creates a scrolled window