OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / PresetLoader.cs
1 /*  PresetLoader.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace Handbrake.Functions\r
7 {\r
8     using System.Drawing;\r
9     using System.Windows.Forms;\r
10 \r
11     /// <summary>\r
12     /// Load a preset into the main Window\r
13     /// </summary>\r
14     public class PresetLoader\r
15     {\r
16         /// <summary>\r
17         /// This function takes in a Query which has been parsed by QueryParser and\r
18         /// set's all the GUI widgets correctly.\r
19         /// </summary>\r
20         /// <param name="mainWindow">\r
21         /// FrmMain window\r
22         /// </param>\r
23         /// <param name="presetQuery">\r
24         /// The Parsed CLI Query\r
25         /// </param>\r
26         /// <param name="name">\r
27         /// Name of the preset\r
28         /// </param>\r
29         /// <param name="pictureSettings">\r
30         /// Save picture settings in the preset\r
31         /// </param>\r
32         public static void LoadPreset(frmMain mainWindow, QueryParser presetQuery, string name)\r
33         {\r
34             #region Source\r
35 \r
36             // Reset some vaules to stock first to prevent errors.\r
37             mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
38 \r
39             // Now load all the new settings onto the main window\r
40             if (presetQuery.Format != null)\r
41             {\r
42                 string destination = mainWindow.text_destination.Text;\r
43                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
44                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
45                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
46                 mainWindow.text_destination.Text = destination;\r
47             }\r
48 \r
49             #endregion\r
50 \r
51             #region Destination and Output Settings\r
52 \r
53             if (presetQuery.Format != null)\r
54             {\r
55                 if (presetQuery.Format == "mp4" || presetQuery.Format == "m4v")\r
56                 {\r
57                     if (mainWindow.drop_format.SelectedIndex == 0)\r
58                         mainWindow.SetExtension(".mp4");\r
59                     else\r
60                         mainWindow.drop_format.SelectedIndex = 0;\r
61                 }\r
62                 else if (presetQuery.Format == "mkv")\r
63                 {\r
64                     if (mainWindow.drop_format.SelectedIndex == 1)\r
65                         mainWindow.SetExtension(".mkv");\r
66                     else\r
67                         mainWindow.drop_format.SelectedIndex = 1;\r
68                 }\r
69             }\r
70 \r
71             mainWindow.check_iPodAtom.CheckState = presetQuery.IpodAtom ? CheckState.Checked : CheckState.Unchecked;\r
72 \r
73             mainWindow.check_optimiseMP4.CheckState = presetQuery.OptimizeMP4\r
74                                                           ? CheckState.Checked\r
75                                                           : CheckState.Unchecked;\r
76 \r
77             mainWindow.check_largeFile.CheckState = presetQuery.LargeMP4 ? CheckState.Checked : CheckState.Unchecked;\r
78 \r
79             mainWindow.setContainerOpts(); // select the container options according to the selected format\r
80 \r
81             #endregion\r
82 \r
83             #region Picture\r
84 \r
85             mainWindow.PictureSettings.check_autoCrop.Checked = true;\r
86             if (presetQuery.CropValues != null)\r
87             {\r
88                 int top, bottom, left, right;\r
89                 int.TryParse(presetQuery.CropTop, out top);\r
90                 int.TryParse(presetQuery.CropBottom, out bottom);\r
91                 int.TryParse(presetQuery.CropLeft, out left);\r
92                 int.TryParse(presetQuery.CropRight, out right);\r
93 \r
94                 mainWindow.PictureSettings.check_customCrop.Checked = true;\r
95                 mainWindow.PictureSettings.crop_top.Value = top;\r
96                 mainWindow.PictureSettings.crop_bottom.Value = bottom;\r
97                 mainWindow.PictureSettings.crop_left.Value = left;\r
98                 mainWindow.PictureSettings.crop_right.Value = right;\r
99             }\r
100 \r
101             // Set the anamorphic mode 0,1,2,3\r
102             mainWindow.PictureSettings.drp_anamorphic.SelectedIndex = presetQuery.AnamorphicMode;\r
103 \r
104             // Keep Aspect Ration Anamorphic Setting.\r
105             mainWindow.PictureSettings.check_KeepAR.CheckState = presetQuery.KeepDisplayAsect\r
106                                                                      ? CheckState.Checked\r
107                                                                      : CheckState.Unchecked;\r
108 \r
109             // Set the Width and height as Required.\r
110             if (presetQuery.Width != 0)\r
111                 mainWindow.PictureSettings.text_width.Value = presetQuery.Width;\r
112 \r
113             if (presetQuery.Height != 0)\r
114                 mainWindow.PictureSettings.text_height.Value = presetQuery.Height;\r
115 \r
116             // Max Width/Height override Width/Height\r
117             if (presetQuery.MaxWidth != 0)\r
118                 mainWindow.PictureSettings.text_width.Value = presetQuery.MaxWidth;\r
119 \r
120             if (presetQuery.MaxHeight != 0)\r
121                 mainWindow.PictureSettings.text_height.Value = presetQuery.MaxHeight;\r
122 \r
123             mainWindow.PictureSettings.PresetMaximumResolution = new Size(presetQuery.MaxWidth, presetQuery.MaxHeight);\r
124 \r
125             // Case where both height and max height are 0 - For built-in presets\r
126             if (presetQuery.MaxHeight == 0 && presetQuery.Height == 0)\r
127                 mainWindow.PictureSettings.text_height.Value = 0;\r
128 \r
129             if (presetQuery.MaxWidth == 0 && presetQuery.Width == 0)\r
130                 if (mainWindow.selectedTitle != null && mainWindow.selectedTitle.Resolution.Width != 0)\r
131                     mainWindow.PictureSettings.text_width.Value = mainWindow.selectedTitle.Resolution.Width;\r
132 \r
133             // Aspect Ratio for non anamorphic sources\r
134             if (presetQuery.AnamorphicMode == 0)\r
135                 mainWindow.PictureSettings.check_KeepAR.CheckState = presetQuery.Height == 0\r
136                                                                          ? CheckState.Checked\r
137                                                                          : CheckState.Unchecked;\r
138 \r
139             // Custom Anamorphic Controls\r
140             mainWindow.PictureSettings.updownDisplayWidth.Text = presetQuery.DisplayWidthValue.ToString();\r
141             mainWindow.PictureSettings.updownParHeight.Text = presetQuery.PixelAspectHeight.ToString();\r
142             mainWindow.PictureSettings.updownParWidth.Text = presetQuery.PixelAspectWidth.ToString();\r
143             mainWindow.PictureSettings.drp_modulus.SelectedItem = presetQuery.AnamorphicModulus.ToString();\r
144 \r
145             #endregion\r
146 \r
147             #region Filters\r
148 \r
149             mainWindow.Filters.SetDecomb(presetQuery.Decomb);\r
150             mainWindow.Filters.SetDeInterlace(presetQuery.DeInterlace);\r
151             mainWindow.Filters.SetDeNoise(presetQuery.DeNoise);\r
152             mainWindow.Filters.SetDeTelecine(presetQuery.DeTelecine);\r
153             mainWindow.Filters.SetDeBlock(presetQuery.DeBlock);\r
154             mainWindow.Filters.SetGrayScale(presetQuery.Grayscale);\r
155 \r
156             #endregion\r
157 \r
158             #region Video\r
159 \r
160             mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
161 \r
162             if (presetQuery.AverageVideoBitrate != null)\r
163             {\r
164                 mainWindow.radio_avgBitrate.Checked = true;\r
165                 mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
166             }\r
167             if (presetQuery.VideoTargetSize != null)\r
168             {\r
169                 mainWindow.radio_targetFilesize.Checked = true;\r
170                 mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;\r
171             }\r
172 \r
173             // Quality\r
174             if (presetQuery.VideoQuality != -1)\r
175             {\r
176                 mainWindow.radio_cq.Checked = true;\r
177                 mainWindow.slider_videoQuality.Value = QualityToSliderValue(presetQuery.VideoEncoder, presetQuery.VideoQuality);\r
178             }\r
179 \r
180             mainWindow.check_2PassEncode.CheckState = presetQuery.TwoPass ? CheckState.Checked : CheckState.Unchecked;\r
181 \r
182             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
183             mainWindow.checkMaximumFramerate.Checked = presetQuery.Pfr;\r
184 \r
185             mainWindow.check_turbo.CheckState = presetQuery.TurboFirstPass ? CheckState.Checked : CheckState.Unchecked;\r
186 \r
187             #endregion\r
188 \r
189             #region Chapter Markers\r
190 \r
191             if (presetQuery.ChapterMarkers)\r
192             {\r
193                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;\r
194                 mainWindow.Check_ChapterMarkers.Enabled = true;\r
195             }\r
196             else\r
197                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
198 \r
199             #endregion\r
200 \r
201             #region Audio\r
202 \r
203             mainWindow.AudioSettings.LoadTracks(presetQuery.AudioInformation);\r
204 \r
205             #endregion\r
206 \r
207             #region Other\r
208 \r
209             mainWindow.x264Panel.X264Query = presetQuery.H264Query;\r
210 \r
211             // Set the preset name\r
212             mainWindow.labelPreset.Text = "Output Settings (Preset: " + name + ")";\r
213 \r
214             #endregion\r
215         }\r
216 \r
217         /// <summary>\r
218         /// Convert a Quality Value to a position value for the Video Quality slider\r
219         /// </summary>\r
220         /// <param name="videoEncoder">The selected video encoder</param>\r
221         /// <param name="value">The Quality value</param>\r
222         /// <returns>The position on the video quality slider</returns>\r
223         private static int QualityToSliderValue(string videoEncoder, float value)\r
224         {\r
225             int sliderValue = 0;\r
226             switch (videoEncoder)\r
227             {\r
228                 case "MPEG-4 (FFmpeg)":\r
229                     sliderValue = 32 - (int)value;\r
230                     break;\r
231                 case "H.264 (x264)":\r
232                     double cqStep = Properties.Settings.Default.x264cqstep;\r
233                     sliderValue = (int)((51.0 / cqStep) - (value / cqStep));\r
234                     break;\r
235                 case "VP3 (Theora)":\r
236                     sliderValue = (int)value;\r
237                     break;\r
238             }\r
239 \r
240             return sliderValue;\r
241         }\r
242     }\r
243 }