mp3splt-gtk
|
00001 /********************************************************** 00002 * 00003 * mp3splt-gtk -- utility based on mp3splt, 00004 * for mp3/ogg splitting without decoding 00005 * 00006 * Copyright: (C) 2005-2012 Alexandru Munteanu 00007 * Contact: io_fx@yahoo.fr 00008 * 00009 * http://mp3splt.sourceforge.net/ 00010 * 00011 *********************************************************/ 00012 00013 /********************************************************** 00014 * 00015 * This program is free software; you can redistribute it and/or 00016 * modify it under the terms of the GNU General Public License 00017 * as published by the Free Software Foundation; either version 2 00018 * of the License, or (at your option) any later version. 00019 * 00020 * This program is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * You should have received a copy of the GNU General Public License 00026 * along with this program; if not, write to the Free Software 00027 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 00028 * USA. 00029 * 00030 *********************************************************/ 00031 00032 /*!******************************************************** 00033 * \file 00034 * The batch processing tab 00035 * 00036 * this file is for the special split tab, where automatic 00037 * split modes can be selected 00038 *..*******************************************************/ 00039 00040 #include <gtk/gtk.h> 00041 #include <glib/gi18n.h> 00042 #include <libmp3splt/mp3splt.h> 00043 00044 #include "special_split.h" 00045 #include "preferences_tab.h" 00046 #include "main_win.h" 00047 #include "multiple_files.h" 00048 00049 GtkWidget *time_label = NULL; 00050 GtkWidget *spinner_time = NULL; 00051 00052 GtkWidget *equal_tracks_label = NULL; 00053 GtkWidget *spinner_equal_tracks = NULL; 00054 00055 gint selected_split_mode = SELECTED_SPLIT_NORMAL; 00056 gint split_file_mode = FILE_MODE_SINGLE; 00057 00058 GtkWidget *split_mode_radio_button = NULL; 00059 GtkWidget *file_mode_radio_button = NULL; 00060 00061 GtkWidget *multiple_files_component = NULL; 00062 00063 GtkWidget *all_spinner_silence_number_tracks; 00064 GtkWidget *all_spinner_silence_minimum; 00065 GtkWidget *all_spinner_track_minimum; 00066 GtkWidget *all_spinner_silence_offset; 00067 GtkWidget *all_spinner_silence_threshold; 00068 GtkWidget *all_spinner_trim_silence_threshold; 00069 GtkWidget *all_silence_remove_silence; 00070 00071 GtkWidget *all_threshold_label; 00072 GtkWidget *all_trim_threshold_label; 00073 GtkWidget *all_offset_label; 00074 GtkWidget *all_number_of_tracks_label; 00075 GtkWidget *all_min_silence_label; 00076 GtkWidget *all_min_track_label; 00077 00079 static gint get_selected_split_mode(GtkToggleButton *radio_b) 00080 { 00081 GSList *radio_button_list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b)); 00082 gint selected = SELECTED_SPLIT_NORMAL; 00083 00084 gint i = 0; 00085 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++) 00086 { 00087 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(radio_button_list,i); 00088 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(test))) 00089 { 00090 selected = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test), "split_type_id")); 00091 } 00092 } 00093 00094 return selected; 00095 } 00096 00098 void select_split_mode(int split_mode) 00099 { 00100 GSList *split_mode_radio_button_list = 00101 gtk_radio_button_get_group(GTK_RADIO_BUTTON(split_mode_radio_button)); 00102 00103 gint i = 0; 00104 for(i = 0; i < NUMBER_OF_SPLIT_MODES;i++) 00105 { 00106 GtkToggleButton *test = (GtkToggleButton *) g_slist_nth_data(split_mode_radio_button_list, i); 00107 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(test), "split_type_id")); 00108 if (split_mode == id) 00109 { 00110 gtk_toggle_button_set_active(test, TRUE); 00111 return; 00112 } 00113 } 00114 } 00115 00116 void deactivate_silence_parameters() 00117 { 00118 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_number_tracks), FALSE); 00119 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_minimum), FALSE); 00120 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_track_minimum), FALSE); 00121 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_offset), FALSE); 00122 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_threshold), FALSE); 00123 gtk_widget_set_sensitive(GTK_WIDGET(all_silence_remove_silence), FALSE); 00124 gtk_widget_set_sensitive(GTK_WIDGET(all_threshold_label), FALSE); 00125 gtk_widget_set_sensitive(GTK_WIDGET(all_offset_label), FALSE); 00126 gtk_widget_set_sensitive(GTK_WIDGET(all_number_of_tracks_label), FALSE); 00127 gtk_widget_set_sensitive(GTK_WIDGET(all_min_silence_label), FALSE); 00128 gtk_widget_set_sensitive(GTK_WIDGET(all_min_track_label), FALSE); 00129 } 00130 00131 void activate_silence_parameters() 00132 { 00133 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_number_tracks), TRUE); 00134 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_minimum), TRUE); 00135 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_track_minimum), TRUE); 00136 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_offset), TRUE); 00137 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_silence_threshold), TRUE); 00138 gtk_widget_set_sensitive(GTK_WIDGET(all_silence_remove_silence), TRUE); 00139 gtk_widget_set_sensitive(GTK_WIDGET(all_threshold_label), TRUE); 00140 gtk_widget_set_sensitive(GTK_WIDGET(all_offset_label), TRUE); 00141 gtk_widget_set_sensitive(GTK_WIDGET(all_number_of_tracks_label), TRUE); 00142 gtk_widget_set_sensitive(GTK_WIDGET(all_min_silence_label), TRUE); 00143 gtk_widget_set_sensitive(GTK_WIDGET(all_min_track_label), TRUE); 00144 } 00145 00146 void deactivate_trim_parameters() 00147 { 00148 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_trim_silence_threshold), FALSE); 00149 gtk_widget_set_sensitive(GTK_WIDGET(all_trim_threshold_label), FALSE); 00150 } 00151 00152 void activate_trim_parameters() 00153 { 00154 gtk_widget_set_sensitive(GTK_WIDGET(all_spinner_trim_silence_threshold), TRUE); 00155 gtk_widget_set_sensitive(GTK_WIDGET(all_trim_threshold_label), TRUE); 00156 } 00157 00159 void split_mode_changed(GtkToggleButton *radio_b, gpointer data) 00160 { 00161 selected_split_mode = get_selected_split_mode(radio_b); 00162 00163 int enable_time = (selected_split_mode == SELECTED_SPLIT_TIME); 00164 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), enable_time); 00165 gtk_widget_set_sensitive(GTK_WIDGET(time_label), enable_time); 00166 00167 int enable_split_equal_time = (selected_split_mode == SELECTED_SPLIT_EQUAL_TIME_TRACKS); 00168 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), enable_split_equal_time); 00169 gtk_widget_set_sensitive(GTK_WIDGET(equal_tracks_label), enable_split_equal_time); 00170 00171 if (selected_split_mode == SELECTED_SPLIT_SILENCE) 00172 { 00173 activate_silence_parameters(); 00174 } 00175 else 00176 { 00177 deactivate_silence_parameters(); 00178 } 00179 00180 if (selected_split_mode == SELECTED_SPLIT_TRIM_SILENCE) 00181 { 00182 activate_trim_parameters(); 00183 } 00184 else 00185 { 00186 deactivate_trim_parameters(); 00187 } 00188 00189 save_preferences(NULL, NULL); 00190 } 00191 00193 static void spinner_time_changed(GtkSpinButton *spinner, gpointer data) 00194 { 00195 gint time = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner)); 00196 gchar time_text[1024] = { '\0' }; 00197 g_snprintf(time_text, 1024, _("Split every %2d seconds."), time); 00198 gtk_label_set_text(GTK_LABEL(time_label), time_text); 00199 00200 save_preferences(NULL, NULL); 00201 } 00202 00204 static void spinner_equal_tracks_changed(GtkSpinButton *spinner, gpointer data) 00205 { 00206 gint equal_tracks = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner)); 00207 gchar equal_tracks_text[1024] = { '\0' }; 00208 g_snprintf(equal_tracks_text, 1024, _("Split in %2d equal time tracks."), equal_tracks); 00209 gtk_label_set_text(GTK_LABEL(equal_tracks_label), equal_tracks_text); 00210 00211 save_preferences(NULL, NULL); 00212 } 00213 00215 static void split_file_mode_changed(GtkToggleButton *radio_b, gpointer data) 00216 { 00217 GSList *radio_button_list = 00218 gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_b)); 00219 GtkToggleButton *current_radio_button = (GtkToggleButton *) 00220 g_slist_nth_data(radio_button_list,0); 00221 00222 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(current_radio_button))) 00223 { 00224 split_file_mode = FILE_MODE_MULTIPLE; 00225 gtk_widget_set_sensitive(multiple_files_component, TRUE); 00226 } 00227 else 00228 { 00229 split_file_mode = FILE_MODE_SINGLE; 00230 gtk_widget_set_sensitive(multiple_files_component, FALSE); 00231 } 00232 00233 save_preferences(NULL, NULL); 00234 } 00235 00237 static GtkWidget *create_split_mode() 00238 { 00239 GtkWidget *local_vbox = gtk_vbox_new(FALSE, 0); 00240 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3); 00241 00242 //normal split 00243 split_mode_radio_button = gtk_radio_button_new_with_label(NULL, _("Normal")); 00244 gtk_box_pack_start (GTK_BOX (local_vbox), split_mode_radio_button, 00245 FALSE, FALSE, 2); 00246 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), 00247 "toggled", G_CALLBACK (split_mode_changed), NULL); 00248 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00249 GINT_TO_POINTER(SELECTED_SPLIT_NORMAL)); 00250 00251 //time split 00252 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00253 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Time")); 00254 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, 00255 FALSE, FALSE, 2); 00256 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00257 G_CALLBACK(split_mode_changed), NULL); 00258 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00259 GINT_TO_POINTER(SELECTED_SPLIT_TIME)); 00260 00261 // 00262 GtkWidget *big_horiz_fake = gtk_hbox_new(FALSE, 0); 00263 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0); 00264 00265 GtkWidget *horiz_fake = gtk_hbox_new(FALSE, 0); 00266 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25); 00267 00268 gint default_time = 60; 00269 00270 gchar time_text[1024] = { '\0' }; 00271 g_snprintf(time_text, 1024, _("Split every %2d seconds."), default_time); 00272 time_label = gtk_label_new(time_text); 00273 gtk_box_pack_start(GTK_BOX(horiz_fake), time_label, FALSE, FALSE, 0); 00274 00275 GtkAdjustment *adj = 00276 (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0); 00277 spinner_time = gtk_spin_button_new(adj, 1, 0); 00278 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_time, FALSE, FALSE, 6); 00279 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_time), default_time); 00280 gtk_widget_set_sensitive(GTK_WIDGET(spinner_time), FALSE); 00281 gtk_widget_set_sensitive(time_label, FALSE); 00282 g_signal_connect(G_OBJECT(spinner_time), "value-changed", 00283 G_CALLBACK(spinner_time_changed), NULL); 00284 00285 //split in equal length 00286 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00287 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Equal time tracks")); 00288 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, 00289 FALSE, FALSE, 2); 00290 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00291 G_CALLBACK(split_mode_changed), NULL); 00292 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00293 GINT_TO_POINTER(SELECTED_SPLIT_EQUAL_TIME_TRACKS)); 00294 00295 // 00296 big_horiz_fake = gtk_hbox_new(FALSE, 0); 00297 gtk_box_pack_start(GTK_BOX(local_vbox), big_horiz_fake, FALSE, FALSE, 0); 00298 00299 horiz_fake = gtk_hbox_new(FALSE,0); 00300 gtk_box_pack_start(GTK_BOX(big_horiz_fake), horiz_fake, FALSE, FALSE, 25); 00301 00302 gint default_tracks = 10; 00303 00304 gchar equal_length_text[1024] = { '\0' }; 00305 g_snprintf(equal_length_text, 1024, _("Split in %2d equal time tracks."), default_tracks); 00306 equal_tracks_label = gtk_label_new(time_text); 00307 gtk_box_pack_start(GTK_BOX(horiz_fake), equal_tracks_label, FALSE, FALSE, 0); 00308 00309 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 1, 2000, 1.0, 10.0, 0.0); 00310 spinner_equal_tracks = gtk_spin_button_new(adj, 1, 0); 00311 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_equal_tracks, FALSE, FALSE, 6); 00312 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_equal_tracks), default_time); 00313 gtk_widget_set_sensitive(GTK_WIDGET(spinner_equal_tracks), FALSE); 00314 gtk_widget_set_sensitive(equal_tracks_label, FALSE); 00315 g_signal_connect(G_OBJECT(spinner_equal_tracks), "value-changed", 00316 G_CALLBACK(spinner_equal_tracks_changed), NULL); 00317 00318 //trim using silence detection 00319 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00320 (GTK_RADIO_BUTTON(split_mode_radio_button), (gchar *)_("Trim using silence detection")); 00321 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2); 00322 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00323 G_CALLBACK(split_mode_changed), NULL); 00324 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00325 GINT_TO_POINTER(SELECTED_SPLIT_TRIM_SILENCE)); 00326 00327 horiz_fake = gtk_hbox_new(FALSE,0); 00328 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0); 00329 00330 GtkWidget *param_vbox = gtk_vbox_new(FALSE,0); 00331 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25); 00332 00333 horiz_fake = gtk_hbox_new(FALSE,0); 00334 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00335 00336 all_trim_threshold_label = gtk_label_new(_("Threshold level (dB) : ")); 00337 gtk_box_pack_start(GTK_BOX(horiz_fake), all_trim_threshold_label, FALSE, FALSE, 0); 00338 00339 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0); 00340 all_spinner_trim_silence_threshold = gtk_spin_button_new(adj, 0.5, 2); 00341 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_trim_silence_threshold, FALSE, FALSE, 0); 00342 00343 //silence split 00344 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00345 (GTK_RADIO_BUTTON(split_mode_radio_button), (gchar *)_("Silence - split with silence detection")); 00346 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, FALSE, FALSE, 2); 00347 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00348 G_CALLBACK(split_mode_changed), NULL); 00349 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00350 GINT_TO_POINTER(SELECTED_SPLIT_SILENCE)); 00351 00352 horiz_fake = gtk_hbox_new(FALSE,0); 00353 gtk_box_pack_start(GTK_BOX(local_vbox), horiz_fake, FALSE, FALSE, 0); 00354 00355 param_vbox = gtk_vbox_new(FALSE,0); 00356 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25); 00357 00358 horiz_fake = gtk_hbox_new(FALSE,0); 00359 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00360 00361 all_threshold_label = gtk_label_new(_("Threshold level (dB) : ")); 00362 gtk_box_pack_start(GTK_BOX(horiz_fake), all_threshold_label, FALSE, FALSE, 0); 00363 00364 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0); 00365 all_spinner_silence_threshold = gtk_spin_button_new(adj, 0.5, 2); 00366 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_threshold, FALSE, FALSE, 0); 00367 00368 horiz_fake = gtk_hbox_new(FALSE,0); 00369 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00370 00371 all_offset_label = gtk_label_new(_("Cutpoint offset (0 is the begin of silence,and 1 the end) : ")); 00372 gtk_box_pack_start(GTK_BOX(horiz_fake), all_offset_label, FALSE, FALSE, 0); 00373 00374 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, -2, 2, 0.05, 10.0, 0.0); 00375 all_spinner_silence_offset = gtk_spin_button_new(adj, 0.05, 2); 00376 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_offset, FALSE, FALSE, 0); 00377 00378 horiz_fake = gtk_hbox_new(FALSE,0); 00379 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00380 00381 all_number_of_tracks_label = gtk_label_new(_("Number of tracks (0 means all tracks) : ")); 00382 gtk_box_pack_start(GTK_BOX(horiz_fake), all_number_of_tracks_label, FALSE, FALSE, 0); 00383 00384 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 1, 10.0, 0.0); 00385 all_spinner_silence_number_tracks = gtk_spin_button_new(adj, 1, 0); 00386 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_number_tracks, FALSE, FALSE, 0); 00387 00388 horiz_fake = gtk_hbox_new(FALSE,0); 00389 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00390 00391 all_min_silence_label = gtk_label_new(_("Minimum silence length (seconds) : ")); 00392 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_silence_label, FALSE, FALSE, 0); 00393 00394 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0); 00395 all_spinner_silence_minimum = gtk_spin_button_new(adj, 1, 2); 00396 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_silence_minimum, FALSE, FALSE, 0); 00397 00398 horiz_fake = gtk_hbox_new(FALSE,0); 00399 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0); 00400 00401 all_min_track_label = gtk_label_new(_("Minimum track length (seconds) : ")); 00402 gtk_box_pack_start(GTK_BOX(horiz_fake), all_min_track_label, FALSE, FALSE, 0); 00403 00404 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0); 00405 all_spinner_track_minimum = gtk_spin_button_new(adj, 1, 2); 00406 gtk_box_pack_start(GTK_BOX(horiz_fake), all_spinner_track_minimum, FALSE, FALSE, 0); 00407 00408 all_silence_remove_silence = 00409 gtk_check_button_new_with_label(_("Remove silence between tracks")); 00410 gtk_box_pack_start(GTK_BOX(param_vbox), all_silence_remove_silence, FALSE, FALSE, 0); 00411 00412 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_number_tracks), 00413 SPLT_DEFAULT_PARAM_TRACKS); 00414 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_minimum), 00415 SPLT_DEFAULT_PARAM_MINIMUM_LENGTH); 00416 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_offset), 00417 SPLT_DEFAULT_PARAM_OFFSET); 00418 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_silence_threshold), 00419 SPLT_DEFAULT_PARAM_THRESHOLD); 00420 00421 gtk_spin_button_set_value(GTK_SPIN_BUTTON(all_spinner_trim_silence_threshold), 00422 SPLT_DEFAULT_PARAM_THRESHOLD); 00423 00424 deactivate_silence_parameters(); 00425 deactivate_trim_parameters(); 00426 00427 //wrap split 00428 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00429 (GTK_RADIO_BUTTON(split_mode_radio_button), 00430 _("Wrap - split files created with mp3wrap or albumwrap (mp3 only)")); 00431 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, 00432 FALSE, FALSE, 2); 00433 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00434 G_CALLBACK(split_mode_changed), NULL); 00435 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00436 GINT_TO_POINTER(SELECTED_SPLIT_WRAP)); 00437 00438 //error mode split 00439 split_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00440 (GTK_RADIO_BUTTON(split_mode_radio_button), _("Error mode (mp3 only)")); 00441 gtk_box_pack_start(GTK_BOX(local_vbox), split_mode_radio_button, 00442 FALSE, FALSE, 2); 00443 g_signal_connect(GTK_TOGGLE_BUTTON(split_mode_radio_button), "toggled", 00444 G_CALLBACK(split_mode_changed), NULL); 00445 g_object_set_data(G_OBJECT(split_mode_radio_button), "split_type_id", 00446 GINT_TO_POINTER(SELECTED_SPLIT_ERROR)); 00447 00448 select_split_mode(SELECTED_SPLIT_NORMAL); 00449 00450 GtkWidget *scrolled_window = create_scrolled_window(); 00451 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), 00452 GTK_WIDGET(local_vbox)); 00453 00454 return scrolled_window; 00455 } 00456 00458 static GtkWidget *create_single_multiple_split_modes() 00459 { 00460 GtkWidget *local_vbox = gtk_vbox_new(FALSE, 0); 00461 gtk_container_set_border_width(GTK_CONTAINER(local_vbox), 3); 00462 00463 //single file 00464 file_mode_radio_button = 00465 gtk_radio_button_new_with_label(NULL, _("Single file")); 00466 gtk_box_pack_start(GTK_BOX(local_vbox), file_mode_radio_button, 00467 FALSE, FALSE, 2); 00468 g_signal_connect(GTK_TOGGLE_BUTTON(file_mode_radio_button), 00469 "toggled", G_CALLBACK(split_file_mode_changed), NULL); 00470 00471 //multiple files 00472 file_mode_radio_button = gtk_radio_button_new_with_label_from_widget 00473 (GTK_RADIO_BUTTON(file_mode_radio_button), _("Batch processing")); 00474 gtk_box_pack_start(GTK_BOX(local_vbox), file_mode_radio_button, 00475 FALSE, FALSE, 2); 00476 g_signal_connect(GTK_TOGGLE_BUTTON(file_mode_radio_button), 00477 "toggled", G_CALLBACK(split_file_mode_changed), NULL); 00478 00479 GtkWidget *multiple_files_hbox = gtk_hbox_new(FALSE, 0); 00480 gtk_box_pack_start(GTK_BOX(local_vbox), multiple_files_hbox, TRUE, TRUE, 2); 00481 00482 multiple_files_component = create_multiple_files_component(); 00483 gtk_widget_set_sensitive(multiple_files_component, FALSE); 00484 gtk_box_pack_start(GTK_BOX(multiple_files_hbox), multiple_files_component, 00485 TRUE, TRUE, 5); 00486 00487 GtkWidget *scrolled_window = create_scrolled_window(); 00488 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), 00489 GTK_WIDGET(local_vbox)); 00490 00491 return scrolled_window; 00492 } 00493 00495 GtkWidget *create_special_split_page() 00496 { 00497 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);; 00498 00499 /* tabbed notebook */ 00500 GtkWidget *notebook = gtk_notebook_new(); 00501 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); 00502 gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook)); 00503 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), TRUE); 00504 gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE); 00505 gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); 00506 00507 GtkWidget *notebook_label = gtk_label_new(_("Split mode")); 00508 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), create_split_mode(), 00509 (GtkWidget *)notebook_label); 00510 00511 notebook_label = gtk_label_new(_("File mode")); 00512 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), 00513 create_single_multiple_split_modes(), (GtkWidget *)notebook_label); 00514 00515 return vbox; 00516 } 00517