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