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
}\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
}\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
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
// 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
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
i++;\r
}\r
}\r
+\r
}\r
}\r