using System; using System.Windows.Forms; using System.Drawing; namespace Handbrake { class PresetLoader { /// /// This function takes in a Query which has been parsed by QueryParser and /// set's all the GUI widgets correctly. /// /// /// The Parsed CLI Query /// Name of the preset /// Save picture settings in the preset public void presetLoader(frmMain mainWindow, Functions.QueryParser presetQuery, string name, Boolean pictureSettings) { // --------------------------- // Setup the GUI // --------------------------- // Source tab #region source // Reset some vaules to stock first to prevent errors. mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked; // Now load all the new settings onto the main window if (presetQuery.Format != null) { string destination = mainWindow.text_destination.Text; destination = destination.Replace(".mp4", "." + presetQuery.Format); destination = destination.Replace(".m4v", "." + presetQuery.Format); destination = destination.Replace(".avi", "." + presetQuery.Format); destination = destination.Replace(".mkv", "." + presetQuery.Format); destination = destination.Replace(".ogm", "." + presetQuery.Format); mainWindow.text_destination.Text = destination; } #endregion // Destination tab #region destination mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder; if (presetQuery.Format != null) { if (presetQuery.Format == "mp4") mainWindow.drop_format.SelectedIndex = 0; else if (presetQuery.Format == "m4v") mainWindow.drop_format.SelectedIndex = 1; else if (presetQuery.Format == "mkv") mainWindow.drop_format.SelectedIndex = 2; else if (presetQuery.Format == "avi") mainWindow.drop_format.SelectedIndex = 3; else if (presetQuery.Format == "ogm") mainWindow.drop_format.SelectedIndex = 4; if (presetQuery.ChapterMarkers && presetQuery.Format == "mp4") mainWindow.drop_format.SelectedIndex = 1; } if (presetQuery.IpodAtom) mainWindow.check_iPodAtom.CheckState = CheckState.Checked; else mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked; if (presetQuery.OptimizeMP4) mainWindow.check_optimiseMP4.CheckState = CheckState.Checked; else mainWindow.check_optimiseMP4.CheckState = CheckState.Unchecked; #endregion // Picture Settings Tab #region Picture mainWindow.check_autoCrop.Checked = true; if (presetQuery.CropBottom == "0" && presetQuery.CropTop == "0") if (presetQuery.CropLeft == "0" && presetQuery.CropRight == "0") mainWindow.check_customCrop.Checked = true; mainWindow.text_width.Text = ""; mainWindow.text_height.Text = ""; if (pictureSettings) { if (presetQuery.CropTop != null) { int top, bottom, left, right; int.TryParse(presetQuery.CropTop, out top); int.TryParse(presetQuery.CropBottom, out bottom); int.TryParse(presetQuery.CropLeft, out left); int.TryParse(presetQuery.CropRight, out right); mainWindow.check_customCrop.Checked = true; mainWindow.text_top.Value = top; mainWindow.text_bottom.Value = bottom; mainWindow.text_left.Value = left; mainWindow.text_right.Value = right; } if (presetQuery.Width != 0) mainWindow.text_width.Text = presetQuery.Width.ToString(); if (presetQuery.Height != 0) mainWindow.text_height.Text = presetQuery.Height.ToString(); } if (presetQuery.Anamorphic) mainWindow.drp_anamorphic.SelectedIndex = 1; else mainWindow.drp_anamorphic.SelectedIndex = 0; if (presetQuery.LooseAnamorphic) mainWindow.drp_anamorphic.SelectedIndex = 2; else { if (presetQuery.Anamorphic != true) mainWindow.drp_anamorphic.SelectedIndex = 0; } // Set the public max width and max height varibles in frmMain // These are used by the query generator to determine if it should use -X or -w / -Y or -h if (presetQuery.MaxWidth != 0) { mainWindow.text_width.Text = presetQuery.MaxWidth.ToString(); mainWindow.maxWidth = presetQuery.MaxWidth; } if (presetQuery.MaxHeight != 0) { mainWindow.text_height.Text = presetQuery.MaxHeight.ToString(); mainWindow.maxHeight = presetQuery.MaxHeight; } #endregion // Filters Tab #region Filters mainWindow.ctl_decomb.setOption(presetQuery.Decomb); if (mainWindow.ctl_decomb.getDropValue == "Off") mainWindow.ctl_deinterlace.setOption(presetQuery.DeInterlace); else mainWindow.ctl_deinterlace.setOption("None"); // Don't want decomb and deinterlace on at the same time mainWindow.ctl_denoise.setOption(presetQuery.DeNoise); mainWindow.ctl_detelecine.setOption(presetQuery.DeTelecine); if (presetQuery.DeBlock != 0) { mainWindow.slider_deblock.Value = presetQuery.DeBlock; mainWindow.lbl_deblockVal.Text = presetQuery.DeBlock.ToString(); } else { mainWindow.slider_deblock.Value = 4; mainWindow.lbl_deblockVal.Text = "Off"; } #endregion // Video Settings Tab #region video if (presetQuery.AverageVideoBitrate != null) { mainWindow.radio_avgBitrate.Checked = true; mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate; } if (presetQuery.VideoTargetSize != null) { mainWindow.radio_targetFilesize.Checked = true; mainWindow.text_filesize.Text = presetQuery.VideoTargetSize; } // Quality if (presetQuery.VideoQuality != 0) { mainWindow.radio_cq.Checked = true; if (presetQuery.VideoEncoder == "H.264 (x264)") { int value; System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); double presetValue, calculated, x264step; double.TryParse(presetQuery.VideoQuality.ToString(), System.Globalization.NumberStyles.Number, culture, out presetValue); double.TryParse(Properties.Settings.Default.x264cqstep, System.Globalization.NumberStyles.Number, culture, out x264step); double x = 51 / x264step; calculated = presetValue / x264step; calculated = x - calculated; int.TryParse(calculated.ToString(), out value); // This will sometimes occur when the preset was generated // with a different granularity, so, round and try again. if (value == 0) { double val = Math.Round(calculated, 0); int.TryParse(val.ToString(), out value); } mainWindow.slider_videoQuality.Value = value; } else { int presetVal; int.TryParse(presetQuery.VideoQuality.ToString(), out presetVal); mainWindow.slider_videoQuality.Value = presetVal; } } if (presetQuery.TwoPass) mainWindow.check_2PassEncode.CheckState = CheckState.Checked; else mainWindow.check_2PassEncode.CheckState = CheckState.Unchecked; if (presetQuery.Grayscale) mainWindow.check_grayscale.CheckState = CheckState.Checked; else mainWindow.check_grayscale.CheckState = CheckState.Unchecked; mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate; if (presetQuery.TurboFirstPass) mainWindow.check_turbo.CheckState = CheckState.Checked; else mainWindow.check_turbo.CheckState = CheckState.Unchecked; if (presetQuery.LargeMP4) mainWindow.check_largeFile.CheckState = CheckState.Checked; else { mainWindow.check_largeFile.CheckState = CheckState.Unchecked; mainWindow.check_largeFile.BackColor = Color.Transparent; } #endregion // Chapter Markers Tab #region Chapter Markers if (presetQuery.ChapterMarkers) { mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked; mainWindow.Check_ChapterMarkers.Enabled = true; } else mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked; #endregion // Audio Settings Tab #region Audio // Clear the audio listing mainWindow.lv_audioList.Items.Clear(); // Create a new row for the Audio list based on the currently selected items in the dropdown. ListViewItem newTrack; if (presetQuery.AudioTrack1 != "None") { newTrack = new ListViewItem("Automatic"); newTrack.SubItems.Add(presetQuery.AudioEncoder1); newTrack.SubItems.Add(presetQuery.AudioTrackMix1); newTrack.SubItems.Add(presetQuery.AudioSamplerate1); newTrack.SubItems.Add(presetQuery.AudioBitrate1); newTrack.SubItems.Add(presetQuery.DRC1.ToString()); mainWindow.lv_audioList.Items.Add(newTrack); } if (presetQuery.AudioTrack2 != "None") { newTrack = new ListViewItem("Automatic"); newTrack.SubItems.Add(presetQuery.AudioEncoder2); newTrack.SubItems.Add(presetQuery.AudioTrackMix2); newTrack.SubItems.Add(presetQuery.AudioSamplerate2); newTrack.SubItems.Add(presetQuery.AudioBitrate2); newTrack.SubItems.Add(presetQuery.DRC2.ToString()); mainWindow.lv_audioList.Items.Add(newTrack); } if (presetQuery.AudioTrack3 != "None") { newTrack = new ListViewItem("Automatic"); newTrack.SubItems.Add(presetQuery.AudioEncoder3); newTrack.SubItems.Add(presetQuery.AudioTrackMix3); newTrack.SubItems.Add(presetQuery.AudioSamplerate3); newTrack.SubItems.Add(presetQuery.AudioBitrate3); newTrack.SubItems.Add(presetQuery.DRC3.ToString()); mainWindow.lv_audioList.Items.Add(newTrack); } if (presetQuery.AudioTrack4 != "None") { newTrack = new ListViewItem("Automatic"); newTrack.SubItems.Add(presetQuery.AudioEncoder4); newTrack.SubItems.Add(presetQuery.AudioTrackMix4); newTrack.SubItems.Add(presetQuery.AudioSamplerate4); newTrack.SubItems.Add(presetQuery.AudioBitrate4); newTrack.SubItems.Add(presetQuery.DRC4.ToString()); mainWindow.lv_audioList.Items.Add(newTrack); } // Subtitle Stuff mainWindow.drp_subtitle.Text = presetQuery.Subtitles; if (presetQuery.ForcedSubtitles) { mainWindow.check_forced.CheckState = CheckState.Checked; mainWindow.check_forced.Enabled = true; } else mainWindow.check_forced.CheckState = CheckState.Unchecked; #endregion // H264 Tab & Preset Name #region other mainWindow.x264Panel.x264Query = presetQuery.H264Query; // Set the preset name mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")"; #endregion } } }