X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=win%2FC%23%2FfrmMain.cs;h=76d9552b8a790d357b08c302f93409d0d7493d31;hb=fb1dc0ae9ad31243ec0d009ffe02eafae7f315df;hp=f20fb15dd8d963e6c31bbec9f514069b720dcdfd;hpb=e4a19a0e658b56e4b37571ff53a5fc1103c8d723;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/win/C#/frmMain.cs b/win/C#/frmMain.cs index f20fb15d..76d9552b 100644 --- a/win/C#/frmMain.cs +++ b/win/C#/frmMain.cs @@ -1,378 +1,392 @@ +/* frmMain.cs $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + using System; -using System.Collections.Generic; +using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; +using System.IO; +using System.Diagnostics; +using System.Threading; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Text.RegularExpressions; namespace Handbrake { public partial class frmMain : Form { + // -------------------------------------------------------------- + // Applicaiton Startup Stuff + // -------------------------------------------------------------- + + #region Application Startup + + // Some stuff that needs to be Initialized. + private Process hbProc; + private Parsing.DVD thisDVD; + private frmQueue queueWindow = new frmQueue(); + private delegate void updateStatusChanger(); + Functions.Common hb_common_func = new Functions.Common(); + public frmMain() { + // Load the splash screen in this thread + Form splash = new frmSplashScreen(); + splash.Show(); + + //Create a label that can be updated from the parent thread. + Label lblStatus = new Label(); + lblStatus.Size = new Size(250, 20); + lblStatus.Location = new Point(10, 280); + splash.Controls.Add(lblStatus); + + //Fire a thread to wait for 2 seconds. The splash screen will exit when the time expires + Thread timer = new Thread(splashTimer); + timer.Start(); + InitializeComponent(); - } - // -------------------------------------------------------------- - // onLoad - setup the program ready for use. - // -------------------------------------------------------------- - private void frmMain_Load(object sender, EventArgs e) - { - // Set the Version number lable to the corect version. - Version.Text = "Version " + Properties.Settings.Default.GuiVersion; + // show the form, but leave disabled until preloading is complete then show the main form + this.Enabled = false; - // Run the update checker. - updateCheck(); + this.Show(); - // Now load the users default if required. - loadUserDefaults(); - - } + // Forces frmMain to draw + Application.DoEvents(); - public void loadUserDefaults() - { - try + // update the status + if (Properties.Settings.Default.updateStatus == "Checked") { - if (Properties.Settings.Default.defaultSettings == "Checked") - { - //Source - text_source.Text = Properties.Settings.Default.DVDSource; - drp_dvdtitle.Text = Properties.Settings.Default.DVDTitle; - drop_chapterStart.Text = Properties.Settings.Default.ChapterStart; - drop_chapterFinish.Text = Properties.Settings.Default.ChapterFinish; - //Destination - text_destination.Text = Properties.Settings.Default.VideoDest; - drp_videoEncoder.Text = Properties.Settings.Default.VideoEncoder; - drp_audioCodec.Text = Properties.Settings.Default.AudioEncoder; - text_width.Text = Properties.Settings.Default.Width; - text_height.Text = Properties.Settings.Default.Height; - //Picture Settings Tab - drp_crop.Text = Properties.Settings.Default.CroppingOption; - text_top.Text = Properties.Settings.Default.CropTop; - text_bottom.Text = Properties.Settings.Default.CropBottom; - text_left.Text = Properties.Settings.Default.CropLeft; - text_right.Text = Properties.Settings.Default.CropRight; - drp_subtitle.Text = Properties.Settings.Default.Subtitles; - //Video Settings Tab - text_bitrate.Text = Properties.Settings.Default.VideoBitrate; - text_filesize.Text = Properties.Settings.Default.VideoFilesize; - slider_videoQuality.Value = Properties.Settings.Default.VideoQuality; - if (Properties.Settings.Default.TwoPass == "Checked") - { - check_2PassEncode.CheckState = CheckState.Checked; - } - if (Properties.Settings.Default.DeInterlace == "Checked") - { - check_DeInterlace.CheckState = CheckState.Checked; - } - if (Properties.Settings.Default.Grayscale == "Checked") - { - check_grayscale.CheckState = CheckState.Checked; - } - - drp_videoFramerate.Text = Properties.Settings.Default.Framerate; + lblStatus.Text = "Checking for updates ..."; + Application.DoEvents(); + Thread updateCheckThread = new Thread(startupUpdateCheck); + updateCheckThread.Start(); + Thread.Sleep(100); + } - if (Properties.Settings.Default.PixelRatio == "Checked") - { - CheckPixelRatio.CheckState = CheckState.Checked; - } - if (Properties.Settings.Default.turboFirstPass == "Checked") - { - check_turbo.CheckState = CheckState.Checked; - } - if (Properties.Settings.Default.largeFile == "Checked") - { - check_largeFile.CheckState = CheckState.Checked; - } - //Audio Settings Tab - drp_audioBitrate.Text = Properties.Settings.Default.AudioBitrate; - drp_audioSampleRate.Text = Properties.Settings.Default.AudioSampleRate; - drp_audioChannels.Text = Properties.Settings.Default.AudioChannels; - //H264 Tab - if (Properties.Settings.Default.CRF == "Checked") - { - CheckCRF.CheckState = CheckState.Checked; - } - rtf_h264advanced.Text = Properties.Settings.Default.H264; - } + // Load the presets + lblStatus.Text = "Loading Presets ..."; + Application.DoEvents(); + loadPresetPanel(); + Thread.Sleep(200); + + // Now load the users default if required. (Will overide the above setting) + if (Properties.Settings.Default.defaultSettings == "Checked") + { + lblStatus.Text = "Loading User Default Settings..."; + Application.DoEvents(); + loadUserDefaults(); + Thread.Sleep(100); } - catch (Exception) + else + loadNormalPreset(); + + // Enable or disable tooltips + if (Properties.Settings.Default.tooltipEnable == "Checked") { - // No real need to alert the user. Try/Catch only in just incase there is a problem reading the settings xml file. + lblStatus.Text = "Loading Tooltips ..."; + Application.DoEvents(); + ToolTip.Active = true; + Thread.Sleep(100); } - } - public void updateCheck() + // Set some defaults for the dropdown menus. Just incase the normal or user presets dont load. + drp_crop.SelectedIndex = 0; + drp_videoEncoder.SelectedIndex = 2; + drp_audioCodec.SelectedIndex = 0; + + //Finished Loading + lblStatus.Text = "Loading Complete!"; + Application.DoEvents(); + Thread.Sleep(200); + + // Wait until splash screen is done + while (timer.IsAlive) + { Thread.Sleep(100); } + + //Close the splash screen + splash.Close(); + splash.Dispose(); + + // Turn the interface back to the user + this.Enabled = true; + } + + private void startupUpdateCheck() { - if (Properties.Settings.Default.updateStatus == "Checked") + try { - - try + if (this.InvokeRequired) { - String updateFile = Properties.Settings.Default.updateFile; - WebClient client = new WebClient(); - String data = client.DownloadString(updateFile); - String[] versionData = data.Split('\n'); - - if ((versionData[0] != Properties.Settings.Default.GuiVersion) || (versionData[1] != Properties.Settings.Default.CliVersion)) - { - lbl_update.Visible = true; - } + this.BeginInvoke(new updateStatusChanger(startupUpdateCheck)); + return; } - //else fail displaying an error message. - catch (Exception) + + Boolean update = hb_common_func.updateCheck(); + if (update == true) { - //Silently ignore the error + frmUpdater updateWindow = new frmUpdater(); + updateWindow.Show(); } } + catch (Exception exc) + { + MessageBox.Show(exc.ToString()); + } } + private void splashTimer(object sender) + { + Thread.Sleep(1000); //sit for 1 seconds then exit + } + private void showSplash(object sender) + { + Form splash = new frmSplashScreen(); + splash.Show(); + } - // -------------------------------------------------------------- - // The Menu Bar - // -------------------------------------------------------------- + private void loadUserDefaults() + { + string userDefaults = Properties.Settings.Default.defaultUserSettings; + try + { + // Some things that need to be done to reset some gui components: + CheckPixelRatio.CheckState = CheckState.Unchecked; - // FILE MENU -------------------------------------------------------------- + // Send the query from the file to the Query Parser class Then load the preset + Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults); + hb_common_func.presetLoader(this, presetQuery, "User Defaults "); + } + catch (Exception exc) + { + MessageBox.Show("Unable to load user Default Settings. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + } + } + + #endregion + + #region Set Varible Function + public void setStreamReader(Parsing.DVD dvd) + { + this.thisDVD = dvd; + } + #endregion + + // -------------------------------------------------------------- + // The main Menu bar. + // -------------------------------------------------------------- + + #region File Menu private void mnu_open_Click(object sender, EventArgs e) { + string filename; File_Open.ShowDialog(); + filename = File_Open.FileName; + + if (filename != "") + { + try + { + // Create StreamReader & open file + StreamReader line = new StreamReader(filename); + + // Send the query from the file to the Query Parser class then load the preset + Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine()); + hb_common_func.presetLoader(this, presetQuery, filename); + + // Close the stream + line.Close(); + } + catch (Exception exc) + { + MessageBox.Show("Unable to load profile. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + } + } } + private void mnu_save_Click(object sender, EventArgs e) { + string filename; File_Save.ShowDialog(); - } + filename = File_Save.FileName; + if (filename != "") + { + try + { + // Create a StreamWriter and open the file + StreamWriter line = new StreamWriter(filename); - private void mnu_update_Click(object sender, EventArgs e) - { - Form Update = new frmUpdate(); - Update.Show(); + // Generate and write the query string to the file + String query = hb_common_func.GenerateTheQuery(this); + line.WriteLine(query); + + // close the stream + line.Close(); + MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + } + catch (Exception) + { + MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + } + + } } private void mnu_exit_Click(object sender, EventArgs e) { - this.Close(); + Application.Exit(); } - // TOOLS MENU -------------------------------------------------------------- + #endregion + + #region Tools Menu + private void mnu_encode_Click(object sender, EventArgs e) { - Form Queue = new frmQueue(); - Queue.Show(); + showQueue(); } private void mnu_viewDVDdata_Click(object sender, EventArgs e) { - Form DVDData = new frmDVDData(); - DVDData.Show(); + frmDvdInfo dvdInfoWindow = new frmDvdInfo(); + dvdInfoWindow.Show(); } private void mnu_options_Click(object sender, EventArgs e) { Form Options = new frmOptions(); - Options.Show(); + Options.ShowDialog(); } - // PRESETS MENU -------------------------------------------------------------- - private void mnu_preset_ipod133_Click(object sender, EventArgs e) - { - CheckPixelRatio.CheckState = CheckState.Unchecked; - text_width.Text = "640"; - text_height.Text = "480"; - drp_videoEncoder.Text = "H.264 (iPod)"; - text_bitrate.Text = "1000"; - text_filesize.Text = ""; - slider_videoQuality.Value = 0; - SliderValue.Text = "0%"; - drp_audioBitrate.Text = "160"; - rtf_h264advanced.Text = ""; - drp_crop.Text = "No Crop"; - } - private void mnu_preset_ipod178_Click(object sender, EventArgs e) - { - CheckPixelRatio.CheckState = CheckState.Unchecked; - text_width.Text = "640"; - text_height.Text = "352"; - drp_videoEncoder.Text = "H.264 (iPod)"; - text_bitrate.Text = "1000"; - text_filesize.Text = ""; - slider_videoQuality.Value = 0; - SliderValue.Text = "0%"; - drp_audioBitrate.Text = "160"; - rtf_h264advanced.Text = ""; - drp_crop.Text = "No Crop"; - } + #endregion - private void mnu_preset_ipod235_Click(object sender, EventArgs e) - { - CheckPixelRatio.CheckState = CheckState.Unchecked; - text_width.Text = "640"; - text_height.Text = "272"; - drp_videoEncoder.Text = "H.264 (iPod)"; - text_bitrate.Text = "1000"; - text_filesize.Text = ""; - slider_videoQuality.Value = 0; - SliderValue.Text = "0%"; - drp_audioBitrate.Text = "160"; - rtf_h264advanced.Text = ""; - drp_crop.Text = "No Crop"; - } + #region Presets Menu - private void mnu_appleTv_Click(object sender, EventArgs e) + private void mnu_presetReset_Click(object sender, EventArgs e) { - text_width.Text = ""; - text_height.Text = ""; - drp_videoEncoder.Text = "H.264"; - text_bitrate.Text = "3000"; - text_filesize.Text = ""; - slider_videoQuality.Value = 0; - SliderValue.Text = "0%"; - drp_audioBitrate.Text = "160"; - CheckPixelRatio.CheckState = CheckState.Checked; - drp_audioSampleRate.Text = "48"; - rtf_h264advanced.Text = "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:no-dct-decimate=1:trellis=2"; - drp_crop.Text = "No Crop"; - + treeView_presets.Nodes.Clear(); + grabCLIPresets(); + loadPresetPanel(); + if (treeView_presets.Nodes.Count == 0) + MessageBox.Show("Unable to load the presets.dat file. Please select \"Update Built-in Presets\" from the Presets Menu \nMake sure you are running the program in Admin mode if running on Vista. See Windows FAQ for details!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + else + MessageBox.Show("Presets have been updated", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); } - private void mnu_presetPS3_Click(object sender, EventArgs e) + private void mnu_SelectDefault_Click(object sender, EventArgs e) { - CheckPixelRatio.CheckState = CheckState.Unchecked; - text_width.Text = ""; - text_height.Text = ""; - drp_videoEncoder.Text = "H.264"; - text_bitrate.Text = "3000"; - text_filesize.Text = ""; - slider_videoQuality.Value = 0; - SliderValue.Text = "0%"; - drp_audioBitrate.Text = "160"; - CheckPixelRatio.CheckState = CheckState.Checked; - drp_audioSampleRate.Text = "48"; - rtf_h264advanced.Text = "level=41"; - drp_crop.Text = "No Crop"; - } - - private void mnu_ProgramDefaultOptions_Click(object sender, EventArgs e) - { - //Source - Properties.Settings.Default.DVDSource = text_source.Text; - Properties.Settings.Default.DVDTitle = drp_dvdtitle.Text; - Properties.Settings.Default.ChapterStart = drop_chapterStart.Text; - Properties.Settings.Default.ChapterFinish = drop_chapterFinish.Text; - //Destination - Properties.Settings.Default.VideoDest = text_destination.Text; - Properties.Settings.Default.VideoEncoder = drp_videoEncoder.Text; - Properties.Settings.Default.AudioEncoder = drp_audioCodec.Text; - Properties.Settings.Default.Width = text_width.Text; - Properties.Settings.Default.Height = text_height.Text; - //Picture Settings Tab - Properties.Settings.Default.CroppingOption = drp_crop.Text; - Properties.Settings.Default.CropTop = text_top.Text; - Properties.Settings.Default.CropBottom = text_bottom.Text; - Properties.Settings.Default.CropLeft = text_left.Text; - Properties.Settings.Default.CropRight = text_right.Text; - Properties.Settings.Default.Subtitles = drp_subtitle.Text; - //Video Settings Tab - Properties.Settings.Default.VideoBitrate = text_bitrate.Text; - Properties.Settings.Default.VideoFilesize = text_filesize.Text; - Properties.Settings.Default.VideoQuality = slider_videoQuality.Value; - Properties.Settings.Default.TwoPass = check_2PassEncode.CheckState.ToString(); - Properties.Settings.Default.DeInterlace = check_DeInterlace.CheckState.ToString(); - Properties.Settings.Default.Grayscale = check_grayscale.CheckState.ToString(); - Properties.Settings.Default.Framerate = drp_videoFramerate.Text; - Properties.Settings.Default.PixelRatio = CheckPixelRatio.CheckState.ToString(); - Properties.Settings.Default.turboFirstPass = check_turbo.CheckState.ToString(); - Properties.Settings.Default.largeFile = check_largeFile.CheckState.ToString(); - //Audio Settings Tab - Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text; - Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text; - Properties.Settings.Default.AudioChannels = drp_audioChannels.Text; - //H264 Tab - Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString(); - Properties.Settings.Default.H264 = rtf_h264advanced.Text; - Properties.Settings.Default.Save(); + loadNormalPreset(); } - // Help Menu -------------------------------------------------------------- + #endregion + + #region Help Menu + private void mnu_wiki_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org/trac"); + Process.Start("http://handbrake.m0k.org/trac"); } - private void mnu_onlineDocs_Click(object sender, EventArgs e) + private void mnu_faq_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org/?page_id=11"); + Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq"); } - private void mnu_faq_Click(object sender, EventArgs e) + private void mnu_onlineDocs_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq"); + Process.Start("http://handbrake.m0k.org/?page_id=11"); } private void mnu_homepage_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org"); + Process.Start("http://handbrake.m0k.org"); } private void mnu_forum_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org/forum"); + Process.Start("http://handbrake.m0k.org/forum"); } - private void mnu_about_Click(object sender, EventArgs e) + private void mnu_UpdateCheck_Click(object sender, EventArgs e) { - Form About = new frmAbout(); - About.Show(); + Boolean update = hb_common_func.updateCheck(); + if (update == true) + { + frmUpdater updateWindow = new frmUpdater(); + updateWindow.Show(); + } + else + MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information); } + private void mnu_about_Click(object sender, EventArgs e) + { + Form About = new frmAbout(); + About.ShowDialog(); + } + #endregion // -------------------------------------------------------------- - // Buttons on the main Window + // Buttons on the main Window and items that require actions // -------------------------------------------------------------- + + #region Buttons + private void btn_Browse_Click(object sender, EventArgs e) { - String filename =""; + String filename = ""; text_source.Text = ""; + frmDvdInfo dvdInfoWindow = new frmDvdInfo(); if (RadioDVD.Checked) { DVD_Open.ShowDialog(); filename = DVD_Open.SelectedPath; - if (filename != "") - { - text_source.Text = filename; - Form frmReadDVD = new frmReadDVD(filename); - frmReadDVD.Show(); - } - } else { ISO_Open.ShowDialog(); filename = ISO_Open.FileName; - if (filename != "") - { - text_source.Text = filename; - Form frmReadDVD = new frmReadDVD(filename); - frmReadDVD.Show(); - } + } + if (filename != "") + { + Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); + text_source.Text = filename; + frmRD.ShowDialog(); } + else + text_source.Text = "Click 'Browse' to continue"; - + // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user. + if (drp_dvdtitle.Items.Count == 0) + MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } private void btn_destBrowse_Click(object sender, EventArgs e) { - // TODO: Need to write some code to check if there is a reasonable amount of disk space left. + // This removes the file extension from the filename box on the save file dialog. + // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected. + DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", ""); + // Show the dialog and set the main form file path DVD_Save.ShowDialog(); text_destination.Text = DVD_Save.FileName; + + // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing) + if (Check_ChapterMarkers.Checked) + text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v"); } private void btn_h264Clear_Click(object sender, EventArgs e) @@ -380,99 +394,120 @@ namespace Handbrake rtf_h264advanced.Text = ""; } - private void GenerateQuery_Click(object sender, EventArgs e) + private void btn_ActivityWindow_Click(object sender, EventArgs e) { - String query = GenerateTheQuery(); - QueryEditorText.Text = query; + Form ActivityWindow = new frmActivityWindow(); + ActivityWindow.ShowDialog(); } - private void btn_ClearQuery_Click(object sender, EventArgs e) - { - QueryEditorText.Text = ""; - } + #endregion - private void btn_queue_Click(object sender, EventArgs e) - { - Form Queue = new frmQueue(); - Queue.Show(); - } + #region frmMain Actions - private void btn_encode_Click(object sender, EventArgs e) + private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e) { - String query = ""; - - if (QueryEditorText.Text == "") - { - query = GenerateTheQuery(); - MessageBox.Show(query); - } - else - { - query = QueryEditorText.Text; - } - - System.Diagnostics.Process hbProc = new System.Diagnostics.Process(); - hbProc.StartInfo.FileName = "hbcli.exe"; - hbProc.StartInfo.Arguments = query; - hbProc.StartInfo.UseShellExecute = false; - hbProc.Start(); - - - MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); - - // TODO: Need to write a bit of code here to do process monitoring. - // Note: hbProc.waitForExit will freeze the app, meaning one cannot add additional items to the queue during an encode. + // Reset some values on the form + lbl_Aspect.Text = "Select a Title"; + lbl_RecomendedCrop.Text = "Select a Title"; + drop_chapterStart.Items.Clear(); + drop_chapterFinish.Items.Clear(); + + // If the dropdown is set to automatic nothing else needs to be done. + // Otheriwse if its not, title data has to be loased from parsing. + if (drp_dvdtitle.Text != "Automatic") + { + Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title; + + // Set the Aspect Ratio + lbl_Aspect.Text = selectedTitle.AspectRatio.ToString(); + + // Set the Recommended Cropping values + lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]); + + // Populate the Start chapter Dropdown + drop_chapterStart.Items.Clear(); + drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray()); + if (drop_chapterStart.Items.Count > 0) + drop_chapterStart.Text = drop_chapterStart.Items[0].ToString(); + + // Populate the Final Chapter Dropdown + drop_chapterFinish.Items.Clear(); + drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray()); + if (drop_chapterFinish.Items.Count > 0) + drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString(); + + // Populate the Audio Channels Dropdown + drp_track1Audio.Items.Clear(); + drp_track1Audio.Items.Add("Automatic"); + drp_track1Audio.Items.Add("None"); + drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray()); + if (drp_track1Audio.Items.Count > 0) + drp_track1Audio.Text = drp_track1Audio.Items[0].ToString(); + + drp_track2Audio.Items.Clear(); + drp_track2Audio.Items.Add("None"); + drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray()); + if (drp_track2Audio.Items.Count > 0) + drp_track2Audio.Text = drp_track2Audio.Items[0].ToString(); + + // Populate the Subtitles dropdown + drp_subtitle.Items.Clear(); + drp_subtitle.Items.Add("None"); + drp_subtitle.Items.Add("Autoselect"); + drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray()); + if (drp_subtitle.Items.Count > 0) + drp_subtitle.Text = drp_subtitle.Items[0].ToString(); + + } + + // Run the autoName & chapterNaming functions + hb_common_func.autoName(this); + hb_common_func.chapterNaming(this); } - // -------------------------------------------------------------- - // Items that require actions on frmMain - // -------------------------------------------------------------- - - private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e) { - QueryEditorText.Text = ""; + drop_chapterStart.BackColor = Color.White; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { - int chapterFinish = int.Parse(drop_chapterFinish.Text); - int chapterStart = int.Parse(drop_chapterStart.Text); - try { + int chapterFinish = int.Parse(drop_chapterFinish.Text); + int chapterStart = int.Parse(drop_chapterStart.Text); + if (chapterFinish < chapterStart) - { - MessageBox.Show("Invalid Chapter Range! - Final chapter can not be smaller than the starting chapter.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } + drop_chapterStart.BackColor = Color.LightCoral; } catch (Exception) { - MessageBox.Show("Invalid Character Entered!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + drop_chapterStart.BackColor = Color.LightCoral; } } - - + // Run the Autonaming function + hb_common_func.autoName(this); } private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e) { - QueryEditorText.Text = ""; + drop_chapterFinish.BackColor = Color.White; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { - int chapterFinish = int.Parse(drop_chapterFinish.Text); - int chapterStart = int.Parse(drop_chapterStart.Text); - try { - if (chapterFinish > chapterStart) - { - MessageBox.Show("Invalid Chapter Range! - Start chapter can not be larger than the Final chapter.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } + int chapterFinish = int.Parse(drop_chapterFinish.Text); + int chapterStart = int.Parse(drop_chapterStart.Text); + + if (chapterFinish < chapterStart) + drop_chapterFinish.BackColor = Color.LightCoral; } catch (Exception) { - MessageBox.Show("Invalid Character Entered!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + drop_chapterFinish.BackColor = Color.LightCoral; } } + + // Run the Autonaming function + hb_common_func.autoName(this); } private void text_bitrate_TextChanged(object sender, EventArgs e) @@ -480,7 +515,6 @@ namespace Handbrake text_filesize.Text = ""; slider_videoQuality.Value = 0; SliderValue.Text = "0%"; - CheckCRF.CheckState = CheckState.Unchecked; } private void text_filesize_TextChanged(object sender, EventArgs e) @@ -488,7 +522,6 @@ namespace Handbrake text_bitrate.Text = ""; slider_videoQuality.Value = 0; SliderValue.Text = "0%"; - CheckCRF.CheckState = CheckState.Unchecked; } private void slider_videoQuality_Scroll(object sender, EventArgs e) @@ -500,453 +533,655 @@ namespace Handbrake private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - System.Diagnostics.Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options"); + Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options"); } - - - - // - // The Query Generation Function - // - - - // This function was imported from old vb.net version of this application. - // It could probably do with being cleaned up a good deal at some point - public string GenerateTheQuery() + private void text_width_TextChanged(object sender, EventArgs e) { - string source = text_source.Text; - string dvdTitle = drp_dvdtitle.Text; - string chapterStart = drop_chapterStart.Text; - string chapterFinish = drop_chapterFinish.Text; - int totalChapters = drop_chapterFinish.Items.Count - 1; - string dvdChapter = ""; - - if (source == "") - { - MessageBox.Show("No Source has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - }else{ - source = " -i " + '"' + source+ '"'; //'"'+ - } - - if (dvdTitle == "Automatic") + try { - dvdTitle = ""; - }else{ - string[] titleInfo = dvdTitle.Split(' '); - dvdTitle = " -t "+ titleInfo[0]; - } - - + if (CheckPixelRatio.Checked) + { + text_width.Text = ""; + text_width.BackColor = Color.LightCoral; + CheckPixelRatio.BackColor = Color.LightCoral; + } + else + { + if ((int.Parse(text_width.Text) % 16) != 0) + text_width.BackColor = Color.LightCoral; + else + text_width.BackColor = Color.LightGreen; + } + if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2)) + { + double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text); + double mod16 = height % 16; + height = height - mod16; - if ((chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))) - { - dvdChapter = ""; + if (text_width.Text == "") + { + text_height.Text = ""; + text_width.BackColor = Color.White; + } + else + text_height.Text = height.ToString(); + } } - else if (chapterFinish == chapterStart) + catch (Exception) { - dvdChapter = " -c " + chapterStart; + // No need to throw an error here. } + } - else + private void text_height_TextChanged(object sender, EventArgs e) + { + try { - dvdChapter = " -c " + chapterStart + "-" + chapterFinish; - } - - string querySource = source+ dvdTitle+ dvdChapter; - // ---------------------------------------------------------------------- - - // Destination + if (CheckPixelRatio.Checked) + { + text_height.Text = ""; + text_height.BackColor = Color.LightCoral; + CheckPixelRatio.BackColor = Color.LightCoral; + } + else + { + if ((int.Parse(text_height.Text) % 16) != 0) + text_height.BackColor = Color.LightCoral; + else + text_height.BackColor = Color.LightGreen; + } - string destination = text_destination.Text; - string videoEncoder = drp_videoEncoder.Text; - string audioEncoder = drp_audioCodec.Text; - string width = text_width.Text; - string height = text_height.Text; - if ((destination == "")) - { - MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } - - else + catch (Exception) { - destination = " -o " + '"' + destination + '"'; //'"'+ + // No need to alert the user. } + } - if ((videoEncoder == "Mpeg 4")) + private void drp_crop_SelectedIndexChanged(object sender, EventArgs e) + { + if ((string)drp_crop.SelectedItem == "Custom") { - videoEncoder = " -e ffmpeg"; + text_left.Enabled = true; + text_right.Enabled = true; + text_top.Enabled = true; + text_bottom.Enabled = true; + text_left.Text = "0"; + text_right.Text = "0"; + text_top.Text = "0"; + text_bottom.Text = "0"; } - else if ((videoEncoder == "Xvid")) + if ((string)drp_crop.SelectedItem == "Automatic") { - videoEncoder = " -e xvid"; - } + text_left.Enabled = false; + text_right.Enabled = false; + text_top.Enabled = false; + text_bottom.Enabled = false; - else if ((videoEncoder == "H.264")) - { - videoEncoder = " -e x264"; + if (lbl_RecomendedCrop.Text != "Select a Title") + { + string[] temp = new string[4]; + temp = lbl_RecomendedCrop.Text.Split('/'); + text_left.Text = temp[2]; + text_right.Text = temp[3]; + text_top.Text = temp[0]; + text_bottom.Text = temp[1]; + } + else + { + text_left.Text = ""; + text_right.Text = ""; + text_top.Text = ""; + text_bottom.Text = ""; + } } - else if ((videoEncoder == "H.264 Baseline 1.3")) + if ((string)drp_crop.SelectedItem == "No Crop") { - videoEncoder = " -e x264b13"; - } + text_left.Enabled = false; + text_right.Enabled = false; + text_top.Enabled = false; + text_bottom.Enabled = false; + text_left.Text = "0"; + text_right.Text = "0"; + text_top.Text = "0"; + text_bottom.Text = "0"; - else if ((videoEncoder == "H.264 (iPod)")) - { - videoEncoder = " -e x264b30"; } + } - if ((audioEncoder == "AAC")) + private void check_vfr_CheckedChanged(object sender, EventArgs e) + { + if (check_vfr.CheckState == CheckState.Checked) { - audioEncoder = " -E faac"; + check_detelecine.Enabled = false; + check_detelecine.CheckState = CheckState.Checked; + drp_videoFramerate.Enabled = false; + drp_videoFramerate.SelectedItem = "29.97"; + lbl_vfr.Visible = true; } - - else if ((audioEncoder == "MP3")) + else { - audioEncoder = " -E lame"; + check_detelecine.Enabled = true; + drp_videoFramerate.Enabled = true; + drp_videoFramerate.SelectedItem = "Automatic"; + lbl_vfr.Visible = false; } + } - else if ((audioEncoder == "Vorbis")) - { - audioEncoder = " -E vorbis"; - } + private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e) + { + text_width.Text = ""; + text_height.Text = ""; + text_width.BackColor = Color.White; + text_height.BackColor = Color.White; + CheckPixelRatio.BackColor = TabPage1.BackColor; - else if ((audioEncoder == "AC3")) + if (CheckPixelRatio.Checked) { - audioEncoder = " -E ac3"; + check_lAnamorphic.Enabled = false; + check_lAnamorphic.Checked = false; + text_height.BackColor = Color.LightGray; + text_width.BackColor = Color.LightGray; + text_height.Enabled = false; + text_width.Enabled = false; } - - if ((width != "")) + else { - width = " -w "+ width; + check_lAnamorphic.Enabled = true; + text_height.BackColor = Color.White; + text_width.BackColor = Color.White; + text_height.Enabled = true; + text_width.Enabled = true; } + } - if ((height != "")) + private void check_lAnamorphic_CheckedChanged(object sender, EventArgs e) + { + if (check_lAnamorphic.Checked) { - height = " -l "+ height; + CheckPixelRatio.Enabled = false; + CheckPixelRatio.Checked = false; + text_height.Text = ""; + text_height.Enabled = false; + text_height.BackColor = Color.LightGray; } - - string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height; - // ---------------------------------------------------------------------- - - // Picture Settings Tab - - string cropSetting = drp_crop.Text; - string cropTop = text_top.Text; - string cropBottom = text_bottom.Text; - string cropLeft = text_left.Text; - string cropRight = text_right.Text; - string subtitles = drp_subtitle.Text; - string cropOut = ""; - // Returns Crop Query - - if (cropSetting == "Auto Crop") + else { - cropOut = ""; + CheckPixelRatio.Enabled = true; + text_height.Enabled = true; + text_height.BackColor = Color.White; } + } - else if (cropSetting == "No Crop") + private void check_2PassEncode_CheckedChanged(object sender, EventArgs e) + { + if (check_2PassEncode.CheckState.ToString() == "Checked") { - cropOut = " --crop 0:0:0:0 "; + if (drp_videoEncoder.Text.Contains("H.264")) + check_turbo.Enabled = true; } - else { - cropOut = " --crop "+ cropTop+ ":"+ cropBottom+ ":"+ cropLeft+ ":"+ cropRight; - } - - if ((subtitles == "None")) - { - subtitles = ""; + check_turbo.Enabled = false; + check_turbo.CheckState = CheckState.Unchecked; } + } - else if ((subtitles == "")) + private void check_largeFile_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) { - subtitles = ""; + lbl_largeMp4Warning.Text = "Warning: Only mp4 files are supported"; + lbl_largeMp4Warning.ForeColor = Color.Red; + check_largeFile.CheckState = CheckState.Unchecked; } - else { - string[] tempSub; - tempSub = subtitles.Split(' '); - subtitles = " -s "+ tempSub[0]; + lbl_largeMp4Warning.Text = "Warning: Breaks iPod, @TV, PS3 compatibility."; + lbl_largeMp4Warning.ForeColor = Color.Black; } + } - string queryPictureSettings = cropOut+ subtitles; - // ---------------------------------------------------------------------- - - // Video Settings Tab - - string videoBitrate = text_bitrate.Text; - string videoFilesize = text_filesize.Text; - int videoQuality = slider_videoQuality.Value; - string vidQSetting; - string twoPassEncoding = check_2PassEncode.CheckState.ToString(); - string deinterlace = check_DeInterlace.CheckState.ToString(); - string grayscale = check_grayscale.CheckState.ToString(); - string videoFramerate = drp_videoFramerate.Text; - string pixelRatio = CheckPixelRatio.CheckState.ToString(); - string ChapterMarkers = Check_ChapterMarkers.CheckState.ToString(); - string turboH264 = check_turbo.CheckState.ToString(); - string largeFile = check_largeFile.CheckState.ToString(); - - if ((videoBitrate != "")) + private void check_iPodAtom_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) { - videoBitrate = " -b "+ videoBitrate; + lbl_ipodAtom.Visible = true; + check_iPodAtom.CheckState = CheckState.Unchecked; } + else + lbl_ipodAtom.Visible = false; + } - if ((videoFilesize != "")) + private void check_optimiseMP4_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) { - videoFilesize = " -S "+ videoFilesize; + check_optimiseMP4.BackColor = Color.LightCoral; + check_optimiseMP4.CheckState = CheckState.Unchecked; } + else + check_optimiseMP4.BackColor = Color.Transparent; + } - // Video Quality Setting + private void drp_dvdtitle_Click(object sender, EventArgs e) + { + if (drp_dvdtitle.Items.Count == 0) + MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + } - if ((videoQuality == 0)) - { - vidQSetting = ""; - } + private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e) + { + if (drp_audioCodec.Text == "AAC") + { + drp_audioMixDown.Items.Clear(); + drp_audioMixDown.Items.Add("Mono"); + drp_audioMixDown.Items.Add("Stereo"); + drp_audioMixDown.Items.Add("Dolby Surround"); + drp_audioMixDown.Items.Add("Dolby Pro Logic II"); + drp_audioMixDown.Items.Add("6 Channel Discrete"); + + drp_audioBitrate.Items.Clear(); + drp_audioBitrate.Items.Add("32"); + drp_audioBitrate.Items.Add("40"); + drp_audioBitrate.Items.Add("48"); + drp_audioBitrate.Items.Add("56"); + drp_audioBitrate.Items.Add("64"); + drp_audioBitrate.Items.Add("80"); + drp_audioBitrate.Items.Add("86"); + drp_audioBitrate.Items.Add("112"); + drp_audioBitrate.Items.Add("128"); + drp_audioBitrate.Items.Add("160"); + } else { - videoQuality = videoQuality/ 100; - if (videoQuality == 1) - { - vidQSetting = "1.0"; - } - - vidQSetting = " -q " + videoQuality.ToString(); + drp_audioMixDown.Items.Clear(); + drp_audioMixDown.Items.Add("Stereo"); + drp_audioMixDown.Items.Add("Dolby Surround"); + drp_audioMixDown.Items.Add("Dolby Pro Logic II"); + + drp_audioBitrate.Items.Clear(); + drp_audioBitrate.Items.Add("32"); + drp_audioBitrate.Items.Add("40"); + drp_audioBitrate.Items.Add("48"); + drp_audioBitrate.Items.Add("56"); + drp_audioBitrate.Items.Add("64"); + drp_audioBitrate.Items.Add("80"); + drp_audioBitrate.Items.Add("86"); + drp_audioBitrate.Items.Add("112"); + drp_audioBitrate.Items.Add("128"); + drp_audioBitrate.Items.Add("160"); + drp_audioBitrate.Items.Add("192"); + drp_audioBitrate.Items.Add("224"); + drp_audioBitrate.Items.Add("256"); + drp_audioBitrate.Items.Add("320"); } + } - if ((twoPassEncoding == "1")) - { - twoPassEncoding = " -2 "; + private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e) + { + if ((drp_audioCodec.Text == "AAC") && (drp_audioMixDown.Text == "6 Channel Discrete")) + { + drp_audioBitrate.Items.Clear(); + drp_audioBitrate.Items.Add("32"); + drp_audioBitrate.Items.Add("40"); + drp_audioBitrate.Items.Add("48"); + drp_audioBitrate.Items.Add("56"); + drp_audioBitrate.Items.Add("64"); + drp_audioBitrate.Items.Add("80"); + drp_audioBitrate.Items.Add("86"); + drp_audioBitrate.Items.Add("112"); + drp_audioBitrate.Items.Add("128"); + drp_audioBitrate.Items.Add("160"); + drp_audioBitrate.Items.Add("192"); + drp_audioBitrate.Items.Add("224"); + drp_audioBitrate.Items.Add("256"); + drp_audioBitrate.Items.Add("320"); + drp_audioBitrate.Items.Add("384"); } + } - else - { - twoPassEncoding = ""; - } + private void slider_drc_Scroll(object sender, EventArgs e) + { + double value = slider_drc.Value / 10.0; + value++; - if ((deinterlace == "1")) - { - deinterlace = " -d "; - } + lbl_drc.Text = value.ToString(); + } - else + private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e) + { + if (drp_subtitle.Text.Contains("None")) { - deinterlace = ""; + check_forced.Enabled = false; + check_forced.Checked = false; } + else + check_forced.Enabled = true; + } - if ((grayscale == "1")) + private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e) + { + if (Check_ChapterMarkers.Checked) { - grayscale = " -g "; + string destination = text_destination.Text; + destination = destination.Replace(".mp4", ".m4v"); + text_destination.Text = destination; + data_chpt.Rows.Clear(); + data_chpt.Enabled = true; + hb_common_func.chapterNaming(this); } - else { - grayscale = ""; + string destination = text_destination.Text; + destination = destination.Replace(".m4v", ".mp4"); + text_destination.Text = destination; + data_chpt.Rows.Clear(); + data_chpt.Enabled = false; } + } - if ((videoFramerate == "Automatic")) - { - videoFramerate = ""; + private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e) + { + //Turn off some options which are H.264 only when the user selects a non h.264 encoder + if (!drp_videoEncoder.Text.Contains("H.264")) + { + check_turbo.CheckState = CheckState.Unchecked; + check_turbo.Enabled = false; + h264Tab.Enabled = false; + rtf_h264advanced.Text = ""; + check_iPodAtom.Enabled = false; + check_iPodAtom.Checked = false; + lbl_ipodAtom.Visible = false; + check_optimiseMP4.Enabled = false; + check_lAnamorphic.Enabled = false; + check_lAnamorphic.Checked = false; } - else { - videoFramerate = " -r "+ videoFramerate; - } + if (check_2PassEncode.CheckState == CheckState.Checked) + check_turbo.Enabled = true; - if ((pixelRatio == "1")) - { - pixelRatio = " -p "; + h264Tab.Enabled = true; + check_iPodAtom.Enabled = true; + lbl_ipodAtom.Visible = false; + check_optimiseMP4.Enabled = true; + check_lAnamorphic.Enabled = true; } - else - { - pixelRatio = ""; - } + } - if ((ChapterMarkers == "1")) - { - ChapterMarkers = " -m "; - } + #endregion - else - { - ChapterMarkers = ""; - } + #region Query Editor Tab - if ((turboH264 == "1")) - { - turboH264 = " -T "; - } + private void btn_clear_Click(object sender, EventArgs e) + { + rtf_query.Clear(); + } - else - { - turboH264 = ""; - } + private void btn_generate_Query_Click(object sender, EventArgs e) + { + rtf_query.Text = hb_common_func.GenerateTheQuery(this); + } - if ((largeFile == "1")) - { - largeFile = " -4 "; - } + private void btn_copy2C_Click(object sender, EventArgs e) + { + if (rtf_query.Text != "") + Clipboard.SetText(rtf_query.Text, TextDataFormat.Text); + } - else - { - largeFile = ""; - } + #endregion - string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + deinterlace + grayscale + videoFramerate + pixelRatio + ChapterMarkers + turboH264 + largeFile; - // ---------------------------------------------------------------------- + // -------------------------------------------------------------- + // Main Window Preset System + // -------------------------------------------------------------- - // Audio Settings Tab + #region Preset System - string audioBitrate = drp_audioBitrate.Text; - string audioSampleRate = drp_audioSampleRate.Text; - string audioChannels = drp_audioChannels.Text; - string Mixdown = drp_audioMixDown.Text; - string SixChannelAudio = ""; - if ((audioBitrate != "")) + // Import Current Presets + private void loadPresetPanel() + { + ArrayList presetNameList = new ArrayList(); + + string appPath = Application.StartupPath.ToString() + "\\presets.dat"; + if (File.Exists(appPath)) + { + StreamReader presetInput = new StreamReader(appPath); + while (!presetInput.EndOfStream) + { + if ((char)presetInput.Peek() == '+') + { + string preset = presetInput.ReadLine().Replace("+ ", ""); + Regex r = new Regex("(: )"); // Split on hyphens. + presetNameList.Add(r.Split(preset)); + } + else + presetInput.ReadLine(); + } + } + + TreeNode preset_treeview = new TreeNode(); + foreach (string[] preset in presetNameList) { - audioBitrate = " -B "+ audioBitrate; - } + preset_treeview = new TreeNode(preset[0]); - if ((audioSampleRate != "")) - { - audioSampleRate = " -R "+ audioSampleRate; + // Now Fill Out List View with Items + treeView_presets.Nodes.Add(preset_treeview); } + } - if ((audioChannels == "Automatic")) - { - audioChannels = ""; - } + // Generate a new presets.dat file from the CLI + private void grabCLIPresets() + { + string appPath = Application.StartupPath.ToString() + "\\"; + string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"'; + Process hbproc = Process.Start("CMD.exe", strCmdLine); + hbproc.WaitForExit(); + hbproc.Dispose(); + hbproc.Close(); + } - else if ((audioChannels == "")) + // Selects the preset called "normal". This is HandBrakes default settings + private void loadNormalPreset() + { + try { - audioChannels = ""; - } + string appPath = Application.StartupPath.ToString() + "\\presets.dat"; + if (File.Exists(appPath)) + { - else - { - string[] tempSub; - tempSub = audioChannels.Split(' '); - audioChannels = " -a "+ tempSub[0]; - } + int normal = 0; + foreach (TreeNode treenode in treeView_presets.Nodes) + { + if (treenode.ToString().Equals("TreeNode: Normal")) + normal = treenode.Index; + } - if ((Mixdown == "Automatic")) - { - Mixdown = ""; - } + TreeNode np = treeView_presets.Nodes[normal]; - else if (Mixdown == "Mono") - { - Mixdown = "mono"; + treeView_presets.SelectedNode = np; + } } - - else if (Mixdown == "Stereo") + catch (Exception) { - Mixdown = "stereo"; + // Do nothing } + } - else if (Mixdown == "Dolby Surround") - { - Mixdown = "dpl1"; - } + // Set's the current options set in the program as the new defaults for the program. + private void btn_setDefault_Click(object sender, EventArgs e) + { + String query = hb_common_func.GenerateTheQuery(this); + Properties.Settings.Default.defaultUserSettings = query; + // Save the new default Settings + Properties.Settings.Default.Save(); + MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + } - else if (Mixdown == "Dolby Pro Logic II") - { - Mixdown = "dpl2"; - } + // When the user select a preset from the treeview, load it + private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e) + { + string selectedPreset = null; + selectedPreset = treeView_presets.SelectedNode.Text; - else if (Mixdown == "6 Channel Discrete") + try { - Mixdown = "6ch"; + string appPath = Application.StartupPath.ToString() + "\\presets.dat"; + if (File.Exists(appPath)) + { + StreamReader presetInput = new StreamReader(appPath); + while (!presetInput.EndOfStream) + { + if ((char)presetInput.Peek() == '+') + { + string preset = presetInput.ReadLine().Replace("+ ", ""); + Regex r = new Regex("(: )"); // Split on hyphens. + string[] presetName = r.Split(preset); + + if (selectedPreset == presetName[0]) + { + // Need to disable anamorphic now, otherwise it may overide the width / height values later. + CheckPixelRatio.CheckState = CheckState.Unchecked; + + // Send the query from the file to the Query Parser class + Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset); + + // Now load the preset + hb_common_func.presetLoader(this, presetQuery, selectedPreset); + } + } + else + presetInput.ReadLine(); + } + } } - - else + catch (Exception exc) { - Mixdown = "stero"; + MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } + } - if ((Mixdown != "")) - { - SixChannelAudio = " -6 "+ Mixdown; - } + #endregion - else - { - SixChannelAudio = ""; - } + //--------------------------------------------------- + // Encode / Cancel Buttons + // Encode Progress Text Handler + //--------------------------------------------------- - string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio; - // ---------------------------------------------------------------------- + #region Encodeing and Queue - // H.264 Tab + Functions.CLI process = new Functions.CLI(); + private delegate void UpdateUIHandler(); - string CRF = CheckCRF.CheckState.ToString(); - string h264Advanced = rtf_h264advanced.Text; - if ((CRF == "1")) - { - CRF = " -Q "; - } + [DllImport("user32.dll")] + public static extern void LockWorkStation(); + [DllImport("user32.dll")] + public static extern int ExitWindowsEx(int uFlags, int dwReason); + private void btn_start_Click(object sender, EventArgs e) + { + if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "") + MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { - CRF = ""; - } + String query; + if (rtf_query.Text != "") + query = rtf_query.Text; + else + query = hb_common_func.GenerateTheQuery(this); - if ((h264Advanced == "")) - { - h264Advanced = ""; + ThreadPool.QueueUserWorkItem(procMonitor, query); + lbl_encode.Visible = true; + lbl_encode.Text = "Encoding in Progress"; } + } + private void btn_add2Queue_Click(object sender, EventArgs e) + { + if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "") + MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { - h264Advanced = " -x "+ h264Advanced; - } - - string h264Settings = CRF+ h264Advanced; - // ---------------------------------------------------------------------- + String query; + if (rtf_query.Text != "") + query = rtf_query.Text; + else + query = hb_common_func.GenerateTheQuery(this); - // Processors (Program Settings) + queueWindow.list_queue.Items.Add(query); + queueWindow.Show(); + } + } - string processors = Properties.Settings.Default.Processors; - // Number of Processors Handler + private void btn_showQueue_Click(object sender, EventArgs e) + { + showQueue(); + } - if ((processors == "Automatic")) - { - processors = ""; - } + private void showQueue() + { + queueWindow.Show(); + } + private void procMonitor(object state) + { + // Make sure we are not already encoding and if we are then display an error. + if (hbProc != null) + MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { - processors = " -C "+ processors+ " "; - } + hbProc = process.runCli(this, (string)state, false, false, false, false); + hbProc.WaitForExit(); - string queryAdvancedSettings = processors; - // ---------------------------------------------------------------------- + setEncodeLabel(); + hbProc = null; - // Verbose option (Program Settings) + // Do something whent he encode ends. + switch (Properties.Settings.Default.CompletionOption) + { + case "Shutdown": + System.Diagnostics.Process.Start("Shutdown", "-s -t 60"); + break; + case "Log Off": + ExitWindowsEx(0, 0); + break; + case "Suspend": + Application.SetSuspendState(PowerState.Suspend, true, true); + break; + case "Hibernate": + Application.SetSuspendState(PowerState.Hibernate, true, true); + break; + case "Lock System": + LockWorkStation(); + break; + case "Quit HandBrake": + Application.Exit(); + break; + default: + break; + } + } + } - string verbose = ""; - if ( Properties.Settings.Default.verbose == "1") + private void setEncodeLabel() + { + if (this.InvokeRequired) { - verbose = " -v "; + this.BeginInvoke(new UpdateUIHandler(setEncodeLabel)); + return; } - - // ---------------------------------------------------------------------- - - return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose; + lbl_encode.Text = "Encoding Finished"; } - + #endregion + - // This is the END of the road ------------------------------------------------------------------------------ }