OSDN Git Service

LinGui: When the source is a file, be more intelligent about auto-naming the
[handbrake-jp/handbrake-jp-git.git] / gtk / src / callbacks.c
index 2fc7e39..90008d7 100644 (file)
@@ -210,20 +210,6 @@ ghb_check_all_depencencies(signal_user_data_t *ud)
        }
 }
 
-void
-ghb_clear_presets_selection(signal_user_data_t *ud)
-{
-       GtkTreeView *treeview;
-       GtkTreeSelection *selection;
-       
-       if (ud->dont_clear_presets) return;
-       g_debug("ghb_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
                {
@@ -1294,316 +1298,6 @@ generic_entry_changed_cb(GtkEntry *entry, signal_user_data_t *ud)
 }
 
 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
-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);
-       }
-}
-
-void
 prefs_dialog_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
        GtkWidget *dialog;
@@ -1844,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)
@@ -2201,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)
 {
@@ -2424,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;