X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fcallbacks.c;h=90008d71af7194fc449e8e8ce7047d6d8397c64a;hb=0a09b07d9a53158ed6512933f1a051044af6d9ac;hp=a263432687e51a23855d7fae2e6c6ca22bb3bd3b;hpb=0c10c5ae47be0381f337cfdc0624f96e6f3cf5e9;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index a2634326..90008d71 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -210,20 +210,6 @@ ghb_check_all_depencencies(signal_user_data_t *ud) } } -static void -clear_presets_selection(signal_user_data_t *ud) -{ - GtkTreeView *treeview; - GtkTreeSelection *selection; - - if (ud->dont_clear_presets) return; - g_debug("clear_presets_selection()"); - treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); - selection = gtk_tree_view_get_selection (treeview); - gtk_tree_selection_unselect_all (selection); - ghb_settings_set_boolean(ud->settings, "preset_modified", TRUE); -} - static gchar* expand_tilde(const gchar *path) { @@ -376,6 +362,28 @@ camel_convert(gchar *str) } } +static gchar* +get_file_label(const gchar *filename) +{ + static gchar *containers[] = + {".vob", ".mpg", ".m2ts", ".mkv", ".mp4", ".m4v", ".avi", ".ogm", NULL}; + gchar *base; + gint ii; + + base = g_path_get_basename(filename); + for (ii = 0; containers[ii] != NULL; ii++) + { + if (g_str_has_suffix(base, containers[ii])) + { + gchar *pos; + pos = strrchr(base, '.'); + *pos = 0; + break; + } + } + return base; +} + static gboolean update_source_label(signal_user_data_t *ud, const gchar *source) { @@ -407,11 +415,7 @@ update_source_label(signal_user_data_t *ud, const gchar *source) label = ghb_dvd_volname (filename); if (label == NULL) { - path = g_strsplit(filename, "/", -1); - len = g_strv_length (path); - // Just use the last combonent of the path - label = g_strdup(path[len-1]); - g_strfreev (path); + label = get_file_label(filename); } else { @@ -839,7 +843,7 @@ container_changed_cb(GtkWidget *widget, signal_user_data_t *ud) update_destination_extension(ud); ghb_check_dependency(ud, widget); update_acodec_combo(ud); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); audio_list = ghb_settings_get_value(ud->settings, "audio_list"); if (ghb_ac3_in_audio_list (audio_list)) @@ -1045,18 +1049,11 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud) } void -generic_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud) -{ - g_debug("generic_widget_changed_cb ()"); - ghb_check_dependency(ud, widget); -} - -void setting_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud) { ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); } static void @@ -1117,7 +1114,8 @@ http_opt_changed_cb(GtkWidget *widget, signal_user_data_t *ud) { ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); + // AC3 is not allowed when Web optimized ghb_grey_combo_options (ud->builder); } @@ -1128,7 +1126,7 @@ vcodec_changed_cb(GtkWidget *widget, signal_user_data_t *ud) ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); ghb_vquality_range(ud, &vqmin, &vqmax); GtkWidget *qp = GHB_WIDGET(ud->builder, "video_quality"); gtk_range_set_range (GTK_RANGE(qp), vqmin, vqmax); @@ -1141,7 +1139,7 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud) g_debug("setting_widget_changed_cb () %s", name); ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); if (ghb_settings_get_boolean(ud->settings, "vquality_type_target")) { gint titleindex; @@ -1265,7 +1263,7 @@ scale_changed_cb(GtkWidget *widget, signal_user_data_t *ud) g_debug("scale_changed_cb ()"); ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget); - clear_presets_selection(ud); + ghb_clear_presets_selection(ud); ghb_set_scale (ud, GHB_SCALE_KEEP_NONE); update_preview = TRUE; @@ -1299,256 +1297,6 @@ generic_entry_changed_cb(GtkEntry *entry, signal_user_data_t *ud) } } -gboolean -generic_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, - signal_user_data_t *ud) -{ - g_debug("generic_focus_out_cb ()"); - ghb_widget_to_setting(ud->settings, widget); - return FALSE; -} - -// Flag needed to prevent x264 options processing from chasing its tail -static gboolean ignore_options_update = FALSE; - -void -x264_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud) -{ - ghb_widget_to_setting(ud->settings, widget); - if (!ignore_options_update) - { - ignore_options_update = TRUE; - ghb_x264_opt_update(ud, widget); - ignore_options_update = FALSE; - } - ghb_check_dependency(ud, widget); - clear_presets_selection(ud); -} - -void -x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud) -{ - g_debug("x264_entry_changed_cb ()"); - if (!ignore_options_update) - { - GtkWidget *textview; - gchar *options; - - textview = GTK_WIDGET(GHB_WIDGET(ud->builder, "x264_options")); - ghb_widget_to_setting(ud->settings, textview); - options = ghb_settings_get_string(ud->settings, "x264_options"); - ignore_options_update = TRUE; - ghb_x264_parse_options(ud, options); - if (!GTK_WIDGET_HAS_FOCUS(textview)) - { - gchar *sopts; - - sopts = ghb_sanitize_x264opts(ud, options); - ghb_ui_update(ud, "x264_options", ghb_string_value(sopts)); - ghb_x264_parse_options(ud, sopts); - g_free(sopts); - } - g_free(options); - ignore_options_update = FALSE; - } -} - -gboolean -x264_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, - signal_user_data_t *ud) -{ - gchar *options, *sopts; - - ghb_widget_to_setting(ud->settings, widget); - options = ghb_settings_get_string(ud->settings, "x264_options"); - sopts = ghb_sanitize_x264opts(ud, options); - ignore_options_update = TRUE; - if (sopts != NULL) - { - ghb_ui_update(ud, "x264_options", ghb_string_value(sopts)); - ghb_x264_parse_options(ud, sopts); - } - g_free(options); - g_free(sopts); - ignore_options_update = FALSE; - return FALSE; -} - -void -ghb_presets_list_update(signal_user_data_t *ud) -{ - GtkTreeView *treeview; - GtkTreeIter iter; - GtkListStore *store; - gboolean done; - GList *presets, *plink; - gchar *preset, *def_preset; - gchar *description; - gint flags, custom, def; - - g_debug("ghb_presets_list_update ()"); - def_preset = ghb_settings_get_string(ud->settings, "default_preset"); - plink = presets = ghb_presets_get_names(); - treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); - store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview)); - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) - { - do - { - if (plink) - { - // Update row with settings data - g_debug("Updating row"); - preset = (gchar*)plink->data; - def = 0; - if (strcmp(preset, def_preset) == 0) - def = PRESET_DEFAULT; - - description = ghb_presets_get_description(preset); - flags = ghb_preset_flags(preset); - custom = flags & PRESET_CUSTOM; - gtk_list_store_set(store, &iter, - 0, preset, - 1, def ? 800 : 400, - 2, def ? 2 : 0, - 3, custom ? "black" : "blue", - 4, description, - -1); - plink = plink->next; - g_free(description); - done = !gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); - } - else - { - // No more settings data, remove row - g_debug("Removing row"); - done = !gtk_list_store_remove(store, &iter); - } - } while (!done); - } - while (plink) - { - // Additional settings, add row - g_debug("Adding rows"); - preset = (gchar*)plink->data; - def = 0; - if (strcmp(preset, def_preset) == 0) - def = PRESET_DEFAULT; - - description = ghb_presets_get_description(preset); - gtk_list_store_append(store, &iter); - flags = ghb_preset_flags(preset); - custom = flags & PRESET_CUSTOM; - gtk_list_store_set(store, &iter, 0, preset, - 1, def ? 800 : 400, - 2, def ? 2 : 0, - 3, custom ? "black" : "blue", - 4, description, - -1); - plink = plink->next; - g_free(description); - } - g_free(def_preset); - g_list_free (presets); -} - -void -ghb_select_preset(GtkBuilder *builder, const gchar *preset) -{ - GtkTreeView *treeview; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter iter; - gchar *tpreset; - gboolean done; - gboolean foundit = FALSE; - - g_debug("select_preset()"); - if (preset == NULL) return; - treeview = GTK_TREE_VIEW(GHB_WIDGET(builder, "presets_list")); - selection = gtk_tree_view_get_selection (treeview); - store = gtk_tree_view_get_model (treeview); - if (gtk_tree_model_get_iter_first(store, &iter)) - { - do - { - gtk_tree_model_get(store, &iter, 0, &tpreset, -1); - if (strcmp(preset, tpreset) == 0) - { - gtk_tree_selection_select_iter (selection, &iter); - foundit = TRUE; - g_free(tpreset); - break; - } - g_free(tpreset); - done = !gtk_tree_model_iter_next(store, &iter); - } while (!done); - } - if (!foundit) - { - gtk_tree_model_get_iter_first(store, &iter); - gtk_tree_selection_select_iter (selection, &iter); - } -} - -static void -update_audio_presets(signal_user_data_t *ud) -{ - g_debug("update_audio_presets"); - const GValue *audio_list; - - audio_list = ghb_settings_get_value(ud->settings, "audio_list"); - ghb_settings_set_value(ud->settings, "pref_audio_list", audio_list); -} - -void -presets_save_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) -{ - GtkWidget *dialog; - GtkEntry *entry; - GtkTextView *desc; - GtkResponseType response; - gchar *preset; - - g_debug("presets_save_clicked_cb ()"); - preset = ghb_settings_get_string (ud->settings, "preset"); - // Clear the description - desc = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "preset_description")); - dialog = GHB_WIDGET(ud->builder, "preset_save_dialog"); - entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "preset_name")); - gtk_entry_set_text(entry, preset); - g_free(preset); - response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_hide(dialog); - if (response == GTK_RESPONSE_OK) - { - // save the preset - const gchar *name = gtk_entry_get_text(entry); - g_debug("description to settings"); - ghb_widget_to_setting(ud->settings, GTK_WIDGET(desc)); - // Construct the audio settings presets from the current audio list - update_audio_presets(ud); - ghb_settings_save(ud, name); - ghb_presets_list_update(ud); - // Make the new preset the selected item - ghb_select_preset(ud->builder, name); - } -} - -void -presets_restore_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) -{ - g_debug("presets_restore_clicked_cb ()"); - // Reload only the standard presets - ghb_presets_reload(ud); - ghb_presets_list_update(ud); - // Updating the presets list shuffles things around - // need to make sure the proper preset is selected - gchar *preset = ghb_settings_get_string (ud->settings, "preset"); - ghb_select_preset(ud->builder, preset); - g_free(preset); -} - void prefs_dialog_cb(GtkWidget *xwidget, signal_user_data_t *ud) { @@ -1561,141 +1309,6 @@ prefs_dialog_cb(GtkWidget *xwidget, signal_user_data_t *ud) gtk_widget_hide(dialog); } -void -presets_remove_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) -{ - GtkTreeView *treeview; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter iter; - gchar *preset; - GtkResponseType response; - - g_debug("presets_remove_clicked_cb ()"); - treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); - selection = gtk_tree_view_get_selection (treeview); - if (gtk_tree_selection_get_selected(selection, &store, &iter)) - { - GtkWidget *dialog; - - gtk_tree_model_get(store, &iter, 0, &preset, -1); - dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - "Confirm deletion of preset %s.", preset); - response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_YES) - { - GtkTreeIter nextIter = iter; - gchar *nextPreset = NULL; - if (!gtk_tree_model_iter_next(store, &nextIter)) - { - if (gtk_tree_model_get_iter_first(store, &nextIter)) - { - gtk_tree_model_get(store, &nextIter, 0, &nextPreset, -1); - } - } - else - { - gtk_tree_model_get(store, &nextIter, 0, &nextPreset, -1); - } - // Remove the selected item - // First unselect it so that selecting the new item works properly - gtk_tree_selection_unselect_iter (selection, &iter); - ghb_presets_remove(preset); - ghb_presets_list_update(ud); - ghb_select_preset(ud->builder, nextPreset); - } - } -} - -static void -preset_update_title_deps(signal_user_data_t *ud, ghb_title_info_t *tinfo) -{ - GtkWidget *widget; - - ghb_ui_update(ud, "scale_width", - ghb_int64_value(tinfo->width - tinfo->crop[2] - tinfo->crop[3])); - // If anamorphic or keep_aspect, the hight will be automatically calculated - gboolean keep_aspect, anamorphic; - keep_aspect = ghb_settings_get_boolean(ud->settings, "keep_aspect"); - anamorphic = ghb_settings_get_boolean(ud->settings, "anamorphic"); - if (!(keep_aspect || anamorphic)) - { - ghb_ui_update(ud, "scale_height", - ghb_int64_value(tinfo->height - tinfo->crop[0] - tinfo->crop[1])); - } - - // Set the limits of cropping. hb_set_anamorphic_size crashes if - // you pass it a cropped width or height == 0. - gint bound; - bound = tinfo->height / 2 - 2; - widget = GHB_WIDGET (ud->builder, "crop_top"); - gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, bound); - widget = GHB_WIDGET (ud->builder, "crop_bottom"); - gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, bound); - bound = tinfo->width / 2 - 2; - widget = GHB_WIDGET (ud->builder, "crop_left"); - gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, bound); - widget = GHB_WIDGET (ud->builder, "crop_right"); - gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, bound); - if (ghb_settings_get_boolean(ud->settings, "autocrop")) - { - ghb_ui_update(ud, "crop_top", ghb_int64_value(tinfo->crop[0])); - ghb_ui_update(ud, "crop_bottom", ghb_int64_value(tinfo->crop[1])); - ghb_ui_update(ud, "crop_left", ghb_int64_value(tinfo->crop[2])); - ghb_ui_update(ud, "crop_right", ghb_int64_value(tinfo->crop[3])); - } -} - -void -presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t *ud) -{ - GtkTreeModel *store; - GtkTreeIter iter; - gchar *preset; - ghb_title_info_t tinfo; - GtkWidget *widget; - - g_debug("presets_list_selection_changed_cb ()"); - widget = GHB_WIDGET (ud->builder, "presets_remove"); - if (gtk_tree_selection_get_selected(selection, &store, &iter)) - { - gtk_tree_model_get(store, &iter, 0, &preset, -1); - ud->dont_clear_presets = TRUE; - // Temporarily set the video_quality range to (0,100) - // This is needed so the video_quality value does not get - // truncated when set. The range will be readjusted below - GtkWidget *qp = GHB_WIDGET(ud->builder, "video_quality"); - gtk_range_set_range (GTK_RANGE(qp), 0, 100); - // Clear the audio list prior to changing the preset. Existing audio - // can cause the container extension to be automatically changed when - // it shouldn't be - ghb_clear_audio_list(ud); - ghb_set_preset(ud, preset); - gint titleindex; - titleindex = ghb_settings_combo_int(ud->settings, "title"); - ghb_set_pref_audio(titleindex, ud); - ghb_settings_set_boolean(ud->settings, "preset_modified", FALSE); - ud->dont_clear_presets = FALSE; - if (ghb_get_title_info (&tinfo, titleindex)) - { - preset_update_title_deps(ud, &tinfo); - } - ghb_set_scale (ud, GHB_SCALE_KEEP_NONE); - - gint vqmin, vqmax; - ghb_vquality_range(ud, &vqmin, &vqmax); - gtk_range_set_range (GTK_RANGE(qp), vqmin, vqmax); - gtk_widget_set_sensitive(widget, TRUE); - } - else - { - g_debug("No selection??? Perhaps unselected."); - gtk_widget_set_sensitive(widget, FALSE); - } -} - gboolean ghb_message_dialog(GtkMessageType type, const gchar *message, const gchar *no, const gchar *yes) { @@ -1925,8 +1538,15 @@ ghb_backend_events(signal_user_data_t *ud) // Then handle the status of the queue if (status.state & GHB_STATE_SCANNING) { - status_str = g_strdup_printf ("Scanning title %d of %d...", + if (status.title_cur == 0) + { + status_str = g_strdup ("Scanning..."); + } + else + { + status_str = g_strdup_printf ("Scanning title %d of %d...", status.title_cur, status.title_count ); + } gtk_progress_bar_set_text (progress, status_str); g_free(status_str); if (status.title_count > 0) @@ -2282,26 +1902,6 @@ show_presets_toggled_cb(GtkToggleButton *button, signal_user_data_t *ud) ghb_pref_save(ud->settings, "show_presets"); } -void -presets_frame_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, signal_user_data_t *ud) -{ - GtkTreeView *treeview; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter iter; - - treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); - selection = gtk_tree_view_get_selection(treeview); - if (gtk_tree_selection_get_selected(selection, &store, &iter)) - { - GtkTreePath *path; - path = gtk_tree_model_get_path (store, &iter); - // Make the parent visible in scroll window if it is not. - gtk_tree_view_scroll_to_cell (treeview, path, NULL, FALSE, 0, 0); - gtk_tree_path_free(path); - } -} - static void update_chapter_list(signal_user_data_t *ud) { @@ -2505,13 +2105,6 @@ preview_button_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, si } void -presets_default_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) -{ - ghb_set_preset_default(ud->settings); - ghb_presets_list_update(ud); -} - -void debug_log_handler(const gchar *domain, GLogLevelFlags flags, const gchar *msg, gpointer data) { signal_user_data_t *ud = (signal_user_data_t*)data;