OSDN Git Service

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