OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / AudioPanel.cs
1 /*  AudioPanel.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Windows.Forms;\r
9 \r
10 namespace Handbrake.Controls\r
11 {\r
12     public partial class AudioPanel : UserControl\r
13     {\r
14         public AudioPanel()\r
15         {\r
16             InitializeComponent();\r
17         }\r
18         \r
19         // Audio Track Options\r
20         private void drp_track1Audio_SelectedIndexChanged(object sender, EventArgs e)\r
21         {\r
22             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
23             {\r
24                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[1].Text = drp_track1Audio.Text;\r
25                 lv_audioList.Select();\r
26             }\r
27 \r
28         }\r
29         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
30         {\r
31             if (drp_audenc_1.Text.Contains("AC3") || drp_audenc_1.Text.Contains("DTS"))\r
32             {\r
33                 drp_audmix_1.Enabled = false;\r
34                 drp_audbit_1.Enabled = false;\r
35                 drp_audsr_1.Enabled = false;\r
36 \r
37                 drp_audmix_1.SelectedIndex = 0;\r
38                 drp_audbit_1.SelectedIndex = 0;\r
39                 drp_audsr_1.SelectedIndex = 0;\r
40             }\r
41             else\r
42             {\r
43                 drp_audmix_1.Enabled = true;\r
44                 drp_audbit_1.Enabled = true;\r
45                 drp_audsr_1.Enabled = true;\r
46 \r
47                 drp_audmix_1.Text = "Automatic";\r
48                 drp_audbit_1.Text = "160";\r
49                 drp_audsr_1.Text = "Auto";\r
50             }\r
51 \r
52             if (drp_audenc_1.Text.Contains("AAC"))\r
53             {\r
54                 setMixDownAllOptions(drp_audmix_1);\r
55                 setBitrateSelections160(drp_audbit_1);\r
56             }\r
57             else\r
58             {\r
59                 setMixDownNotAAC(drp_audmix_1);\r
60                 setBitrateSelections320(drp_audbit_1);\r
61             }\r
62 \r
63             // Update an item in the Audio list if required.\r
64             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
65             {\r
66                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[2].Text = drp_audenc_1.Text;\r
67                 lv_audioList.Select();\r
68             }\r
69         }\r
70         private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)\r
71         {\r
72             if ((drp_audenc_1.Text.Contains("AAC")) && (drp_audmix_1.Text == "6 Channel Discrete"))\r
73                 setBitrateSelections384(drp_audbit_1);\r
74             else if ((drp_audenc_1.Text.Contains("AAC")) && (drp_audmix_1.Text != "6 Channel Discrete"))\r
75                 setBitrateSelections160(drp_audbit_1); drp_audbit_1.Text = "160";\r
76 \r
77             // Update an item in the Audio list if required.\r
78             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
79             {\r
80                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[3].Text = drp_audmix_1.Text;\r
81                 lv_audioList.Select();\r
82             }\r
83         }\r
84         private void drp_audsr_1_SelectedIndexChanged(object sender, EventArgs e)\r
85         {\r
86             // Update an item in the Audio list if required.\r
87             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
88             {\r
89                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[4].Text = drp_audsr_1.Text;\r
90                 lv_audioList.Select();\r
91             }\r
92         }\r
93         private void drp_audbit_1_SelectedIndexChanged(object sender, EventArgs e)\r
94         {\r
95             // Update an item in the Audio list if required.\r
96             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
97             {\r
98                 if (drp_audenc_1.Text.Contains("AC3"))\r
99                     drp_audbit_1.Text = "Auto";\r
100                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[5].Text = drp_audbit_1.Text;\r
101                 lv_audioList.Select();\r
102             }\r
103         }\r
104         private void tb_drc_Scroll(object sender, EventArgs e)\r
105         {\r
106             double value;\r
107             if (tb_drc.Value == 0) value = 0;\r
108             else\r
109                 value = ((tb_drc.Value - 1) / 10.0) + 1;\r
110 \r
111             lbl_drc.Text = value.ToString();\r
112 \r
113             // Update an item in the Audio list if required.\r
114             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
115             {\r
116                 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[6].Text = lbl_drc.Text;\r
117                 lv_audioList.Select();\r
118             }\r
119         }\r
120 \r
121         // Track Controls\r
122         private void btn_addAudioTrack_Click(object sender, EventArgs e)\r
123         {\r
124             // Create a new row for the Audio list based on the currently selected items in the dropdown.\r
125             ListViewItem newTrack = new ListViewItem(getNewID().ToString());\r
126             newTrack.SubItems.Add(drp_track1Audio.Text);\r
127             newTrack.SubItems.Add(drp_audenc_1.Text);\r
128             newTrack.SubItems.Add(drp_audmix_1.Text);\r
129             newTrack.SubItems.Add(drp_audsr_1.Text);\r
130             newTrack.SubItems.Add(drp_audbit_1.Text);\r
131             newTrack.SubItems.Add(lbl_drc.Text);\r
132             lv_audioList.Items.Add(newTrack);\r
133 \r
134             // Select the newly added track and select the control       \r
135             lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;\r
136             lv_audioList.Select();\r
137         }\r
138         private void btn_RemoveAudioTrack_Click(object sender, EventArgs e)\r
139         {\r
140             // Remove the Item and reselect the control if the following conditions are met.\r
141             if (lv_audioList.SelectedItems.Count != 0)\r
142             {\r
143                 // Record the current selected index.\r
144                 int currentPosition = lv_audioList.SelectedIndices[0];\r
145 \r
146                 lv_audioList.Items.RemoveAt(lv_audioList.SelectedIndices[0]);\r
147 \r
148                 // Now reslect the correct item and give focus to the audio list.\r
149                 if (lv_audioList.Items.Count != 0)\r
150                 {\r
151                     if (currentPosition <= (lv_audioList.Items.Count - 1))\r
152                         lv_audioList.Items[currentPosition].Selected = true;\r
153                     else if (currentPosition > (lv_audioList.Items.Count - 1))\r
154                         lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;\r
155 \r
156                     lv_audioList.Select();\r
157                 }\r
158                 // Regenerate the ID numers\r
159                 reGenerateListIDs();\r
160             }\r
161         }\r
162 \r
163         // Audio List Menu\r
164         private void audioList_moveup_Click(object sender, EventArgs e)\r
165         {\r
166             if (lv_audioList.SelectedIndices.Count != 0)\r
167             {\r
168                 ListViewItem item = lv_audioList.SelectedItems[0];\r
169                 int index = item.Index;\r
170                 index--;\r
171 \r
172                 if (lv_audioList.Items.Count > index && index >= 0)\r
173                 {\r
174                     lv_audioList.Items.Remove(item);\r
175                     lv_audioList.Items.Insert(index, item);\r
176                     item.Selected = true;\r
177                     lv_audioList.Focus();\r
178                 }\r
179             }\r
180         }\r
181         private void audioList_movedown_Click(object sender, EventArgs e)\r
182         {\r
183             if (lv_audioList.SelectedIndices.Count != 0)\r
184             {\r
185                 ListViewItem item = lv_audioList.SelectedItems[0];\r
186                 int index = item.Index;\r
187                 index++;\r
188 \r
189                 if (index < lv_audioList.Items.Count)\r
190                 {\r
191                     lv_audioList.Items.Remove(item);\r
192                     lv_audioList.Items.Insert(index, item);\r
193                     item.Selected = true;\r
194                     lv_audioList.Focus();\r
195                 }\r
196             }\r
197         }\r
198         private void audioList_remove_Click(object sender, EventArgs e)\r
199         {\r
200             removeAudioTrack();\r
201         }\r
202         private void removeAudioTrack()\r
203         {\r
204             // Remove the Item and reselect the control if the following conditions are met.\r
205             if (lv_audioList.SelectedItems.Count != 0)\r
206             {\r
207                 // Record the current selected index.\r
208                 int currentPosition = lv_audioList.SelectedIndices[0];\r
209 \r
210                 lv_audioList.Items.RemoveAt(lv_audioList.SelectedIndices[0]);\r
211 \r
212                 // Now reslect the correct item and give focus to the audio list.\r
213                 if (lv_audioList.Items.Count != 0)\r
214                 {\r
215                     if (currentPosition <= (lv_audioList.Items.Count - 1))\r
216                         lv_audioList.Items[currentPosition].Selected = true;\r
217                     else if (currentPosition > (lv_audioList.Items.Count - 1))\r
218                         lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;\r
219 \r
220                     lv_audioList.Select();\r
221                 }\r
222             }\r
223         }\r
224 \r
225         // Public Functions\r
226         public void setTrackList(Parsing.Title selectedTitle)\r
227         {\r
228             drp_track1Audio.Items.Clear();\r
229             drp_track1Audio.Items.Add("Automatic");\r
230             drp_track1Audio.Items.Add("None");\r
231             drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
232             drp_track1Audio.SelectedIndex = 0;\r
233         }\r
234         public ListView getAudioPanel()\r
235         {\r
236             return lv_audioList;\r
237         }\r
238         public void setAudioByContainer(String path)\r
239         {\r
240             if ((path.Contains("MP4")) || (path.Contains("M4V")))\r
241             {\r
242                 string oldval = drp_audenc_1.Text;\r
243                 drp_audenc_1.Items.Clear();\r
244                 drp_audenc_1.Items.Add("AAC (faac)");\r
245                 drp_audenc_1.Items.Add("AC3 Passthru");\r
246                 if ((oldval != "AAC (faac)") && (oldval != "AC3 Passthru"))\r
247                     drp_audenc_1.SelectedIndex = 0;\r
248 \r
249             }\r
250             else if (path.Contains("MKV"))\r
251             {\r
252                 drp_audenc_1.Items.Clear();\r
253                 drp_audenc_1.Items.Add("AAC (faac)");\r
254                 drp_audenc_1.Items.Add("MP3 (lame)");\r
255                 drp_audenc_1.Items.Add("AC3 Passthru");\r
256                 drp_audenc_1.Items.Add("DTS Passthru");\r
257                 drp_audenc_1.Items.Add("Vorbis (vorbis)");\r
258 \r
259                 if (drp_audenc_1.Text == string.Empty)\r
260                     drp_audenc_1.SelectedIndex = 0;\r
261             }\r
262 \r
263             // Make sure the table is updated with new audio codecs\r
264             foreach (ListViewItem row in lv_audioList.Items)\r
265             {\r
266                 if (!drp_audenc_1.Items.Contains(row.SubItems[2].Text))\r
267                     row.SubItems[2].Text = drp_audenc_1.Items[0].ToString();\r
268             }\r
269         }\r
270         public void addTrackForPreset(ListViewItem item)\r
271         {\r
272             lv_audioList.Items.Add(item);\r
273         }\r
274         public void clearAudioList()\r
275         {\r
276             lv_audioList.Items.Clear();\r
277         }\r
278         public int getNewID()\r
279         {\r
280             return lv_audioList.Items.Count + 1;\r
281         }\r
282 \r
283         // Helper Functions \r
284         private void reGenerateListIDs()\r
285         {\r
286             int i = 1;\r
287             foreach (ListViewItem item in lv_audioList.Items)\r
288             {\r
289                 item.SubItems[0].Text = i.ToString();\r
290                 i++;\r
291             }\r
292         }\r
293         private static void setBitrateSelections384(ComboBox dropDown)\r
294         {\r
295             dropDown.Items.Clear();\r
296             dropDown.Items.Add("32");\r
297             dropDown.Items.Add("40");\r
298             dropDown.Items.Add("48");\r
299             dropDown.Items.Add("56");\r
300             dropDown.Items.Add("64");\r
301             dropDown.Items.Add("80");\r
302             dropDown.Items.Add("86");\r
303             dropDown.Items.Add("112");\r
304             dropDown.Items.Add("128");\r
305             dropDown.Items.Add("160");\r
306             dropDown.Items.Add("192");\r
307             dropDown.Items.Add("224");\r
308             dropDown.Items.Add("256");\r
309             dropDown.Items.Add("320");\r
310             dropDown.Items.Add("384");\r
311         }\r
312         private static void setBitrateSelections320(ComboBox dropDown)\r
313         {\r
314             dropDown.Items.Clear();\r
315             dropDown.Items.Add("32");\r
316             dropDown.Items.Add("40");\r
317             dropDown.Items.Add("48");\r
318             dropDown.Items.Add("56");\r
319             dropDown.Items.Add("64");\r
320             dropDown.Items.Add("80");\r
321             dropDown.Items.Add("86");\r
322             dropDown.Items.Add("112");\r
323             dropDown.Items.Add("128");\r
324             dropDown.Items.Add("160");\r
325             dropDown.Items.Add("192");\r
326             dropDown.Items.Add("224");\r
327             dropDown.Items.Add("256");\r
328             dropDown.Items.Add("320");\r
329         }\r
330         private static void setBitrateSelections160(ComboBox dropDown)\r
331         {\r
332             dropDown.Items.Clear();\r
333             dropDown.Items.Add("32");\r
334             dropDown.Items.Add("40");\r
335             dropDown.Items.Add("48");\r
336             dropDown.Items.Add("56");\r
337             dropDown.Items.Add("64");\r
338             dropDown.Items.Add("80");\r
339             dropDown.Items.Add("86");\r
340             dropDown.Items.Add("112");\r
341             dropDown.Items.Add("128");\r
342             dropDown.Items.Add("160");\r
343         }\r
344         private static void setMixDownAllOptions(ComboBox dropdown)\r
345         {\r
346             dropdown.Items.Clear();\r
347             dropdown.Items.Add("Automatic");\r
348             dropdown.Items.Add("Mono");\r
349             dropdown.Items.Add("Stereo");\r
350             dropdown.Items.Add("Dolby Surround");\r
351             dropdown.Items.Add("Dolby Pro Logic II");\r
352             dropdown.Items.Add("6 Channel Discrete");\r
353         }\r
354         private static void setMixDownNotAAC(ComboBox dropdown)\r
355         {\r
356             dropdown.Items.Clear();\r
357             dropdown.Items.Add("Automatic");\r
358             dropdown.Items.Add("Stereo");\r
359             dropdown.Items.Add("Dolby Surround");\r
360             dropdown.Items.Add("Dolby Pro Logic II");\r
361         }\r
362         private void lv_audioList_SelectedIndexChanged(object sender, EventArgs e)\r
363         {\r
364             // Set the dropdown controls based on the selected item in the Audio List.\r
365             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
366             {\r
367                 drp_track1Audio.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[1].Text;\r
368                 drp_audenc_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[2].Text;\r
369                 drp_audmix_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[3].Text;\r
370                 drp_audsr_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[4].Text;\r
371                 drp_audbit_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[5].Text;\r
372                 double drcValue; int drcCalculated;\r
373                 double.TryParse(lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[6].Text, out drcValue);\r
374                 if (drcValue == 0) drcCalculated = 0;\r
375                 else\r
376                     drcValue = ((drcValue * 10) + 1) - 10;\r
377                 int.TryParse(drcValue.ToString(), out drcCalculated);\r
378                 tb_drc.Value = drcCalculated;\r
379 \r
380                 AudioTrackGroup.Text = "Selected Track: " + lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[0].Text;\r
381             }\r
382             else\r
383                 AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
384         }\r
385 \r
386         \r
387 \r
388     }\r
389 }\r