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