OSDN Git Service

LinGui: enable libdvdnav by default
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / Subtitles.cs
index 47864f2..14e7bab 100644 (file)
@@ -1,23 +1,58 @@
 using System;\r
+using System.Collections.Generic;\r
 using System.Windows.Forms;\r
+using Handbrake.Functions;\r
 \r
 namespace Handbrake.Controls\r
 {\r
     public partial class Subtitles : UserControl\r
     {\r
+        readonly IDictionary<string, string> LangMap = new Dictionary<string, string>();\r
 \r
         public Subtitles()\r
         {\r
             InitializeComponent();\r
 \r
+            LangMap = Main.mapLanguages();\r
+            foreach (string key in LangMap.Keys)\r
+                srt_lang.Items.Add(key);\r
+\r
+            srt_charcode.SelectedIndex = 28;\r
+            srt_lang.SelectedIndex = 40;\r
+        }\r
+\r
+        private int FileContainer;\r
+\r
+        // Public Functions\r
+        public void Clear()\r
+        {\r
+            lv_subList.Items.Clear();\r
         }\r
+        public void setSubtitleTrackAuto()\r
+        {\r
+            // Handle Native Language and "Dub Foreign language audio" and "Use Foreign language audio and Subtitles" Options\r
+            if (Properties.Settings.Default.NativeLanguage != "Any")\r
+            {\r
+                if (!Properties.Settings.Default.DubAudio) // We need to add a subtitle track if this is false.\r
+                {\r
+                    int i = 0;\r
+                    foreach (object item in drp_subtitleTracks.Items)\r
+                    {\r
+                        if (item.ToString().Contains(Properties.Settings.Default.NativeLanguage))\r
+                            drp_subtitleTracks.SelectedIndex = i;\r
 \r
-        private int fileContainer;\r
+                        i++;\r
+                    }\r
+\r
+                    btn_addSubTrack_Click(this, new EventArgs());\r
+                }\r
+            }\r
+        }\r
         public void setContainer(int value)\r
         {\r
-            fileContainer = value;\r
+            FileContainer = value;\r
             Boolean trigger = false;\r
-            if (fileContainer != 2)\r
+            if (FileContainer != 1)\r
                 foreach (ListViewItem item in lv_subList.Items)\r
                 {\r
                     if (item.SubItems[1].Text.Contains("Bitmap"))\r
@@ -28,6 +63,18 @@ namespace Handbrake.Controls
                     }\r
                 }\r
         }\r
+        public Boolean RequiresM4V()\r
+        {\r
+            foreach (ListViewItem item in lv_subList.Items)\r
+            {\r
+                if (item.SubItems.Count != 5)\r
+                    return true;\r
+\r
+                if (item.SubItems[1].Text.Contains("(Text)"))\r
+                    return true;\r
+            }\r
+            return false;\r
+        }\r
 \r
         // Controls\r
         private void btn_addSubTrack_Click(object sender, EventArgs e)\r
@@ -55,22 +102,28 @@ namespace Handbrake.Controls
             }\r
 \r
             Boolean addTrack = true;\r
-            if (fileContainer == 0 || fileContainer == 1)\r
+            if (FileContainer == 0)\r
             {\r
                 burnedVal = "Yes";  // MP4 must have bitmap subs burned in.\r
 \r
                 // Make sure we only have 1 bitmap track.\r
-                if (drp_subtitleTracks.SelectedItem.ToString().Contains("Bitmap"))\r
-                    foreach (ListViewItem item in lv_subList.Items)\r
-                    {\r
-                        if (item.SubItems[1].Text.Contains("Bitmap"))\r
+                if (drp_subtitleTracks.SelectedItem != null)\r
+                {\r
+                    if (drp_subtitleTracks.SelectedItem.ToString().Contains("Bitmap"))\r
+                        foreach (ListViewItem item in lv_subList.Items)\r
                         {\r
-                            MessageBox.Show(this,\r
-                                            "More than one vobsub is not supported in mp4... Your first vobsub track will now be used.",\r
-                                            "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-                            addTrack = false;\r
+                            if (item.SubItems[1].Text.Contains("Bitmap"))\r
+                            {\r
+                                MessageBox.Show(this,\r
+                                                "More than one vobsub is not supported in mp4... Your first vobsub track will now be used.",\r
+                                                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+                                addTrack = false;\r
+                            }\r
                         }\r
-                    }\r
+                }\r
+                else\r
+                    addTrack = false;\r
+\r
             }\r
 \r
             // Add the track if allowed.\r
@@ -86,6 +139,30 @@ namespace Handbrake.Controls
                 lv_subList.Items.Add(newTrack);\r
             }\r
         }\r
+        private void btn_srtAdd_Click(object sender, EventArgs e)\r
+        {\r
+            string defaultSub = "No";\r
+            if (check_default_srt.Checked)\r
+            {\r
+                defaultSub = "Yes";\r
+                setNoDefault();\r
+            }\r
+\r
+            ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
+\r
+            newTrack.SubItems.Add(srt_lang.SelectedItem + ", (" + srt_charcode.SelectedItem + ")");\r
+            newTrack.SubItems.Add("No");\r
+            newTrack.SubItems.Add("No");\r
+            newTrack.SubItems.Add(defaultSub);\r
+            if (openFileDialog.FileName != null)\r
+                newTrack.SubItems.Add(openFileDialog.FileName);\r
+            else\r
+                newTrack.SubItems.Add("None");\r
+\r
+            newTrack.SubItems.Add(srt_offset.Value.ToString());\r
+\r
+            lv_subList.Items.Add(newTrack);\r
+        }\r
         private void btn_RemoveSubTrack_Click(object sender, EventArgs e)\r
         {\r
             removeTrack();\r
@@ -95,36 +172,50 @@ namespace Handbrake.Controls
             // Set the dropdown controls based on the selected item in the List.\r
             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
             {\r
-                // Reset the checkboxes\r
-                check_forced.CheckState = CheckState.Unchecked;\r
-                check_burned.CheckState = CheckState.Unchecked;\r
-                check_default.CheckState = CheckState.Unchecked;\r
-\r
-                // Setup the controls\r
-                int c = 0;\r
-                foreach (var item in drp_subtitleTracks.Items)\r
+                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems.Count != 5)  // We have an SRT\r
                 {\r
-                    if (item.ToString() == lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text)\r
-                        drp_subtitleTracks.SelectedIndex = c;\r
-                    c++;\r
-                }\r
-                drp_subtitleTracks.SelectedItem = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1];\r
+                    string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
+                    string charCode = trackData[1].Replace("(", "").Replace(")", "");\r
+                    srt_lang.SelectedItem = trackData[0];\r
+                    srt_charcode.SelectedItem = charCode.Trim();\r
 \r
-                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text == "Yes")\r
-                    check_forced.CheckState = CheckState.Checked;\r
+                    int offsetVal;\r
+                    int.TryParse(lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text, out offsetVal);\r
+                    srt_offset.Value = offsetVal;\r
 \r
-                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text == "Yes")\r
-                    check_burned.CheckState = CheckState.Checked;\r
+                    check_default_srt.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
 \r
-                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes")\r
-                    check_default.CheckState = CheckState.Checked;\r
+                    SRTGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
+                    SubTitlesGroup.Text = "Selected Track: None";\r
+                }\r
+                else  // We have Bitmap/CC\r
+                {\r
+                    // Setup the controls\r
+                    int c = 0;\r
+                    foreach (var item in drp_subtitleTracks.Items)\r
+                    {\r
+                        if (item.ToString() == lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text)\r
+                            drp_subtitleTracks.SelectedIndex = c;\r
+                        c++;\r
+                    }\r
+                    drp_subtitleTracks.SelectedItem = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1];\r
+\r
+                    check_forced.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+                    check_burned.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+                    check_default.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
 \r
-                AudioTrackGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
+                    SubTitlesGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
+                    SRTGroup.Text = "Selected Track: None";\r
+                }\r
             }\r
             else\r
-                AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
+            {\r
+                SubTitlesGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
+                SRTGroup.Text = "Selected Track: None (Click \"Add External SRT\" to add) ";\r
+            }\r
         }\r
 \r
+        // Bitmap / CC Controls\r
         private void drp_subtitleTracks_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             // Update an item in the  list if required.\r
@@ -167,7 +258,64 @@ namespace Handbrake.Controls
                 lv_subList.Select();\r
             }\r
         }\r
-        \r
+        private void check_default_srt_CheckedChanged(object sender, EventArgs e)\r
+        {\r
+            // Update an item in the  list if required.\r
+            if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
+            {\r
+                if (check_default_srt.Checked) // Make sure we only have 1 default track\r
+                    setNoDefault();\r
+\r
+                lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default_srt.Checked ? "Yes" : "No";\r
+                lv_subList.Select();\r
+            }\r
+        }\r
+\r
+        // SRT Controls\r
+        private void srt_offset_ValueChanged(object sender, EventArgs e)\r
+        {\r
+            // Update an item in the  list if required.\r
+            if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
+            {\r
+                lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text = srt_offset.Value.ToString();\r
+                lv_subList.Select();\r
+            }\r
+        }\r
+        private void srt_charcode_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            // Update an item in the  list if required.\r
+            if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
+            {\r
+                string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
+\r
+                lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = trackData[0].Trim() + ", (" + srt_charcode.SelectedItem + ")";\r
+                lv_subList.Select();\r
+            }\r
+        }\r
+        private void srt_lang_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            // Update an item in the  list if required.\r
+            if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
+            {\r
+                string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
+                string charCode = trackData[1].Replace("(", "").Replace(")", "").Trim();\r
+\r
+                lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = srt_lang.SelectedItem + ", (" + charCode + ")";\r
+                lv_subList.Select();\r
+            }\r
+        }\r
+        private void srt_browse_Click(object sender, EventArgs e)\r
+        {\r
+            openFileDialog.ShowDialog();\r
+\r
+            // Update an item in the  list if required.\r
+            if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
+            {\r
+                lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[5].Text = openFileDialog.FileName;\r
+                lv_subList.Select();\r
+            }\r
+        }\r
+\r
         // Right Click Menu\r
         private void mnu_moveup_Click(object sender, EventArgs e)\r
         {\r
@@ -265,5 +413,6 @@ namespace Handbrake.Controls
                 i++;\r
             }\r
         }\r
+\r
     }\r
 }\r