OSDN Git Service

f6ea60e57b78753ba00c499d601706a3c287deb7
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / PresetLoader.cs
1 /*  PresetLoader.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.Functions\r
11 {\r
12     class PresetLoader\r
13     {\r
14         /// <summary>\r
15         /// This function takes in a Query which has been parsed by QueryParser and\r
16         /// set's all the GUI widgets correctly.\r
17         /// </summary>\r
18         /// <param name="mainWindow"></param>\r
19         /// <param name="presetQuery">The Parsed CLI Query</param>\r
20         /// <param name="name">Name of the preset</param>\r
21         /// <param name="pictureSettings">Save picture settings in the preset</param>\r
22         public static void presetLoader(frmMain mainWindow, QueryParser presetQuery, string name, Boolean pictureSettings)\r
23         {\r
24             // ---------------------------\r
25             // Setup the GUI\r
26             // ---------------------------\r
27 \r
28             #region Source\r
29             // Reset some vaules to stock first to prevent errors.\r
30             mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
31 \r
32             // Now load all the new settings onto the main window\r
33             if (presetQuery.Format != null)\r
34             {\r
35                 string destination = mainWindow.text_destination.Text;\r
36                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
37                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
38                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
39                 mainWindow.text_destination.Text = destination;\r
40             }\r
41 \r
42             #endregion\r
43 \r
44             #region Destination and Output Settings\r
45 \r
46             if (presetQuery.Format != null)\r
47             {\r
48                 if (presetQuery.Format == "mp4")\r
49                     mainWindow.drop_format.SelectedIndex = 0;\r
50                 else if (presetQuery.Format == "m4v")\r
51                     mainWindow.drop_format.SelectedIndex = 1;\r
52                 else if (presetQuery.Format == "mkv")\r
53                     mainWindow.drop_format.SelectedIndex = 2;\r
54 \r
55                 if (presetQuery.ChapterMarkers && presetQuery.Format == "mp4")\r
56                     mainWindow.drop_format.SelectedIndex = 1;\r
57             }\r
58 \r
59             mainWindow.check_iPodAtom.CheckState = presetQuery.IpodAtom ? CheckState.Checked : CheckState.Unchecked;\r
60 \r
61             mainWindow.check_optimiseMP4.CheckState = presetQuery.OptimizeMP4 ? CheckState.Checked : CheckState.Unchecked;\r
62 \r
63             mainWindow.check_largeFile.CheckState = presetQuery.LargeMP4 ? CheckState.Checked : CheckState.Unchecked;\r
64 \r
65             mainWindow.setContainerOpts(); // select the container options according to the selected format\r
66 \r
67             #endregion\r
68 \r
69             #region Picture\r
70             mainWindow.pictureSettings.check_autoCrop.Checked = true;\r
71             if (presetQuery.CropBottom == "0" && presetQuery.CropTop == "0")\r
72                 if (presetQuery.CropLeft == "0" && presetQuery.CropRight == "0")\r
73                     mainWindow.pictureSettings.check_customCrop.Checked = true;\r
74 \r
75             if (pictureSettings) // only Load picture settings if the perset requires it\r
76             {\r
77                 if (presetQuery.CropTop != null)\r
78                 {\r
79                     int top, bottom, left, right;\r
80                     int.TryParse(presetQuery.CropTop, out top);\r
81                     int.TryParse(presetQuery.CropBottom, out bottom);\r
82                     int.TryParse(presetQuery.CropLeft, out left);\r
83                     int.TryParse(presetQuery.CropRight, out right);\r
84 \r
85                     mainWindow.pictureSettings.check_customCrop.Checked = true;\r
86                     mainWindow.pictureSettings.crop_top.Value = top;\r
87                     mainWindow.pictureSettings.crop_bottom.Value = bottom;\r
88                     mainWindow.pictureSettings.crop_left.Value = left;\r
89                     mainWindow.pictureSettings.crop_right.Value = right;\r
90                 }\r
91             }\r
92 \r
93             // Set the anamorphic mode 0,1,2,3\r
94             mainWindow.pictureSettings.drp_anamorphic.SelectedIndex = presetQuery.AnamorphicMode;\r
95 \r
96             // Custom Anamorphic Controls\r
97             mainWindow.pictureSettings.check_KeepAR.CheckState = presetQuery.keepDisplayAsect ? CheckState.Checked : CheckState.Unchecked;\r
98             mainWindow.pictureSettings.txt_displayWidth.Text = presetQuery.displayWidthValue.ToString();\r
99             mainWindow.pictureSettings.txt_parWidth.Text = presetQuery.pixelAspectWidth.ToString();\r
100             mainWindow.pictureSettings.txt_parHeight.Text = presetQuery.pixelAspectHeight.ToString();\r
101             mainWindow.pictureSettings.drop_modulus.SelectedItem = presetQuery.AnamorphicModulus;\r
102 \r
103             // Reset maxWidth and MaxHeight to 0\r
104             mainWindow.pictureSettings.maxWidth = 0;\r
105             mainWindow.pictureSettings.maxHeight = 0;\r
106 \r
107             // Set the width and height\r
108             if (presetQuery.Width != 0)\r
109                 mainWindow.pictureSettings.text_width.Value = presetQuery.Width;\r
110 \r
111             if (presetQuery.Height != 0)\r
112                 mainWindow.pictureSettings.text_height.Value = presetQuery.Height;\r
113             else\r
114                 mainWindow.pictureSettings.text_height.Value = 0;\r
115 \r
116             // Max Width/Height override Width/Height\r
117             if (presetQuery.MaxWidth != 0)\r
118             {\r
119                 mainWindow.pictureSettings.text_width.Value = presetQuery.MaxWidth;\r
120                 mainWindow.pictureSettings.maxWidth = presetQuery.MaxWidth;\r
121             }\r
122 \r
123             if (presetQuery.MaxHeight != 0)\r
124             {\r
125                 mainWindow.pictureSettings.text_height.Value = presetQuery.MaxHeight;\r
126                 mainWindow.pictureSettings.maxHeight = presetQuery.MaxHeight;\r
127             }\r
128             mainWindow.pictureSettings.setMax();\r
129 \r
130 \r
131             #endregion\r
132 \r
133             #region Filters\r
134 \r
135             mainWindow.ctl_decomb.setOption(presetQuery.Decomb);\r
136 \r
137             if (mainWindow.ctl_decomb.getDropValue == "Off")\r
138                 mainWindow.ctl_deinterlace.setOption(presetQuery.DeInterlace);\r
139             else\r
140                 mainWindow.ctl_deinterlace.setOption("None"); // Don't want decomb and deinterlace on at the same time\r
141 \r
142             mainWindow.ctl_denoise.setOption(presetQuery.DeNoise);\r
143             mainWindow.ctl_detelecine.setOption(presetQuery.DeTelecine);\r
144 \r
145             if (presetQuery.DeBlock != 0)\r
146             {\r
147                 mainWindow.slider_deblock.Value = presetQuery.DeBlock;\r
148                 mainWindow.lbl_deblockVal.Text = presetQuery.DeBlock.ToString();\r
149             }\r
150             else\r
151             {\r
152                 mainWindow.slider_deblock.Value = 4;\r
153                 mainWindow.lbl_deblockVal.Text = "Off";\r
154             }\r
155             #endregion\r
156 \r
157             #region Video\r
158             mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
159 \r
160             if (presetQuery.AverageVideoBitrate != null)\r
161             {\r
162                 mainWindow.radio_avgBitrate.Checked = true;\r
163                 mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
164             }\r
165             if (presetQuery.VideoTargetSize != null)\r
166             {\r
167                 mainWindow.radio_targetFilesize.Checked = true;\r
168                 mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;\r
169             }\r
170 \r
171             // Quality\r
172             if (presetQuery.VideoQuality != 0)\r
173             {\r
174                 mainWindow.radio_cq.Checked = true;\r
175                 if (presetQuery.VideoEncoder == "H.264 (x264)")\r
176                 {\r
177                     int value;\r
178                     System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");\r
179 \r
180                     double x264step;\r
181                     double presetValue = presetQuery.VideoQuality;\r
182                     double.TryParse(Properties.Settings.Default.x264cqstep,\r
183                                     System.Globalization.NumberStyles.Number,\r
184                                     culture,\r
185                                     out x264step);\r
186 \r
187                     double x = 51 / x264step;\r
188 \r
189                     double calculated = presetValue / x264step;\r
190                     calculated = x - calculated;\r
191 \r
192                     int.TryParse(calculated.ToString(), out value);\r
193 \r
194                     // This will sometimes occur when the preset was generated \r
195                     // with a different granularity, so, round and try again.\r
196                     if (value == 0)\r
197                     {\r
198                         double val = Math.Round(calculated, 0);\r
199                         int.TryParse(val.ToString(), out value);\r
200                     }\r
201 \r
202                     mainWindow.slider_videoQuality.Value = value;\r
203                 }\r
204                 else\r
205                 {\r
206                     int presetVal;\r
207                     int.TryParse(presetQuery.VideoQuality.ToString(), out presetVal);\r
208                     mainWindow.slider_videoQuality.Value = presetVal;\r
209                 }\r
210             }\r
211 \r
212             mainWindow.check_2PassEncode.CheckState = presetQuery.TwoPass ? CheckState.Checked : CheckState.Unchecked;\r
213 \r
214             mainWindow.check_grayscale.CheckState = presetQuery.Grayscale ? CheckState.Checked : CheckState.Unchecked;\r
215 \r
216             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
217 \r
218             mainWindow.check_turbo.CheckState = presetQuery.TurboFirstPass ? CheckState.Checked : CheckState.Unchecked;\r
219 \r
220             #endregion\r
221 \r
222             #region Chapter Markers\r
223 \r
224             if (presetQuery.ChapterMarkers)\r
225             {\r
226                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;\r
227                 mainWindow.Check_ChapterMarkers.Enabled = true;\r
228             }\r
229             else\r
230                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
231 \r
232             #endregion\r
233 \r
234             #region Audio\r
235             // Clear the audio listing\r
236             mainWindow.audioPanel.clearAudioList();\r
237 \r
238             if (presetQuery.AudioInformation != null)\r
239                 foreach (AudioTrack track in presetQuery.AudioInformation)\r
240                 {\r
241                     ListViewItem newTrack = new ListViewItem(mainWindow.audioPanel.getNewID().ToString());\r
242 \r
243                     newTrack.SubItems.Add("Automatic");\r
244                     newTrack.SubItems.Add(track.Encoder);\r
245                     newTrack.SubItems.Add(track.MixDown);\r
246                     newTrack.SubItems.Add(track.SampleRate);\r
247                     newTrack.SubItems.Add(track.Bitrate);\r
248                     newTrack.SubItems.Add(track.DRC);\r
249                     mainWindow.audioPanel.addTrackForPreset(newTrack);\r
250                 }\r
251 \r
252             /*/ Subtitle Stuff\r
253             mainWindow.drp_subtitle.Text = presetQuery.Subtitles;\r
254 \r
255             if (presetQuery.ForcedSubtitles)\r
256             {\r
257                 mainWindow.check_forced.CheckState = CheckState.Checked;\r
258                 mainWindow.check_forced.Enabled = true;\r
259             }\r
260             else\r
261                 mainWindow.check_forced.CheckState = CheckState.Unchecked;*/\r
262 \r
263             #endregion\r
264 \r
265             #region Other\r
266             mainWindow.x264Panel.x264Query = presetQuery.H264Query;\r
267 \r
268             // Set the preset name\r
269             mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
270             #endregion\r
271         }\r
272     }\r
273 }