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