OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / PresetLoader.cs
1 using System;\r
2 using System.Windows.Forms;\r
3 using System.Drawing;\r
4 \r
5 namespace Handbrake.Functions\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 x264step;\r
173                     double presetValue = presetQuery.VideoQuality;\r
174                     double.TryParse(Properties.Settings.Default.x264cqstep,\r
175                                     System.Globalization.NumberStyles.Number,\r
176                                     culture,\r
177                                     out x264step);\r
178 \r
179                     double x = 51 / x264step;\r
180 \r
181                     double calculated = presetValue / x264step;\r
182                     calculated = x - calculated;\r
183 \r
184                     int.TryParse(calculated.ToString(), out value);\r
185 \r
186                     // This will sometimes occur when the preset was generated \r
187                     // with a different granularity, so, round and try again.\r
188                     if (value == 0)\r
189                     {\r
190                         double val =  Math.Round(calculated, 0);\r
191                         int.TryParse(val.ToString(), out value);\r
192                     }\r
193 \r
194                     mainWindow.slider_videoQuality.Value = value;\r
195                 }\r
196                 else\r
197                 {\r
198                     int presetVal;\r
199                     int.TryParse(presetQuery.VideoQuality.ToString(), out presetVal);\r
200                     mainWindow.slider_videoQuality.Value = presetVal;\r
201                 }\r
202             }\r
203 \r
204             mainWindow.check_2PassEncode.CheckState = presetQuery.TwoPass ? CheckState.Checked : CheckState.Unchecked;\r
205 \r
206             mainWindow.check_grayscale.CheckState = presetQuery.Grayscale ? CheckState.Checked : CheckState.Unchecked;\r
207 \r
208             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
209 \r
210             mainWindow.check_turbo.CheckState = presetQuery.TurboFirstPass ? CheckState.Checked : CheckState.Unchecked;\r
211 \r
212             if (presetQuery.LargeMP4)\r
213                 mainWindow.check_largeFile.CheckState = CheckState.Checked;\r
214             else\r
215             {\r
216                 mainWindow.check_largeFile.CheckState = CheckState.Unchecked;\r
217                 mainWindow.check_largeFile.BackColor = Color.Transparent;\r
218             }\r
219             #endregion\r
220 \r
221             // Chapter Markers Tab\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             // Audio Settings Tab\r
235             #region Audio\r
236             // Clear the audio listing\r
237             mainWindow.lv_audioList.Items.Clear();\r
238 \r
239             // Create a new row for the Audio list based on the currently selected items in the dropdown.\r
240             ListViewItem newTrack;\r
241             if (presetQuery.AudioTrack1 != "None")\r
242             {\r
243                 newTrack = new ListViewItem("Automatic");\r
244                 newTrack.SubItems.Add(presetQuery.AudioEncoder1);\r
245                 newTrack.SubItems.Add(presetQuery.AudioTrackMix1);\r
246                 newTrack.SubItems.Add(presetQuery.AudioSamplerate1);\r
247                 newTrack.SubItems.Add(presetQuery.AudioBitrate1);\r
248                 newTrack.SubItems.Add(presetQuery.DRC1.ToString());\r
249                 mainWindow.lv_audioList.Items.Add(newTrack);\r
250             }\r
251 \r
252             if (presetQuery.AudioTrack2 != "None")\r
253             {\r
254                 newTrack = new ListViewItem("Automatic");\r
255                 newTrack.SubItems.Add(presetQuery.AudioEncoder2);\r
256                 newTrack.SubItems.Add(presetQuery.AudioTrackMix2);\r
257                 newTrack.SubItems.Add(presetQuery.AudioSamplerate2);\r
258                 newTrack.SubItems.Add(presetQuery.AudioBitrate2);\r
259                 newTrack.SubItems.Add(presetQuery.DRC2.ToString());\r
260                 mainWindow.lv_audioList.Items.Add(newTrack);\r
261             }\r
262 \r
263             if (presetQuery.AudioTrack3 != "None")\r
264             {\r
265                 newTrack = new ListViewItem("Automatic");\r
266                 newTrack.SubItems.Add(presetQuery.AudioEncoder3);\r
267                 newTrack.SubItems.Add(presetQuery.AudioTrackMix3);\r
268                 newTrack.SubItems.Add(presetQuery.AudioSamplerate3);\r
269                 newTrack.SubItems.Add(presetQuery.AudioBitrate3);\r
270                 newTrack.SubItems.Add(presetQuery.DRC3.ToString());\r
271                 mainWindow.lv_audioList.Items.Add(newTrack);\r
272             }\r
273 \r
274             if (presetQuery.AudioTrack4 != "None")\r
275             {\r
276                 newTrack = new ListViewItem("Automatic");\r
277                 newTrack.SubItems.Add(presetQuery.AudioEncoder4);\r
278                 newTrack.SubItems.Add(presetQuery.AudioTrackMix4);\r
279                 newTrack.SubItems.Add(presetQuery.AudioSamplerate4);\r
280                 newTrack.SubItems.Add(presetQuery.AudioBitrate4);\r
281                 newTrack.SubItems.Add(presetQuery.DRC4.ToString());\r
282                 mainWindow.lv_audioList.Items.Add(newTrack);\r
283             }\r
284 \r
285             // Subtitle Stuff\r
286             mainWindow.drp_subtitle.Text = presetQuery.Subtitles;\r
287 \r
288             if (presetQuery.ForcedSubtitles)\r
289             {\r
290                 mainWindow.check_forced.CheckState = CheckState.Checked;\r
291                 mainWindow.check_forced.Enabled = true;\r
292             }\r
293             else\r
294                 mainWindow.check_forced.CheckState = CheckState.Unchecked;\r
295 \r
296             #endregion\r
297 \r
298             // H264 Tab & Preset Name\r
299             #region other\r
300             mainWindow.x264Panel.x264Query = presetQuery.H264Query;\r
301 \r
302             // Set the preset name\r
303             mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
304             #endregion\r
305         }\r
306     }\r
307 }