-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, "More than one vobsub is not supported in mp4... Your first vobsub track will now be used.",\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
};\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
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
+ 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
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 = "Selected Track: " + 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 = "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
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
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
}\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
}\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
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
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
}\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