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