X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=win%2FC%23%2FfrmMain.cs;h=76d9552b8a790d357b08c302f93409d0d7493d31;hb=fb1dc0ae9ad31243ec0d009ffe02eafae7f315df;hp=0983635ded48e7cda61e73ebc89b2fff0e519a21;hpb=2fe30b156b9d1e2555a21ea0c372499fc0ff468a;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/win/C#/frmMain.cs b/win/C#/frmMain.cs index 0983635d..76d9552b 100644 --- a/win/C#/frmMain.cs +++ b/win/C#/frmMain.cs @@ -1,5 +1,11 @@ +/* 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; @@ -9,251 +15,206 @@ 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; - - // -------------------------------------------------------------- - // Some windows that require only 1 instance. - // -------------------------------------------------------------- - private frmDvdInfo dvdInfoWindow = new frmDvdInfo(); private frmQueue queueWindow = new frmQueue(); - - // -------------------------------------------------------------- - // Stuff that needs doing on startup. - // - Load users default settings. (if required) - // - Do an update check (if required) - // -------------------------------------------------------------- + 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(); - // 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; - } + lblStatus.Text = "Checking for updates ..."; + Application.DoEvents(); + Thread updateCheckThread = new Thread(startupUpdateCheck); + updateCheckThread.Start(); + Thread.Sleep(100); + } - drp_videoFramerate.Text = Properties.Settings.Default.Framerate; + // 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); + } + else + loadNormalPreset(); - 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; + // Enable or disable tooltips + if (Properties.Settings.Default.tooltipEnable == "Checked") + { + lblStatus.Text = "Loading Tooltips ..."; + Application.DoEvents(); + ToolTip.Active = true; + Thread.Sleep(100); + } - // H264 Tab - if (Properties.Settings.Default.CRF == "Checked") - { - CheckCRF.CheckState = CheckState.Checked; - } - rtf_h264advanced.Text = Properties.Settings.Default.H264; + // 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() + { + try + { + if (this.InvokeRequired) + { + this.BeginInvoke(new updateStatusChanger(startupUpdateCheck)); + return; + } + + Boolean update = hb_common_func.updateCheck(); + if (update == true) + { + frmUpdater updateWindow = new frmUpdater(); + updateWindow.Show(); } } - catch (Exception) + catch (Exception exc) { - // No real need to alert the user. Try/Catch only in just incase there is a problem reading the settings xml file. + MessageBox.Show(exc.ToString()); } } - public void updateCheck() + private void splashTimer(object sender) { - if (Properties.Settings.Default.updateStatus == "Checked") + Thread.Sleep(1000); //sit for 1 seconds then exit + } + + private void showSplash(object sender) + { + Form splash = new frmSplashScreen(); + splash.Show(); + } + + private void loadUserDefaults() + { + string userDefaults = Properties.Settings.Default.defaultUserSettings; + try { - try - { - String updateFile = Properties.Settings.Default.updateFile; - WebClient client = new WebClient(); - String data = client.DownloadString(updateFile); - String[] versionData = data.Split('\n'); + // Some things that need to be done to reset some gui components: + CheckPixelRatio.CheckState = CheckState.Unchecked; - if ((versionData[0] != Properties.Settings.Default.GuiVersion) || (versionData[1] != Properties.Settings.Default.CliVersion)) - { - lbl_update.Visible = true; - } - } - catch (Exception) - { - // Silently ignore the error - } + // 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); - string temporyLine; // Used for reading the line into a varible before processing on the checkState items below. - - // Read in the data and set the correct GUI component with the setting. - text_source.Text = line.ReadLine(); - drp_dvdtitle.Text = line.ReadLine(); - drop_chapterStart.Text = line.ReadLine(); - drop_chapterFinish.Text = line.ReadLine(); - text_destination.Text = line.ReadLine(); - drp_videoEncoder.Text = line.ReadLine(); - drp_audioCodec.Text = line.ReadLine(); - text_width.Text = line.ReadLine(); - text_height.Text = line.ReadLine(); - text_top.Text = line.ReadLine(); - text_bottom.Text = line.ReadLine(); - text_left.Text = line.ReadLine(); - text_right.Text = line.ReadLine(); - drp_subtitle.Text = line.ReadLine(); - text_bitrate.Text = line.ReadLine(); - text_filesize.Text = line.ReadLine(); - slider_videoQuality.Value = int.Parse(line.ReadLine()); - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - check_2PassEncode.CheckState = CheckState.Checked; - } - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - check_DeInterlace.CheckState = CheckState.Checked; - } - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - check_grayscale.CheckState = CheckState.Checked; - } - - drp_videoFramerate.Text = line.ReadLine(); - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - Check_ChapterMarkers.CheckState = CheckState.Checked; - } - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - CheckPixelRatio.CheckState = CheckState.Checked; - } - - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - check_turbo.CheckState = CheckState.Checked; - } - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - check_largeFile.CheckState = CheckState.Checked; - } - - drp_audioBitrate.Text = line.ReadLine(); - drp_audioSampleRate.Text = line.ReadLine(); - drp_audioChannels.Text = line.ReadLine(); - drp_audioMixDown.Text = line.ReadLine(); - - // Advanced H264 Options - temporyLine = line.ReadLine(); - if (temporyLine == "Checked") - { - CheckCRF.CheckState = CheckState.Checked; - } - rtf_h264advanced.Text = line.ReadLine(); + // 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(); - - - // Fix for SliderValue not appearing when Opening saved file - SliderValue.Text = slider_videoQuality.Value + "%"; - - } catch (Exception){ - MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); + } + 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; @@ -264,64 +225,25 @@ namespace Handbrake // Create a StreamWriter and open the file StreamWriter line = new StreamWriter(filename); - //Source - line.WriteLine(text_source.Text); - line.WriteLine(drp_dvdtitle.Text); - line.WriteLine(drop_chapterStart.Text); - line.WriteLine(drop_chapterFinish.Text); - //Destination - line.WriteLine(text_destination.Text); - line.WriteLine(drp_videoEncoder.Text); - line.WriteLine(drp_audioCodec.Text); - line.WriteLine(text_width.Text); - line.WriteLine(text_height.Text); - //Picture Settings Tab - line.WriteLine(text_top.Text); - line.WriteLine(text_bottom.Text); - line.WriteLine(text_left.Text); - line.WriteLine(text_right.Text); - line.WriteLine(drp_subtitle.Text); - //Video Settings Tab - line.WriteLine(text_bitrate.Text); - line.WriteLine(text_filesize.Text); - line.WriteLine(slider_videoQuality.Value.ToString()); - line.WriteLine(check_2PassEncode.CheckState.ToString()); - line.WriteLine(check_DeInterlace.CheckState.ToString()); - line.WriteLine(check_grayscale.CheckState.ToString()); - line.WriteLine(drp_videoFramerate.Text); - line.WriteLine(Check_ChapterMarkers.CheckState.ToString()); - line.WriteLine(CheckPixelRatio.CheckState.ToString()); - line.WriteLine(check_turbo.CheckState.ToString()); - line.WriteLine(check_largeFile.CheckState.ToString()); - //Audio Settings Tab - line.WriteLine(drp_audioBitrate.Text); - line.WriteLine(drp_audioSampleRate.Text); - line.WriteLine(drp_audioChannels.Text); - line.WriteLine(drp_audioMixDown.Text); - //H264 Tab - line.WriteLine(CheckCRF.CheckState.ToString()); - line.WriteLine(rtf_h264advanced.Text); + // 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) + 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_update_Click(object sender, EventArgs e) - { - Form Update = new frmUpdate(); - Update.ShowDialog(); + } } private void mnu_exit_Click(object sender, EventArgs e) { - this.Close(); + Application.Exit(); } #endregion @@ -335,6 +257,7 @@ namespace Handbrake private void mnu_viewDVDdata_Click(object sender, EventArgs e) { + frmDvdInfo dvdInfoWindow = new frmDvdInfo(); dvdInfoWindow.Show(); } @@ -344,128 +267,25 @@ namespace Handbrake Options.ShowDialog(); } + #endregion #region 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"; - } - - 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"; - } - - private void mnu_appleTv_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"; - - } - - private void mnu_presetPS3_Click(object sender, EventArgs e) + private void mnu_presetReset_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"; + 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_ProgramDefaultOptions_Click(object sender, EventArgs e) + private void mnu_SelectDefault_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(); } #endregion @@ -474,22 +294,22 @@ namespace Handbrake private void mnu_wiki_Click(object sender, EventArgs e) { - 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) { - 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) { - 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) { - Process.Start("http://handbrake.m0k.org"); + Process.Start("http://handbrake.m0k.org"); } private void mnu_forum_Click(object sender, EventArgs e) @@ -497,74 +317,76 @@ namespace Handbrake Process.Start("http://handbrake.m0k.org/forum"); } + private void mnu_UpdateCheck_Click(object sender, EventArgs e) + { + 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(); + 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, this, dvdInfoWindow); - frmReadDVD.ShowDialog(); - } } else { ISO_Open.ShowDialog(); filename = ISO_Open.FileName; - if (filename != "") - { - text_source.Text = filename; - Form frmReadDVD = new frmReadDVD(filename, this, dvdInfoWindow); - frmReadDVD.ShowDialog(); - } - } + } - // Quick check to make sure some titles were found. if (filename != "") { - if (drp_dvdtitle.Items.Count == 0) - { - MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); - } + 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) - { - string destination = text_destination.Text; - destination = destination.Replace(".mp4", ".m4v"); - text_destination.Text = destination; - } + text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v"); } private void btn_h264Clear_Click(object sender, EventArgs e) @@ -572,88 +394,80 @@ 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) - { - String query = GenerateTheQuery(); - queueWindow.list_queue.Items.Add(query); - queueWindow.Show(); - } + #region frmMain Actions - private void showQueue() + private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e) { - queueWindow.Show(); - } + // 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(); - private void btn_encode_Click(object sender, EventArgs e) - { - String query = ""; - lbl_encode.Visible = true; - - if (QueryEditorText.Text == "") - { - query = GenerateTheQuery(); - } - else + // 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") { - query = QueryEditorText.Text; - } + Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title; - ThreadPool.QueueUserWorkItem(procMonitor, query); - } + // Set the Aspect Ratio + lbl_Aspect.Text = selectedTitle.AspectRatio.ToString(); - private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress), - new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining }); - return; - } - lbl_encode.Text = string.Format("Encode Progress: {0}%, FPS: {1}, Avg FPS: {2}, Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining); - } + // 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]); - private void procMonitor(object state) - { - Functions.CLI process = new Functions.CLI(); - hbProc = process.runCli(this, (string)state, true, true, false, true); + // 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(); - MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + // 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(); - Parsing.Parser encode = new Parsing.Parser(hbProc.StandardError.BaseStream); - //TODO: prevent this event from being subscribed more than once - encode.OnEncodeProgress += encode_OnEncodeProgress; - while (!encode.EndOfStream) - { - encode.ReadLine(); } - - hbProc.WaitForExit(); - hbProc.Close(); - hbProc.Dispose(); - hbProc = null; - MessageBox.Show("The encode process has now ended.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + // 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) { - lbl_chptWarn.Visible = false; - QueryEditorText.Text = ""; + drop_chapterStart.BackColor = Color.White; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { try @@ -662,25 +476,20 @@ namespace Handbrake int chapterStart = int.Parse(drop_chapterStart.Text); if (chapterFinish < chapterStart) - { - lbl_chptWarn.Visible = true; - lbl_chptWarn.Text = "Invalid Chapter Range!"; - } + drop_chapterStart.BackColor = Color.LightCoral; } catch (Exception) { - lbl_chptWarn.Visible = true; - lbl_chptWarn.Text = "Invalid Chapter Range!"; + drop_chapterStart.BackColor = Color.LightCoral; } } - - + // Run the Autonaming function + hb_common_func.autoName(this); } private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e) { - lbl_chptWarn.Visible = false; - QueryEditorText.Text = ""; + drop_chapterFinish.BackColor = Color.White; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { try @@ -689,17 +498,16 @@ namespace Handbrake int chapterStart = int.Parse(drop_chapterStart.Text); if (chapterFinish < chapterStart) - { - lbl_chptWarn.Visible = true; - lbl_chptWarn.Text = "Invalid Chapter Range!"; - } + drop_chapterFinish.BackColor = Color.LightCoral; } catch (Exception) { - lbl_chptWarn.Visible = true; - lbl_chptWarn.Text = "Invalid Chapter Range!"; + drop_chapterFinish.BackColor = Color.LightCoral; } } + + // Run the Autonaming function + hb_common_func.autoName(this); } private void text_bitrate_TextChanged(object sender, EventArgs e) @@ -707,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) @@ -715,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) @@ -732,27 +538,23 @@ namespace Handbrake private void text_width_TextChanged(object sender, EventArgs e) { - try { if (CheckPixelRatio.Checked) { text_width.Text = ""; - text_width.BackColor = Color.White; + 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") + 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; @@ -764,17 +566,13 @@ namespace Handbrake text_width.BackColor = Color.White; } else - { text_height.Text = height.ToString(); - } } } catch (Exception) { // No need to throw an error here. } - - } private void text_height_TextChanged(object sender, EventArgs e) @@ -784,44 +582,44 @@ namespace Handbrake if (CheckPixelRatio.Checked) { text_height.Text = ""; - text_width.BackColor = Color.White; + 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; - } } - } catch(Exception){ + + } + catch (Exception) + { // No need to alert the user. } } private void drp_crop_SelectedIndexChanged(object sender, EventArgs e) { - if ((string)drp_crop.SelectedItem == "Manual") + if ((string)drp_crop.SelectedItem == "Custom") { - text_left.Enabled = true; - text_right.Enabled = true; - text_top.Enabled = true; - text_bottom.Enabled = true; + 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"; } - if ((string)drp_crop.SelectedItem == "Auto Crop") + if ((string)drp_crop.SelectedItem == "Automatic") { text_left.Enabled = false; text_right.Enabled = false; text_top.Enabled = false; text_bottom.Enabled = false; - text_left.Text = ""; - text_right.Text = ""; - text_top.Text = ""; - text_bottom.Text = ""; if (lbl_RecomendedCrop.Text != "Select a Title") { @@ -832,6 +630,13 @@ namespace Handbrake text_top.Text = temp[0]; text_bottom.Text = temp[1]; } + else + { + text_left.Text = ""; + text_right.Text = ""; + text_top.Text = ""; + text_bottom.Text = ""; + } } if ((string)drp_crop.SelectedItem == "No Crop") @@ -847,30 +652,130 @@ namespace Handbrake } } - + + private void check_vfr_CheckedChanged(object sender, EventArgs e) + { + if (check_vfr.CheckState == CheckState.Checked) + { + check_detelecine.Enabled = false; + check_detelecine.CheckState = CheckState.Checked; + drp_videoFramerate.Enabled = false; + drp_videoFramerate.SelectedItem = "29.97"; + lbl_vfr.Visible = true; + } + else + { + check_detelecine.Enabled = true; + drp_videoFramerate.Enabled = true; + drp_videoFramerate.SelectedItem = "Automatic"; + lbl_vfr.Visible = false; + } + } + 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; + + if (CheckPixelRatio.Checked) + { + 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; + } + else + { + check_lAnamorphic.Enabled = true; + text_height.BackColor = Color.White; + text_width.BackColor = Color.White; + text_height.Enabled = true; + text_width.Enabled = true; + } } - private void drp_dvdtitle_Click(object sender, EventArgs e) + private void check_lAnamorphic_CheckedChanged(object sender, EventArgs e) { - if (drp_dvdtitle.Items.Count == 1) + if (check_lAnamorphic.Checked) { - 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); + CheckPixelRatio.Enabled = false; + CheckPixelRatio.Checked = false; + text_height.Text = ""; + text_height.Enabled = false; + text_height.BackColor = Color.LightGray; + } + else + { + CheckPixelRatio.Enabled = true; + text_height.Enabled = true; + text_height.BackColor = Color.White; } } - private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e) + private void check_2PassEncode_CheckedChanged(object sender, EventArgs e) { + if (check_2PassEncode.CheckState.ToString() == "Checked") + { + if (drp_videoEncoder.Text.Contains("H.264")) + check_turbo.Enabled = true; + } + else + { + check_turbo.Enabled = false; + check_turbo.CheckState = CheckState.Unchecked; + } + } - //CLI Audio mixdown Names: mono stereo dpl1 dpl2 6ch + private void check_largeFile_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) + { + lbl_largeMp4Warning.Text = "Warning: Only mp4 files are supported"; + lbl_largeMp4Warning.ForeColor = Color.Red; + check_largeFile.CheckState = CheckState.Unchecked; + } + else + { + lbl_largeMp4Warning.Text = "Warning: Breaks iPod, @TV, PS3 compatibility."; + lbl_largeMp4Warning.ForeColor = Color.Black; + } + } - drp_audioMixDown.Items.Clear(); + private void check_iPodAtom_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) + { + lbl_ipodAtom.Visible = true; + check_iPodAtom.CheckState = CheckState.Unchecked; + } + else + lbl_ipodAtom.Visible = false; + } + + private void check_optimiseMP4_CheckedChanged(object sender, EventArgs e) + { + if (!text_destination.Text.Contains(".mp4")) + { + check_optimiseMP4.BackColor = Color.LightCoral; + check_optimiseMP4.CheckState = CheckState.Unchecked; + } + else + check_optimiseMP4.BackColor = Color.Transparent; + } + + 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); + } + private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e) + { if (drp_audioCodec.Text == "AAC") { drp_audioMixDown.Items.Clear(); @@ -879,7 +784,7 @@ namespace Handbrake 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"); @@ -915,62 +820,69 @@ namespace Handbrake drp_audioBitrate.Items.Add("224"); drp_audioBitrate.Items.Add("256"); drp_audioBitrate.Items.Add("320"); - drp_audioBitrate.Items.Add("384"); } } private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e) { - if (drp_audioCodec.Text == "AAC") + if ((drp_audioCodec.Text == "AAC") && (drp_audioMixDown.Text == "6 Channel Discrete")) { - if (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"); - } + 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"); } } - private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e) + private void slider_drc_Scroll(object sender, EventArgs e) { - if (Check_ChapterMarkers.Checked) - { - string destination = text_destination.Text; - destination = destination.Replace(".mp4", ".m4v"); - text_destination.Text = destination; - } + double value = slider_drc.Value / 10.0; + value++; + + lbl_drc.Text = value.ToString(); } - private void check_largeFile_CheckedChanged(object sender, EventArgs e) + private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e) { - if (!text_destination.Text.Contains(".mp4")) + if (drp_subtitle.Text.Contains("None")) { - MessageBox.Show("This option is only compatible with the mp4 file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - check_largeFile.CheckState = CheckState.Unchecked; + check_forced.Enabled = false; + check_forced.Checked = false; } + else + check_forced.Enabled = true; } - private void check_turbo_CheckedChanged(object sender, EventArgs e) + private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e) { - if (!drp_videoEncoder.Text.Contains("H.264")) + if (Check_ChapterMarkers.Checked) { - MessageBox.Show("This option is only compatible with the H.264 encoder's", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - check_turbo.CheckState = CheckState.Unchecked; + 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 + { + string destination = text_destination.Text; + destination = destination.Replace(".m4v", ".mp4"); + text_destination.Text = destination; + data_chpt.Rows.Clear(); + data_chpt.Enabled = false; } } @@ -980,381 +892,296 @@ namespace Handbrake if (!drp_videoEncoder.Text.Contains("H.264")) { check_turbo.CheckState = CheckState.Unchecked; - CheckCRF.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; } - } - - private void CheckCRF_CheckedChanged(object sender, EventArgs e) - { - if (slider_videoQuality.Value == 0) + else { - MessageBox.Show("This option is can only be used with the 'Video Quality' slider.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - CheckCRF.CheckState = CheckState.Unchecked; + if (check_2PassEncode.CheckState == CheckState.Checked) + check_turbo.Enabled = true; + + h264Tab.Enabled = true; + check_iPodAtom.Enabled = true; + lbl_ipodAtom.Visible = false; + check_optimiseMP4.Enabled = true; + check_lAnamorphic.Enabled = true; } + } - public void setStreamReader(Parsing.DVD dvd) + #endregion + + #region Query Editor Tab + + private void btn_clear_Click(object sender, EventArgs e) { - this.thisDVD = dvd; + rtf_query.Clear(); } - private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e) + private void btn_generate_Query_Click(object sender, EventArgs e) { - // 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(); - QueryEditorText.Text = ""; + rtf_query.Text = hb_common_func.GenerateTheQuery(this); + } - // 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; + private void btn_copy2C_Click(object sender, EventArgs e) + { + if (rtf_query.Text != "") + Clipboard.SetText(rtf_query.Text, TextDataFormat.Text); + } - // Set the Aspect Ratio - lbl_Aspect.Text = selectedTitle.AspectRatio.ToString(); + #endregion - // 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(); - } + // -------------------------------------------------------------- + // Main Window Preset System + // -------------------------------------------------------------- - // 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(); - } + #region Preset System - // Populate the Audio Channels Dropdown - drp_audioChannels.Items.Clear(); - drp_audioChannels.Items.Add("Automatic"); - drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray()); - if (drp_audioChannels.Items.Count > 0) + // Import Current Presets + private void loadPresetPanel() + { + ArrayList presetNameList = new ArrayList(); + + string appPath = Application.StartupPath.ToString() + "\\presets.dat"; + if (File.Exists(appPath)) { - drp_audioChannels.Text = drp_audioChannels.Items[0].ToString(); + 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) + { + preset_treeview = new TreeNode(preset[0]); - // Populate the Subtitles dropdown - drp_subtitle.Items.Clear(); - drp_subtitle.Items.Add("None"); - drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray()); - if (drp_subtitle.Items.Count > 0) - { - drp_subtitle.Text = drp_subtitle.Items[0].ToString(); - } + // Now Fill Out List View with Items + treeView_presets.Nodes.Add(preset_treeview); } } - //--------------------------------------------------- - // The query Generation function. - //--------------------------------------------------- - public string GenerateTheQuery() + // Generate a new presets.dat file from the CLI + private void grabCLIPresets() { - 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+ '"'; //'"'+ - } + 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(); + } - if (dvdTitle == "Automatic") - dvdTitle = ""; - else + // Selects the preset called "normal". This is HandBrakes default settings + private void loadNormalPreset() + { + try { - string[] titleInfo = dvdTitle.Split(' '); - dvdTitle = " -t "+ titleInfo[0]; - } - - if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto")) - dvdChapter = ""; - else if (chapterFinish == chapterStart) - dvdChapter = " -c " + chapterStart; - else - dvdChapter = " -c " + chapterStart + "-" + chapterFinish; + string appPath = Application.StartupPath.ToString() + "\\presets.dat"; + if (File.Exists(appPath)) + { - string querySource = source+ dvdTitle+ dvdChapter; - // ---------------------------------------------------------------------- + int normal = 0; + foreach (TreeNode treenode in treeView_presets.Nodes) + { + if (treenode.ToString().Equals("TreeNode: Normal")) + normal = treenode.Index; + } - // Destination + TreeNode np = treeView_presets.Nodes[normal]; - 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; + treeView_presets.SelectedNode = np; + } + } + catch (Exception) + { + // Do nothing + } + } - if (destination == "") - MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - else - destination = " -o " + '"' + destination + '"'; //'"'+ + // 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); + } + // 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; - switch (videoEncoder) + try { - case "Mpeg 4": - videoEncoder = " -e ffmpeg"; - break; - case "Xvid": - videoEncoder = " -e xvid"; - break; - case "H.264": - videoEncoder = " -e x264"; - break; - case "H.264 Baseline 1.3": - videoEncoder = " -e x264b13"; - break; - case "H.264 (iPod)": - videoEncoder = " -e x264b30"; - break; - default: - videoEncoder = " -e x264"; - break; + 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(); + } + } } - - switch (audioEncoder) + catch (Exception exc) { - case "AAC": - audioEncoder = " -E faac"; - break; - case "MP3": - audioEncoder = " -E lame"; - break; - case "Vorbis": - audioEncoder = " -E vorbis"; - break; - case "AC3": - audioEncoder = " -E ac3"; - break; - default: - audioEncoder = " -E faac"; - break; + MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } + } - if (width != "") - width = " -w "+ width; - - - if (height != "") - height = " -l "+ height; - + #endregion - string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height; - // ---------------------------------------------------------------------- + //--------------------------------------------------- + // Encode / Cancel Buttons + // Encode Progress Text Handler + //--------------------------------------------------- - // Picture Settings Tab + #region Encodeing and Queue - 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 + Functions.CLI process = new Functions.CLI(); + private delegate void UpdateUIHandler(); - if (cropSetting == "Auto Crop") - cropOut = ""; - else if (cropSetting == "No Crop") - cropOut = " --crop 0:0:0:0 "; - else - cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight; + [DllImport("user32.dll")] + public static extern void LockWorkStation(); + [DllImport("user32.dll")] + public static extern int ExitWindowsEx(int uFlags, int dwReason); - if (subtitles == "None") - subtitles = ""; - else if (subtitles == "") - subtitles = ""; + 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 { - string[] tempSub; - tempSub = subtitles.Split(' '); - subtitles = " -s "+ tempSub[0]; - } - - 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 = ""; - string deinterlace = ""; - string grayscale = ""; - string videoFramerate = drp_videoFramerate.Text; - string pixelRatio = ""; - string ChapterMarkers = ""; - string turboH264 = ""; - string largeFile = ""; - - if (videoBitrate != "") - videoBitrate = " -b "+ videoBitrate; - - if (videoFilesize != "") - videoFilesize = " -S "+ videoFilesize; + String query; + if (rtf_query.Text != "") + query = rtf_query.Text; + else + query = hb_common_func.GenerateTheQuery(this); - // Video Quality Setting + ThreadPool.QueueUserWorkItem(procMonitor, query); + lbl_encode.Visible = true; + lbl_encode.Text = "Encoding in Progress"; + } + } - if ((videoQuality == 0)) - vidQSetting = ""; + 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 { - videoQuality = videoQuality/ 100; - if (videoQuality == 1) - { - vidQSetting = "1.0"; - } + String query; + if (rtf_query.Text != "") + query = rtf_query.Text; + else + query = hb_common_func.GenerateTheQuery(this); - vidQSetting = " -q " + videoQuality.ToString(); + queueWindow.list_queue.Items.Add(query); + queueWindow.Show(); } + } - if (check_2PassEncode.Checked) - twoPassEncoding = " -2 "; - - if (check_DeInterlace.Checked) - deinterlace = " -d "; + private void btn_showQueue_Click(object sender, EventArgs e) + { + showQueue(); + } - if (check_grayscale.Checked) - grayscale = " -g "; + private void showQueue() + { + queueWindow.Show(); + } - if (videoFramerate == "Automatic") - videoFramerate = ""; + 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 - videoFramerate = " -r "+ videoFramerate; - - if (CheckPixelRatio.Checked) - pixelRatio = " -p "; - - if (Check_ChapterMarkers.Checked) - ChapterMarkers = " -m "; - - if (check_turbo.Checked) - turboH264 = " -T "; - - if (check_largeFile.Checked) - largeFile = " -4 "; - - string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + deinterlace + grayscale + videoFramerate + pixelRatio + ChapterMarkers + turboH264 + largeFile; - // ---------------------------------------------------------------------- - - // Audio Settings Tab - - string audioBitrate = drp_audioBitrate.Text; - string audioSampleRate = drp_audioSampleRate.Text; - string audioChannels = drp_audioChannels.Text; - string Mixdown = drp_audioMixDown.Text; - string SixChannelAudio = ""; - - if (audioBitrate != "") - audioBitrate = " -B "+ audioBitrate; + { + hbProc = process.runCli(this, (string)state, false, false, false, false); + hbProc.WaitForExit(); - if (audioSampleRate != "") - audioSampleRate = " -R "+ audioSampleRate; + setEncodeLabel(); + hbProc = null; - if (audioChannels == "Automatic") - audioChannels = ""; - else if (audioChannels == "") - audioChannels = ""; - else - { - string[] tempSub; - tempSub = audioChannels.Split(' '); - audioChannels = " -a "+ tempSub[0]; + // 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; + } } + } - switch (Mixdown) + private void setEncodeLabel() + { + if (this.InvokeRequired) { - case "Automatic": - Mixdown = ""; - break; - case "Mono": - Mixdown = "mono"; - break; - case "Stereo": - Mixdown = "stereo"; - break; - case "Dolby Surround": - Mixdown = "dpl1"; - break; - case "Dolby Pro Logic II": - Mixdown = "dpl2"; - break; - case "6 Channel Discrete": - Mixdown = "6ch"; - break; - default: - Mixdown = "stero"; - break; + this.BeginInvoke(new UpdateUIHandler(setEncodeLabel)); + return; } + lbl_encode.Text = "Encoding Finished"; + } - if (Mixdown != "") - SixChannelAudio = " -6 "+ Mixdown; - else - SixChannelAudio = ""; - - string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio; - // ---------------------------------------------------------------------- - - // H.264 Tab - - string CRF = CheckCRF.CheckState.ToString(); - string h264Advanced = rtf_h264advanced.Text; - if ((CRF == "1")) - CRF = " -Q "; - else - CRF = ""; - - if ((h264Advanced == "")) - h264Advanced = ""; - else - h264Advanced = " -x "+ h264Advanced; - - - string h264Settings = CRF+ h264Advanced; - // ---------------------------------------------------------------------- - - // Processors (Program Settings) - - string processors = Properties.Settings.Default.Processors; - // Number of Processors Handler - - if (processors == "Automatic") - processors = ""; - else - processors = " -C "+ processors+ " "; - - - string queryAdvancedSettings = processors; - // ---------------------------------------------------------------------- - - // Verbose option (Program Settings) - - string verbose = ""; - if (Properties.Settings.Default.verbose == "Checked") - verbose = " -v "; + #endregion - // ---------------------------------------------------------------------- - return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose; - } // This is the END of the road ------------------------------------------------------------------------------ }