OSDN Git Service

9358a79421d8550417726b710823434ad915a83d
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / Subtitles.cs
1 using System;\r
2 using System.Windows.Forms;\r
3 \r
4 namespace Handbrake.Controls\r
5 {\r
6     public partial class Subtitles : UserControl\r
7     {\r
8 \r
9         public Subtitles()\r
10         {\r
11             InitializeComponent();\r
12 \r
13         }\r
14 \r
15         private int fileContainer;\r
16         public void setContainer(int value)\r
17         {\r
18             fileContainer = value;\r
19             Boolean trigger = false;\r
20             if (fileContainer != 1)\r
21                 foreach (ListViewItem item in lv_subList.Items)\r
22                 {\r
23                     if (item.SubItems[1].Text.Contains("Bitmap"))\r
24                     {\r
25                         if (trigger)\r
26                             lv_subList.Items.Remove(item);\r
27                         trigger = true;\r
28                     }\r
29                 }\r
30         }\r
31 \r
32         // Controls\r
33         private void btn_addSubTrack_Click(object sender, EventArgs e)\r
34         {\r
35             string forcedVal = "No";\r
36             string burnedVal = "No";\r
37             string defaultSub = "No";\r
38 \r
39             if (check_forced.Checked)\r
40                 forcedVal = "Yes";\r
41 \r
42             if (check_burned.Checked)\r
43             {\r
44                 if (!drp_subtitleTracks.Text.Contains("Text"))\r
45                 {\r
46                     burnedVal = "Yes";\r
47                     setNoBurned();\r
48                 }\r
49             }\r
50 \r
51             if (check_default.Checked)\r
52             {\r
53                 defaultSub = "Yes";\r
54                 setNoDefault();\r
55             }\r
56 \r
57             Boolean addTrack = true;\r
58             if (fileContainer == 0 || fileContainer == 1)\r
59             {\r
60                 burnedVal = "Yes";  // MP4 must have bitmap subs burned in.\r
61 \r
62                 // Make sure we only have 1 bitmap track.\r
63                 if (drp_subtitleTracks.SelectedItem.ToString().Contains("Bitmap"))\r
64                     foreach (ListViewItem item in lv_subList.Items)\r
65                     {\r
66                         if (item.SubItems[1].Text.Contains("Bitmap"))\r
67                         {\r
68                             MessageBox.Show(this,\r
69                                             "More than one vobsub is not supported in mp4... Your first vobsub track will now be used.",\r
70                                             "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
71                             addTrack = false;\r
72                         }\r
73                     }\r
74             }\r
75 \r
76             // Add the track if allowed.\r
77             if (addTrack)\r
78             {\r
79                 ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
80 \r
81                 newTrack.SubItems.Add(drp_subtitleTracks.SelectedItem.ToString());\r
82                 newTrack.SubItems.Add(forcedVal);\r
83                 newTrack.SubItems.Add(burnedVal);\r
84                 newTrack.SubItems.Add(defaultSub);\r
85 \r
86                 lv_subList.Items.Add(newTrack);\r
87             }\r
88         }\r
89         private void btn_RemoveSubTrack_Click(object sender, EventArgs e)\r
90         {\r
91             removeTrack();\r
92         }\r
93         private void lb_subList_SelectedIndexChanged(object sender, EventArgs e)\r
94         {\r
95             // Set the dropdown controls based on the selected item in the List.\r
96             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
97             {\r
98                 // Reset the checkboxes\r
99                 check_forced.CheckState = CheckState.Unchecked;\r
100                 check_burned.CheckState = CheckState.Unchecked;\r
101                 check_default.CheckState = CheckState.Unchecked;\r
102 \r
103                 // Setup the controls\r
104                 int c = 0;\r
105                 foreach (var item in drp_subtitleTracks.Items)\r
106                 {\r
107                     if (item.ToString() == lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text)\r
108                         drp_subtitleTracks.SelectedIndex = c;\r
109                     c++;\r
110                 }\r
111                 drp_subtitleTracks.SelectedItem = lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1];\r
112 \r
113                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text == "Yes")\r
114                     check_forced.CheckState = CheckState.Checked;\r
115 \r
116                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text == "Yes")\r
117                     check_burned.CheckState = CheckState.Checked;\r
118 \r
119                 if (lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text == "Yes")\r
120                     check_default.CheckState = CheckState.Checked;\r
121 \r
122                 AudioTrackGroup.Text = "Selected Track: " + lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[0].Text;\r
123             }\r
124             else\r
125                 AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
126         }\r
127 \r
128         private void drp_subtitleTracks_SelectedIndexChanged(object sender, EventArgs e)\r
129         {\r
130             // Update an item in the  list if required.\r
131             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
132             {\r
133                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[1].Text = drp_subtitleTracks.SelectedItem.ToString();\r
134                 lv_subList.Select();\r
135             }\r
136         }\r
137         private void check_forced_CheckedChanged(object sender, EventArgs e)\r
138         {\r
139             // Update an item in the  list if required.\r
140             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
141             {\r
142                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[2].Text = check_forced.Checked ? "Yes" : "No";\r
143                 lv_subList.Select();\r
144             }\r
145         }\r
146         private void check_burned_CheckedChanged(object sender, EventArgs e)\r
147         {\r
148             // Update an item in the  list if required.\r
149             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
150             {\r
151                 if (check_burned.Checked) // Make sure we only have 1 burned track\r
152                     setNoBurned();\r
153 \r
154                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[3].Text = check_burned.Checked ? "Yes" : "No";\r
155                 lv_subList.Select();\r
156             }\r
157         }\r
158         private void check_default_CheckedChanged(object sender, EventArgs e)\r
159         {\r
160             // Update an item in the  list if required.\r
161             if (lv_subList.Items.Count != 0 && lv_subList.SelectedIndices.Count != 0)\r
162             {\r
163                 if (check_default.Checked) // Make sure we only have 1 default track\r
164                     setNoDefault();\r
165 \r
166                 lv_subList.Items[lv_subList.SelectedIndices[0]].SubItems[4].Text = check_default.Checked ? "Yes" : "No";\r
167                 lv_subList.Select();\r
168             }\r
169         }\r
170         \r
171         // Right Click Menu\r
172         private void mnu_moveup_Click(object sender, EventArgs e)\r
173         {\r
174             if (lv_subList.SelectedIndices.Count != 0)\r
175             {\r
176                 ListViewItem item = lv_subList.SelectedItems[0];\r
177                 int index = item.Index;\r
178                 index--;\r
179 \r
180                 if (lv_subList.Items.Count > index && index >= 0)\r
181                 {\r
182                     lv_subList.Items.Remove(item);\r
183                     lv_subList.Items.Insert(index, item);\r
184                     item.Selected = true;\r
185                     lv_subList.Focus();\r
186                 }\r
187             }\r
188         }\r
189         private void mnu_movedown_Click(object sender, EventArgs e)\r
190         {\r
191             if (lv_subList.SelectedIndices.Count != 0)\r
192             {\r
193                 ListViewItem item = lv_subList.SelectedItems[0];\r
194                 int index = item.Index;\r
195                 index++;\r
196 \r
197                 if (index < lv_subList.Items.Count)\r
198                 {\r
199                     lv_subList.Items.Remove(item);\r
200                     lv_subList.Items.Insert(index, item);\r
201                     item.Selected = true;\r
202                     lv_subList.Focus();\r
203                 }\r
204             }\r
205         }\r
206         private void mnu_remove_Click(object sender, EventArgs e)\r
207         {\r
208             removeTrack();\r
209         }\r
210 \r
211         // Functions\r
212         private void setNoDefault()\r
213         {\r
214             foreach (ListViewItem item in lv_subList.Items)\r
215             {\r
216                 if (item.SubItems[4].Text == "Yes")\r
217                     item.SubItems[4].Text = "No";\r
218             }\r
219         }\r
220         private void setNoBurned()\r
221         {\r
222             foreach (ListViewItem item in lv_subList.Items)\r
223             {\r
224                 if (item.SubItems[3].Text == "Yes")\r
225                     item.SubItems[3].Text = "No";\r
226             }\r
227         }\r
228         private void removeTrack()\r
229         {\r
230             // Remove the Item and reselect the control if the following conditions are met.\r
231             if (lv_subList.SelectedItems.Count != 0)\r
232             {\r
233                 // Record the current selected index.\r
234                 int currentPosition = lv_subList.SelectedIndices[0];\r
235 \r
236                 lv_subList.Items.RemoveAt(lv_subList.SelectedIndices[0]);\r
237 \r
238                 // Now reslect the correct item and give focus to the list.\r
239                 if (lv_subList.Items.Count != 0)\r
240                 {\r
241                     if (currentPosition <= (lv_subList.Items.Count - 1))\r
242                         lv_subList.Items[currentPosition].Selected = true;\r
243                     else if (currentPosition > (lv_subList.Items.Count - 1))\r
244                         lv_subList.Items[lv_subList.Items.Count - 1].Selected = true;\r
245 \r
246                     lv_subList.Select();\r
247                 }\r
248 \r
249                 // Regenerate the ID numers\r
250                 reGenerateListIDs();\r
251             }\r
252         }\r
253 \r
254         // Helper Functions\r
255         private int getNewID()\r
256         {\r
257             return lv_subList.Items.Count + 1;\r
258         }\r
259         private void reGenerateListIDs()\r
260         {\r
261             int i = 1;\r
262             foreach (ListViewItem item in lv_subList.Items)\r
263             {\r
264                 item.SubItems[0].Text = i.ToString();\r
265                 i++;\r
266             }\r
267         }\r
268     }\r
269 }\r