OSDN Git Service

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