45 #include <glib/gi18n.h>
50 #define usleep(x) Sleep(x*1000)
53 #include "freedb_tab.h"
58 #include "utilities.h"
59 #include "player_tab.h"
60 #include "mp3splt-gtk.h"
61 #include "split_files.h"
62 #include "preferences_tab.h"
63 #include "preferences_manager.h"
73 gint spin_hundr_secs = 0;
75 gint splitpoint_checked = TRUE;
78 gchar current_description[255] =
"description here";
84 GtkWidget *add_button = NULL;
85 GtkWidget *remove_all_button = NULL;
86 GtkWidget *remove_row_button = NULL;
89 GtkWidget *scan_silence_button = NULL;
90 GtkWidget *scan_trim_silence_button = NULL;
93 GtkWidget *handle_box;
147 GtkWidget *spinner_silence_minimum = NULL;
148 GtkWidget *spinner_silence_minimum_track = NULL;
165 gboolean silence_remove_silence_between_tracks = FALSE;
171 extern gint timer_active;
172 extern gint player_seconds, player_minutes,
175 extern int selected_player;
177 extern GtkWidget *percent_progress_bar;
178 extern gfloat current_time;
179 extern gchar *filename_to_split;
180 extern gchar *filename_path_of_split;
181 extern gchar *filename_path_of_split;
182 extern GtkWidget *cancel_button;
184 extern gint we_are_splitting;
186 extern GtkWidget *window;
188 extern gint debug_is_active;
190 extern GtkWidget *names_from_filename;
196 void copy_filename_to_current_description(
const gchar *fname);
210 gtk_widget_set_sensitive(GTK_WIDGET(add_button), TRUE);
214 gtk_widget_set_sensitive(GTK_WIDGET(add_button), FALSE);
248 model = gtk_list_store_new (NUM_COLUMNS,
257 return GTK_TREE_MODEL (model);
268 GtkTreePath *path = NULL,*path2 = NULL;
272 gint line_mins,line_secs,line_hundr;
274 gint line1_mins,line1_secs,line1_hundr;
277 gint result_mins = 0,
278 result_secs = 0,result_hundr = 0;
281 gchar new_length_string[30];
283 model = gtk_tree_view_get_model(tree_view);
289 gtk_tree_path_new_from_indices (number ,-1);
291 gtk_tree_model_get_iter(model, &iter, path);
294 if (number != splitnumber-1)
297 gtk_tree_path_new_from_indices (number+1 ,-1);
299 gtk_tree_model_get_iter(model, &iter2, path2);
301 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
306 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter2,
313 result_mins = line1_mins - line_mins;
315 if ((result_secs = line1_secs - line_secs) < 0)
318 result_secs = 60 - line_secs + line1_secs;
322 if ((result_hundr = line1_hundr - line_hundr) < 0)
324 result_hundr = 100 - line_hundr + line1_hundr;
328 result_mins--;result_secs = 0;
333 g_snprintf(new_length_string,30,
"%d:%02d:%02d",result_mins,
334 result_secs,result_hundr);
337 gtk_tree_path_free(path2);
341 g_snprintf(new_length_string,30,
"%s",
"-");
345 gtk_tree_path_free(path);
348 gtk_list_store_set (GTK_LIST_STORE (model),
367 gint tree_hundr_secs;
369 model = gtk_tree_view_get_model(tree_view);
371 GtkTreePath *path = NULL;
376 if(gtk_tree_model_get_iter_first(model, &iter))
378 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
387 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
394 path = gtk_tree_model_get_path(model, &iter);
395 i = gtk_tree_path_get_indices (path)[0];
399 if ((minutes == tree_minutes)
400 && (seconds == tree_seconds)
401 && (hundr_secs == tree_hundr_secs)
402 && (i != current_split))
405 gtk_tree_path_free (path);
410 gtk_tree_path_free (path);
413 if(!gtk_tree_model_iter_next(model, &iter))
436 model = gtk_tree_view_get_model(
tree_view);
443 if(gtk_tree_model_get_iter_first(model, &iter))
447 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
456 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
462 if (description != NULL)
463 if (strcmp(descr, description) == 0)
475 if(!gtk_tree_model_iter_next(model, &iter))
488 gint splitpoint_selected = -1;
492 model = gtk_tree_view_get_model(
tree_view);
493 GtkTreeSelection *selection;
494 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(
tree_view));
496 GList *selected_list = NULL;
498 gtk_tree_selection_get_selected_rows(GTK_TREE_SELECTION(selection),
501 if (g_list_length(selected_list) > 0)
504 GList *current_element = NULL;
506 current_element = g_list_first(selected_list);
509 path = current_element->data;
510 splitpoint_selected = gtk_tree_path_get_indices (path)[0];
513 g_list_foreach (selected_list,
514 (GFunc)gtk_tree_path_free, NULL);
515 g_list_free (selected_list);
518 return splitpoint_selected;
524 if(!gtk_widget_get_sensitive(remove_row_button))
525 gtk_widget_set_sensitive(GTK_WIDGET(remove_row_button), TRUE);
542 g_snprintf(current_description,255,
"%s",descr);
552 gchar *t = current_description;
553 while ((t = strstr(t, _(
"_part"))) != NULL)
563 gchar *temp = g_strdup(current_description);
564 g_snprintf(current_description, 255, _(
"%s_part%d"), temp, ll + 2);
576 gint *time_secs,gint *time_mins)
578 *time_hundr = time_pos % 100;
579 time_pos = time_pos / 100;
580 *time_secs = time_pos % 60;
581 time_pos = time_pos / 60;
582 *time_mins = time_pos;
591 GtkTreeSelection *selection;
592 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(
tree_view));
595 model = gtk_tree_view_get_model(
tree_view);
597 path = gtk_tree_path_new_from_indices (index ,-1);
599 gtk_tree_model_get_iter(model, &iter, path);
600 gtk_tree_selection_unselect_all(selection);
601 gtk_tree_selection_select_iter(selection, &iter);
603 gtk_tree_path_free(path);
621 model = gtk_tree_view_get_model(
tree_view);
623 path = gtk_tree_path_new_from_indices (index ,-1);
625 gtk_tree_model_get_iter(model, &iter, path);
638 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
640 gtk_tree_path_free(path);
646 if(gtk_widget_get_sensitive(remove_row_button))
647 gtk_widget_set_sensitive(GTK_WIDGET(remove_row_button),
655 if(gtk_widget_get_sensitive(remove_all_button))
656 gtk_widget_set_sensitive(GTK_WIDGET(remove_all_button), FALSE);
664 refresh_drawing_area();
679 new_point.mins, new_point.secs, new_point.hundr_secs,-1);
682 if (splitpoint_does_not_exists ||
683 (!splitpoint_does_not_exists && old_point.checked != new_point.checked))
687 gchar *description = NULL;
689 g_snprintf(current_description, 255,
"%s", description);
700 if ((new_point.mins == old_point.mins) &&
701 (new_point.secs == old_point.secs) &&
702 (new_point.hundr_secs == old_point.hundr_secs))
723 &new_point.hundr_secs,
727 new_point.checked = old_point.checked;
739 old_point.checked ^= 1;
749 GtkTreeView *
tree_view = (GtkTreeView *)data;
752 gtk_tree_path_new_from_string (path_string);
760 model = gtk_tree_view_get_model(tree_view);
763 gint col = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(cell),
"col"));
766 gtk_tree_model_get_iter (model, &iter, path);
768 i = gtk_tree_path_get_indices (path)[0];
770 new_point.checked = old_point.checked;
779 gtk_list_store_set (GTK_LIST_STORE (model),
781 col, current_description,
784 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(names_from_filename)))
787 copy_filename_to_current_description(fname);
791 g_snprintf(current_description, 255,
"%s", _(
"description here"));
796 new_point.mins = old_point.mins;
797 new_point.secs = atoi(new_text);
798 new_point.hundr_secs = old_point.hundr_secs;
800 if (new_point.secs < 0)
804 if (new_point.secs > 59)
813 new_point.mins = atoi(new_text);
814 new_point.secs = old_point.secs;
815 new_point.hundr_secs = old_point.hundr_secs;
817 if (new_point.mins < 0)
821 if (new_point.mins > INT_MAX/6000)
823 new_point.mins = INT_MAX/6000;
830 new_point.mins = old_point.mins;
831 new_point.secs = old_point.secs;
832 new_point.hundr_secs = atoi(new_text);
834 if (new_point.hundr_secs < 0)
836 new_point.hundr_secs = 0;
838 if (new_point.hundr_secs > 99)
840 new_point.hundr_secs = 99;
849 gtk_tree_path_free (path);
853 void add_splitpoint_from_player(GtkWidget *widget,
860 my_split_point.mins = player_minutes;
861 my_split_point.secs = player_seconds;
862 my_split_point.hundr_secs = player_hundr_secs;
863 my_split_point.checked = TRUE;
868 void clear_current_description(
void)
873 void copy_filename_to_current_description(
const gchar *fname)
875 if (strcmp(fname,
"") == 0)
877 clear_current_description();
881 gchar *basename = g_path_get_basename(fname);
884 gchar *temp = g_strdup(basename);
887 tmp = strrchr(temp,
'.');
895 g_snprintf(current_description, 255,
"%s", temp);
914 my_split_point.hundr_secs,-1))
916 gchar *temp = g_strdup(current_description);
924 model = gtk_tree_view_get_model(
tree_view);
929 gint tree_hundr_secs;
931 if(gtk_tree_model_get_iter_first(model, &iter))
939 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
946 if (my_split_point.mins < tree_minutes)
952 if (my_split_point.mins == tree_minutes)
955 if (my_split_point.secs < tree_seconds)
961 if (my_split_point.secs == tree_seconds)
964 if (my_split_point.hundr_secs < tree_hundr_secs)
972 gtk_tree_model_iter_next(model, &iter);
977 gtk_list_store_insert(GTK_LIST_STORE(model),
980 g_array_insert_val(
splitpoints,k+1,my_split_point);
984 gtk_list_store_append (GTK_LIST_STORE (model),
992 && (old_index != -1))
995 path = gtk_tree_model_get_path(model, &iter);
996 gtk_tree_view_set_cursor (
tree_view,path,NULL,FALSE);
997 gtk_tree_path_free(path);
1015 if (old_index != -1)
1093 gtk_list_store_set (GTK_LIST_STORE (model),
1103 if(!gtk_widget_get_sensitive(remove_all_button))
1105 gtk_widget_set_sensitive(GTK_WIDGET(remove_all_button), TRUE);
1117 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(names_from_filename)))
1120 copy_filename_to_current_description(fname);
1124 g_snprintf(current_description, 255,
"%s", _(
"description here"));
1128 refresh_drawing_area();
1137 my_split_point.mins = spin_mins;
1138 my_split_point.secs = spin_secs;
1139 my_split_point.hundr_secs = spin_hundr_secs;
1140 my_split_point.checked = checked;
1145 void add_row_clicked(GtkWidget *button, gpointer data)
1153 gint should_trim = GPOINTER_TO_INT(data);
1159 gtk_widget_set_sensitive(GTK_WIDGET(scan_silence_button), FALSE);
1160 gtk_widget_set_sensitive(GTK_WIDGET(scan_trim_silence_button), FALSE);
1161 gtk_widget_set_sensitive(cancel_button, TRUE);
1163 gchar *format = strdup(gtk_entry_get_text(GTK_ENTRY(
output_entry)));
1172 mp3splt_set_oformat(the_state, format, &err);
1183 int old_tags_option = mp3splt_get_int_option(the_state,
SPLT_OPT_TAGS, &err);
1187 we_are_splitting = TRUE;
1190 mp3splt_set_trim_silence_points(the_state, &err);
1194 mp3splt_set_silence_points(the_state, &err);
1196 we_are_splitting = FALSE;
1198 mp3splt_set_int_option(the_state,
SPLT_OPT_TAGS, old_tags_option);
1212 gtk_widget_set_sensitive(cancel_button, FALSE);
1213 gtk_widget_set_sensitive(GTK_WIDGET(scan_silence_button), TRUE);
1214 gtk_widget_set_sensitive(GTK_WIDGET(scan_trim_silence_button), TRUE);
1227 void detect_silence_and_add_trim_splitpoints_start_thread()
1235 silence_threshold_value =
1239 silence_offset_value =
1244 silence_number_of_tracks =
1247 if (spinner_silence_minimum != NULL)
1249 silence_minimum_length =
1250 gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_silence_minimum));
1252 if (spinner_silence_minimum_track != NULL)
1254 silence_minimum_track_length =
1255 gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinner_silence_minimum_track));
1259 silence_remove_silence_between_tracks =
1270 void create_trim_silence_window(GtkWidget *button, gpointer *data)
1272 GtkWidget *silence_detection_window =
1273 gtk_dialog_new_with_buttons(_(
"Set trim splitpoints using silence detection"),
1275 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1279 GTK_RESPONSE_CANCEL,
1282 gtk_widget_set_size_request(silence_detection_window, 300, 90);
1284 GtkWidget *general_inside_vbox = gtk_vbox_new(FALSE, 0);
1286 GtkWidget *horiz_fake = gtk_hbox_new(FALSE,0);
1287 gtk_box_pack_start(GTK_BOX(general_inside_vbox), horiz_fake, FALSE, FALSE, 10);
1290 GtkWidget *param_vbox = gtk_vbox_new(FALSE,0);
1291 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
1294 horiz_fake = gtk_hbox_new(FALSE,0);
1295 gtk_box_pack_start(GTK_BOX(param_vbox),
1296 horiz_fake, FALSE, FALSE, 0);
1299 GtkWidget *label = gtk_label_new(_(
"Threshold level (dB):"));
1300 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1303 GtkAdjustment *adj = (GtkAdjustment *)
1304 gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
1308 gtk_box_pack_start(GTK_BOX(horiz_fake),
1313 silence_threshold_value);
1319 gtk_widget_show_all(general_inside_vbox);
1320 gtk_container_add(GTK_CONTAINER(
1321 gtk_dialog_get_content_area(GTK_DIALOG(silence_detection_window))),
1322 general_inside_vbox);
1325 gint result = gtk_dialog_run(GTK_DIALOG(silence_detection_window));
1329 silence_threshold_value);
1333 gtk_widget_destroy(silence_detection_window);
1335 if (result == GTK_RESPONSE_YES)
1337 detect_silence_and_add_trim_splitpoints_start_thread();
1344 GtkWidget *silence_detection_window =
1345 gtk_dialog_new_with_buttons(_(
"Set splitpoints from silence detection"),
1347 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
1351 GTK_RESPONSE_CANCEL,
1354 GtkWidget *general_inside_vbox = gtk_vbox_new(FALSE, 0);
1356 GtkWidget *horiz_fake = gtk_hbox_new(FALSE,0);
1357 gtk_box_pack_start(GTK_BOX(general_inside_vbox),
1358 horiz_fake, FALSE, FALSE, 10);
1361 GtkWidget *param_vbox;
1362 param_vbox = gtk_vbox_new(FALSE,0);
1363 gtk_box_pack_start(GTK_BOX(horiz_fake), param_vbox, FALSE, FALSE, 25);
1366 horiz_fake = gtk_hbox_new(FALSE,0);
1367 gtk_box_pack_start(GTK_BOX(param_vbox),
1368 horiz_fake, FALSE, FALSE, 0);
1371 GtkWidget *label = gtk_label_new(_(
"Threshold level (dB):"));
1372 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1375 GtkAdjustment *adj = (GtkAdjustment *)
1376 gtk_adjustment_new(0.0, -96.0, 0.0, 0.5, 10.0, 0.0);
1380 gtk_box_pack_start(GTK_BOX(horiz_fake),
1384 horiz_fake = gtk_hbox_new(FALSE,0);
1385 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
1388 label = gtk_label_new(_(
"Cutpoint offset (0 is the begin of silence,"
1389 "and 1 the end):"));
1390 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1393 adj = (GtkAdjustment *) gtk_adjustment_new(0.0, -2, 2, 0.05, 10.0, 0.0);
1400 horiz_fake = gtk_hbox_new(FALSE,0);
1401 gtk_box_pack_start(GTK_BOX(param_vbox),
1402 horiz_fake, FALSE, FALSE, 0);
1405 label = gtk_label_new(_(
"Number of tracks (0 means all tracks):"));
1406 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1409 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 1, 10.0, 0.0);
1416 horiz_fake = gtk_hbox_new(FALSE,0);
1417 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
1420 label = gtk_label_new(_(
"Minimum silence length (seconds):"));
1421 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1424 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
1426 spinner_silence_minimum = gtk_spin_button_new(adj, 1, 2);
1427 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_silence_minimum,
1431 horiz_fake = gtk_hbox_new(FALSE,0);
1432 gtk_box_pack_start(GTK_BOX(param_vbox), horiz_fake, FALSE, FALSE, 0);
1434 label = gtk_label_new(_(
"Minimum track length (seconds):"));
1435 gtk_box_pack_start(GTK_BOX(horiz_fake), label, FALSE, FALSE, 0);
1437 adj = (GtkAdjustment *)gtk_adjustment_new(0.0, 0, 2000, 0.5, 10.0, 0.0);
1438 spinner_silence_minimum_track = gtk_spin_button_new(adj, 1, 2);
1439 gtk_box_pack_start(GTK_BOX(horiz_fake), spinner_silence_minimum_track,
1445 gtk_check_button_new_with_mnemonic(_(
"_Remove silence between tracks"));
1451 silence_threshold_value);
1453 silence_offset_value);
1455 silence_number_of_tracks);
1456 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_silence_minimum),
1457 silence_minimum_length);
1458 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_silence_minimum_track),
1459 silence_minimum_track_length);
1461 silence_remove_silence_between_tracks);
1470 g_signal_connect(G_OBJECT(spinner_silence_minimum),
"value_changed",
1472 g_signal_connect(G_OBJECT(spinner_silence_minimum_track),
"value_changed",
1477 gtk_widget_show_all(general_inside_vbox);
1478 gtk_container_add(GTK_CONTAINER(
1479 gtk_dialog_get_content_area(GTK_DIALOG(silence_detection_window))),
1480 general_inside_vbox);
1483 gint result = gtk_dialog_run(GTK_DIALOG(silence_detection_window));
1487 silence_threshold_value);
1489 silence_offset_value);
1491 silence_number_of_tracks);
1493 silence_minimum_length);
1495 silence_minimum_track_length);
1497 silence_remove_silence_between_tracks);
1501 gtk_widget_destroy(silence_detection_window);
1503 if (result == GTK_RESPONSE_YES)
1512 GtkTreeSelection *selection;
1513 GList *selected_list = NULL;
1514 GList *current_element = NULL;
1515 GtkTreeView *
tree_view = (GtkTreeView *)data;
1516 GtkTreeModel *model;
1522 model = gtk_tree_view_get_model(tree_view);
1525 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
1528 selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
1532 while ((g_list_length(selected_list) > 0)
1536 current_element = g_list_last(selected_list);
1537 path = current_element->data;
1538 i = gtk_tree_path_get_indices (path)[0];
1543 selected_list = g_list_remove(selected_list, path);
1545 gtk_tree_path_free(path);
1549 g_list_foreach (selected_list,
1550 (GFunc)gtk_tree_path_free, NULL);
1551 g_list_free (selected_list);
1558 GtkTreeModel *model;
1560 model = gtk_tree_view_get_model(
tree_view);
1565 gtk_tree_model_get_iter_first(model, &iter);
1566 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
1573 if(gtk_widget_get_sensitive(remove_all_button))
1574 gtk_widget_set_sensitive(GTK_WIDGET(remove_all_button), FALSE);
1577 if(gtk_widget_get_sensitive(remove_row_button))
1578 gtk_widget_set_sensitive(GTK_WIDGET(remove_row_button), FALSE);
1584 refresh_drawing_area();
1591 gchar *label_text, gint type)
1593 GtkWidget *spinner_box = gtk_vbox_new(FALSE, 0);
1594 GtkWidget *label = gtk_label_new(label_text);
1595 gtk_box_pack_start(GTK_BOX(spinner_box), label, TRUE, FALSE, 0);
1597 GtkAdjustment *adj =
1598 (GtkAdjustment *) gtk_adjustment_new(0.0, min, max, 1.0, 10.0, 0.0);
1599 GtkWidget *spinner = gtk_spin_button_new(adj, 0, 0);
1600 gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinner), TRUE);
1604 g_signal_connect(G_OBJECT(spinner),
"value_changed",
1609 g_signal_connect(G_OBJECT(spinner),
"value_changed",
1614 g_signal_connect(G_OBJECT(spinner),
"value_changed",
1618 gtk_box_pack_start(GTK_BOX(spinner_box), spinner, TRUE, FALSE, 0);
1619 gtk_box_pack_start(GTK_BOX(bottomhbox1), spinner_box, FALSE, FALSE, 5);
1627 GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
1628 gtk_container_set_border_width (GTK_CONTAINER (hbox), 0);
1651 gtk_button_set_relief(GTK_BUTTON(add_button), GTK_RELIEF_NONE);
1652 gtk_widget_set_sensitive(GTK_WIDGET(add_button), TRUE);
1653 g_signal_connect(G_OBJECT(add_button),
"clicked",
1654 G_CALLBACK(add_row_clicked), tree_view);
1655 gtk_box_pack_start (GTK_BOX (hbox), add_button, FALSE, FALSE, 5);
1656 gtk_widget_set_tooltip_text(add_button,_(
"Add splitpoint"));
1659 remove_row_button = (GtkWidget *)
1661 gtk_button_set_relief(GTK_BUTTON(remove_row_button), GTK_RELIEF_NONE);
1662 gtk_widget_set_sensitive(GTK_WIDGET(remove_row_button), FALSE);
1663 g_signal_connect (G_OBJECT (remove_row_button),
"clicked",
1665 gtk_box_pack_start (GTK_BOX (hbox), remove_row_button, FALSE, FALSE, 5);
1666 gtk_widget_set_tooltip_text(remove_row_button, _(
"Remove rows"));
1669 remove_all_button = (GtkWidget *)
1671 gtk_button_set_relief(GTK_BUTTON(remove_all_button), GTK_RELIEF_NONE);
1672 gtk_widget_set_sensitive(GTK_WIDGET(remove_all_button), FALSE);
1673 g_signal_connect (G_OBJECT (remove_all_button),
"clicked",
1675 gtk_box_pack_start (GTK_BOX (hbox), remove_all_button, FALSE, FALSE, 5);
1676 gtk_widget_set_tooltip_text(remove_all_button, _(
"Remove all rows"));
1684 GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
1685 gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
1688 scan_trim_silence_button =
1690 gtk_widget_set_sensitive(GTK_WIDGET(scan_trim_silence_button), TRUE);
1691 g_signal_connect(G_OBJECT(scan_trim_silence_button),
"clicked",
1692 G_CALLBACK(create_trim_silence_window), NULL);
1693 gtk_box_pack_start(GTK_BOX(hbox), scan_trim_silence_button, FALSE, FALSE, 5);
1694 gtk_widget_set_tooltip_text(scan_trim_silence_button,
1695 _(
"Set trim splitpoints using silence detection"));
1698 scan_silence_button =
1700 gtk_widget_set_sensitive(GTK_WIDGET(scan_silence_button), TRUE);
1701 g_signal_connect(G_OBJECT(scan_silence_button),
"clicked",
1703 gtk_box_pack_start(GTK_BOX(hbox), scan_silence_button, FALSE, FALSE, 5);
1704 gtk_widget_set_tooltip_text(scan_silence_button,
1705 _(
"Set splitpoints from silence detection"));
1713 return (point.secs + point.mins*60)*1000+
1714 point.hundr_secs * 10;
1723 GtkTreeModel *model;
1725 GtkTreePath *path = NULL;
1726 model = gtk_tree_view_get_model(
tree_view);
1727 gchar *description = NULL;
1728 if(gtk_tree_model_get_iter_first(model, &iter))
1736 gtk_tree_path_new_from_indices (index ,-1);
1738 gtk_tree_model_get_iter(model, &iter, path);
1740 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
1744 gtk_tree_path_free(path);
1754 if (this_splitpoint != -1)
1765 gpointer split_preview(gpointer data)
1773 mp3splt_erase_all_tags(the_state, &err);
1776 "preview", SPLT_SPLITPOINT);
1779 NULL, SPLT_SKIPPOINT);
1793 fname_path[strlen(fname_path)-18] =
'\0';
1802 confirmation = mp3splt_split(the_state);
1809 if (split_file != NULL)
1811 if (confirmation > 0)
1824 if (confirmation > 0)
1826 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(percent_progress_bar), 1.0);
1827 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(percent_progress_bar), _(
" finished"));
1852 GtkTreeViewColumn *col, gpointer user_data)
1854 gint number = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(col),
"col"));
1864 this_row = gtk_tree_path_get_indices (path)[0];
1877 create_thread(split_preview, NULL, TRUE, NULL);
1889 static void toggled_splitpoint_event(GtkCellRendererToggle *cell,
1890 gchar *path_str, gpointer data)
1892 GtkTreeView *
tree_view = (GtkTreeView *)data;
1893 GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
1895 GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
1896 gboolean checked = FALSE;
1899 gtk_tree_model_get_iter(model, &iter, path);
1900 gtk_tree_model_get(model, &iter,
COL_CHECK, &checked, -1);
1906 gint index = gtk_tree_path_get_indices (path)[0];
1911 new_point.mins = old_point.mins;
1912 new_point.secs = old_point.secs;
1913 new_point.hundr_secs = old_point.hundr_secs;
1914 new_point.checked = checked;
1919 gtk_tree_path_free(path);
1926 GtkCellRendererText *renderer;
1927 GtkCellRendererPixbuf *renderer_pix;
1928 GtkCellRendererToggle *renderer_toggle;
1930 GtkTreeViewColumn *column_number;
1931 GtkTreeViewColumn *column_check = NULL;
1932 GtkTreeViewColumn *column_description;
1933 GtkTreeViewColumn *column_hundr_secs;
1934 GtkTreeViewColumn *column_minutes;
1935 GtkTreeViewColumn *column_seconds;
1936 GtkTreeViewColumn *column_preview;
1937 GtkTreeViewColumn *column_split_preview;
1941 renderer_toggle = GTK_CELL_RENDERER_TOGGLE(gtk_cell_renderer_toggle_new());
1943 g_signal_connect(renderer_toggle,
"toggled",
1944 G_CALLBACK(toggled_splitpoint_event), tree_view);
1946 g_object_set_data(G_OBJECT(renderer_toggle),
"col", GINT_TO_POINTER(
COL_CHECK));
1947 column_check = gtk_tree_view_column_new_with_attributes
1948 (_(
"Keep"), GTK_CELL_RENDERER(renderer_toggle),
1953 renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
1955 g_signal_connect(renderer,
"edited",
1959 g_object_set(renderer,
"editable", TRUE, NULL);
1960 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(
COL_DESCRIPTION));
1961 column_description = gtk_tree_view_column_new_with_attributes
1962 (_(
"Filename"), GTK_CELL_RENDERER(renderer),
1967 renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
1969 g_signal_connect(renderer,
"edited",
1973 g_object_set(renderer,
"editable", TRUE, NULL);
1974 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(
COL_SECONDS));
1975 column_seconds = gtk_tree_view_column_new_with_attributes
1976 (_(
"Secs"), GTK_CELL_RENDERER(renderer),
1981 renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
1983 g_signal_connect(renderer,
"edited",
1987 g_object_set(renderer,
"editable", TRUE, NULL);
1988 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(
COL_MINUTES));
1989 column_minutes = gtk_tree_view_column_new_with_attributes
1990 (_(
"Mins"), GTK_CELL_RENDERER(renderer),
1995 renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
1997 g_signal_connect(renderer,
"edited",
2001 g_object_set(renderer,
"editable", TRUE, NULL);
2002 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(
COL_HUNDR_SECS));
2003 column_hundr_secs = gtk_tree_view_column_new_with_attributes
2004 (_(
"Hundr"), GTK_CELL_RENDERER(renderer),
2009 renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
2010 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(
COL_NUMBER));
2012 g_object_set (G_OBJECT (renderer),
"xalign", 1.0, NULL);
2013 column_number = gtk_tree_view_column_new_with_attributes
2014 (_(
"Length"), GTK_CELL_RENDERER(renderer),
2019 renderer_pix = GTK_CELL_RENDERER_PIXBUF(gtk_cell_renderer_pixbuf_new());
2021 g_object_set(renderer_pix,
"stock-id",GTK_STOCK_MEDIA_PLAY,
2022 "stock-size",GTK_ICON_SIZE_MENU,NULL);
2024 column_preview = gtk_tree_view_column_new_with_attributes
2025 (_(
"LiveP"), GTK_CELL_RENDERER(renderer_pix),
2027 g_object_set_data(G_OBJECT(column_preview),
"col", GINT_TO_POINTER(
COL_PREVIEW));
2030 renderer_pix = GTK_CELL_RENDERER_PIXBUF(gtk_cell_renderer_pixbuf_new());
2032 g_object_set(renderer_pix,
"stock-id",GTK_STOCK_MEDIA_PLAY,
2033 "stock-size",GTK_ICON_SIZE_MENU,NULL);
2035 column_split_preview = gtk_tree_view_column_new_with_attributes
2036 (_(
"SplitP"), GTK_CELL_RENDERER(renderer_pix),
2038 g_object_set_data(G_OBJECT(column_split_preview),
"col", GINT_TO_POINTER(
COL_SPLIT_PREVIEW));
2041 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2043 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2045 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2046 GTK_TREE_VIEW_COLUMN (column_minutes),
COL_MINUTES);
2047 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2048 GTK_TREE_VIEW_COLUMN (column_seconds),
COL_SECONDS);
2049 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2051 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2052 GTK_TREE_VIEW_COLUMN (column_number),
COL_NUMBER);
2053 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2054 GTK_TREE_VIEW_COLUMN (column_preview),
COL_PREVIEW);
2055 gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view),
2056 GTK_TREE_VIEW_COLUMN (column_split_preview),
2059 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_check), 0.5);
2060 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_description), 0.5);
2061 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_minutes), 0.5);
2062 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_seconds), 0.5);
2063 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_hundr_secs), 0.5);
2064 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_number), 0.5);
2065 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_preview), 0.5);
2066 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(column_split_preview), 0.5);
2069 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN(column_check),
2070 GTK_TREE_VIEW_COLUMN_FIXED);
2071 gtk_tree_view_column_set_fixed_width(GTK_TREE_VIEW_COLUMN(column_check), 70);
2088 gtk_tree_view_column_set_resizable(column_description, TRUE);
2090 gtk_tree_view_column_set_reorderable(column_check, TRUE);
2091 gtk_tree_view_column_set_reorderable(column_description, TRUE);
2092 gtk_tree_view_column_set_reorderable(column_minutes, TRUE);
2093 gtk_tree_view_column_set_reorderable(column_seconds, TRUE);
2094 gtk_tree_view_column_set_reorderable(column_hundr_secs, TRUE);
2095 gtk_tree_view_column_set_reorderable(column_number, TRUE);
2096 gtk_tree_view_column_set_reorderable(column_preview, TRUE);
2097 gtk_tree_view_column_set_reorderable(column_split_preview, TRUE);
2099 gtk_tree_view_column_set_expand (column_description, TRUE);
2106 GtkWidget *window_child;
2108 window_child = gtk_bin_get_child(GTK_BIN(window));
2110 gtk_widget_reparent(GTK_WIDGET(window_child), GTK_WIDGET(handle_box));
2112 gtk_widget_destroy(window);
2124 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2126 gtk_widget_reparent(GTK_WIDGET(widget), GTK_WIDGET(window));
2128 g_signal_connect (G_OBJECT (window),
"delete_event",
2132 gtk_widget_show(GTK_WIDGET(window));
2143 GtkWidget *choose_splitpoints_vbox = gtk_vbox_new(FALSE, 0);
2144 gtk_container_set_border_width(GTK_CONTAINER(choose_splitpoints_vbox), 0);
2147 handle_box = gtk_handle_box_new();
2148 gtk_container_add(GTK_CONTAINER (handle_box), GTK_WIDGET(choose_splitpoints_vbox));
2150 g_signal_connect(handle_box,
"child-detached",
2156 gtk_box_pack_start(GTK_BOX(choose_splitpoints_vbox), spinners_buttons_hbox, FALSE, FALSE, 3);
2159 GtkWidget *tree_hbox = gtk_hbox_new (FALSE, 0);
2160 gtk_box_pack_start (GTK_BOX (choose_splitpoints_vbox), tree_hbox, TRUE, TRUE, 0);
2163 GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2164 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE);
2165 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2166 GTK_POLICY_AUTOMATIC,
2167 GTK_POLICY_AUTOMATIC);
2168 gtk_box_pack_start(GTK_BOX(tree_hbox), scrolled_window, TRUE, TRUE, 0);
2171 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
2172 gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
2176 gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(tree_view));
2180 gtk_box_pack_start(GTK_BOX(choose_splitpoints_vbox), special_buttons_hbox, FALSE, FALSE, 2);
2185 static void garray_to_array(GArray *spltpoints, glong *hundredth)
2193 if (point.mins >= (INT_MAX-1)/6000)
2195 hundredth[i] = LONG_MAX;
2199 hundredth[i] = point.mins * 6000 +
2200 point.secs * 100 + point.hundr_secs;
2213 GtkTreeModel *model = gtk_tree_view_get_model(
tree_view);
2215 GtkTreePath *path = NULL;
2216 gchar *description = NULL;
2222 gtk_tree_path_new_from_indices (i ,-1);
2224 gtk_tree_model_get_iter(model, &iter, path);
2226 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
2232 gint splitpoint_type = SPLT_SPLITPOINT;
2234 if (point.checked == FALSE)
2236 splitpoint_type = SPLT_SKIPPOINT;
2244 gtk_tree_path_free(path);
2251 GtkTreeModel *model;
2255 tree_view = (GtkTreeView *)gtk_tree_view_new_with_model (model);
2258 g_signal_connect(
tree_view,
"row-activated",
2263 GtkTreeSelection *selection;
2264 selection = gtk_tree_view_get_selection(
tree_view);
2265 g_signal_connect(selection,
"changed",