OSDN Git Service

c785cdeb66a51868ecab341f7bf3e34620af0602
[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             string defaultSub = "No";\r
107             if (check_default_srt.Checked)\r
108             {\r
109                 defaultSub = "Yes";\r
110                 setNoDefault();\r
111             }\r
112 \r
113             ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
114 \r
115             newTrack.SubItems.Add(srt_lang.SelectedItem + ", (" + srt_charcode.SelectedItem + ")");\r
116             newTrack.SubItems.Add("No");\r
117             newTrack.SubItems.Add("No");\r
118             newTrack.SubItems.Add(defaultSub);\r
119             if (openFileDialog.FileName != null)\r
120                 newTrack.SubItems.Add(openFileDialog.FileName);\r
121             else\r
122                 newTrack.SubItems.Add("None");\r
123 \r
124             newTrack.SubItems.Add(srt_offset.Value.ToString());\r
125 \r
126             lv_subList.Items.Add(newTrack);\r
127         }\r
128         private void btn_RemoveSubTrack_Click(object sender, EventArgs e)\r
129         {\r
130             removeTrack();\r
131         }\r
132         private void lb_subList_SelectedIndexChanged(object sender, EventArgs e)\r
133         {\r
134             // Set the dropdown controls based on the selected item in the List.\r
135             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
136             {\r
137                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems.Count != 5)  // We have an SRT\r
138                 {\r
139                     string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
140                     string charCode = trackData[1].Replace("(", "").Replace(")", "");\r
141                     srt_lang.SelectedItem = trackData[0];\r
142                     srt_charcode.SelectedItem = charCode.Trim();\r
143 \r
144                     int offsetVal;\r
145                     int.TryParse(lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text, out offsetVal);\r
146                     srt_offset.Value = offsetVal;\r
147 \r
148                     check_default_srt.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
149 \r
150                     SRTGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
151                     SubTitlesGroup.Text = "Selected Track: None";\r
152                 }\r
153                 else  // We have Bitmap/CC\r
154                 {\r
155                     // Setup the controls\r
156                     int c = 0;\r
157                     foreach (var item in drp_subtitleTracks.Items)\r
158                     {\r
159                         if (item.ToString() == lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text)\r
160                             drp_subtitleTracks.SelectedIndex = c;\r
161                         c++;\r
162                     }\r
163                     drp_subtitleTracks.SelectedItem = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1];\r
164 \r
165                     check_forced.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
166                     check_burned.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
167                     check_default.CheckState = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes" ? CheckState.Checked : CheckState.Unchecked;\r
168 \r
169                     SubTitlesGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
170                     SRTGroup.Text = "Selected Track: None";\r
171                 }\r
172             }\r
173             else\r
174             {\r
175                 SubTitlesGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
176                 SRTGroup.Text = "Selected Track: None (Click \"Add External SRT\" to add) ";\r
177             }\r
178         }\r
179 \r
180         // Bitmap / CC Controls\r
181         private void drp_subtitleTracks_SelectedIndexChanged(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[1].Text = drp_subtitleTracks.SelectedItem.ToString();\r
187                 lv_subList.Select();\r
188             }\r
189         }\r
190         private void check_forced_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                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text = check_forced.Checked ? "Yes" : "No";\r
196                 lv_subList.Select();\r
197             }\r
198         }\r
199         private void check_burned_CheckedChanged(object sender, EventArgs e)\r
200         {\r
201             // Update an item in the  list if required.\r
202             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
203             {\r
204                 if (check_burned.Checked) // Make sure we only have 1 burned track\r
205                     setNoBurned();\r
206 \r
207                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text = check_burned.Checked ? "Yes" : "No";\r
208                 lv_subList.Select();\r
209             }\r
210         }\r
211         private void check_default_CheckedChanged(object sender, EventArgs e)\r
212         {\r
213             // Update an item in the  list if required.\r
214             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
215             {\r
216                 if (check_default.Checked) // Make sure we only have 1 default track\r
217                     setNoDefault();\r
218 \r
219                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default.Checked ? "Yes" : "No";\r
220                 lv_subList.Select();\r
221             }\r
222         }\r
223         private void check_default_srt_CheckedChanged(object sender, EventArgs e)\r
224         {\r
225             // Update an item in the  list if required.\r
226             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
227             {\r
228                 if (check_default_srt.Checked) // Make sure we only have 1 default track\r
229                     setNoDefault();\r
230 \r
231                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default_srt.Checked ? "Yes" : "No";\r
232                 lv_subList.Select();\r
233             }\r
234         }\r
235 \r
236         // SRT Controls\r
237         private void srt_offset_ValueChanged(object sender, EventArgs e)\r
238         {\r
239             // Update an item in the  list if required.\r
240             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
241             {\r
242                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[6].Text = srt_offset.Value.ToString();\r
243                 lv_subList.Select();\r
244             }\r
245         }\r
246         private void srt_charcode_SelectedIndexChanged(object sender, EventArgs e)\r
247         {\r
248             // Update an item in the  list if required.\r
249             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
250             {\r
251                 string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
252 \r
253                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = trackData[0].Trim() + ", (" + srt_charcode.SelectedItem + ")";\r
254                 lv_subList.Select();\r
255             }\r
256         }\r
257         private void srt_lang_SelectedIndexChanged(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                 string[] trackData = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text.Split(',');\r
263                 string charCode = trackData[1].Replace("(", "").Replace(")", "").Trim();\r
264 \r
265                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = srt_lang.SelectedItem + ", (" + charCode + ")";\r
266                 lv_subList.Select();\r
267             }\r
268         }\r
269         private void srt_browse_Click(object sender, EventArgs e)\r
270         {\r
271             openFileDialog.ShowDialog();\r
272 \r
273             // Update an item in the  list if required.\r
274             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
275             {\r
276                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[5].Text = openFileDialog.FileName;\r
277                 lv_subList.Select();\r
278             }\r
279         }\r
280 \r
281         // Right Click Menu\r
282         private void mnu_moveup_Click(object sender, EventArgs e)\r
283         {\r
284             if (lv_subList.SelectedIndices.Count != 0)\r
285             {\r
286                 ListViewItem item = lv_subList.SelectedItems[0];\r
287                 int index = item.Index;\r
288                 index--;\r
289 \r
290                 if (lv_subList.Items.Count > index && index >= 0)\r
291                 {\r
292                     lv_subList.Items.Remove(item);\r
293                     lv_subList.Items.Insert(index, item);\r
294                     item.Selected = true;\r
295                     lv_subList.Focus();\r
296                 }\r
297             }\r
298         }\r
299         private void mnu_movedown_Click(object sender, EventArgs e)\r
300         {\r
301             if (lv_subList.SelectedIndices.Count != 0)\r
302             {\r
303                 ListViewItem item = lv_subList.SelectedItems[0];\r
304                 int index = item.Index;\r
305                 index++;\r
306 \r
307                 if (index < lv_subList.Items.Count)\r
308                 {\r
309                     lv_subList.Items.Remove(item);\r
310                     lv_subList.Items.Insert(index, item);\r
311                     item.Selected = true;\r
312                     lv_subList.Focus();\r
313                 }\r
314             }\r
315         }\r
316         private void mnu_remove_Click(object sender, EventArgs e)\r
317         {\r
318             removeTrack();\r
319         }\r
320 \r
321         // Functions\r
322         private void setNoDefault()\r
323         {\r
324             foreach (ListViewItem item in lv_subList.Items)\r
325             {\r
326                 if (item.SubItems[4].Text == "Yes")\r
327                     item.SubItems[4].Text = "No";\r
328             }\r
329         }\r
330         private void setNoBurned()\r
331         {\r
332             foreach (ListViewItem item in lv_subList.Items)\r
333             {\r
334                 if (item.SubItems[3].Text == "Yes")\r
335                     item.SubItems[3].Text = "No";\r
336             }\r
337         }\r
338         private void removeTrack()\r
339         {\r
340             // Remove the Item and reselect the control if the following conditions are met.\r
341             if (lv_subList.SelectedItems.Count != 0)\r
342             {\r
343                 // Record the current selected index.\r
344                 int currentPosition = lv_subList.SelectedIndices[0];\r
345 \r
346                 lv_subList.Items.RemoveAt(lv_subList.SelectedIndices[0]);\r
347 \r
348                 // Now reslect the correct item and give focus to the list.\r
349                 if (lv_subList.Items.Count != 0)\r
350                 {\r
351                     if (currentPosition <= (lv_subList.Items.Count - 1))\r
352                         lv_subList.Items[currentPosition].Selected = true;\r
353                     else if (currentPosition > (lv_subList.Items.Count - 1))\r
354                         lv_subList.Items[lv_subList.Items.Count - 1].Selected = true;\r
355 \r
356                     lv_subList.Select();\r
357                 }\r
358 \r
359                 // Regenerate the ID numers\r
360                 reGenerateListIDs();\r
361             }\r
362         }\r
363 \r
364         // Helper Functions\r
365         private int getNewID()\r
366         {\r
367             return lv_subList.Items.Count + 1;\r
368         }\r
369         private void reGenerateListIDs()\r
370         {\r
371             int i = 1;\r
372             foreach (ListViewItem item in lv_subList.Items)\r
373             {\r
374                 item.SubItems[0].Text = i.ToString();\r
375                 i++;\r
376             }\r
377         }\r
378 \r
379     }\r
380 }\r