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