mp3splt-gtk
special_split.c
Go to the documentation of this file.
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