OSDN Git Service

import original 0.9.5 release
[handbrake-jp/handbrake-jp.git] / gtk / src / subtitlehandler.c
index 5374408..0746b26 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 /*
  * subtitlehandler.c
- * Copyright (C) John Stebbins 2008 <stebbins@stebbins>
+ * Copyright (C) John Stebbins 2008-2011 <stebbins@stebbins>
  * 
  * subtitlehandler.c is free software.
  * 
@@ -41,18 +41,21 @@ free_subtitle_key(gpointer data)
 static gboolean
 mustBurn(signal_user_data_t *ud, GValue *settings)
 {
-       if (ghb_settings_combo_int(ud->settings, "FileFormat") == HB_MUX_MP4)
-       {
-               // MP4 can only handle burned vobsubs.  make sure there isn't
-               // already something burned in the list
-               if (ghb_settings_get_int(settings, "SubtitleSource") == VOBSUB)
-               {
-                       return TRUE;
-               }
-       }
        return FALSE;
 }
 
+static gboolean
+canBurn(int source)
+{
+       return (source == VOBSUB || source == SSASUB);
+}
+
+static gboolean
+canForce(int source)
+{
+       return (source == VOBSUB);
+}
+
 gboolean
 ghb_soft_in_subtitle_list(GValue *subtitle_list)
 {
@@ -528,7 +531,7 @@ subtitle_forced_toggled_cb(
        settings = ghb_array_get_nth(subtitle_list, row);
 
        source = ghb_settings_get_int(settings, "SubtitleSource");
-       if (source != VOBSUB)
+       if (!canForce(source))
                return;
 
        ghb_settings_set_boolean(settings, "SubtitleForced", active);
@@ -576,7 +579,7 @@ subtitle_burned_toggled_cb(
 
        settings = ghb_array_get_nth(subtitle_list, row);
        source = ghb_settings_get_int(settings, "SubtitleSource");
-       if (source != VOBSUB)
+       if (!canBurn(source))
                return;
        if (!active && mustBurn(ud, settings))
                return;
@@ -613,7 +616,6 @@ subtitle_default_toggled_cb(
        GValue *subtitle_list;
        gint count;
        GValue *settings;
-       gboolean burned;
 
        g_debug("default toggled");
        tp = gtk_tree_path_new_from_string (path);
@@ -652,30 +654,6 @@ subtitle_default_toggled_cb(
        ghb_live_reset(ud);
 }
 
-static const char*
-subtitle_source_name(gint source)
-{
-       const gchar * name;
-
-       switch (source)
-       {
-               case VOBSUB:
-                       name = "Bitmap";
-                       break;
-               case CC708SUB:
-               case CC608SUB:
-                       name = "Text";
-                       break;
-               case SRTSUB:
-                       name = "SRT";
-                       break;
-               default:
-                       name = "Unknown";
-                       break;
-       }
-       return name;
-}
-
 static void
 subtitle_list_refresh_selected(signal_user_data_t *ud)
 {
@@ -688,6 +666,8 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
        gint row;
        GValue *settings = NULL;
        const GValue *subtitle_list;
+       gboolean allow_force = FALSE;
+       gboolean allow_burn = FALSE;
        
        g_debug("subtitle_list_refresh_selected ()");
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
@@ -714,14 +694,17 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
 
                gint i_source;
                i_source = ghb_settings_get_int(settings, "SubtitleSource");
-               if (i_source != VOBSUB)
+               if (!canBurn(i_source))
                {
-                       // Force and burn only apply to VOBSUBS
-                       forced = FALSE;
                        burned = FALSE;
-                       ghb_settings_set_boolean(settings, "SubtitleForced", forced);
                        ghb_settings_set_boolean(settings, "SubtitleBurned", burned);
                }
+               if (!canForce(i_source))
+               {
+                       // Force only apply to VOBSUBS
+                       forced = FALSE;
+                       ghb_settings_set_boolean(settings, "SubtitleForced", forced);
+               }
 
                if (i_source == SRTSUB)
                {
@@ -730,8 +713,6 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
 
                        lang = ghb_settings_combo_option(settings, "SrtLanguage");
                        code = ghb_settings_get_string(settings, "SrtCodeset");
-                       track = g_strdup_printf("%s (%s)", lang, code);
-                       g_free(code);
 
                        s_track = ghb_settings_get_string(settings, "SrtFile");
                        if (g_file_test(s_track, G_FILE_TEST_IS_REGULAR))
@@ -739,13 +720,16 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
                                gchar *basename;
 
                                basename = g_path_get_basename(s_track);
+                               track = g_strdup_printf("%s (%s)(SRT)(%s)", lang, code, basename);
                                source = g_strdup_printf("SRT (%s)", basename);
                                g_free(basename);
                        }
                        else
                        {
+                               track = g_strdup_printf("%s (%s)(SRT)", lang, code);
                                source = g_strdup_printf("SRT (none)");
                        }
+                       g_free(code);
                        offset = ghb_settings_get_int(settings, "SrtOffset");
 
                        forced = FALSE;
@@ -755,24 +739,30 @@ subtitle_list_refresh_selected(signal_user_data_t *ud)
                {
                        track = g_strdup(
                                ghb_settings_combo_option(settings, "SubtitleTrack"));
-                       source = g_strdup(subtitle_source_name(i_source));
+                       source = g_strdup(ghb_subtitle_source_name(i_source));
                        s_track = ghb_settings_get_string(settings, "SubtitleTrack");
 
                        forced = ghb_settings_get_boolean(settings, "SubtitleForced");
                        burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
                }
 
+               if (canBurn(i_source))
+                       allow_burn = TRUE;
+               if (canForce(i_source))
+                       allow_force = TRUE;
+
                gtk_list_store_set(GTK_LIST_STORE(store), &iter, 
                        // These are displayed in list
                        0, track,
                        1, forced,
                        2, burned,
                        3, def,
-                       4, source,
-                       5, offset,
+                       4, offset,
                        // These are used to set combo box values when a list item is selected
-                       6, s_track,
-                       7, i_source,
+                       5, s_track,
+                       6, i_source,
+                       7, allow_force,
+                       8, allow_burn,
                        -1);
                g_free(track);
                g_free(source);
@@ -919,6 +909,8 @@ add_to_subtitle_list(
        gboolean forced, burned, def;
        gchar *s_track;
        gint i_source;
+       gboolean allow_force = FALSE;
+       gboolean allow_burn = FALSE;
        
        g_debug("add_to_subtitle_list ()");
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
@@ -932,7 +924,12 @@ add_to_subtitle_list(
 
        s_track = ghb_settings_get_string(settings, "SubtitleTrack");
        i_source = ghb_settings_get_int(settings, "SubtitleSource");
-       source = subtitle_source_name(i_source);
+       source = ghb_subtitle_source_name(i_source);
+
+       if (canBurn(i_source))
+               allow_burn = TRUE;
+       if (canForce(i_source))
+               allow_force = TRUE;
 
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, 
@@ -941,13 +938,12 @@ add_to_subtitle_list(
                1, forced,
                2, burned,
                3, def,
-               4, source,
                // These are used to set combo box values when a list item is selected
-               6, s_track,
-               7, i_source,
-               8, TRUE,
-               9, TRUE,
-               10, FALSE,
+               5, s_track,
+               6, i_source,
+               7, allow_force,
+               8, allow_burn,
+               9, FALSE,
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
        g_free(s_track);
@@ -974,7 +970,6 @@ add_to_srt_list(
 
        lang = ghb_settings_combo_option(settings, "SrtLanguage");
        code = ghb_settings_get_string(settings, "SrtCodeset");
-       track = g_strdup_printf("%s (%s)", lang, code);
        forced = FALSE;
        burned = FALSE;
        def = ghb_settings_get_boolean(settings, "SubtitleDefaultTrack");
@@ -985,11 +980,13 @@ add_to_srt_list(
                gchar *basename;
 
                basename = g_path_get_basename(filename);
+               track = g_strdup_printf("%s (%s)(SRT)(%s)", lang, code, basename);
                source = g_strdup_printf("SRT (%s)", basename);
                g_free(basename);
        }
        else
        {
+               track = g_strdup_printf("%s (%s)(SRT)", lang, code);
                source = g_strdup_printf("SRT (none)");
        }
        i_source = SRTSUB;
@@ -1002,14 +999,13 @@ add_to_srt_list(
                1, forced,
                2, burned,
                3, def,
-               4, source,
-               5, offset,
+               4, offset,
                // These are used to set combo box values when a list item is selected
-               6, filename,
-               7, i_source,
+               5, filename,
+               6, i_source,
+               7, FALSE,
                8, FALSE,
-               9, FALSE,
-               10, TRUE,
+               9, TRUE,
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
        g_free(code);
@@ -1148,13 +1144,15 @@ srt_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
        // Add the current subtitle settings to the list.
        GValue *settings;
-       gchar *dir, *filename;
+       gchar *dir, *filename, *lang;
        
        g_debug("subtitle_add_clicked_cb ()");
 
        settings = ghb_dict_value_new();
        ghb_settings_set_int(settings, "SubtitleSource", SRTSUB);
-       ghb_settings_set_string(settings, "SrtLanguage", "und");
+       lang = ghb_settings_get_string(ud->settings, "PreferredLanguage");
+       ghb_settings_set_string(settings, "SrtLanguage", lang);
+       g_free(lang);
        ghb_settings_set_string(settings, "SrtCodeset", "UTF-8");
 
        dir = ghb_settings_get_string(ud->settings, "SrtDir");