OSDN Git Service

add win/C# diff files
[handbrake-jp/handbrake-jp.git] / win / C# / Controls / Subtitles.cs.diff
diff --git a/win/C#/Controls/Subtitles.cs.diff b/win/C#/Controls/Subtitles.cs.diff
new file mode 100644 (file)
index 0000000..c776bcb
--- /dev/null
@@ -0,0 +1,892 @@
+diff --git a/win/C#/Controls/Subtitles.cs b/win/C#/Controls/Subtitles.cs
+index 8c4b219..29c1272 100644
+--- a/win/C#/Controls/Subtitles.cs
++++ b/win/C#/Controls/Subtitles.cs
+@@ -1,94 +1,284 @@
+-\r
+-/*\r
+- * This file come from HandBrake source code by http://handbrake.fr/ , \r
+- * and modified by hylom <hylomm@gmail.com> for HandBrake Japanese version.\r
+- * It may be used under the terms of the GNU General Public License.\r
+- * last modified date: $Format:%cd$\r
+- */\r
+-\r
+-using System;\r
+-using System.Collections.Generic;\r
+-using System.IO;\r
+-using System.Windows.Forms;\r
+-using Handbrake.Functions;\r
++/*  Subtitles.cs $\r
++    This file is part of the HandBrake source code.\r
++    Homepage: <http://handbrake.fr>.\r
++    It may be used under the terms of the GNU General Public License. */\r
\r
+ namespace Handbrake.Controls\r
+ {\r
++    using System;\r
++    using System.Collections.Generic;\r
++    using System.IO;\r
++    using System.Linq;\r
++    using System.Windows.Forms;\r
++    using Functions;\r
++\r
++    using HandBrake.ApplicationServices.Model;\r
++\r
++    using Model;\r
++\r
++    /// <summary>\r
++    /// The Subtitles Tab\r
++    /// </summary>\r
+     public partial class Subtitles : UserControl\r
+     {\r
+-        readonly IDictionary<string, string> LangMap = new Dictionary<string, string>();\r
+-        List<SubtitleInfo> SubList = new List<SubtitleInfo>();\r
+-        private int _fileContainer;\r
++        #region Priavate Variables and Collections\r
++\r
++        /// <summary>\r
++        /// Map of languages to language codes\r
++        /// </summary>\r
++        private readonly IDictionary<string, string> langMap = new Dictionary<string, string>();\r
++\r
++        /// <summary>\r
++        /// A List of SRT Files\r
++        /// </summary>\r
++        private readonly IDictionary<string, string> srtFiles = new Dictionary<string, string>();\r
\r
++        /// <summary>\r
++        /// The Subtitle List\r
++        /// </summary>\r
++        private readonly List<SubtitleInfo> subList = new List<SubtitleInfo>();\r
++\r
++        #endregion\r
++\r
++        /// <summary>\r
++        /// Initializes a new instance of the <see cref="Subtitles"/> class.\r
++        /// </summary>\r
+         public Subtitles()\r
+         {\r
+             InitializeComponent();\r
\r
+-            LangMap = Main.mapLanguages();\r
+-            foreach (string key in LangMap.Keys)\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
+-        // Primary Controls\r
+-        private void btn_addSubTrack_Click(object sender, EventArgs e)\r
++        #region Public Methods\r
++        /// <summary>\r
++        /// Gets the CLI Query for this panel\r
++        /// </summary>\r
++        /// <returns>A CliQuery string</returns>\r
++        public string GetCliQuery\r
++        {\r
++            get\r
++            {\r
++                string query = string.Empty;\r
++                if (lv_subList.Items.Count != 0) // If we have subtitle tracks\r
++                {\r
++                    // BitMap and CC's\r
++                    string subtitleTracks = String.Empty;\r
++                    string subtitleForced = String.Empty;\r
++                    string subtitleBurn = String.Empty;\r
++                    string subtitleDefault = String.Empty;\r
++\r
++                    // SRT\r
++                    string srtFile = String.Empty;\r
++                    string srtCodeset = String.Empty;\r
++                    string srtOffset = String.Empty;\r
++                    string srtLang = String.Empty;\r
++                    string srtDefault = String.Empty;\r
++                    int srtCount = 0;\r
++                    int subCount = 0;\r
++\r
++                    foreach (SubtitleInfo item in subList)\r
++                    {\r
++                        string itemToAdd;\r
++\r
++                        if (item.IsSrtSubtitle) // We have an SRT file\r
++                        {\r
++                            srtCount++; // SRT track id.\r
++\r
++                            srtLang += srtLang == string.Empty ? langMap[item.SrtLang] : "," + langMap[item.SrtLang];\r
++                            srtCodeset += srtCodeset == string.Empty ? item.SrtCharCode : "," + item.SrtCharCode;\r
++\r
++                            if (item.Default)\r
++                                srtDefault = srtCount.ToString();\r
++\r
++                            itemToAdd = item.SrtPath;\r
++                            srtFile += srtFile == string.Empty ? itemToAdd : "," + itemToAdd;\r
++\r
++                            itemToAdd = item.SrtOffset.ToString();\r
++                            srtOffset += srtOffset == string.Empty ? itemToAdd : "," + itemToAdd;\r
++                        }\r
++                        else // We have Bitmap or CC\r
++                        {\r
++                            subCount++;\r
++\r
++                            // Find --subtitle <string>\r
++                            if (item.Track.Contains("Foreign Audio Search"))\r
++                                itemToAdd = "scan";\r
++                            else\r
++                            {\r
++                                string[] tempSub = item.Track.Split(' ');\r
++                                itemToAdd = tempSub[0];\r
++                            }\r
++\r
++                            subtitleTracks += subtitleTracks == string.Empty ? itemToAdd : "," + itemToAdd;\r
++\r
++                            // Find --subtitle-forced\r
++                            if (item.Forced)\r
++                                subtitleForced += subtitleForced == string.Empty ? subCount.ToString() : "," + subCount;\r
++\r
++                            // Find --subtitle-burn\r
++                            if (item.Burned)\r
++                                subtitleBurn = subCount.ToString();\r
++\r
++                            // Find --subtitle-default\r
++                            if (item.Default)\r
++                                subtitleDefault = subCount.ToString();\r
++                        }\r
++                    }\r
++\r
++                    // Build The CLI Subtitles Query\r
++                    if (subtitleTracks != string.Empty)\r
++                    {\r
++                        query += " --subtitle " + subtitleTracks;\r
++\r
++                        if (subtitleForced != string.Empty)\r
++                            query += " --subtitle-forced=" + subtitleForced;\r
++                        if (subtitleBurn != string.Empty)\r
++                            query += " --subtitle-burn=" + subtitleBurn;\r
++                        if (subtitleDefault != string.Empty)\r
++                            query += " --subtitle-default=" + subtitleDefault;\r
++                    }\r
++\r
++                    if (srtFile != string.Empty) // SRTs\r
++                    {\r
++                        query += " --srt-file " + "\"" + srtFile + "\"";\r
++\r
++                        if (srtCodeset != string.Empty)\r
++                            query += " --srt-codeset " + srtCodeset;\r
++                        if (srtOffset != string.Empty)\r
++                            query += " --srt-offset " + srtOffset;\r
++                        if (srtLang != string.Empty)\r
++                            query += " --srt-lang " + srtLang;\r
++                        if (srtDefault != string.Empty)\r
++                            query += " --srt-default=" + srtDefault;\r
++                    }\r
++                }\r
++                return query;\r
++            }\r
++        }\r
++\r
++        /// <summary>\r
++        /// Checks of the current settings will require the m4v file extension\r
++        /// </summary>\r
++        /// <returns>True if Yes</returns>\r
++        public bool RequiresM4V()\r
++        {\r
++            return this.subList.Any(track => track.SubtitleType != SubtitleType.VobSub);\r
++        }\r
++\r
++        /// <summary>\r
++        /// Automatically setup the subtitle tracks.\r
++        /// This handles the automatic setup of subitles which the user can control from the program options\r
++        /// </summary>\r
++        /// <param name="subs">List of Subtitles</param>\r
++        public void SetSubtitleTrackAuto(object[] subs)\r
++        {\r
++            drp_subtitleTracks.Items.Clear();\r
++            drp_subtitleTracks.Items.Add("Foreign Audio Search (Bitmap)");\r
++            drp_subtitleTracks.Items.AddRange(subs);\r
++            drp_subtitleTracks.SelectedIndex = 0;\r
++            Clear();\r
++\r
++            this.AutomaticSubtitleSelection();\r
++        }\r
++\r
++        /// <summary>\r
++        /// Automatic Subtitle Selection based on user preferences.\r
++        /// </summary>\r
++        public void AutomaticSubtitleSelection()\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.DubMode != 1) // We need to add a subtitle track if this is false.\r
++                {\r
++                    foreach (object item in drp_subtitleTracks.Items)\r
++                    {\r
++                        if (item.ToString().Contains(Properties.Settings.Default.NativeLanguage))\r
++                        {\r
++                            drp_subtitleTracks.SelectedItem = item;\r
++                            BtnAddSubTrackClick(this, new EventArgs());\r
++                        }\r
++                    }\r
++\r
++                    if (drp_subtitleTracks.SelectedIndex == 0 && Properties.Settings.Default.useClosedCaption)\r
++                    {\r
++                        foreach (object item in drp_subtitleTracks.Items)\r
++                        {\r
++                            if (item.ToString().Contains("Closed"))\r
++                            {\r
++                                drp_subtitleTracks.SelectedItem = item;\r
++                                BtnAddSubTrackClick(this, new EventArgs());\r
++                            }\r
++                        }\r
++                    }\r
++                }\r
++            }\r
++        }\r
++\r
++        /// <summary>\r
++        /// Clear the Subtitle List\r
++        /// </summary>\r
++        public void Clear()\r
++        {\r
++            lv_subList.Items.Clear();\r
++            subList.Clear();\r
++        }\r
++        #endregion\r
++\r
++        #region Primary Controls\r
++\r
++        /// <summary>\r
++        /// Add a Subtitle track.\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void BtnAddSubTrackClick(object sender, EventArgs e)\r
+         {\r
+             // Logic\r
+             string forcedVal = check_forced.CheckState == CheckState.Checked ? "Yes" : "No";\r
+             string defaultSub = check_default.CheckState == CheckState.Checked ? "Yes" : "No";\r
+-            string burnedVal = check_burned.CheckState == CheckState.Checked && (!drp_subtitleTracks.Text.Contains("Text")) ? "Yes" : "No";\r
++            string burnedVal = check_burned.CheckState == CheckState.Checked &&\r
++                               (drp_subtitleTracks.Text.Contains("(VOBSUB)") || drp_subtitleTracks.Text.Contains("(SSA)"))\r
++                                   ? "Yes"\r
++                                   : "No";\r
+             string srtCode = "-", srtLangVal = "-", srtPath = "-", srtFile = "-";\r
+             int srtOffsetMs = 0;\r
\r
+             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
+             {\r
+-                burnedVal = "No";\r
+-                forcedVal = "No";\r
+-                srtPath = openFileDialog.FileName;\r
+-                srtFile = Path.GetFileName(openFileDialog.FileName);\r
++                srtFiles.TryGetValue(drp_subtitleTracks.SelectedItem.ToString(), out srtPath);\r
++                srtFile = drp_subtitleTracks.SelectedItem.ToString();\r
+                 srtLangVal = srt_lang.SelectedItem.ToString();\r
+                 srtCode = srt_charcode.SelectedItem.ToString();\r
+                 srtOffsetMs = (int)srt_offset.Value;\r
+-                if (defaultSub == "Yes") setNoSrtDefault();\r
+-            } else\r
+-            {\r
+-                if (defaultSub == "Yes") SetNoDefault();\r
+-                if (burnedVal == "Yes") SetNoBurned();\r
+-\r
+-                if (_fileContainer == 0)\r
+-                    burnedVal = "Yes";  // MP4 must have bitmap subs burned in.\r
++                if (defaultSub == "Yes") this.SetDefaultToOffForAllSRTTracks();\r
+             }\r
+-\r
+-            if (_fileContainer == 0) // MP4 and M4V file extension\r
++            else\r
+             {\r
+-                // Make sure we only have 1 bitmap track.\r
+-                if (drp_subtitleTracks.SelectedItem != null && drp_subtitleTracks.SelectedItem.ToString().Contains("Bitmap"))\r
+-                {\r
+-                    foreach (ListViewItem item in lv_subList.Items)\r
+-                    {\r
+-                        if (item.SubItems[0].Text.Contains("Bitmap"))\r
+-                        {\r
+-                            MessageBox.Show(this, "MP4形式の場合、字幕トラックは1つのみ使用できます。1つ目の字幕トラックのみが利用されます。",\r
+-                                            "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+-                            return;\r
+-                        }\r
+-                    }\r
+-                }\r
++                if (defaultSub == "Yes") this.SetDefaultToOffForAllTracks();\r
++                if (burnedVal == "Yes") this.SetBurnedToOffForAllTracks();\r
+             }\r
\r
+             string trackName = (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
+-                               ? srtLangVal + " (" + srtFile + ")"\r
+-                               : drp_subtitleTracks.SelectedItem.ToString();\r
+-\r
++                                   ? srtLangVal + " (" + srtFile + ")"\r
++                                   : drp_subtitleTracks.SelectedItem.ToString();\r
\r
+             SubtitleInfo track = new SubtitleInfo\r
+                                      {\r
+                                          Track = trackName,\r
+-                                         Forced = forcedVal,\r
+-                                         Burned = burnedVal,\r
+-                                         Default = defaultSub,\r
++                                         Forced = check_forced.Checked,\r
++                                         Burned = check_burned.Checked,\r
++                                         Default = check_default.Checked,\r
+                                          SrtLang = srtLangVal,\r
+                                          SrtCharCode = srtCode,\r
+                                          SrtOffset = srtOffsetMs,\r
+@@ -97,31 +287,71 @@ namespace Handbrake.Controls
+                                      };\r
\r
+             lv_subList.Items.Add(track.ListView);\r
+-            SubList.Add(track);\r
+-\r
++            subList.Add(track);\r
+         }\r
+-        private void btn_srtAdd_Click(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Import an SRT Subtitle Track\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void BtnSrtAddClick(object sender, EventArgs e)\r
+         {\r
+             if (openFileDialog.ShowDialog() != DialogResult.OK)\r
+                 return;\r
++\r
++            if (srtFiles.ContainsKey(Path.GetFileName(openFileDialog.FileName)))\r
++            {\r
++                MessageBox.Show(\r
++                    "A Subtitle track with the same name has already been imported.",\r
++                    "Warning",\r
++                    MessageBoxButtons.OK,\r
++                    MessageBoxIcon.Warning);\r
++                return;\r
++            }\r
++\r
+             drp_subtitleTracks.Items.Add(Path.GetFileName(openFileDialog.FileName));\r
+             drp_subtitleTracks.SelectedItem = Path.GetFileName(openFileDialog.FileName);\r
++            srtFiles.Add(Path.GetFileName(openFileDialog.FileName), openFileDialog.FileName);\r
+         }\r
+-        private void btn_RemoveSubTrack_Click(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Remove a subtitle track\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void BtnRemoveSubTrackClick(object sender, EventArgs e)\r
+         {\r
+-            RemoveTrack();\r
++            this.RemoveSelectedTrack();\r
+         }\r
\r
+-        // Secondary Controls\r
+-        private void lb_subList_SelectedIndexChanged(object sender, EventArgs e)\r
++        /// <summary>\r
++        /// The Subtitle List selected index has changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void LbSubListSelectedIndexChanged(object sender, EventArgs e)\r
+         {\r
+             // 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
+-                SubtitleInfo track = SubList[lv_subList.SelectedIndices[0]];\r
++                SubtitleInfo track = subList[lv_subList.SelectedIndices[0]];\r
\r
+                 int c = 0;\r
+-                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text.ToLower().Contains(".srt"))  // We have an SRT\r
++                if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text.ToLower().Contains(".srt"))\r
++                // We have an SRT\r
+                 {\r
+                     foreach (var item in drp_subtitleTracks.Items)\r
+                     {\r
+@@ -132,10 +362,10 @@ namespace Handbrake.Controls
+                     srt_lang.SelectedItem = track.SrtLang;\r
+                     srt_offset.Value = track.SrtOffset;\r
+                     srt_charcode.SelectedItem = track.SrtCharCode;\r
+-                    check_default.CheckState = track.Default == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+-                    SubGroupBox.Text = "選択中のトラック: " + track.Track;\r
++                    check_default.CheckState = track.Default ? CheckState.Checked : CheckState.Unchecked;\r
++                    SubGroupBox.Text = "Selected Track: " + track.Track;\r
+                 }\r
+-                else  // We have Bitmap/CC\r
++                else // We have Bitmap/CC\r
+                 {\r
+                     foreach (var item in drp_subtitleTracks.Items)\r
+                     {\r
+@@ -143,18 +373,31 @@ namespace Handbrake.Controls
+                             drp_subtitleTracks.SelectedIndex = c;\r
+                         c++;\r
+                     }\r
+-                    check_forced.CheckState = track.Forced == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+-                    check_burned.CheckState = track.Burned == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+-                    check_default.CheckState = track.Default == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
+-                    SubGroupBox.Text = "選択中のトラック: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
++                    check_forced.CheckState = track.Forced ? CheckState.Checked : CheckState.Unchecked;\r
++                    check_burned.CheckState = track.Burned ? CheckState.Checked : CheckState.Unchecked;\r
++                    check_default.CheckState = track.Default ? CheckState.Checked : CheckState.Unchecked;\r
++                    SubGroupBox.Text = "Selected Track: " +\r
++                                       lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
+                 }\r
+             }\r
+             else\r
+-                SubGroupBox.Text = "選択中のトラック: なし";\r
++                SubGroupBox.Text = "Selected Track: None (Click \"Add\" to add another track to the list)";\r
+         }\r
\r
+-        // Bitmap / CC / SRT Controls\r
+-        private void drp_subtitleTracks_SelectedIndexChanged(object sender, EventArgs e)\r
++        #endregion\r
++\r
++        #region Subtitle Controls\r
++\r
++        /// <summary>\r
++        /// Handle the Subtitle track dropdown changed event\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void DrpSubtitleTracksSelectedIndexChanged(object sender, EventArgs e)\r
+         {\r
+             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
+             {\r
+@@ -178,54 +421,102 @@ namespace Handbrake.Controls
+             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
+             {\r
+                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text = srt_lang.SelectedItem + "(" +\r
+-                    drp_subtitleTracks.SelectedItem + ")";\r
++                                                                                   drp_subtitleTracks.SelectedItem + ")";\r
+                 lv_subList.Select();\r
+-            } else\r
++\r
++                string srtPath;\r
++                srtFiles.TryGetValue(drp_subtitleTracks.SelectedItem.ToString(), out srtPath);\r
++                subList[lv_subList.SelectedIndices[0]].SrtPath = srtPath;\r
++            }\r
++            else\r
+             {\r
+                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text =\r
+                     drp_subtitleTracks.SelectedItem.ToString();\r
+                 lv_subList.Select();\r
+             }\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].Track = drp_subtitleTracks.SelectedItem.ToString(); // Update SubList List<SubtitleInfo>\r
++            subList[lv_subList.SelectedIndices[0]].Track = drp_subtitleTracks.SelectedItem.ToString();\r
+         }\r
+-        private void check_forced_CheckedChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Foreced Subtitles checkbox changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void CheckForcedCheckedChanged(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
\r
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = check_forced.Checked ? "Yes" : "No";\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].Forced = check_forced.Checked ? "Yes" : "No"; // Update SubList List<SubtitleInfo> \r
++            subList[lv_subList.SelectedIndices[0]].Forced = check_forced.Checked;\r
++            // Update SubList List<SubtitleInfo> \r
+         }\r
+-        private void check_burned_CheckedChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Burned in subtitles checkbox changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void CheckBurnedCheckedChanged(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
\r
+             if (check_burned.Checked) // Make sure we only have 1 burned track\r
+-                SetNoBurned();\r
++                this.SetBurnedToOffForAllTracks();\r
\r
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text = check_burned.Checked ? "Yes" : "No";\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].Burned = check_burned.Checked ? "Yes" : "No"; // Update SubList List<SubtitleInfo> \r
++            subList[lv_subList.SelectedIndices[0]].Burned = check_burned.Checked;\r
++            // Update SubList List<SubtitleInfo> \r
+         }\r
+-        private void check_default_CheckedChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Default Subitle track check changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void CheckDefaultCheckedChanged(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
\r
+             if (check_default.Checked) // Make sure we only have 1 default track\r
+                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text.Contains(".srt"))\r
+-                    setNoSrtDefault();\r
++                    this.SetDefaultToOffForAllSRTTracks();\r
+                 else\r
+-                    SetNoDefault();\r
++                    this.SetDefaultToOffForAllTracks();\r
\r
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text = check_default.Checked ? "Yes" : "No";\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].Default = check_default.Checked ? "Yes" : "No"; // Update SubList List<SubtitleInfo>\r
++            subList[lv_subList.SelectedIndices[0]].Default = check_default.Checked;\r
++            // Update SubList List<SubtitleInfo>\r
+         }\r
+-        private void srt_offset_ValueChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Srt Offset Numeric Control Changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void SrtOffsetValueChanged(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
+@@ -234,29 +525,64 @@ namespace Handbrake.Controls
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text = srt_offset.Value.ToString();\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].SrtOffset = (int)srt_offset.Value; // Update SubList List<SubtitleInfo>\r
++            subList[lv_subList.SelectedIndices[0]].SrtOffset = (int)srt_offset.Value;\r
++            // Update SubList List<SubtitleInfo>\r
+         }\r
+-        private void srt_charcode_SelectedIndexChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// The SRT Charcode changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void SrtCharcodeSelectedIndexChanged(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
\r
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[5].Text = srt_charcode.SelectedItem.ToString();\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].SrtCharCode = srt_charcode.SelectedItem.ToString(); // Update SubList List<SubtitleInfo>\r
++            subList[lv_subList.SelectedIndices[0]].SrtCharCode = srt_charcode.SelectedItem.ToString();\r
++            // Update SubList List<SubtitleInfo>\r
+         }\r
+-        private void srt_lang_SelectedIndexChanged(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// The Srt Language code changed\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void SrtLangSelectedIndexChanged(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
\r
+             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = srt_lang.SelectedItem.ToString();\r
+             lv_subList.Select();\r
\r
+-            SubList[lv_subList.SelectedIndices[0]].SrtLang = srt_lang.SelectedItem.ToString(); // Update SubList List<SubtitleInfo>\r
++            subList[lv_subList.SelectedIndices[0]].SrtLang = srt_lang.SelectedItem.ToString();\r
++            // Update SubList List<SubtitleInfo>\r
+         }\r
\r
+-        // Right Click Menu\r
+-        private void mnu_moveup_Click(object sender, EventArgs e)\r
++        #endregion\r
++\r
++        #region Right Click Menu\r
++\r
++        /// <summary>\r
++        /// Move an item in the subtitle list up\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void MnuMoveupClick(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.SelectedIndices.Count != 0)\r
+             {\r
+@@ -273,7 +599,17 @@ namespace Handbrake.Controls
+                 }\r
+             }\r
+         }\r
+-        private void mnu_movedown_Click(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Move an item in the subtitle list down\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void MnuMovedownClick(object sender, EventArgs e)\r
+         {\r
+             if (lv_subList.SelectedIndices.Count != 0)\r
+             {\r
+@@ -290,46 +626,68 @@ namespace Handbrake.Controls
+                 }\r
+             }\r
+         }\r
+-        private void mnu_remove_Click(object sender, EventArgs e)\r
++\r
++        /// <summary>\r
++        /// Remove a selected subtitle track.\r
++        /// </summary>\r
++        /// <param name="sender">\r
++        /// The sender.\r
++        /// </param>\r
++        /// <param name="e">\r
++        /// The e.\r
++        /// </param>\r
++        private void MnuRemoveClick(object sender, EventArgs e)\r
+         {\r
+-            RemoveTrack();\r
++            this.RemoveSelectedTrack();\r
+         }\r
\r
+-        // Functions\r
+-        private void SetNoDefault()\r
++        #endregion\r
++\r
++        #region Helpers\r
++        /// <summary>\r
++        /// Set all Non SRT tracks to Default = NO\r
++        /// </summary>\r
++        private void SetDefaultToOffForAllTracks()\r
+         {\r
+             int c = 0;\r
+             foreach (ListViewItem item in lv_subList.Items)\r
+             {\r
+-                if (SubList[c].SrtPath == "-")\r
++                if (subList[c].SrtPath == "-")\r
+                 {\r
+                     if (item.SubItems[3].Text == "Yes")\r
+                     {\r
+                         item.SubItems[3].Text = "No";\r
+-                        SubList[c].Default = "No";\r
+-                    }     \r
++                        subList[c].Default = false;\r
++                    }\r
+                 }\r
+                 c++;\r
+             }\r
+         }\r
\r
+-        private void setNoSrtDefault()\r
++        /// <summary>\r
++        /// Set all subtitle tracks so that they have no default.\r
++        /// </summary>\r
++        private void SetDefaultToOffForAllSRTTracks()\r
+         {\r
+             int c = 0;\r
+             foreach (ListViewItem item in lv_subList.Items)\r
+             {\r
+-                if (SubList[c].SrtPath != "-")\r
++                if (!subList[c].IsSrtSubtitle)\r
+                 {\r
+                     if (item.SubItems[3].Text == "Yes")\r
+                     {\r
+                         item.SubItems[3].Text = "No";\r
+-                        SubList[c].Default = "No";\r
++                        subList[c].Default = false;\r
+                     }\r
+                 }\r
+                 c++;\r
+             }\r
+         }\r
+-        private void SetNoBurned()\r
++\r
++        /// <summary>\r
++        /// Set all tracks to Burned = No\r
++        /// </summary>\r
++        private void SetBurnedToOffForAllTracks()\r
+         {\r
+             int c = 0;\r
+             foreach (ListViewItem item in lv_subList.Items)\r
+@@ -337,12 +695,16 @@ namespace Handbrake.Controls
+                 if (item.SubItems[2].Text == "Yes")\r
+                 {\r
+                     item.SubItems[2].Text = "No";\r
+-                    SubList[c].Burned = "No";\r
++                    subList[c].Burned = false;\r
+                 }\r
+                 c++;\r
+             }\r
+         }\r
+-        private void RemoveTrack()\r
++\r
++        /// <summary>\r
++        /// Remove a selected track\r
++        /// </summary>\r
++        private void RemoveSelectedTrack()\r
+         {\r
+             // Remove the Item and reselect the control if the following conditions are met.\r
+             if (lv_subList.SelectedItems.Count != 0)\r
+@@ -352,7 +714,7 @@ namespace Handbrake.Controls
+                 int selectedInd = lv_subList.SelectedIndices[0];\r
\r
+                 lv_subList.Items.RemoveAt(selectedInd);\r
+-                SubList.RemoveAt(selectedInd);\r
++                subList.RemoveAt(selectedInd);\r
\r
+                 // Now reslect the correct item and give focus to the list.\r
+                 if (lv_subList.Items.Count != 0)\r
+@@ -366,97 +728,6 @@ namespace Handbrake.Controls
+                 }\r
+             }\r
+         }\r
+-\r
+-        // Public Functions\r
+-        public void Clear()\r
+-        {\r
+-            lv_subList.Items.Clear();\r
+-            SubList.Clear();\r
+-        }\r
+-        public void SmartClear()\r
+-        {\r
+-            /* Smart clear will only remove subtitle tracks that do not have an equivlent \r
+-              for the new source / title which the user has selected. */\r
+-            throw new NotImplementedException();\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
+-        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
+-                        i++;\r
+-                    }\r
+-\r
+-                    btn_addSubTrack_Click(this, new EventArgs());\r
+-                }\r
+-            }\r
+-        }\r
+-        public void SetContainer(int value)\r
+-        {\r
+-            _fileContainer = value;\r
+-            Boolean trigger = false;\r
+-            if (_fileContainer != 1)\r
+-                foreach (ListViewItem item in lv_subList.Items)\r
+-                {\r
+-                    if (item.SubItems[1].Text.Contains("Bitmap"))\r
+-                    {\r
+-                        if (trigger)\r
+-                            lv_subList.Items.Remove(item);\r
+-                        trigger = true;\r
+-                    }\r
+-                }\r
+-        }\r
+-        public List<SubtitleInfo> GetSubtitleInfoList()\r
+-        {\r
+-            return SubList;\r
+-        }\r
+-    }\r
+-\r
+-    public class SubtitleInfo\r
+-    {\r
+-        public string Track { get; set; }\r
+-        public string Forced { get; set; }\r
+-        public string Burned { get; set; }\r
+-        public string Default { get; set; }\r
+-        public string SrtLang { get; set; }\r
+-        public string SrtCharCode { get; set; }\r
+-        public int SrtOffset { get; set; }\r
+-        public string SrtPath { get; set; }\r
+-        public string SrtFileName { get; set; }\r
+-\r
+-        public ListViewItem ListView\r
+-        {\r
+-            get\r
+-            {\r
+-                ListViewItem listTrack = new ListViewItem(Track);\r
+-                listTrack.SubItems.Add(Forced);\r
+-                listTrack.SubItems.Add(Burned);\r
+-                listTrack.SubItems.Add(Default);\r
+-                listTrack.SubItems.Add(SrtLang);\r
+-                listTrack.SubItems.Add(SrtCharCode);\r
+-                listTrack.SubItems.Add(SrtOffset.ToString());\r
+-                return listTrack;\r
+-            }\r
+-        }\r
++        #endregion\r
+     }\r
+ }
+\ No newline at end of file