OSDN Git Service

LinGui: revert the extra widgets for subtitle foreign audio search
[handbrake-jp/handbrake-jp-git.git] / gtk / src / subtitlehandler.c
index 980e717..ea863b6 100644 (file)
@@ -18,6 +18,7 @@
 #include "values.h"
 #include "callbacks.h"
 #include "preview.h"
+#include "presets.h"
 #include "subtitlehandler.h"
 
 static void add_to_subtitle_list(signal_user_data_t *ud, GValue *settings);
@@ -35,11 +36,98 @@ free_subtitle_key(gpointer data)
                g_free(data);
 }
 
+static gboolean
+mustBurn(signal_user_data_t *ud, gint track)
+{
+       gint mux;
+
+       mux = ghb_settings_combo_int(ud->settings, "FileFormat");
+       if (mux == HB_MUX_MP4)
+       {
+               gint source;
+
+               // MP4 can only handle burned vobsubs.  make sure there isn't
+               // already something burned in the list
+               source = ghb_subtitle_track_source(ud, track);
+               if (source == VOBSUB)
+               {
+                       return TRUE;
+               }
+       }
+       return FALSE;
+}
+
+void
+ghb_subtitle_exclusive_burn(signal_user_data_t *ud, gint index)
+{
+       GValue *subtitle_list;
+       GValue *settings;
+       gint ii, count, tt;
+       GtkTreeView  *tv;
+       GtkTreeModel *tm;
+       GtkTreeIter   ti;
+       gboolean burned;
+
+       g_debug("ghb_subtitle_exclusive_burn");
+       subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
+       count = ghb_array_len(subtitle_list);
+       for (ii = 0; ii < count; ii++)
+       {
+               settings = ghb_array_get_nth(subtitle_list, ii);
+               tt = ghb_settings_combo_int(settings, "SubtitleTrack");
+               burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
+
+               tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
+               g_return_if_fail(tv != NULL);
+               tm = gtk_tree_view_get_model(tv);
+               gtk_tree_model_iter_nth_child(tm, &ti, NULL, ii);
+               if (burned && ii != index && !mustBurn(ud, tt))
+               {
+                       ghb_settings_set_boolean(settings, "SubtitleBurned", FALSE);
+                       gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 2, FALSE, -1);
+               }
+       }
+}
+
+void
+ghb_subtitle_exclusive_default(signal_user_data_t *ud, gint index)
+{
+       GValue *subtitle_list;
+       GValue *settings;
+       gint ii, count;
+       GtkTreeView  *tv;
+       GtkTreeModel *tm;
+       GtkTreeIter   ti;
+       gboolean def;
+
+       g_debug("ghb_subtitle_exclusive_default");
+       subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
+       count = ghb_array_len(subtitle_list);
+       for (ii = 0; ii < count; ii++)
+       {
+               settings = ghb_array_get_nth(subtitle_list, ii);
+               def = ghb_settings_get_boolean(settings, "SubtitleDefaultTrack");
+
+               tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
+               g_return_if_fail(tv != NULL);
+               tm = gtk_tree_view_get_model(tv);
+               gtk_tree_model_iter_nth_child(tm, &ti, NULL, ii);
+               if (def && ii != index)
+               {
+
+                       ghb_settings_set_boolean(settings, "SubtitleDefaultTrack", FALSE);
+                       gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 3, FALSE, -1);
+               }
+       }
+}
+
 void
 ghb_add_subtitle(signal_user_data_t *ud, GValue *settings)
 {
        // Add the current subtitle settings to the list.
        GValue *subtitle_list;
+       gint count;
+       gboolean burned;
        
        g_debug("ghb_add_subtitle ()");
 
@@ -50,8 +138,13 @@ ghb_add_subtitle(signal_user_data_t *ud, GValue *settings)
                subtitle_list = ghb_array_value_new(8);
                ghb_settings_set_value(ud->settings, "subtitle_list", subtitle_list);
        }
+       count = ghb_array_len(subtitle_list);
        ghb_array_append(subtitle_list, settings);
        add_to_subtitle_list(ud, settings);
+
+       burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
+       if (burned)
+               ghb_subtitle_exclusive_burn(ud, count);
 }
 
 static void
@@ -155,27 +248,6 @@ ghb_selected_subtitle_row(signal_user_data_t *ud)
        return row;
 }
 
-static gboolean
-mustBurn(signal_user_data_t *ud, gint track)
-{
-       gint mux;
-
-       mux = ghb_settings_combo_int(ud->settings, "FileFormat");
-       if (mux == HB_MUX_MP4)
-       {
-               gint source;
-
-               // MP4 can only handle burned vobsubs.  make sure there isn't
-               // already something burned in the list
-               source = ghb_subtitle_track_source(ud, track);
-               if (source == VOBSUB)
-               {
-                       return TRUE;
-               }
-       }
-       return FALSE;
-}
-
 GValue*
 ghb_selected_subtitle_settings(signal_user_data_t *ud)
 {
@@ -209,74 +281,6 @@ ghb_selected_subtitle_settings(signal_user_data_t *ud)
        return settings;
 }
 
-void
-ghb_subtitle_exclusive_burn(signal_user_data_t *ud, gint track)
-{
-       GValue *subtitle_list;
-       GValue *settings;
-       gint ii, count, tt;
-       GtkTreeView  *tv;
-       GtkTreeModel *tm;
-       GtkTreeIter   ti;
-       gboolean burned;
-
-       g_debug("ghb_subtitle_exclusive_burn");
-       subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
-       count = ghb_array_len(subtitle_list);
-       for (ii = 0; ii < count; ii++)
-       {
-               settings = ghb_array_get_nth(subtitle_list, ii);
-               tt = ghb_settings_combo_int(settings, "SubtitleTrack");
-               burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
-
-               tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
-               g_return_if_fail(tv != NULL);
-               tm = gtk_tree_view_get_model(tv);
-               gtk_tree_model_iter_nth_child(tm, &ti, NULL, ii);
-               if (burned && tt != track)
-               {
-
-                       ghb_settings_set_boolean(settings, "SubtitleBurned", FALSE);
-                       burned = FALSE;
-                       gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 2, FALSE, -1);
-               }
-       }
-}
-
-void
-ghb_subtitle_exclusive_default(signal_user_data_t *ud, gint track)
-{
-       GValue *subtitle_list;
-       GValue *settings;
-       gint ii, count, tt;
-       GtkTreeView  *tv;
-       GtkTreeModel *tm;
-       GtkTreeIter   ti;
-       gboolean def;
-
-       g_debug("ghb_subtitle_exclusive_default");
-       subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
-       count = ghb_array_len(subtitle_list);
-       for (ii = 0; ii < count; ii++)
-       {
-               settings = ghb_array_get_nth(subtitle_list, ii);
-               tt = ghb_settings_combo_int(settings, "SubtitleTrack");
-               def = ghb_settings_get_boolean(settings, "SubtitleDefaultTrack");
-
-               tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
-               g_return_if_fail(tv != NULL);
-               tm = gtk_tree_view_get_model(tv);
-               gtk_tree_model_iter_nth_child(tm, &ti, NULL, ii);
-               if (def && tt != track)
-               {
-
-                       ghb_settings_set_boolean(settings, "SubtitleDefaultTrack", FALSE);
-                       def = FALSE;
-                       gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 3, FALSE, -1);
-               }
-       }
-}
-
 G_MODULE_EXPORT void
 subtitle_forced_toggled_cb(
        GtkCellRendererToggle *cell, 
@@ -375,7 +379,8 @@ subtitle_burned_toggled_cb(
 
        gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 2, active, -1);
        // Unburn the rest
-       ghb_subtitle_exclusive_burn(ud, track);
+       if (active)
+               ghb_subtitle_exclusive_burn(ud, row);
 }
 
 G_MODULE_EXPORT void
@@ -422,7 +427,7 @@ subtitle_default_toggled_cb(
 
        gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 3, active, -1);
        // allow only one default
-       ghb_subtitle_exclusive_default(ud, track);
+       ghb_subtitle_exclusive_default(ud, row);
 }
 
 static void
@@ -492,7 +497,7 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
                        -1);
                g_free(s_track);
                if (burned)
-                       ghb_subtitle_exclusive_burn(ud, i_track);
+                       ghb_subtitle_exclusive_burn(ud, row);
        }
 }
 
@@ -574,8 +579,6 @@ add_to_subtitle_list(
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
        g_free(s_track);
-       if (burned)
-               ghb_subtitle_exclusive_burn(ud, i_track);
 }
 
 G_MODULE_EXPORT void
@@ -638,7 +641,8 @@ subtitle_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 
        ghb_array_append(subtitle_list, settings);
        add_to_subtitle_list(ud, settings);
-       ghb_subtitle_exclusive_burn(ud, track);
+       if (burned)
+               ghb_subtitle_exclusive_burn(ud, count);
        if (count == 98)
        {
                GtkWidget *widget;
@@ -706,6 +710,7 @@ ghb_subtitle_prune(signal_user_data_t *ud)
        GValue *subtitle_list, *settings;
        gint count, ii, track;
        gboolean burned;
+       gint first_track = 0, one_burned = 0;
 
        subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
        if (subtitle_list == NULL)
@@ -726,6 +731,15 @@ ghb_subtitle_prune(signal_user_data_t *ud)
                        gtk_list_store_remove (GTK_LIST_STORE(tm), &ti);
                        ghb_array_remove(subtitle_list, ii);
                }
+               if (burned)
+               {
+                       first_track = ii;
+                       one_burned++;
+               }
+       }
+       if (one_burned)
+       {
+               ghb_subtitle_exclusive_burn(ud, first_track);
        }
 }