OSDN Git Service

0583aa802ef191603a1bec40042cfda1c195a88d
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / Subtitles.cs
1 /*  Subtitles.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace Handbrake.Controls\r
7 {\r
8     using System;\r
9     using System.Collections.Generic;\r
10     using System.IO;\r
11     using System.Linq;\r
12     using System.Windows.Forms;\r
13     using Functions;\r
14     using Model;\r
15 \r
16     /// <summary>\r
17     /// The Subtitles Tab\r
18     /// </summary>\r
19     public partial class Subtitles : UserControl\r
20     {\r
21         /// <summary>\r
22         /// Map of languages to language codes\r
23         /// </summary>\r
24         private readonly IDictionary<string, string> langMap = new Dictionary<string, string>();\r
25 \r
26         /// <summary>\r
27         /// A List of SRT Files\r
28         /// </summary>\r
29         private readonly IDictionary<string, string> srtFiles = new Dictionary<string, string>();\r
30 \r
31         /// <summary>\r
32         /// The Subtitle List\r
33         /// </summary>\r
34         private readonly List<SubtitleInfo> subList = new List<SubtitleInfo>();\r
35 \r
36         /// <summary>\r
37         /// Initializes a new instance of the <see cref="Subtitles"/> class.\r
38         /// </summary>\r
39         public Subtitles()\r
40         {\r
41             InitializeComponent();\r
42 \r
43             langMap = Main.MapLanguages();\r
44             foreach (string key in langMap.Keys)\r
45                 srt_lang.Items.Add(key);\r
46 \r
47             srt_charcode.SelectedIndex = 28;\r
48             srt_lang.SelectedIndex = 40;\r
49         }\r
50 \r
51         /// <summary>\r
52         /// Gets the CLI Query for this panel\r
53         /// </summary>\r
54         /// <returns>A CliQuery string</returns>\r
55         public string GetCliQuery\r
56         {\r
57             get\r
58             {\r
59                 string query = string.Empty;\r
60                 if (lv_subList.Items.Count != 0) // If we have subtitle tracks\r
61                 {\r
62                     // BitMap and CC's\r
63                     string subtitleTracks = String.Empty;\r
64                     string subtitleForced = String.Empty;\r
65                     string subtitleBurn = String.Empty;\r
66                     string subtitleDefault = String.Empty;\r
67 \r
68                     // SRT\r
69                     string srtFile = String.Empty;\r
70                     string srtCodeset = String.Empty;\r
71                     string srtOffset = String.Empty;\r
72                     string srtLang = String.Empty;\r
73                     string srtDefault = String.Empty;\r
74                     int srtCount = 0;\r
75 \r
76                     foreach (SubtitleInfo item in subList)\r
77                     {\r
78                         string itemToAdd, trackId;\r
79 \r
80                         if (item.IsSrtSubtitle) // We have an SRT file\r
81                         {\r
82                             srtCount++; // SRT track id.\r
83 \r
84                             srtLang += srtLang == string.Empty ? langMap[item.SrtLang] : "," + langMap[item.SrtLang];\r
85                             srtCodeset += srtCodeset == string.Empty ? item.SrtCharCode : "," + item.SrtCharCode;\r
86 \r
87                             if (item.Default == "Yes")\r
88                                 srtDefault = srtCount.ToString();\r
89 \r
90                             itemToAdd = item.SrtPath;\r
91                             srtFile += srtFile == string.Empty ? itemToAdd : "," + itemToAdd;\r
92 \r
93                             itemToAdd = item.SrtOffset.ToString();\r
94                             srtOffset += srtOffset == string.Empty ? itemToAdd : "," + itemToAdd;\r
95                         }\r
96                         else // We have Bitmap or CC\r
97                         {\r
98                             string[] tempSub;\r
99 \r
100                             // Find --subtitle <string>\r
101                             if (item.Track.Contains("Foreign Audio Search"))\r
102                                 itemToAdd = "scan";\r
103                             else\r
104                             {\r
105                                 tempSub = item.Track.Split(' ');\r
106                                 itemToAdd = tempSub[0];\r
107                             }\r
108 \r
109                             subtitleTracks += subtitleTracks == string.Empty ? itemToAdd : "," + itemToAdd;\r
110 \r
111                             // Find --subtitle-forced\r
112                             itemToAdd = string.Empty;\r
113                             tempSub = item.Track.Split(' ');\r
114                             trackId = tempSub[0];\r
115 \r
116                             if (item.Forced == "Yes")\r
117                                 itemToAdd = trackId;\r
118 \r
119                             if (itemToAdd != string.Empty)\r
120                                 subtitleForced += subtitleForced == string.Empty ? itemToAdd : "," + itemToAdd;\r
121 \r
122                             // Find --subtitle-burn and --subtitle-default\r
123                             trackId = tempSub[0];\r
124 \r
125                             if (trackId.Trim() == "Foreign") // foreign audio search\r
126                                 trackId = "scan";\r
127 \r
128                             if (item.Burned == "Yes") // burn\r
129                                 subtitleBurn = trackId;\r
130 \r
131                             if (item.Default == "Yes") // default\r
132                                 subtitleDefault = trackId;\r
133                         }\r
134                     }\r
135 \r
136                     // Build The CLI Subtitles Query\r
137                     if (subtitleTracks != string.Empty)\r
138                     {\r
139                         query += " --subtitle " + subtitleTracks;\r
140 \r
141                         if (subtitleForced != string.Empty)\r
142                             query += " --subtitle-forced=" + subtitleForced;\r
143                         if (subtitleBurn != string.Empty)\r
144                             query += " --subtitle-burn=" + subtitleBurn;\r
145                         if (subtitleDefault != string.Empty)\r
146                             query += " --subtitle-default=" + subtitleDefault;\r
147                     }\r
148 \r
149                     if (srtFile != string.Empty) // SRTs\r
150                     {\r
151                         query += " --srt-file " + "\"" + srtFile + "\"";\r
152 \r
153                         if (srtCodeset != string.Empty)\r
154                             query += " --srt-codeset " + srtCodeset;\r
155                         if (srtOffset != string.Empty)\r
156                             query += " --srt-offset " + srtOffset;\r
157                         if (srtLang != string.Empty)\r
158                             query += " --srt-lang " + srtLang;\r
159                         if (srtDefault != string.Empty)\r
160                             query += " --srt-default=" + srtDefault;\r
161                     }\r
162                 }\r
163                 return query;\r
164             }\r
165         }\r
166 \r
167         /* Primary Controls */\r
168 \r
169         /// <summary>\r
170         /// Add a Subtitle track.\r
171         /// </summary>\r
172         /// <param name="sender">\r
173         /// The sender.\r
174         /// </param>\r
175         /// <param name="e">\r
176         /// The e.\r
177         /// </param>\r
178         private void BtnAddSubTrackClick(object sender, EventArgs e)\r
179         {\r
180             // Logic\r
181             string forcedVal = check_forced.CheckState == CheckState.Checked ? "Yes" : "No";\r
182             string defaultSub = check_default.CheckState == CheckState.Checked ? "Yes" : "No";\r
183             string burnedVal = check_burned.CheckState == CheckState.Checked &&\r
184                                (!drp_subtitleTracks.Text.Contains("Text"))\r
185                                    ? "Yes"\r
186                                    : "No";\r
187             string srtCode = "-", srtLangVal = "-", srtPath = "-", srtFile = "-";\r
188             int srtOffsetMs = 0;\r
189 \r
190             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
191             {\r
192                 burnedVal = "No";\r
193                 forcedVal = "No";\r
194                 srtFiles.TryGetValue(drp_subtitleTracks.SelectedItem.ToString(), out srtPath);\r
195                 srtFile = drp_subtitleTracks.SelectedItem.ToString();\r
196                 srtLangVal = srt_lang.SelectedItem.ToString();\r
197                 srtCode = srt_charcode.SelectedItem.ToString();\r
198                 srtOffsetMs = (int)srt_offset.Value;\r
199                 if (defaultSub == "Yes") SetNoSrtDefault();\r
200             }\r
201             else\r
202             {\r
203                 if (defaultSub == "Yes") SetNoDefault();\r
204                 if (burnedVal == "Yes") SetNoBurned();\r
205             }\r
206 \r
207             string trackName = (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
208                                    ? srtLangVal + " (" + srtFile + ")"\r
209                                    : drp_subtitleTracks.SelectedItem.ToString();\r
210 \r
211             SubtitleInfo track = new SubtitleInfo\r
212                                      {\r
213                                          Track = trackName,\r
214                                          Forced = forcedVal,\r
215                                          Burned = burnedVal,\r
216                                          Default = defaultSub,\r
217                                          SrtLang = srtLangVal,\r
218                                          SrtCharCode = srtCode,\r
219                                          SrtOffset = srtOffsetMs,\r
220                                          SrtPath = srtPath,\r
221                                          SrtFileName = srtFile\r
222                                      };\r
223 \r
224             lv_subList.Items.Add(track.ListView);\r
225             subList.Add(track);\r
226         }\r
227 \r
228         /// <summary>\r
229         /// Import an SRT Subtitle Track\r
230         /// </summary>\r
231         /// <param name="sender">\r
232         /// The sender.\r
233         /// </param>\r
234         /// <param name="e">\r
235         /// The e.\r
236         /// </param>\r
237         private void BtnSrtAddClick(object sender, EventArgs e)\r
238         {\r
239             if (openFileDialog.ShowDialog() != DialogResult.OK)\r
240                 return;\r
241 \r
242             if (srtFiles.ContainsKey(Path.GetFileName(openFileDialog.FileName)))\r
243             {\r
244                 MessageBox.Show(\r
245                     "A Subtitle track with the same name has already been imported.",\r
246                     "Warning",\r
247                     MessageBoxButtons.OK,\r
248                     MessageBoxIcon.Warning);\r
249                 return;\r
250             }\r
251 \r
252             drp_subtitleTracks.Items.Add(Path.GetFileName(openFileDialog.FileName));\r
253             drp_subtitleTracks.SelectedItem = Path.GetFileName(openFileDialog.FileName);\r
254             srtFiles.Add(Path.GetFileName(openFileDialog.FileName), openFileDialog.FileName);\r
255         }\r
256 \r
257         /// <summary>\r
258         /// Remove a subtitle track\r
259         /// </summary>\r
260         /// <param name="sender">\r
261         /// The sender.\r
262         /// </param>\r
263         /// <param name="e">\r
264         /// The e.\r
265         /// </param>\r
266         private void BtnRemoveSubTrackClick(object sender, EventArgs e)\r
267         {\r
268             RemoveTrack();\r
269         }\r
270 \r
271         /// <summary>\r
272         /// The Subtitle List selected index has changed\r
273         /// </summary>\r
274         /// <param name="sender">\r
275         /// The sender.\r
276         /// </param>\r
277         /// <param name="e">\r
278         /// The e.\r
279         /// </param>\r
280         private void LbSubListSelectedIndexChanged(object sender, EventArgs e)\r
281         {\r
282             // Set the dropdown controls based on the selected item in the List.\r
283             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
284             {\r
285                 SubtitleInfo track = subList[lv_subList.SelectedIndices[0]];\r
286 \r
287                 int c = 0;\r
288                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text.ToLower().Contains(".srt"))\r
289                 // We have an SRT\r
290                 {\r
291                     foreach (var item in drp_subtitleTracks.Items)\r
292                     {\r
293                         if (item.ToString() == track.SrtFileName)\r
294                             drp_subtitleTracks.SelectedIndex = c;\r
295                         c++;\r
296                     }\r
297                     srt_lang.SelectedItem = track.SrtLang;\r
298                     srt_offset.Value = track.SrtOffset;\r
299                     srt_charcode.SelectedItem = track.SrtCharCode;\r
300                     check_default.CheckState = track.Default == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
301                     SubGroupBox.Text = "Selected Track: " + track.Track;\r
302                 }\r
303                 else // We have Bitmap/CC\r
304                 {\r
305                     foreach (var item in drp_subtitleTracks.Items)\r
306                     {\r
307                         if (item.ToString() == track.Track)\r
308                             drp_subtitleTracks.SelectedIndex = c;\r
309                         c++;\r
310                     }\r
311                     check_forced.CheckState = track.Forced == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
312                     check_burned.CheckState = track.Burned == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
313                     check_default.CheckState = track.Default == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
314                     SubGroupBox.Text = "Selected Track: " +\r
315                                        lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
316                 }\r
317             }\r
318             else\r
319                 SubGroupBox.Text = "Selected Track: None (Click \"Add\" to add another track to the list)";\r
320         }\r
321 \r
322         /* Bitmap / CC / SRT Controls */\r
323 \r
324         /// <summary>\r
325         /// Handle the Subtitle track dropdown changed event\r
326         /// </summary>\r
327         /// <param name="sender">\r
328         /// The sender.\r
329         /// </param>\r
330         /// <param name="e">\r
331         /// The e.\r
332         /// </param>\r
333         private void DrpSubtitleTracksSelectedIndexChanged(object sender, EventArgs e)\r
334         {\r
335             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
336             {\r
337                 check_forced.Enabled = false;\r
338                 check_burned.Enabled = false;\r
339                 srt_lang.Enabled = true;\r
340                 srt_charcode.Enabled = true;\r
341                 srt_offset.Enabled = true;\r
342             }\r
343             else\r
344             {\r
345                 check_forced.Enabled = true;\r
346                 check_burned.Enabled = true;\r
347                 srt_lang.Enabled = false;\r
348                 srt_charcode.Enabled = false;\r
349                 srt_offset.Enabled = false;\r
350             }\r
351             // Update an item in the  list if required.\r
352             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
353 \r
354             if (drp_subtitleTracks.SelectedItem.ToString().Contains(".srt"))\r
355             {\r
356                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text = srt_lang.SelectedItem + "(" +\r
357                                                                                    drp_subtitleTracks.SelectedItem + ")";\r
358                 lv_subList.Select();\r
359 \r
360                 string srtPath;\r
361                 srtFiles.TryGetValue(drp_subtitleTracks.SelectedItem.ToString(), out srtPath);\r
362                 subList[lv_subList.SelectedIndices[0]].SrtPath = srtPath;\r
363             }\r
364             else\r
365             {\r
366                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text =\r
367                     drp_subtitleTracks.SelectedItem.ToString();\r
368                 lv_subList.Select();\r
369             }\r
370 \r
371             subList[lv_subList.SelectedIndices[0]].Track = drp_subtitleTracks.SelectedItem.ToString();\r
372         }\r
373 \r
374         /// <summary>\r
375         /// Foreced Subtitles checkbox changed\r
376         /// </summary>\r
377         /// <param name="sender">\r
378         /// The sender.\r
379         /// </param>\r
380         /// <param name="e">\r
381         /// The e.\r
382         /// </param>\r
383         private void CheckForcedCheckedChanged(object sender, EventArgs e)\r
384         {\r
385             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
386 \r
387             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = check_forced.Checked ? "Yes" : "No";\r
388             lv_subList.Select();\r
389 \r
390             subList[lv_subList.SelectedIndices[0]].Forced = check_forced.Checked ? "Yes" : "No";\r
391             // Update SubList List<SubtitleInfo> \r
392         }\r
393 \r
394         /// <summary>\r
395         /// Burned in subtitles checkbox changed\r
396         /// </summary>\r
397         /// <param name="sender">\r
398         /// The sender.\r
399         /// </param>\r
400         /// <param name="e">\r
401         /// The e.\r
402         /// </param>\r
403         private void CheckBurnedCheckedChanged(object sender, EventArgs e)\r
404         {\r
405             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
406 \r
407             if (check_burned.Checked) // Make sure we only have 1 burned track\r
408                 SetNoBurned();\r
409 \r
410             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text = check_burned.Checked ? "Yes" : "No";\r
411             lv_subList.Select();\r
412 \r
413             subList[lv_subList.SelectedIndices[0]].Burned = check_burned.Checked ? "Yes" : "No";\r
414             // Update SubList List<SubtitleInfo> \r
415         }\r
416 \r
417         /// <summary>\r
418         /// Default Subitle track check changed\r
419         /// </summary>\r
420         /// <param name="sender">\r
421         /// The sender.\r
422         /// </param>\r
423         /// <param name="e">\r
424         /// The e.\r
425         /// </param>\r
426         private void CheckDefaultCheckedChanged(object sender, EventArgs e)\r
427         {\r
428             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
429 \r
430             if (check_default.Checked) // Make sure we only have 1 default track\r
431                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text.Contains(".srt"))\r
432                     SetNoSrtDefault();\r
433                 else\r
434                     SetNoDefault();\r
435 \r
436             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text = check_default.Checked ? "Yes" : "No";\r
437             lv_subList.Select();\r
438 \r
439             subList[lv_subList.SelectedIndices[0]].Default = check_default.Checked ? "Yes" : "No";\r
440             // Update SubList List<SubtitleInfo>\r
441         }\r
442 \r
443         /// <summary>\r
444         /// Srt Offset Numeric Control Changed\r
445         /// </summary>\r
446         /// <param name="sender">\r
447         /// The sender.\r
448         /// </param>\r
449         /// <param name="e">\r
450         /// The e.\r
451         /// </param>\r
452         private void SrtOffsetValueChanged(object sender, EventArgs e)\r
453         {\r
454             // Update an item in the  list if required.\r
455             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0)\r
456                 return;\r
457 \r
458             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text = srt_offset.Value.ToString();\r
459             lv_subList.Select();\r
460 \r
461             subList[lv_subList.SelectedIndices[0]].SrtOffset = (int)srt_offset.Value;\r
462             // Update SubList List<SubtitleInfo>\r
463         }\r
464 \r
465         /// <summary>\r
466         /// The SRT Charcode changed\r
467         /// </summary>\r
468         /// <param name="sender">\r
469         /// The sender.\r
470         /// </param>\r
471         /// <param name="e">\r
472         /// The e.\r
473         /// </param>\r
474         private void SrtCharcodeSelectedIndexChanged(object sender, EventArgs e)\r
475         {\r
476             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
477 \r
478             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[5].Text = srt_charcode.SelectedItem.ToString();\r
479             lv_subList.Select();\r
480 \r
481             subList[lv_subList.SelectedIndices[0]].SrtCharCode = srt_charcode.SelectedItem.ToString();\r
482             // Update SubList List<SubtitleInfo>\r
483         }\r
484 \r
485         /// <summary>\r
486         /// The Srt Language code changed\r
487         /// </summary>\r
488         /// <param name="sender">\r
489         /// The sender.\r
490         /// </param>\r
491         /// <param name="e">\r
492         /// The e.\r
493         /// </param>\r
494         private void SrtLangSelectedIndexChanged(object sender, EventArgs e)\r
495         {\r
496             if (lv_subList.Items.Count == 0 || lv_subList.SelectedIndices.Count == 0) return;\r
497 \r
498             lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = srt_lang.SelectedItem.ToString();\r
499             lv_subList.Select();\r
500 \r
501             subList[lv_subList.SelectedIndices[0]].SrtLang = srt_lang.SelectedItem.ToString();\r
502             // Update SubList List<SubtitleInfo>\r
503         }\r
504 \r
505         /* Right Click Menu */\r
506 \r
507         /// <summary>\r
508         /// Move an item in the subtitle list up\r
509         /// </summary>\r
510         /// <param name="sender">\r
511         /// The sender.\r
512         /// </param>\r
513         /// <param name="e">\r
514         /// The e.\r
515         /// </param>\r
516         private void MnuMoveupClick(object sender, EventArgs e)\r
517         {\r
518             if (lv_subList.SelectedIndices.Count != 0)\r
519             {\r
520                 ListViewItem item = lv_subList.SelectedItems[0];\r
521                 int index = item.Index;\r
522                 index--;\r
523 \r
524                 if (lv_subList.Items.Count > index && index >= 0)\r
525                 {\r
526                     lv_subList.Items.Remove(item);\r
527                     lv_subList.Items.Insert(index, item);\r
528                     item.Selected = true;\r
529                     lv_subList.Focus();\r
530                 }\r
531             }\r
532         }\r
533 \r
534         /// <summary>\r
535         /// Move an item in the subtitle list down\r
536         /// </summary>\r
537         /// <param name="sender">\r
538         /// The sender.\r
539         /// </param>\r
540         /// <param name="e">\r
541         /// The e.\r
542         /// </param>\r
543         private void MnuMovedownClick(object sender, EventArgs e)\r
544         {\r
545             if (lv_subList.SelectedIndices.Count != 0)\r
546             {\r
547                 ListViewItem item = lv_subList.SelectedItems[0];\r
548                 int index = item.Index;\r
549                 index++;\r
550 \r
551                 if (index < lv_subList.Items.Count)\r
552                 {\r
553                     lv_subList.Items.Remove(item);\r
554                     lv_subList.Items.Insert(index, item);\r
555                     item.Selected = true;\r
556                     lv_subList.Focus();\r
557                 }\r
558             }\r
559         }\r
560 \r
561         /// <summary>\r
562         /// Remove a selected subtitle track.\r
563         /// </summary>\r
564         /// <param name="sender">\r
565         /// The sender.\r
566         /// </param>\r
567         /// <param name="e">\r
568         /// The e.\r
569         /// </param>\r
570         private void MnuRemoveClick(object sender, EventArgs e)\r
571         {\r
572             RemoveTrack();\r
573         }\r
574 \r
575         /* Functions */\r
576 \r
577         /// <summary>\r
578         /// Set all Non SRT tracks to Default = NO\r
579         /// </summary>\r
580         private void SetNoDefault()\r
581         {\r
582             int c = 0;\r
583             foreach (ListViewItem item in lv_subList.Items)\r
584             {\r
585                 if (subList[c].SrtPath == "-")\r
586                 {\r
587                     if (item.SubItems[3].Text == "Yes")\r
588                     {\r
589                         item.SubItems[3].Text = "No";\r
590                         subList[c].Default = "No";\r
591                     }\r
592                 }\r
593                 c++;\r
594             }\r
595         }\r
596 \r
597         /// <summary>\r
598         /// Set all subtitle tracks so that they have no default.\r
599         /// </summary>\r
600         private void SetNoSrtDefault()\r
601         {\r
602             int c = 0;\r
603             foreach (ListViewItem item in lv_subList.Items)\r
604             {\r
605                 if (!subList[c].IsSrtSubtitle)\r
606                 {\r
607                     if (item.SubItems[3].Text == "Yes")\r
608                     {\r
609                         item.SubItems[3].Text = "No";\r
610                         subList[c].Default = "No";\r
611                     }\r
612                 }\r
613                 c++;\r
614             }\r
615         }\r
616 \r
617         /// <summary>\r
618         /// Set all tracks to Burned = No\r
619         /// </summary>\r
620         private void SetNoBurned()\r
621         {\r
622             int c = 0;\r
623             foreach (ListViewItem item in lv_subList.Items)\r
624             {\r
625                 if (item.SubItems[2].Text == "Yes")\r
626                 {\r
627                     item.SubItems[2].Text = "No";\r
628                     subList[c].Burned = "No";\r
629                 }\r
630                 c++;\r
631             }\r
632         }\r
633 \r
634         /// <summary>\r
635         /// Remove a selected track\r
636         /// </summary>\r
637         private void RemoveTrack()\r
638         {\r
639             // Remove the Item and reselect the control if the following conditions are met.\r
640             if (lv_subList.SelectedItems.Count != 0)\r
641             {\r
642                 // Record the current selected index.\r
643                 int currentPosition = lv_subList.SelectedIndices[0];\r
644                 int selectedInd = lv_subList.SelectedIndices[0];\r
645 \r
646                 lv_subList.Items.RemoveAt(selectedInd);\r
647                 subList.RemoveAt(selectedInd);\r
648 \r
649                 // Now reslect the correct item and give focus to the list.\r
650                 if (lv_subList.Items.Count != 0)\r
651                 {\r
652                     if (currentPosition <= (lv_subList.Items.Count - 1))\r
653                         lv_subList.Items[currentPosition].Selected = true;\r
654                     else if (currentPosition > (lv_subList.Items.Count - 1))\r
655                         lv_subList.Items[lv_subList.Items.Count - 1].Selected = true;\r
656 \r
657                     lv_subList.Select();\r
658                 }\r
659             }\r
660         }\r
661 \r
662         /// <summary>\r
663         /// Clear the Subtitle List\r
664         /// </summary>\r
665         public void Clear()\r
666         {\r
667             lv_subList.Items.Clear();\r
668             subList.Clear();\r
669         }\r
670 \r
671         /// <summary>\r
672         /// Checks of the current settings will require the m4v file extension\r
673         /// </summary>\r
674         /// <returns>True if Yes</returns>\r
675         public bool RequiresM4V()\r
676         {\r
677             return this.lv_subList.Items.Cast<ListViewItem>().Any(item => item.SubItems.Count != 5 || item.SubItems[1].Text.Contains("(Text)"));\r
678         }\r
679 \r
680         /// <summary>\r
681         /// Automatically setup the subtitle tracks.\r
682         /// This handles the automatic setup of subitles which the user can control from the program options\r
683         /// </summary>\r
684         /// <param name="subs">List of Subtitles</param>\r
685         public void SetSubtitleTrackAuto(object[] subs)\r
686         {\r
687             drp_subtitleTracks.Items.Clear();\r
688             drp_subtitleTracks.Items.Add("Foreign Audio Search (Bitmap)");\r
689             drp_subtitleTracks.Items.AddRange(subs);\r
690             drp_subtitleTracks.SelectedIndex = 0;\r
691             Clear();\r
692 \r
693             // Handle Native Language and "Dub Foreign language audio" and "Use Foreign language audio and Subtitles" Options\r
694             if (Properties.Settings.Default.NativeLanguage != "Any")\r
695             {\r
696                 if (Properties.Settings.Default.DubMode != 1) // We need to add a subtitle track if this is false.\r
697                 {\r
698                     foreach (object item in drp_subtitleTracks.Items)\r
699                     {\r
700                         if (item.ToString().Contains(Properties.Settings.Default.NativeLanguage))\r
701                         {\r
702                             drp_subtitleTracks.SelectedItem = item;\r
703                             BtnAddSubTrackClick(this, new EventArgs());\r
704                         }\r
705                     }\r
706 \r
707                     if (drp_subtitleTracks.SelectedIndex == 0 && Properties.Settings.Default.useClosedCaption)\r
708                     {\r
709                         foreach (object item in drp_subtitleTracks.Items)\r
710                         {\r
711                             if (item.ToString().Contains("Closed"))\r
712                             {\r
713                                 drp_subtitleTracks.SelectedItem = item;\r
714                                 BtnAddSubTrackClick(this, new EventArgs());\r
715                             }\r
716                         }\r
717                     }                    \r
718                 }\r
719             }\r
720         }\r
721 \r
722         /// <summary>\r
723         /// Get the list of subtitles.\r
724         /// </summary>\r
725         /// <returns>A List of SubtitleInfo Object</returns>\r
726         public List<SubtitleInfo> GetSubtitleInfoList()\r
727         {\r
728             return subList;\r
729         }\r
730     }\r
731 }