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