OSDN Git Service

Change the fifo size from being statically tuned for a Mac Pro with 4 CPUs to dynamic...
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index 2df32a3..06bc526 100644 (file)
@@ -1,5 +1,6 @@
 using System;\r
 using System.Collections.Generic;\r
+using System.Collections.Specialized;\r
 using System.ComponentModel;\r
 using System.Data;\r
 using System.Drawing;\r
@@ -10,7 +11,7 @@ using System.IO;
 using System.Diagnostics;\r
 using System.Threading;\r
 using System.Runtime.InteropServices;\r
-using Microsoft.VisualBasic;\r
+\r
 \r
 namespace Handbrake\r
 {\r
@@ -22,24 +23,16 @@ namespace Handbrake
         // --------------------------------------------------------------\r
 \r
         #region Application Startup\r
+\r
         private Process hbProc;\r
-        private Parsing.DVD thisDVD;\r
-        \r
-        // --------------------------------------------------------------\r
-        // Some windows that require only 1 instance.\r
-        // --------------------------------------------------------------\r
+        private Parsing.DVD thisDVD;        \r
         private frmQueue queueWindow = new frmQueue();  \r
-        //private frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
-        \r
 \r
-        /*\r
-         * Stuff that needs to be done on program launch\r
-         */\r
\r
         public frmMain()\r
         {\r
 \r
-            ThreadPool.QueueUserWorkItem(showSplash);\r
+            // Load the splash screen on another thread. Once completed wait for 1 second.\r
+            ThreadPool.QueueUserWorkItem(showSplash); \r
             Thread.Sleep(1000);\r
 \r
             InitializeComponent();\r
@@ -49,33 +42,42 @@ namespace Handbrake
             //dvdInfoWindow.Hide();\r
             // **********************************************************************************************\r
 \r
-            // System Requirements Check\r
-            systemCheck();\r
-\r
             // Set the Version number lable to the corect version.\r
-            Version.Text = "Version " + Properties.Settings.Default.GuiVersion;\r
+            Version.Text = "Version " + Properties.Settings.Default.CliVersion;\r
 \r
             // Run the update checker.\r
             updateCheck();\r
 \r
-            // Now load the users default if required.\r
+            // Now load the users default if required. (Will overide the above setting)\r
             loadUserDefaults();\r
 \r
-            // Display the quick start window if required.\r
-            quickStart();\r
-\r
             // Enable or disable tooltips\r
             tooltip();\r
 \r
+            // Hide the presets part of the window\r
+            this.Width = 590;\r
+\r
+            showPresets();\r
+\r
+            /*\r
+             * This code can be used for storing preset and preset name information in future versions.\r
+             * Please ignore it for the moment.\r
+            // Create and initialize a new StringCollection.\r
+            StringCollection myCol = new StringCollection();\r
+            // Add a range of elements from an array to the end of the StringCollection.\r
+            String[] myArr = new String[] { "RED", "orange", "yellow", "RED", "green", "blue", "RED", "indigo", "violet", "RED" };\r
+            myCol.AddRange(myArr);\r
+            Properties.Settings.Default.BuiltInPresets = myCol;\r
+            MessageBox.Show(Properties.Settings.Default.BuiltInPresets.ToString());\r
+            */\r
         }\r
 \r
-        #region Initializeation Functions\r
-        \r
         private void showSplash(object sender)\r
         {\r
+            // Display splash screen for 1.5 Seconds\r
             Form splash = new frmSplashScreen();\r
             splash.Show();\r
-            Thread.Sleep(1500);  // Display splash screen for 1.5 Seconds\r
+            Thread.Sleep(1500);  \r
             splash.Close(); // Then close.\r
         }\r
 \r
@@ -83,6 +85,7 @@ namespace Handbrake
         { \r
             try\r
             {\r
+                // Load the users default settings or if the user has not got this option enabled, load the normal preset.\r
                 if (Properties.Settings.Default.defaultSettings == "Checked")\r
                 {\r
                     // Source\r
@@ -115,7 +118,7 @@ namespace Handbrake
                     {\r
                         check_2PassEncode.CheckState = CheckState.Checked;\r
                     }\r
-  \r
+\r
                     drp_deInterlace_option.Text = Properties.Settings.Default.DeInterlace;\r
                     drp_deNoise.Text = Properties.Settings.Default.denoise;\r
 \r
@@ -160,6 +163,13 @@ namespace Handbrake
                         CheckCRF.CheckState = CheckState.Checked;\r
                     }\r
                     rtf_h264advanced.Text = Properties.Settings.Default.H264;\r
+\r
+                    groupBox_output.Text = "Output Settings (Preset: " + Properties.Settings.Default.selectedPreset + ")";\r
+                }\r
+                else\r
+                {\r
+                    // Load the default preset on lauch\r
+                    ListBox_Presets.SelectedItem = "Normal";\r
                 }\r
             }\r
             catch (Exception)\r
@@ -168,142 +178,329 @@ namespace Handbrake
             }\r
         }\r
 \r
-        private int updateCheck()\r
+        private Boolean updateCheck()\r
         {\r
             try\r
             {\r
-                String updateFile = Properties.Settings.Default.updateFile;\r
-                WebClient client = new WebClient();\r
-                String data = client.DownloadString(updateFile);\r
-                String[] versionData = data.Split('\n');\r
-\r
-                if ((versionData[0] != Properties.Settings.Default.GuiVersion) || (versionData[1] != Properties.Settings.Default.CliVersion))\r
+                if (Properties.Settings.Default.updateStatus == "Checked")\r
                 {\r
-                    lbl_update.Visible = true;\r
-                    return 1;\r
+                    String updateFile = Properties.Settings.Default.updateFile;\r
+                    WebClient client = new WebClient();\r
+                    String data = client.DownloadString(updateFile);\r
+                    String[] versionData = data.Split('\n');\r
+\r
+                    int verdata = int.Parse(versionData[0].Replace(".", ""));\r
+                    int vergui = int.Parse(Properties.Settings.Default.GuiVersion.Replace(".", ""));\r
+                    int verd1 = int.Parse(versionData[1].Replace(".", ""));\r
+                    int cliversion = int.Parse(Properties.Settings.Default.CliVersion.Replace(".", ""));\r
+\r
+                    Boolean update = ((verdata > vergui) || (verd1 > cliversion));\r
+   \r
+                    lbl_update.Visible = update;\r
+\r
+                    return update;   \r
                 }\r
                 else\r
                 {\r
-                    return 0;\r
+                    return false;\r
                 }\r
             }\r
             catch (Exception)\r
             {\r
                 // Silently ignore the error\r
-                return 0;\r
+                return false;\r
             }\r
         }\r
 \r
-        private void quickStart()\r
+        private void tooltip()\r
         {\r
-            if ((Properties.Settings.Default.QuickStartWindow == "Checked") || (Properties.Settings.Default.QuickStartWindow == ""))\r
+            if (Properties.Settings.Default.tooltipEnable == "Checked")\r
             {\r
-                frmQuickStart quickstart = new frmQuickStart();\r
-                quickstart.ShowDialog();\r
+                ToolTip.Active = true;\r
             }\r
         }\r
 \r
-        private void tooltip()\r
+        private void showPresets()\r
         {\r
-            if (Properties.Settings.Default.tooltipEnable == "Checked")\r
+            if (Properties.Settings.Default.showPresets == "Checked")\r
             {\r
-                ToolTip.Active = true;\r
+                btn_presets.Visible = false;\r
+                this.Width = 881;\r
             }\r
+\r
         }\r
 \r
-        #region Memory Check\r
+        #endregion\r
+\r
+        // -------------------------------------------------------------- \r
+        // The main Menu bar.\r
+        // -------------------------------------------------------------- \r
 \r
-        public struct MEMORYSTATUS\r
+        #region File Menu\r
+\r
+        private void mnu_exit_Click(object sender, EventArgs e)\r
         {\r
-            public UInt32 dwLength;\r
-            public UInt32 dwMemoryLoad;\r
-            public UInt32 dwTotalPhys; // Used\r
-            public UInt32 dwAvailPhys;\r
-            public UInt32 dwTotalPageFile;\r
-            public UInt32 dwAvailPageFile;\r
-            public UInt32 dwTotalVirtual;\r
-            public UInt32 dwAvailVirtual;\r
-            // Aditional Varibles left in for future usage (JIC)\r
+            Application.Exit();\r
         }\r
 \r
-        [DllImport("kernel32.dll")]\r
-        public static extern void GlobalMemoryStatus\r
-        (\r
-            ref MEMORYSTATUS lpBuffer\r
-        );\r
+        #endregion\r
 \r
-        public uint CheckMemeory()\r
+        #region Tools Menu\r
+\r
+        private void mnu_encode_Click(object sender, EventArgs e)\r
+        {\r
+            showQueue();\r
+        }\r
+   \r
+        private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
         {\r
-            // Call the native GlobalMemoryStatus method\r
-            // with the defined structure.\r
-            MEMORYSTATUS memStatus = new MEMORYSTATUS();\r
-            GlobalMemoryStatus(ref memStatus);\r
+            frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
+            dvdInfoWindow.Show();\r
+        }\r
 \r
-            // Use a StringBuilder for the message box string.\r
-            uint MemoryInfo = memStatus.dwTotalPhys;\r
+        private void mnu_options_Click(object sender, EventArgs e)\r
+        {\r
+            Form Options = new frmOptions();\r
+            Options.ShowDialog();\r
+        }\r
 \r
-            // Return the Ram Information\r
-            return MemoryInfo;\r
+        #endregion\r
 \r
+        #region Presets Menu\r
+\r
+        private void mnu_presetReset_Click(object sender, EventArgs e)\r
+        {\r
+            ListBox_Presets.Items.Clear();\r
+            ListBox_Presets.Items.Add("Animation");\r
+            ListBox_Presets.Items.Add("AppleTV");\r
+            ListBox_Presets.Items.Add("Bedlam");\r
+            ListBox_Presets.Items.Add("Blind");\r
+            ListBox_Presets.Items.Add("Broke");\r
+            ListBox_Presets.Items.Add("Classic");\r
+            ListBox_Presets.Items.Add("Constant Quality Rate");\r
+            ListBox_Presets.Items.Add("Deux Six Quatre");\r
+            ListBox_Presets.Items.Add("Film");\r
+            ListBox_Presets.Items.Add("iPhone");\r
+            ListBox_Presets.Items.Add("iPod High-Rez");\r
+            ListBox_Presets.Items.Add("iPod Low-Rez");\r
+            ListBox_Presets.Items.Add("Normal");\r
+            ListBox_Presets.Items.Add("PS3");\r
+            ListBox_Presets.Items.Add("PSP");\r
+            ListBox_Presets.Items.Add("QuickTime");\r
+            ListBox_Presets.Items.Add("Television");\r
+\r
+            if (presetStatus == false)\r
+            {\r
+                this.Width = 881;\r
+                presetStatus = true;\r
+                btn_presets.Text = "Hide Presets";\r
+            }\r
         }\r
 \r
+        private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
+        {\r
+            ListBox_Presets.SelectedItem = "Normal";\r
+            if (presetStatus == false)\r
+            {\r
+                this.Width = 881;\r
+                presetStatus = true;\r
+                btn_presets.Text = "Hide Presets";\r
+            }\r
+        }\r
 \r
         #endregion\r
-        Boolean preventLaunch = false;\r
-        private void systemCheck()\r
+\r
+        #region Help Menu\r
+\r
+\r
+        private void mnu_quickStart_Click(object sender, EventArgs e)\r
         {\r
-            try\r
-            {\r
-                // Make sure the screen resolution is not below 1024x768\r
-                System.Windows.Forms.Screen scr = System.Windows.Forms.Screen.PrimaryScreen;\r
-                if ((scr.Bounds.Width < 1024) || (scr.Bounds.Height < 768))\r
-                {\r
-                    MessageBox.Show("Your system does not meet the minimum requirements for HandBrake. \n Screen resolution is too Low. Must be 1024x768 or greater", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
-                    preventLaunch = true;\r
-                }\r
+            Form QuickStart = new frmQuickStart();\r
+            QuickStart.ShowDialog();\r
+        }\r
+\r
+        private void mnu_wiki_Click(object sender, EventArgs e)\r
+        {\r
+           Process.Start("http://handbrake.m0k.org/trac");\r
+        }\r
 \r
-                // Make sure the system has enough RAM. 384MB or greater\r
-                uint memory = CheckMemeory();\r
+        private void mnu_faq_Click(object sender, EventArgs e)\r
+        {\r
+            Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq");\r
+        }\r
 \r
-                if (memory < 319) // Set to 319 to allow for 64MB dedicated to video Memory and Windows returnig the memory figure slightly out.\r
-                {\r
-                    MessageBox.Show("Your system does not meet the minimum requirements for HandBrake. \n Insufficient Memory. 384MB or greater required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
-                    preventLaunch = true;\r
-                }\r
+        private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
+        {\r
+            Process.Start("http://handbrake.m0k.org/?page_id=11");\r
+        }\r
+\r
+        private void mnu_homepage_Click(object sender, EventArgs e)\r
+        {\r
+           Process.Start("http://handbrake.m0k.org");\r
+        }\r
+\r
+        private void mnu_forum_Click(object sender, EventArgs e)\r
+        {\r
+            Process.Start("http://handbrake.m0k.org/forum");\r
+        }\r
+\r
+        private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
+        {\r
+            Boolean update = updateCheck();\r
+            if (update == true)\r
+            {\r
+                MessageBox.Show("There is a new update available. Please visit http://handbrake.m0k.org for details!", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
             }\r
-            catch (Exception exc)\r
+            else\r
             {\r
-                if (Properties.Settings.Default.GuiDebug == "Checked")\r
-                {\r
-                    MessageBox.Show("frmMain.cs - systemCheck() " + exc.ToString());\r
-                }\r
+                MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
             }\r
         }\r
 \r
-        #endregion\r
-\r
+        private void mnu_about_Click(object sender, EventArgs e)\r
+        {\r
+                       Form About = new frmAbout();\r
+            About.ShowDialog();\r
+        }\r
 \r
+        #endregion\r
 \r
         // -------------------------------------------------------------- \r
-        // Close the Application on main window load if required by the system Check\r
+        // Buttons on the main Window\r
         // --------------------------------------------------------------\r
 \r
-        private void frmMain_Load(object sender, EventArgs e)\r
+        #region Buttons\r
+\r
+        private void btn_Browse_Click(object sender, EventArgs e)\r
         {\r
-            if (preventLaunch == true)\r
+            String filename = ""; \r
+                   text_source.Text = "";\r
+            frmDvdInfo dvdInfoWindow = new frmDvdInfo();                \r
+                   if (RadioDVD.Checked) \r
+                   { \r
+                       DVD_Open.ShowDialog(); \r
+                       filename = DVD_Open.SelectedPath; \r
+                       if (filename != "") \r
+                       { \r
+                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
+                           text_source.Text = filename; \r
+                           frmRD.ShowDialog(); \r
+                       } \r
+                    } \r
+                    else \r
+                    { \r
+                       ISO_Open.ShowDialog(); \r
+                       filename = ISO_Open.FileName; \r
+                       if (filename != "") \r
+                       { \r
+                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
+                           text_source.Text = filename; \r
+                           frmRD.ShowDialog(); \r
+                       } \r
+                    }   \r
+                \r
+                    // Check if there was titles in the dvd title dropdown \r
+                    if (filename == "") \r
+                    { \r
+                       text_source.Text = "Click 'Browse' to continue"; \r
+                    } \r
+                   \r
+             // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
+                    if (drp_dvdtitle.Items.Count == 0) \r
+                    { \r
+                       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); \r
+                    }                  \r
+        }\r
+\r
+        private void btn_destBrowse_Click(object sender, EventArgs e)\r
+        {\r
+            DVD_Save.ShowDialog();\r
+            text_destination.Text = DVD_Save.FileName;\r
+\r
+            if (Check_ChapterMarkers.Checked)\r
             {\r
-                Application.Exit();\r
+                string destination = text_destination.Text;\r
+                destination = destination.Replace(".mp4", ".m4v");\r
+                text_destination.Text = destination;\r
             }\r
         }\r
+\r
+        private void btn_h264Clear_Click(object sender, EventArgs e)\r
+        {\r
+            rtf_h264advanced.Text = "";\r
+        }\r
+\r
+        private void GenerateQuery_Click(object sender, EventArgs e)\r
+        {\r
+            String query = GenerateTheQuery();\r
+            QueryEditorText.Text = query;\r
+        }\r
+\r
+        private void btn_ClearQuery_Click(object sender, EventArgs e)\r
+        {\r
+            QueryEditorText.Text = "";\r
+        }\r
+\r
+        private void btn_queue_Click(object sender, EventArgs e)\r
+        {\r
+            if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
+                MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+            else\r
+            {\r
+                string query;\r
+                if (QueryEditorText.Text == "")\r
+                {\r
+                    query = GenerateTheQuery();\r
+                }\r
+                else\r
+                {\r
+                    query = QueryEditorText.Text;\r
+                }\r
+                queueWindow.list_queue.Items.Add(query);\r
+                queueWindow.Show();\r
+            } \r
+        }\r
+\r
+        private void btn_copy_Click(object sender, EventArgs e)\r
+        {\r
+            Clipboard.SetText(QueryEditorText.Text, TextDataFormat.Text);\r
+        }\r
+\r
+        private void showQueue()\r
+        {\r
+            queueWindow.Show();\r
+        }\r
+\r
         #endregion\r
 \r
         // -------------------------------------------------------------- \r
-        // The main Menu bar.\r
-        // -------------------------------------------------------------- \r
+        // Main Window Preset System\r
+        // --------------------------------------------------------------\r
 \r
-        #region File Menu\r
+        #region Preset System\r
+\r
+        // Varibles\r
+        private Boolean presetStatus = false;\r
+\r
+        // Buttons\r
+        private void btn_presets_Click(object sender, EventArgs e)\r
+        {\r
+            if (presetStatus == false)\r
+            {\r
+                this.Width = 881;\r
+                presetStatus = true;\r
+                btn_presets.Text = "Hide Presets";\r
+            }\r
+            else\r
+            {\r
+                this.Width = 590;\r
+                presetStatus = false;\r
+                btn_presets.Text = "Show Presets";\r
+            }\r
 \r
-        private void mnu_open_Click(object sender, EventArgs e)\r
+        }\r
+\r
+        private void btn_addPreset_Click(object sender, EventArgs e)\r
         {\r
             string filename;\r
             File_Open.ShowDialog();\r
@@ -315,7 +512,7 @@ namespace Handbrake
                     // Create StreamReader & open file\r
                     StreamReader line = new StreamReader(filename);\r
                     string temporyLine; // Used for reading the line into a varible before processing on the checkState items below.\r
-                    \r
+\r
                     // Read in the data and set the correct GUI component with the setting.\r
                     text_source.Text = line.ReadLine();\r
                     drp_dvdtitle.Text = line.ReadLine();\r
@@ -374,12 +571,12 @@ namespace Handbrake
                     {\r
                         check_largeFile.CheckState = CheckState.Checked;\r
                     }\r
-   \r
+\r
                     drp_audioBitrate.Text = line.ReadLine();\r
                     drp_audioSampleRate.Text = line.ReadLine();\r
                     drp_audioChannels.Text = line.ReadLine();\r
                     drp_audioMixDown.Text = line.ReadLine();\r
-                    \r
+\r
                     // Advanced H264 Options\r
                     temporyLine = line.ReadLine();\r
                     if (temporyLine == "Checked")\r
@@ -395,15 +592,16 @@ namespace Handbrake
                     // Fix for SliderValue not appearing when Opening saved file\r
                     SliderValue.Text = slider_videoQuality.Value + "%";\r
 \r
-                } catch (Exception){\r
+                }\r
+                catch (Exception)\r
+                {\r
                     MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
                 }\r
             }\r
         }\r
 \r
-        private void mnu_save_Click(object sender, EventArgs e)\r
+        private void btn_removePreset_Click(object sender, EventArgs e)\r
         {\r
-\r
             string filename;\r
             File_Save.ShowDialog();\r
             filename = File_Save.FileName;\r
@@ -415,240 +613,55 @@ namespace Handbrake
                     StreamWriter line = new StreamWriter(filename);\r
 \r
                     //Source\r
-                    line.WriteLine(text_source.Text);\r
-                    line.WriteLine(drp_dvdtitle.Text);\r
-                    line.WriteLine(drop_chapterStart.Text);\r
-                    line.WriteLine(drop_chapterFinish.Text);\r
-                    //Destination\r
-                    line.WriteLine(text_destination.Text);\r
-                    line.WriteLine(drp_videoEncoder.Text);\r
-                    line.WriteLine(drp_audioCodec.Text);\r
-                    line.WriteLine(text_width.Text);\r
-                    line.WriteLine(text_height.Text);\r
-                    //Picture Settings Tab\r
-                    line.WriteLine(text_top.Text);\r
-                    line.WriteLine(text_bottom.Text);\r
-                    line.WriteLine(text_left.Text);\r
-                    line.WriteLine(text_right.Text);\r
-                    line.WriteLine(drp_subtitle.Text);\r
-                    //Video Settings Tab\r
-                    line.WriteLine(text_bitrate.Text);\r
-                    line.WriteLine(text_filesize.Text);\r
-                    line.WriteLine(slider_videoQuality.Value.ToString());\r
-                    line.WriteLine(check_2PassEncode.CheckState.ToString());\r
-                    line.WriteLine(drp_deInterlace_option.Text);\r
-                    line.WriteLine(check_grayscale.CheckState.ToString());\r
-                    line.WriteLine(drp_videoFramerate.Text);\r
-                    line.WriteLine(Check_ChapterMarkers.CheckState.ToString());\r
-                    line.WriteLine(CheckPixelRatio.CheckState.ToString());\r
-                    line.WriteLine(check_turbo.CheckState.ToString());\r
-                    line.WriteLine(check_largeFile.CheckState.ToString());\r
-                    //Audio Settings Tab\r
-                    line.WriteLine(drp_audioBitrate.Text);\r
-                    line.WriteLine(drp_audioSampleRate.Text);\r
-                    line.WriteLine(drp_audioChannels.Text);\r
-                    line.WriteLine(drp_audioMixDown.Text);\r
-                    //H264 Tab\r
-                    line.WriteLine(CheckCRF.CheckState.ToString());\r
-                    line.WriteLine(rtf_h264advanced.Text);\r
-                    // close the stream\r
-                    line.Close();\r
-                    MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
-                }\r
-                catch(Exception)\r
-                {\r
-                    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);\r
-                }\r
-                \r
-            }\r
-        }\r
-\r
-        private void mnu_update_Click(object sender, EventArgs e)\r
-        {\r
-            int update = updateCheck();\r
-            if (update == 1)\r
-            {\r
-                MessageBox.Show("There is a new update available. Please visit http://handbrake.m0k.org for details!", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
-            }\r
-            else\r
-            {\r
-                MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
-            }\r
-        }\r
-\r
-        private void mnu_exit_Click(object sender, EventArgs e)\r
-        {\r
-            Application.Exit();\r
-        }\r
-\r
-        #endregion\r
-\r
-        #region Tools Menu\r
-\r
-        private void mnu_encode_Click(object sender, EventArgs e)\r
-        {\r
-            showQueue();\r
-        }\r
-   \r
-        private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
-        {\r
-            frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
-            dvdInfoWindow.Show();\r
-        }\r
-\r
-        private void mnu_options_Click(object sender, EventArgs e)\r
-        {\r
-            Form Options = new frmOptions();\r
-            Options.ShowDialog();\r
-        }\r
-\r
-        #endregion\r
-\r
-        #region Presets Menu\r
-        // Need to write a handler for file extension\r
-\r
-        private void mnu_animation_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Apple Animation)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        private void mnu_appleTv_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Apple TV)");\r
-        }\r
-\r
-        private void mnu_bedlam_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "1800", "", 0, "0%", "160", CheckState.Checked, "48", "ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Bedlam)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        private void mnu_blind_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "512", "", "H.264", "512", "", 0, "0%", "128", CheckState.Checked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Blind)");\r
-        }\r
-\r
-        private void mnu_broke_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "", "695", 0, "0%", "128", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid::direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Broke)");\r
-        }\r
-\r
-        private void mnu_Classic_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Classic)");\r
-        }\r
-\r
-        private void mnu_CQR_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "", "", 64, "64%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AC3", "Output Settings (Preset: CQR)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        private void mnu_DSQ_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "1600", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: DSQ)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        private void mnu_film_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: Film)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        private void mnu_iphone_Click(object sender, EventArgs e)\r
-        {\r
-\r
-            setGuiSetttings(CheckState.Unchecked, "480", "", "H.264", "960", "", 0, "0%", "128", CheckState.Checked, "48", "cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPhone)");\r
-\r
-        }\r
-\r
-        private void mnu_ipod_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod High Rez)");\r
-        }\r
-\r
-        private void mnu_ipodLow_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "320", "", "H.264", "700", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod Low Rez)");\r
-        }\r
-\r
-        private void mnu_normal_Click(object sender, EventArgs e)\r
-        {\r
-\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "ref=2:bframes=2:subme=5:me=umh", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Normal)");\r
-\r
-        }\r
-\r
-        private void mnu_PS3_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "level=41:subme=5:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PS3)");\r
-        }\r
-\r
-        private void mnu_psp_Click(object sender, EventArgs e)\r
-        {\r
-            setGuiSetttings(CheckState.Unchecked, "368", "208", "Mpeg 4", "1024", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PSP)");\r
-        }\r
-\r
-        private void mnu_qt_Click(object sender, EventArgs e)\r
-        {\r
-\r
-            setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct-auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Quicktime)");\r
-\r
-        }\r
-\r
-        private void mnu_television_Click(object sender, EventArgs e)\r
-        {\r
-\r
-            setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1300", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Television)");\r
-\r
-            setMkv();\r
-        }\r
-\r
-        // Function to setup the preset.\r
-        // It's a bit dirty but i'll sort this out later. Simply done to reduce the amount of code above.\r
-        private void setGuiSetttings(CheckState anamorphic, string width, string height, string vencoder, string bitrate, string filesize, int quality, string qpercent, string audioBit, CheckState chpt, string audioSample, string h264, string deinterlace, CheckState twopass, string crop, CheckState turbo, string audioCodec, string preset)\r
-        {\r
-            CheckPixelRatio.CheckState = anamorphic;\r
-            text_width.Text = width;\r
-            text_height.Text = height;\r
-            drp_videoEncoder.Text = vencoder;\r
-            text_bitrate.Text = bitrate;\r
-            text_filesize.Text = filesize;\r
-            slider_videoQuality.Value = quality;\r
-            SliderValue.Text = qpercent;\r
-            drp_audioBitrate.Text = audioBit;\r
-            Check_ChapterMarkers.CheckState = chpt;\r
-            drp_audioSampleRate.Text = audioSample;\r
-            rtf_h264advanced.Text = h264;\r
-            drp_deInterlace_option.Text = deinterlace;\r
-            check_2PassEncode.CheckState = twopass;\r
-            drp_crop.Text = crop;\r
-            check_turbo.CheckState = turbo;\r
-            drp_audioCodec.Text = audioCodec;\r
-\r
-            groupBox_output.Text = preset;\r
-        }\r
+                    line.WriteLine(text_source.Text);\r
+                    line.WriteLine(drp_dvdtitle.Text);\r
+                    line.WriteLine(drop_chapterStart.Text);\r
+                    line.WriteLine(drop_chapterFinish.Text);\r
+                    //Destination\r
+                    line.WriteLine(text_destination.Text);\r
+                    line.WriteLine(drp_videoEncoder.Text);\r
+                    line.WriteLine(drp_audioCodec.Text);\r
+                    line.WriteLine(text_width.Text);\r
+                    line.WriteLine(text_height.Text);\r
+                    //Picture Settings Tab\r
+                    line.WriteLine(text_top.Text);\r
+                    line.WriteLine(text_bottom.Text);\r
+                    line.WriteLine(text_left.Text);\r
+                    line.WriteLine(text_right.Text);\r
+                    line.WriteLine(drp_subtitle.Text);\r
+                    //Video Settings Tab\r
+                    line.WriteLine(text_bitrate.Text);\r
+                    line.WriteLine(text_filesize.Text);\r
+                    line.WriteLine(slider_videoQuality.Value.ToString());\r
+                    line.WriteLine(check_2PassEncode.CheckState.ToString());\r
+                    line.WriteLine(drp_deInterlace_option.Text);\r
+                    line.WriteLine(check_grayscale.CheckState.ToString());\r
+                    line.WriteLine(drp_videoFramerate.Text);\r
+                    line.WriteLine(Check_ChapterMarkers.CheckState.ToString());\r
+                    line.WriteLine(CheckPixelRatio.CheckState.ToString());\r
+                    line.WriteLine(check_turbo.CheckState.ToString());\r
+                    line.WriteLine(check_largeFile.CheckState.ToString());\r
+                    //Audio Settings Tab\r
+                    line.WriteLine(drp_audioBitrate.Text);\r
+                    line.WriteLine(drp_audioSampleRate.Text);\r
+                    line.WriteLine(drp_audioChannels.Text);\r
+                    line.WriteLine(drp_audioMixDown.Text);\r
+                    //H264 Tab\r
+                    line.WriteLine(CheckCRF.CheckState.ToString());\r
+                    line.WriteLine(rtf_h264advanced.Text);\r
+                    // close the stream\r
+                    line.Close();\r
+                    MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
+                }\r
+                catch (Exception)\r
+                {\r
+                    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);\r
+                }\r
 \r
-        private void setMkv()\r
-        {\r
-            // Set file extension to MKV\r
-            string destination = text_destination.Text;\r
-            destination = destination.Replace(".mp4", ".mkv");\r
-            destination = destination.Replace(".avi", ".mkv");\r
-            destination = destination.Replace(".m4v", ".mkv");\r
-            destination = destination.Replace(".ogm", ".mkv");\r
-            text_destination.Text = destination;\r
+            }\r
         }\r
 \r
-        // Set user default settings are main gui settings.\r
-        private void mnu_ProgramDefaultOptions_Click(object sender, EventArgs e)\r
+        private void btn_setDefault_Click(object sender, EventArgs e)\r
         {\r
             //Source\r
             Properties.Settings.Default.DVDSource = text_source.Text;\r
@@ -689,148 +702,127 @@ namespace Handbrake
             //H264 Tab\r
             Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString();\r
             Properties.Settings.Default.H264 = rtf_h264advanced.Text;\r
-\r
+            try\r
+            {\r
+                Properties.Settings.Default.selectedPreset = ListBox_Presets.SelectedItem.ToString();\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                // If the user has not selected an item, then an exception may be thrown. Catch and ignore.\r
+            }\r
             Properties.Settings.Default.Save();\r
         }\r
 \r
-        #endregion\r
-\r
-        #region Help Menu\r
-\r
-        private void mnu_wiki_Click(object sender, EventArgs e)\r
-        {\r
-           Process.Start("http://handbrake.m0k.org/trac");\r
-        }\r
-\r
-        private void mnu_faq_Click(object sender, EventArgs e)\r
-        {\r
-            Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq");\r
-        }\r
-\r
-        private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
-        {\r
-            Process.Start("http://handbrake.m0k.org/?page_id=11");\r
-        }\r
-\r
-        private void mnu_homepage_Click(object sender, EventArgs e)\r
-        {\r
-           Process.Start("http://handbrake.m0k.org");\r
-        }\r
-\r
-        private void mnu_forum_Click(object sender, EventArgs e)\r
-        {\r
-            Process.Start("http://handbrake.m0k.org/forum");\r
-        }\r
-\r
-        private void mnu_about_Click(object sender, EventArgs e)\r
-        {\r
-                       Form About = new frmAbout();\r
-            About.ShowDialog();\r
-        }\r
-\r
-        #endregion\r
-\r
-        // -------------------------------------------------------------- \r
-        // Buttons on the main Window\r
-        // --------------------------------------------------------------\r
-\r
-        #region Buttons\r
-        private void btn_Browse_Click(object sender, EventArgs e)\r
-        {\r
-            String filename =""; \r
-                   text_source.Text = "";\r
-            frmDvdInfo dvdInfoWindow = new frmDvdInfo();                \r
-                   if (RadioDVD.Checked) \r
-                   { \r
-                       DVD_Open.ShowDialog(); \r
-                       filename = DVD_Open.SelectedPath; \r
-                       if (filename != "") \r
-                       { \r
-                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
-                           text_source.Text = filename; \r
-                           frmRD.ShowDialog(); \r
-                       } \r
-                    } \r
-                    else \r
-                    { \r
-                       ISO_Open.ShowDialog(); \r
-                       filename = ISO_Open.FileName; \r
-                       if (filename != "") \r
-                       { \r
-                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
-                           text_source.Text = filename; \r
-                           frmRD.ShowDialog(); \r
-                       } \r
-                    }   \r
-                \r
-                    // Check if there was titles in the dvd title dropdown \r
-                    if (filename == "") \r
-                    { \r
-                       text_source.Text = "Click 'Browse' to continue"; \r
-                    } \r
-                \r
-                    if (drp_dvdtitle.Items.Count == 0) \r
-                    { \r
-                       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); \r
-                    }                  \r
-        }\r
-\r
-        private void btn_destBrowse_Click(object sender, EventArgs e)\r
+        // Preset Seleciton\r
+        private void ListBox_Presets_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
-            // TODO: Need to write some code to check if there is a reasonable amount of disk space left.\r
-\r
-            DVD_Save.ShowDialog();\r
-            text_destination.Text = DVD_Save.FileName;\r
-\r
-            if (Check_ChapterMarkers.Checked)\r
+            string selectedPreset = null;\r
+            if (ListBox_Presets.SelectedItem != null)\r
             {\r
-                string destination = text_destination.Text;\r
-                destination = destination.Replace(".mp4", ".m4v");\r
-                text_destination.Text = destination;\r
+                selectedPreset = ListBox_Presets.SelectedItem.ToString();\r
+            }\r
+            else\r
+            {\r
+                selectedPreset = "";\r
             }\r
-        }\r
-\r
-        private void btn_h264Clear_Click(object sender, EventArgs e)\r
-        {\r
-            rtf_h264advanced.Text = "";\r
-        }\r
 \r
-        private void GenerateQuery_Click(object sender, EventArgs e)\r
-        {\r
-            String query = GenerateTheQuery();\r
-            QueryEditorText.Text = query;\r
+            switch (selectedPreset)\r
+            {\r
+                case "Animation":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Apple Animation)");\r
+                    setMkv();\r
+                    break;\r
+                case "AppleTV":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Apple TV)");\r
+                    break;\r
+                case "Bedlam":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "1800", "", 0, "0%", "160", CheckState.Checked, "48", "ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Bedlam)");\r
+                    setMkv();\r
+                    break;\r
+                case "Blind":\r
+                    setGuiSetttings(CheckState.Unchecked, "512", "", "H.264", "512", "", 0, "0%", "128", CheckState.Checked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Blind)");\r
+                    break;\r
+                case "Broke":\r
+                    setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "", "695", 0, "0%", "128", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid::direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Broke)");\r
+                    break;\r
+                case "Classic":\r
+                    setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Classic)");\r
+                    break;\r
+                case "Constant Quality Rate":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "", "", 64, "64%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AC3", "Output Settings (Preset: CQR)");\r
+                    setMkv();\r
+                    break;\r
+                case "Deux Six Quatre":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "1600", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: DSQ)");\r
+                    setMkv();\r
+                    break;\r
+                case "Film":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: Film)");\r
+                    setMkv();\r
+                    break;\r
+                case "iPhone":\r
+                    setGuiSetttings(CheckState.Unchecked, "480", "", "H.264", "960", "", 0, "0%", "128", CheckState.Checked, "48", "cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPhone)");\r
+                    break;\r
+                case "iPod High-Rez":\r
+                    setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod High Rez)");\r
+                    break;\r
+                case "iPod Low-Rez":\r
+                    setGuiSetttings(CheckState.Unchecked, "320", "", "H.264", "700", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod Low Rez)");\r
+                    break;\r
+                case "Normal":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "ref=2:bframes=2:subme=5:me=umh", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Normal)");\r
+                    break;\r
+                case "PS3":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "level=41:subme=5:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PS3)");\r
+                    break;\r
+                case "PSP":\r
+                    setGuiSetttings(CheckState.Unchecked, "368", "208", "Mpeg 4", "1024", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PSP)");\r
+                    break;\r
+                case "QuickTime":\r
+                    setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct-auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Quicktime)");\r
+                    break;\r
+                case "Television":\r
+                    setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1300", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Television)");\r
+                    setMkv();\r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
         }\r
 \r
-        private void btn_ClearQuery_Click(object sender, EventArgs e)\r
+        // Functions - It's a bit dirty but i'll sort this out later. Simply done to reduce the amount of code above.\r
+        private void setGuiSetttings(CheckState anamorphic, string width, string height, string vencoder, string bitrate, string filesize, int quality, string qpercent, string audioBit, CheckState chpt, string audioSample, string h264, string deinterlace, CheckState twopass, string crop, CheckState turbo, string audioCodec, string preset)\r
         {\r
-            QueryEditorText.Text = "";\r
-        }\r
+            CheckPixelRatio.CheckState = anamorphic;\r
+            text_width.Text = width;\r
+            text_height.Text = height;\r
+            drp_videoEncoder.Text = vencoder;\r
+            text_bitrate.Text = bitrate;\r
+            text_filesize.Text = filesize;\r
+            slider_videoQuality.Value = quality;\r
+            SliderValue.Text = qpercent;\r
+            drp_audioBitrate.Text = audioBit;\r
+            Check_ChapterMarkers.CheckState = chpt;\r
+            drp_audioSampleRate.Text = audioSample;\r
+            rtf_h264advanced.Text = h264;\r
+            drp_deInterlace_option.Text = deinterlace;\r
+            check_2PassEncode.CheckState = twopass;\r
+            drp_crop.Text = crop;\r
+            check_turbo.CheckState = turbo;\r
+            drp_audioCodec.Text = audioCodec;\r
 \r
-        private void btn_queue_Click(object sender, EventArgs e)\r
-        {\r
-            if (text_destination.Text != "" && text_source.Text != "")\r
-            {\r
-                string query;\r
-                if (QueryEditorText.Text == "")\r
-                {\r
-                    query = GenerateTheQuery();\r
-                }\r
-                else\r
-                {\r
-                    query = QueryEditorText.Text;\r
-                }\r
-                queueWindow.list_queue.Items.Add(query);\r
-                queueWindow.Show();\r
-            } \r
-            else \r
-            {\r
-                MessageBox.Show("No Source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-            }\r
+            groupBox_output.Text = preset;\r
         }\r
 \r
-        private void showQueue()\r
+        private void setMkv()\r
         {\r
-            queueWindow.Show();\r
+            // Set file extension to MKV\r
+            string destination = text_destination.Text;\r
+            destination = destination.Replace(".mp4", ".mkv");\r
+            destination = destination.Replace(".avi", ".mkv");\r
+            destination = destination.Replace(".m4v", ".mkv");\r
+            destination = destination.Replace(".ogm", ".mkv");\r
+            text_destination.Text = destination;\r
         }\r
 \r
         #endregion\r
@@ -846,20 +838,25 @@ namespace Handbrake
 \r
         private void btn_encode_Click(object sender, EventArgs e)\r
         {\r
-            //btn_eCancel.Enabled = true;\r
-            String query = "";            \r
-            if (QueryEditorText.Text == "")\r
-            {\r
-                query = GenerateTheQuery();\r
-            }\r
+            if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
+                MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             else\r
             {\r
-                query = QueryEditorText.Text;\r
-            }\r
+                btn_eCancel.Enabled = true;\r
+                String query = "";\r
+                if (QueryEditorText.Text == "")\r
+                {\r
+                    query = GenerateTheQuery();\r
+                }\r
+                else\r
+                {\r
+                    query = QueryEditorText.Text;\r
+                }\r
 \r
-            ThreadPool.QueueUserWorkItem(procMonitor, query);\r
-            lbl_encode.Visible = true;\r
-            lbl_encode.Text = "Encoding in Progress";\r
+                ThreadPool.QueueUserWorkItem(procMonitor, query);\r
+                lbl_encode.Visible = true;\r
+                lbl_encode.Text = "Encoding in Progress";\r
+            }\r
         }\r
 \r
         private void btn_eCancel_Click(object sender, EventArgs e)\r
@@ -869,7 +866,6 @@ namespace Handbrake
             lbl_encode.Text = "Encoding Canceled";\r
         }\r
 \r
-\r
         [DllImport("user32.dll")]\r
         public static extern void LockWorkStation();\r
         [DllImport("user32.dll")]\r
@@ -889,7 +885,7 @@ namespace Handbrake
 \r
                 try\r
                 {\r
-\r
+                    /*\r
                     //*****************************************************************************************\r
                     // BUG!\r
                     // When the below code is used and standard error is set to true, hbcli is outputing a\r
@@ -898,7 +894,7 @@ namespace Handbrake
                     //*****************************************************************************************\r
 \r
                     \r
-                    /*Parsing.Parser encode = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
+                    Parsing.Parser encode = new Parsing.Parser(hbProc.StandardOutput.BaseStream);\r
                     encode.OnEncodeProgress += encode_OnEncodeProgress;\r
                     while (!encode.EndOfStream)\r
                     {\r
@@ -907,11 +903,13 @@ namespace Handbrake
 \r
                     hbProc.WaitForExit();\r
                     process.closeCLI();\r
-                    */\r
+                     */\r
+                    \r
                 }\r
-                catch (Exception)\r
+                catch (Exception exc)\r
                 {\r
                     // Do nothing\r
+                    MessageBox.Show(exc.ToString());\r
                 }\r
 \r
 \r
@@ -957,7 +955,7 @@ namespace Handbrake
             lbl_encode.Text = "Encoding Finished";\r
         }\r
 \r
-        /*private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
+        private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
         {\r
             \r
             if (this.InvokeRequired)\r
@@ -967,7 +965,7 @@ namespace Handbrake
                 return;\r
             }\r
             lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
-        }*/\r
+        }\r
 \r
         #endregion\r
 \r
@@ -1310,6 +1308,7 @@ namespace Handbrake
                 CheckCRF.Enabled = false;\r
                 check_turbo.Enabled = false;\r
                 h264Tab.Enabled = false;\r
+                rtf_h264advanced.Text = "";\r
             }\r
             else\r
             {\r
@@ -1400,12 +1399,7 @@ namespace Handbrake
             int totalChapters = drop_chapterFinish.Items.Count - 1;\r
             string dvdChapter = "";\r
 \r
-            if (source ==  "")\r
-                MessageBox.Show("No Source has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-            else\r
-            {\r
-                source = " -i " + '"' + source+ '"'; //'"'+\r
-            }\r
+            source = " -i " + '"' + source+ '"';\r
 \r
             if (dvdTitle ==  "Automatic")\r
                 dvdTitle = "";\r
@@ -1759,8 +1753,6 @@ namespace Handbrake
 \r
         #endregion\r
 \r
-        \r
-\r
         // This is the END of the road ------------------------------------------------------------------------------\r
     }\r
-}
\ No newline at end of file
+}\r