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             removeAudioTrack();\r
141         }\r
142 \r
143         // Audio List Menu\r
144         private void audioList_moveup_Click(object sender, EventArgs e)\r
145         {\r
146             if (lv_audioList.SelectedIndices.Count != 0)\r
147             {\r
148                 ListViewItem item = lv_audioList.SelectedItems[0];\r
149                 int index = item.Index;\r
150                 index--;\r
151 \r
152                 if (lv_audioList.Items.Count > index && index >= 0)\r
153                 {\r
154                     lv_audioList.Items.Remove(item);\r
155                     lv_audioList.Items.Insert(index, item);\r
156                     item.Selected = true;\r
157                     lv_audioList.Focus();\r
158                 }\r
159             }\r
160         }\r
161         private void audioList_movedown_Click(object sender, EventArgs e)\r
162         {\r
163             if (lv_audioList.SelectedIndices.Count != 0)\r
164             {\r
165                 ListViewItem item = lv_audioList.SelectedItems[0];\r
166                 int index = item.Index;\r
167                 index++;\r
168 \r
169                 if (index < lv_audioList.Items.Count)\r
170                 {\r
171                     lv_audioList.Items.Remove(item);\r
172                     lv_audioList.Items.Insert(index, item);\r
173                     item.Selected = true;\r
174                     lv_audioList.Focus();\r
175                 }\r
176             }\r
177         }\r
178         private void audioList_remove_Click(object sender, EventArgs e)\r
179         {\r
180             removeAudioTrack();\r
181         }\r
182         private void removeAudioTrack()\r
183         {\r
184             // Remove the Item and reselect the control if the following conditions are met.\r
185             if (lv_audioList.SelectedItems.Count != 0)\r
186             {\r
187                 // Record the current selected index.\r
188                 int currentPosition = lv_audioList.SelectedIndices[0];\r
189 \r
190                 lv_audioList.Items.RemoveAt(lv_audioList.SelectedIndices[0]);\r
191 \r
192                 // Now reslect the correct item and give focus to the audio list.\r
193                 if (lv_audioList.Items.Count != 0)\r
194                 {\r
195                     if (currentPosition <= (lv_audioList.Items.Count - 1))\r
196                         lv_audioList.Items[currentPosition].Selected = true;\r
197                     else if (currentPosition > (lv_audioList.Items.Count - 1))\r
198                         lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;\r
199 \r
200                     lv_audioList.Select();\r
201                 }\r
202                 // Regenerate the ID numers\r
203                 reGenerateListIDs();\r
204             }\r
205         }\r
206 \r
207         // Public Functions\r
208         public void setTrackList(Parsing.Title selectedTitle)\r
209         {\r
210             drp_track1Audio.Items.Clear();\r
211             drp_track1Audio.Items.Add("Automatic");\r
212             drp_track1Audio.Items.Add("None");\r
213             drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
214             drp_track1Audio.SelectedIndex = 0;\r
215         }\r
216         public ListView getAudioPanel()\r
217         {\r
218             return lv_audioList;\r
219         }\r
220         public void setAudioByContainer(String path)\r
221         {\r
222             if ((path.Contains("MP4")) || (path.Contains("M4V")))\r
223             {\r
224                 string oldval = drp_audenc_1.Text;\r
225                 drp_audenc_1.Items.Clear();\r
226                 drp_audenc_1.Items.Add("AAC (faac)");\r
227                 drp_audenc_1.Items.Add("AC3 Passthru");\r
228                 if ((oldval != "AAC (faac)") && (oldval != "AC3 Passthru"))\r
229                     drp_audenc_1.SelectedIndex = 0;\r
230 \r
231             }\r
232             else if (path.Contains("MKV"))\r
233             {\r
234                 drp_audenc_1.Items.Clear();\r
235                 drp_audenc_1.Items.Add("AAC (faac)");\r
236                 drp_audenc_1.Items.Add("MP3 (lame)");\r
237                 drp_audenc_1.Items.Add("AC3 Passthru");\r
238                 drp_audenc_1.Items.Add("DTS Passthru");\r
239                 drp_audenc_1.Items.Add("Vorbis (vorbis)");\r
240 \r
241                 if (drp_audenc_1.Text == string.Empty)\r
242                     drp_audenc_1.SelectedIndex = 0;\r
243             }\r
244 \r
245             // Make sure the table is updated with new audio codecs\r
246             foreach (ListViewItem row in lv_audioList.Items)\r
247             {\r
248                 if (!drp_audenc_1.Items.Contains(row.SubItems[2].Text))\r
249                     row.SubItems[2].Text = drp_audenc_1.Items[0].ToString();\r
250             }\r
251         }\r
252         public void addTrackForPreset(ListViewItem item)\r
253         {\r
254             lv_audioList.Items.Add(item);\r
255         }\r
256         public void clearAudioList()\r
257         {\r
258             lv_audioList.Items.Clear();\r
259         }\r
260         public int getNewID()\r
261         {\r
262             return lv_audioList.Items.Count + 1;\r
263         }\r
264 \r
265         // Helper Functions \r
266         private void reGenerateListIDs()\r
267         {\r
268             int i = 1;\r
269             foreach (ListViewItem item in lv_audioList.Items)\r
270             {\r
271                 item.SubItems[0].Text = i.ToString();\r
272                 i++;\r
273             }\r
274         }\r
275         private static void setBitrateSelections384(ComboBox dropDown)\r
276         {\r
277             dropDown.Items.Clear();\r
278             dropDown.Items.Add("32");\r
279             dropDown.Items.Add("40");\r
280             dropDown.Items.Add("48");\r
281             dropDown.Items.Add("56");\r
282             dropDown.Items.Add("64");\r
283             dropDown.Items.Add("80");\r
284             dropDown.Items.Add("86");\r
285             dropDown.Items.Add("112");\r
286             dropDown.Items.Add("128");\r
287             dropDown.Items.Add("160");\r
288             dropDown.Items.Add("192");\r
289             dropDown.Items.Add("224");\r
290             dropDown.Items.Add("256");\r
291             dropDown.Items.Add("320");\r
292             dropDown.Items.Add("384");\r
293         }\r
294         private static void setBitrateSelections320(ComboBox dropDown)\r
295         {\r
296             dropDown.Items.Clear();\r
297             dropDown.Items.Add("32");\r
298             dropDown.Items.Add("40");\r
299             dropDown.Items.Add("48");\r
300             dropDown.Items.Add("56");\r
301             dropDown.Items.Add("64");\r
302             dropDown.Items.Add("80");\r
303             dropDown.Items.Add("86");\r
304             dropDown.Items.Add("112");\r
305             dropDown.Items.Add("128");\r
306             dropDown.Items.Add("160");\r
307             dropDown.Items.Add("192");\r
308             dropDown.Items.Add("224");\r
309             dropDown.Items.Add("256");\r
310             dropDown.Items.Add("320");\r
311         }\r
312         private static void setBitrateSelections160(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         }\r
326         private static void setMixDownAllOptions(ComboBox dropdown)\r
327         {\r
328             dropdown.Items.Clear();\r
329             dropdown.Items.Add("Automatic");\r
330             dropdown.Items.Add("Mono");\r
331             dropdown.Items.Add("Stereo");\r
332             dropdown.Items.Add("Dolby Surround");\r
333             dropdown.Items.Add("Dolby Pro Logic II");\r
334             dropdown.Items.Add("6 Channel Discrete");\r
335         }\r
336         private static void setMixDownNotAAC(ComboBox dropdown)\r
337         {\r
338             dropdown.Items.Clear();\r
339             dropdown.Items.Add("Automatic");\r
340             dropdown.Items.Add("Stereo");\r
341             dropdown.Items.Add("Dolby Surround");\r
342             dropdown.Items.Add("Dolby Pro Logic II");\r
343         }\r
344         private void lv_audioList_SelectedIndexChanged(object sender, EventArgs e)\r
345         {\r
346             // Set the dropdown controls based on the selected item in the Audio List.\r
347             if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)\r
348             {\r
349                 drp_track1Audio.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[1].Text;\r
350                 drp_audenc_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[2].Text;\r
351                 drp_audmix_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[3].Text;\r
352                 drp_audsr_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[4].Text;\r
353                 drp_audbit_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[5].Text;\r
354                 double drcValue; int drcCalculated;\r
355                 double.TryParse(lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[6].Text, out drcValue);\r
356                 if (drcValue == 0) drcCalculated = 0;\r
357                 else\r
358                     drcValue = ((drcValue * 10) + 1) - 10;\r
359                 int.TryParse(drcValue.ToString(), out drcCalculated);\r
360                 tb_drc.Value = drcCalculated;\r
361 \r
362                 AudioTrackGroup.Text = "Selected Track: " + lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[0].Text;\r
363             }\r
364             else\r
365                 AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
366         }\r
367 \r
368     }\r
369 }\r