OSDN Git Service

bb22f2394bf2e7c7031327e0e303f05bfd80bf25
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain / PresetLoader.cs
1 using System;\r
2 using System.Windows.Forms;\r
3 using System.Drawing;\r
4 \r
5 namespace Handbrake\r
6 {\r
7     class PresetLoader\r
8     {\r
9         /// <summary>\r
10         /// This function takes in a Query which has been parsed by QueryParser and\r
11         /// set's all the GUI widgets correctly.\r
12         /// </summary>\r
13         /// <param name="mainWindow"></param>\r
14         /// <param name="presetQuery">The Parsed CLI Query</param>\r
15         /// <param name="name">Name of the preset</param>\r
16         /// <param name="pictureSettings">Save picture settings in the preset</param>\r
17         public static void presetLoader(frmMain mainWindow, Functions.QueryParser presetQuery, string name, Boolean pictureSettings)\r
18         {\r
19             // ---------------------------\r
20             // Setup the GUI\r
21             // ---------------------------\r
22 \r
23             // Source tab\r
24             #region source\r
25             // Reset some vaules to stock first to prevent errors.\r
26             mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
27 \r
28             // Now load all the new settings onto the main window\r
29             if (presetQuery.Format != null)\r
30             {\r
31                 string destination = mainWindow.text_destination.Text;\r
32                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
33                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
34                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
35                 mainWindow.text_destination.Text = destination;\r
36             }\r
37 \r
38             #endregion\r
39 \r
40             // Destination tab\r
41             #region destination\r
42 \r
43             mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
44 \r
45             if (presetQuery.Format != null)\r
46             {\r
47                 if (presetQuery.Format == "mp4")\r
48                     mainWindow.drop_format.SelectedIndex = 0;\r
49                 else if (presetQuery.Format == "m4v")\r
50                     mainWindow.drop_format.SelectedIndex = 1;\r
51                 else if (presetQuery.Format == "mkv")\r
52                     mainWindow.drop_format.SelectedIndex = 2;\r
53 \r
54                 if (presetQuery.ChapterMarkers && presetQuery.Format == "mp4")\r
55                     mainWindow.drop_format.SelectedIndex = 1;\r
56             }\r
57 \r
58             mainWindow.check_iPodAtom.CheckState = presetQuery.IpodAtom ? CheckState.Checked : CheckState.Unchecked;\r
59 \r
60             mainWindow.check_optimiseMP4.CheckState = presetQuery.OptimizeMP4 ? CheckState.Checked : CheckState.Unchecked;\r
61 \r
62             #endregion\r
63 \r
64             // Picture Settings Tab\r
65             #region Picture\r
66             mainWindow.check_autoCrop.Checked = true;\r
67             if (presetQuery.CropBottom == "0" && presetQuery.CropTop == "0")\r
68                 if (presetQuery.CropLeft == "0" && presetQuery.CropRight == "0")\r
69                     mainWindow.check_customCrop.Checked = true;\r
70 \r
71             mainWindow.text_width.Text = "";\r
72             mainWindow.text_height.Text = "";\r
73 \r
74             if (pictureSettings)\r
75             {\r
76                 if (presetQuery.CropTop != null)\r
77                 {\r
78                     int top, bottom, left, right;\r
79                     int.TryParse(presetQuery.CropTop, out top);\r
80                     int.TryParse(presetQuery.CropBottom, out bottom);\r
81                     int.TryParse(presetQuery.CropLeft, out left);\r
82                     int.TryParse(presetQuery.CropRight, out right);\r
83 \r
84                     mainWindow.check_customCrop.Checked = true;\r
85                     mainWindow.text_top.Value = top;\r
86                     mainWindow.text_bottom.Value = bottom;\r
87                     mainWindow.text_left.Value = left;\r
88                     mainWindow.text_right.Value = right;\r
89                 }\r
90 \r
91                 if (presetQuery.Width != 0)\r
92                     mainWindow.text_width.Text = presetQuery.Width.ToString();\r
93 \r
94                 if (presetQuery.Height != 0)\r
95                     mainWindow.text_height.Text = presetQuery.Height.ToString();\r
96             }\r
97 \r
98             mainWindow.drp_anamorphic.SelectedIndex = presetQuery.Anamorphic ? 1 : 0;\r
99 \r
100             if (presetQuery.LooseAnamorphic)\r
101                 mainWindow.drp_anamorphic.SelectedIndex = 2;\r
102             else\r
103             {\r
104                 if (presetQuery.Anamorphic != true)\r
105                     mainWindow.drp_anamorphic.SelectedIndex = 0;\r
106             }\r
107 \r
108             // Set the public max width and max height varibles in frmMain\r
109             // These are used by the query generator to determine if it should use -X or -w  / -Y or -h\r
110             if (presetQuery.MaxWidth != 0)\r
111             {\r
112                 mainWindow.text_width.Text = presetQuery.MaxWidth.ToString();\r
113                 mainWindow.maxWidth = presetQuery.MaxWidth;\r
114             }\r
115 \r
116             if (presetQuery.MaxHeight != 0)\r
117             {\r
118                 mainWindow.text_height.Text = presetQuery.MaxHeight.ToString();\r
119                 mainWindow.maxHeight = presetQuery.MaxHeight;\r
120             }\r
121 \r
122 \r
123             #endregion\r
124 \r
125             // Filters Tab\r
126             #region Filters\r
127 \r
128             mainWindow.ctl_decomb.setOption(presetQuery.Decomb);\r
129 \r
130             if (mainWindow.ctl_decomb.getDropValue == "Off")\r
131                 mainWindow.ctl_deinterlace.setOption(presetQuery.DeInterlace);\r
132             else\r
133                 mainWindow.ctl_deinterlace.setOption("None"); // Don't want decomb and deinterlace on at the same time\r
134 \r
135             mainWindow.ctl_denoise.setOption(presetQuery.DeNoise);\r
136             mainWindow.ctl_detelecine.setOption(presetQuery.DeTelecine);\r
137 \r
138             if (presetQuery.DeBlock != 0)\r
139             {\r
140                 mainWindow.slider_deblock.Value = presetQuery.DeBlock;\r
141                 mainWindow.lbl_deblockVal.Text = presetQuery.DeBlock.ToString();\r
142             }\r
143             else\r
144             {\r
145                 mainWindow.slider_deblock.Value = 4;\r
146                 mainWindow.lbl_deblockVal.Text = "Off";\r
147             }\r
148             #endregion\r
149 \r
150             // Video Settings Tab\r
151             #region video\r
152             if (presetQuery.AverageVideoBitrate != null)\r
153             {\r
154                 mainWindow.radio_avgBitrate.Checked = true;\r
155                 mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
156             }\r
157             if (presetQuery.VideoTargetSize != null)\r
158             {\r
159                 mainWindow.radio_targetFilesize.Checked = true;\r
160                 mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;\r
161             }\r
162 \r
163             // Quality\r
164             if (presetQuery.VideoQuality != 0)\r
165             {\r
166                 mainWindow.radio_cq.Checked = true;\r
167                 if (presetQuery.VideoEncoder == "H.264 (x264)")\r
168                 {\r
169                     int value;\r
170                     System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");\r
171 \r
172                     double presetValue, x264step;\r
173                     double.TryParse(presetQuery.VideoQuality.ToString(),\r
174                                     System.Globalization.NumberStyles.Number,\r
175                                     culture,\r
176                                     out presetValue);\r
177                     double.TryParse(Properties.Settings.Default.x264cqstep,\r
178                                     System.Globalization.NumberStyles.Number,\r
179                                     culture,\r
180                                     out x264step);\r
181 \r
182                     double x = 51 / x264step;\r
183 \r
184                     double calculated = presetValue / x264step;\r
185                     calculated = x - calculated;\r
186 \r
187                     int.TryParse(calculated.ToString(), out value);\r
188 \r
189                     // This will sometimes occur when the preset was generated \r
190                     // with a different granularity, so, round and try again.\r
191                     if (value == 0)\r
192                     {\r
193                         double val =  Math.Round(calculated, 0);\r
194                         int.TryParse(val.ToString(), out value);\r
195                     }\r
196 \r
197                     mainWindow.slider_videoQuality.Value = value;\r
198                 }\r
199                 else\r
200                 {\r
201                     int presetVal;\r
202                     int.TryParse(presetQuery.VideoQuality.ToString(), out presetVal);\r
203                     mainWindow.slider_videoQuality.Value = presetVal;\r
204                 }\r
205             }\r
206 \r
207             mainWindow.check_2PassEncode.CheckState = presetQuery.TwoPass ? CheckState.Checked : CheckState.Unchecked;\r
208 \r
209             mainWindow.check_grayscale.CheckState = presetQuery.Grayscale ? CheckState.Checked : CheckState.Unchecked;\r
210 \r
211             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
212 \r
213             mainWindow.check_turbo.CheckState = presetQuery.TurboFirstPass ? CheckState.Checked : CheckState.Unchecked;\r
214 \r
215             if (presetQuery.LargeMP4)\r
216                 mainWindow.check_largeFile.CheckState = CheckState.Checked;\r
217             else\r
218             {\r
219                 mainWindow.check_largeFile.CheckState = CheckState.Unchecked;\r
220                 mainWindow.check_largeFile.BackColor = Color.Transparent;\r
221             }\r
222             #endregion\r
223 \r
224             // Chapter Markers Tab\r
225             #region Chapter Markers\r
226 \r
227             if (presetQuery.ChapterMarkers)\r
228             {\r
229                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;\r
230                 mainWindow.Check_ChapterMarkers.Enabled = true;\r
231             }\r
232             else\r
233                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
234 \r
235             #endregion\r
236 \r
237             // Audio Settings Tab\r
238             #region Audio\r
239             // Clear the audio listing\r
240             mainWindow.lv_audioList.Items.Clear();\r
241 \r
242             // Create a new row for the Audio list based on the currently selected items in the dropdown.\r
243             ListViewItem newTrack;\r
244             if (presetQuery.AudioTrack1 != "None")\r
245             {\r
246                 newTrack = new ListViewItem("Automatic");\r
247                 newTrack.SubItems.Add(presetQuery.AudioEncoder1);\r
248                 newTrack.SubItems.Add(presetQuery.AudioTrackMix1);\r
249                 newTrack.SubItems.Add(presetQuery.AudioSamplerate1);\r
250                 newTrack.SubItems.Add(presetQuery.AudioBitrate1);\r
251                 newTrack.SubItems.Add(presetQuery.DRC1.ToString());\r
252                 mainWindow.lv_audioList.Items.Add(newTrack);\r
253             }\r
254 \r
255             if (presetQuery.AudioTrack2 != "None")\r
256             {\r
257                 newTrack = new ListViewItem("Automatic");\r
258                 newTrack.SubItems.Add(presetQuery.AudioEncoder2);\r
259                 newTrack.SubItems.Add(presetQuery.AudioTrackMix2);\r
260                 newTrack.SubItems.Add(presetQuery.AudioSamplerate2);\r
261                 newTrack.SubItems.Add(presetQuery.AudioBitrate2);\r
262                 newTrack.SubItems.Add(presetQuery.DRC2.ToString());\r
263                 mainWindow.lv_audioList.Items.Add(newTrack);\r
264             }\r
265 \r
266             if (presetQuery.AudioTrack3 != "None")\r
267             {\r
268                 newTrack = new ListViewItem("Automatic");\r
269                 newTrack.SubItems.Add(presetQuery.AudioEncoder3);\r
270                 newTrack.SubItems.Add(presetQuery.AudioTrackMix3);\r
271                 newTrack.SubItems.Add(presetQuery.AudioSamplerate3);\r
272                 newTrack.SubItems.Add(presetQuery.AudioBitrate3);\r
273                 newTrack.SubItems.Add(presetQuery.DRC3.ToString());\r
274                 mainWindow.lv_audioList.Items.Add(newTrack);\r
275             }\r
276 \r
277             if (presetQuery.AudioTrack4 != "None")\r
278             {\r
279                 newTrack = new ListViewItem("Automatic");\r
280                 newTrack.SubItems.Add(presetQuery.AudioEncoder4);\r
281                 newTrack.SubItems.Add(presetQuery.AudioTrackMix4);\r
282                 newTrack.SubItems.Add(presetQuery.AudioSamplerate4);\r
283                 newTrack.SubItems.Add(presetQuery.AudioBitrate4);\r
284                 newTrack.SubItems.Add(presetQuery.DRC4.ToString());\r
285                 mainWindow.lv_audioList.Items.Add(newTrack);\r
286             }\r
287 \r
288             // Subtitle Stuff\r
289             mainWindow.drp_subtitle.Text = presetQuery.Subtitles;\r
290 \r
291             if (presetQuery.ForcedSubtitles)\r
292             {\r
293                 mainWindow.check_forced.CheckState = CheckState.Checked;\r
294                 mainWindow.check_forced.Enabled = true;\r
295             }\r
296             else\r
297                 mainWindow.check_forced.CheckState = CheckState.Unchecked;\r
298 \r
299             #endregion\r
300 \r
301             // H264 Tab & Preset Name\r
302             #region other\r
303             mainWindow.x264Panel.x264Query = presetQuery.H264Query;\r
304 \r
305             // Set the preset name\r
306             mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
307             #endregion\r
308         }\r
309     }\r
310 }