OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / Subtitles.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Windows.Forms;\r
4 using Handbrake.Functions;\r
5 \r
6 namespace Handbrake.Controls\r
7 {\r
8     public partial class Subtitles : UserControl\r
9     {\r
10         readonly IDictionary<string, string> LangMap = new Dictionary<string, string>();\r
11 \r
12         public Subtitles()\r
13         {\r
14             InitializeComponent();\r
15 \r
16             LangMap = Main.mapLanguages();\r
17             foreach (string key in LangMap.Keys)\r
18                 srt_lang.Items.Add(key);\r
19 \r
20             srt_charcode.SelectedIndex = 28;\r
21             srt_lang.SelectedIndex = 40;\r
22         }\r
23 \r
24         private int FileContainer;\r
25         public void setSubtitleTrackAuto()\r
26         {\r
27             // Handle Native Language and "Dub Foreign language audio" and "Use Foreign language audio and Subtitles" Options\r
28             if (Properties.Settings.Default.NativeLanguage != "Any")\r
29             {\r
30                 if (!Properties.Settings.Default.DubAudio) // We need to add a subtitle track if this is false.\r
31                 {\r
32                     int i = 0;\r
33                     foreach (object item in drp_subtitleTracks.Items)\r
34                     {\r
35                         if (item.ToString().Contains(Properties.Settings.Default.NativeLanguage))\r
36                             drp_subtitleTracks.SelectedIndex = i;\r
37 \r
38                         i++;\r
39                     }\r
40 \r
41                     btn_addSubTrack_Click(this, new EventArgs());\r
42                 }\r
43             }\r
44         }\r
45         public void setContainer(int value)\r
46         {\r
47             FileContainer = value;\r
48             Boolean trigger = false;\r
49             if (FileContainer != 1)\r
50                 foreach (ListViewItem item in lv_subList.Items)\r
51                 {\r
52                     if (item.SubItems[1].Text.Contains("Bitmap"))\r
53                     {\r
54                         if (trigger)\r
55                             lv_subList.Items.Remove(item);\r
56                         trigger = true;\r
57                     }\r
58                 }\r
59         }\r
60 \r
61         // Controls\r
62         private void btn_addSubTrack_Click(object sender, EventArgs e)\r
63         {\r
64             string forcedVal = "No";\r
65             string burnedVal = "No";\r
66             string defaultSub = "No";\r
67 \r
68             if (check_forced.Checked)\r
69                 forcedVal = "Yes";\r
70 \r
71             if (check_burned.Checked)\r
72             {\r
73                 if (!drp_subtitleTracks.Text.Contains("Text"))\r
74                 {\r
75                     burnedVal = "Yes";\r
76                     setNoBurned();\r
77                 }\r
78             }\r
79 \r
80             if (check_default.Checked)\r
81             {\r
82                 defaultSub = "Yes";\r
83                 setNoDefault();\r
84             }\r
85 \r
86             Boolean addTrack = true;\r
87             if (FileContainer == 0)\r
88             {\r
89                 burnedVal = "Yes";  // MP4 must have bitmap subs burned in.\r
90 \r
91                 // Make sure we only have 1 bitmap track.\r
92                 if (drp_subtitleTracks.SelectedItem != null)\r
93                 {\r
94                     if (drp_subtitleTracks.SelectedItem.ToString().Contains("Bitmap"))\r
95                         foreach (ListViewItem item in lv_subList.Items)\r
96                         {\r
97                             if (item.SubItems[1].Text.Contains("Bitmap"))\r
98                             {\r
99                                 MessageBox.Show(this,\r
100                                                 "More than one vobsub is not supported in mp4... Your first vobsub track will now be used.",\r
101                                                 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
102                                 addTrack = false;\r
103                             }\r
104                         }\r
105                 }\r
106                 else\r
107                     addTrack = false;\r
108 \r
109             }\r
110 \r
111             // Add the track if allowed.\r
112             if (addTrack)\r
113             {\r
114                 ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
115 \r
116                 newTrack.SubItems.Add(drp_subtitleTracks.SelectedItem.ToString());\r
117                 newTrack.SubItems.Add(forcedVal);\r
118                 newTrack.SubItems.Add(burnedVal);\r
119                 newTrack.SubItems.Add(defaultSub);\r
120 \r
121                 lv_subList.Items.Add(newTrack);\r
122             }\r
123         }\r
124         private void btn_srtAdd_Click(object sender, EventArgs e)\r
125         {\r
126             string defaultSub = "No";\r
127             if (check_default_srt.Checked)\r
128             {\r
129                 defaultSub = "Yes";\r
130                 setNoDefault();\r
131             }\r
132 \r
133             ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
134 \r
135             newTrack.SubItems.Add(srt_lang.SelectedItem + ", (" + srt_charcode.SelectedItem + ")");\r
136             newTrack.SubItems.Add("No");\r
137             newTrack.SubItems.Add("No");\r
138             newTrack.SubItems.Add(defaultSub);\r
139             if (openFileDialog.FileName != null)\r
140                 newTrack.SubItems.Add(openFileDialog.FileName);\r
141             else\r
142                 newTrack.SubItems.Add("None");\r
143 \r
144             newTrack.SubItems.Add(srt_offset.Value.ToString());\r
145 \r
146             lv_subList.Items.Add(newTrack);\r
147         }\r
148         private void btn_RemoveSubTrack_Click(object sender, EventArgs e)\r
149         {\r
150             removeTrack();\r
151         }\r
152         private void lb_subList_SelectedIndexChanged(object sender, EventArgs e)\r
153         {\r
154             // Set the dropdown controls based on the selected item in the List.\r
155             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
156             {\r
157                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems.Count != 5)  // We have an SRT\r
158                 {\r
159                     string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
160                     string charCode = trackData[1].Replace("(", "").Replace(")", "");\r
161                     srt_lang.SelectedItem = trackData[0];\r
162                     srt_charcode.SelectedItem = charCode.Trim();\r
163 \r
164                     int offsetVal;\r
165                     int.TryParse(lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text, out offsetVal);\r
166                     srt_offset.Value = offsetVal;\r
167 \r
168                     check_default_srt.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
169 \r
170                     SRTGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
171                     SubTitlesGroup.Text = "Selected Track: None";\r
172                 }\r
173                 else  // We have Bitmap/CC\r
174                 {\r
175                     // Setup the controls\r
176                     int c = 0;\r
177                     foreach (var item in drp_subtitleTracks.Items)\r
178                     {\r
179                         if (item.ToString() == lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text)\r
180                             drp_subtitleTracks.SelectedIndex = c;\r
181                         c++;\r
182                     }\r
183                     drp_subtitleTracks.SelectedItem = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1];\r
184 \r
185                     check_forced.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
186                     check_burned.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
187                     check_default.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
188 \r
189                     SubTitlesGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
190                     SRTGroup.Text = "Selected Track: None";\r
191                 }\r
192             }\r
193             else\r
194             {\r
195                 SubTitlesGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
196                 SRTGroup.Text = "Selected Track: None (Click \"Add External SRT\" to add) ";\r
197             }\r
198         }\r
199 \r
200         // Bitmap / CC Controls\r
201         private void drp_subtitleTracks_SelectedIndexChanged(object sender, EventArgs e)\r
202         {\r
203             // Update an item in the  list if required.\r
204             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
205             {\r
206                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = drp_subtitleTracks.SelectedItem.ToString();\r
207                 lv_subList.Select();\r
208             }\r
209         }\r
210         private void check_forced_CheckedChanged(object sender, EventArgs e)\r
211         {\r
212             // Update an item in the  list if required.\r
213             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
214             {\r
215                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text = check_forced.Checked ? "Yes" : "No";\r
216                 lv_subList.Select();\r
217             }\r
218         }\r
219         private void check_burned_CheckedChanged(object sender, EventArgs e)\r
220         {\r
221             // Update an item in the  list if required.\r
222             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
223             {\r
224                 if (check_burned.Checked) // Make sure we only have 1 burned track\r
225                     setNoBurned();\r
226 \r
227                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text = check_burned.Checked ? "Yes" : "No";\r
228                 lv_subList.Select();\r
229             }\r
230         }\r
231         private void check_default_CheckedChanged(object sender, EventArgs e)\r
232         {\r
233             // Update an item in the  list if required.\r
234             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
235             {\r
236                 if (check_default.Checked) // Make sure we only have 1 default track\r
237                     setNoDefault();\r
238 \r
239                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default.Checked ? "Yes" : "No";\r
240                 lv_subList.Select();\r
241             }\r
242         }\r
243         private void check_default_srt_CheckedChanged(object sender, EventArgs e)\r
244         {\r
245             // Update an item in the  list if required.\r
246             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
247             {\r
248                 if (check_default_srt.Checked) // Make sure we only have 1 default track\r
249                     setNoDefault();\r
250 \r
251                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default_srt.Checked ? "Yes" : "No";\r
252                 lv_subList.Select();\r
253             }\r
254         }\r
255 \r
256         // SRT Controls\r
257         private void srt_offset_ValueChanged(object sender, EventArgs e)\r
258         {\r
259             // Update an item in the  list if required.\r
260             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
261             {\r
262                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text = srt_offset.Value.ToString();\r
263                 lv_subList.Select();\r
264             }\r
265         }\r
266         private void srt_charcode_SelectedIndexChanged(object sender, EventArgs e)\r
267         {\r
268             // Update an item in the  list if required.\r
269             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
270             {\r
271                 string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
272 \r
273                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = trackData[0].Trim() + ", (" + srt_charcode.SelectedItem + ")";\r
274                 lv_subList.Select();\r
275             }\r
276         }\r
277         private void srt_lang_SelectedIndexChanged(object sender, EventArgs e)\r
278         {\r
279             // Update an item in the  list if required.\r
280             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
281             {\r
282                 string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
283                 string charCode = trackData[1].Replace("(", "").Replace(")", "").Trim();\r
284 \r
285                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = srt_lang.SelectedItem + ", (" + charCode + ")";\r
286                 lv_subList.Select();\r
287             }\r
288         }\r
289         private void srt_browse_Click(object sender, EventArgs e)\r
290         {\r
291             openFileDialog.ShowDialog();\r
292 \r
293             // Update an item in the  list if required.\r
294             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
295             {\r
296                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[5].Text = openFileDialog.FileName;\r
297                 lv_subList.Select();\r
298             }\r
299         }\r
300 \r
301         // Right Click Menu\r
302         private void mnu_moveup_Click(object sender, EventArgs e)\r
303         {\r
304             if (lv_subList.SelectedIndices.Count != 0)\r
305             {\r
306                 ListViewItem item = lv_subList.SelectedItems[0];\r
307                 int index = item.Index;\r
308                 index--;\r
309 \r
310                 if (lv_subList.Items.Count > index && index >= 0)\r
311                 {\r
312                     lv_subList.Items.Remove(item);\r
313                     lv_subList.Items.Insert(index, item);\r
314                     item.Selected = true;\r
315                     lv_subList.Focus();\r
316                 }\r
317             }\r
318         }\r
319         private void mnu_movedown_Click(object sender, EventArgs e)\r
320         {\r
321             if (lv_subList.SelectedIndices.Count != 0)\r
322             {\r
323                 ListViewItem item = lv_subList.SelectedItems[0];\r
324                 int index = item.Index;\r
325                 index++;\r
326 \r
327                 if (index < lv_subList.Items.Count)\r
328                 {\r
329                     lv_subList.Items.Remove(item);\r
330                     lv_subList.Items.Insert(index, item);\r
331                     item.Selected = true;\r
332                     lv_subList.Focus();\r
333                 }\r
334             }\r
335         }\r
336         private void mnu_remove_Click(object sender, EventArgs e)\r
337         {\r
338             removeTrack();\r
339         }\r
340 \r
341         // Functions\r
342         private void setNoDefault()\r
343         {\r
344             foreach (ListViewItem item in lv_subList.Items)\r
345             {\r
346                 if (item.SubItems[4].Text == "Yes")\r
347                     item.SubItems[4].Text = "No";\r
348             }\r
349         }\r
350         private void setNoBurned()\r
351         {\r
352             foreach (ListViewItem item in lv_subList.Items)\r
353             {\r
354                 if (item.SubItems[3].Text == "Yes")\r
355                     item.SubItems[3].Text = "No";\r
356             }\r
357         }\r
358         private void removeTrack()\r
359         {\r
360             // Remove the Item and reselect the control if the following conditions are met.\r
361             if (lv_subList.SelectedItems.Count != 0)\r
362             {\r
363                 // Record the current selected index.\r
364                 int currentPosition = lv_subList.SelectedIndices[0];\r
365 \r
366                 lv_subList.Items.RemoveAt(lv_subList.SelectedIndices[0]);\r
367 \r
368                 // Now reslect the correct item and give focus to the list.\r
369                 if (lv_subList.Items.Count != 0)\r
370                 {\r
371                     if (currentPosition <= (lv_subList.Items.Count - 1))\r
372                         lv_subList.Items[currentPosition].Selected = true;\r
373                     else if (currentPosition > (lv_subList.Items.Count - 1))\r
374                         lv_subList.Items[lv_subList.Items.Count - 1].Selected = true;\r
375 \r
376                     lv_subList.Select();\r
377                 }\r
378 \r
379                 // Regenerate the ID numers\r
380                 reGenerateListIDs();\r
381             }\r
382         }\r
383 \r
384         // Helper Functions\r
385         private int getNewID()\r
386         {\r
387             return lv_subList.Items.Count + 1;\r
388         }\r
389         private void reGenerateListIDs()\r
390         {\r
391             int i = 1;\r
392             foreach (ListViewItem item in lv_subList.Items)\r
393             {\r
394                 item.SubItems[0].Text = i.ToString();\r
395                 i++;\r
396             }\r
397         }\r
398 \r
399     }\r
400 }\r