OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index 06d1e3c..96a8176 100644 (file)
@@ -20,19 +20,21 @@ namespace Handbrake
 {\r
     public partial class frmMain : Form\r
     {\r
-        // -------------------------------------------------------------- \r
-        // Applicaiton Startup\r
-        // --------------------------------------------------------------\r
 \r
-        #region Application Startup\r
-\r
-        // Declarations\r
-        private Process hbProc;\r
+        // Declarations *******************************************************\r
+        Functions.Common hb_common_func = new Functions.Common();\r
+        Functions.x264Panel x264PanelFunctions = new Functions.x264Panel();\r
+        Functions.CLI cliObj = new Functions.CLI();\r
+        Functions.Queue encodeQueue = new Functions.Queue();\r
+        Parsing.Title selectedTitle;\r
+        internal Process hbProc;\r
         private Parsing.DVD thisDVD;\r
         private frmQueue queueWindow = new frmQueue();\r
         private delegate void updateStatusChanger();\r
-        Functions.Common hb_common_func = new Functions.Common();\r
-        Functions.x264Panel x264PanelFunctions = new Functions.x264Panel();\r
+        \r
+        // Applicaiton Startup ************************************************\r
+\r
+        #region Application Startup\r
 \r
         public frmMain()\r
         {\r
@@ -55,8 +57,7 @@ namespace Handbrake
             // show the form, but leave disabled until preloading is complete then show the main form\r
             this.Enabled = false;\r
             this.Show();\r
-            // Forces frmMain to draw\r
-            Application.DoEvents();\r
+            Application.DoEvents(); // Forces frmMain to draw\r
 \r
             // update the status\r
             if (Properties.Settings.Default.updateStatus == "Checked")\r
@@ -69,7 +70,7 @@ namespace Handbrake
             }\r
 \r
             //H264 Panel Loading\r
-            lblStatus.Text = "Loading H264 Panel";\r
+            lblStatus.Text = "Loading H264 Panel ...";\r
             Application.DoEvents();\r
             setupH264Panel();\r
             Thread.Sleep(100);\r
@@ -115,6 +116,10 @@ namespace Handbrake
 \r
             // Turn the interface back to the user\r
             this.Enabled = true;\r
+\r
+            // Some event Handlers.\r
+            this.Resize += new EventHandler(frmMain_Resize);\r
+\r
         }\r
 \r
         // Startup Functions\r
@@ -135,9 +140,10 @@ namespace Handbrake
                     updateWindow.Show();\r
                 }\r
             }\r
-            catch (Exception exc)\r
+            catch (Exception)\r
             {\r
-                MessageBox.Show(exc.ToString());\r
+                // Don't want to have an exception messagebox displayed behind the splash screen,\r
+                // So, exception is ignored. Lets hope there are no bugs here :)\r
             }\r
         }\r
         private void splashTimer(object sender)\r
@@ -283,17 +289,15 @@ namespace Handbrake
                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);\r
                 hb_common_func.presetLoader(this, presetQuery, "User Defaults ");\r
             }\r
-            catch (Exception exc)\r
+            catch (Exception)\r
             {\r
-                MessageBox.Show("Unable to load user Default Settings. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
+                // Do Nothing. We don't want an error appearing behind the splash screen.\r
             }\r
         }\r
 \r
         #endregion\r
 \r
-        // -------------------------------------------------------------- \r
-        // The Applications Main Menu\r
-        // -------------------------------------------------------------- \r
+        // The Applications Main Menu *****************************************\r
 \r
         #region File Menu\r
 \r
@@ -338,11 +342,12 @@ namespace Handbrake
 \r
         private void mnu_encode_Click(object sender, EventArgs e)\r
         {\r
-            showQueue();\r
+            queueWindow.setQueue(encodeQueue);\r
+            queueWindow.Show();\r
         }\r
         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
         {\r
-            frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
+            frmActivityWindow dvdInfoWindow = new frmActivityWindow("dvdinfo.dat", this, queueWindow);\r
             dvdInfoWindow.Show();\r
         }\r
         private void mnu_options_Click(object sender, EventArgs e)\r
@@ -351,7 +356,6 @@ namespace Handbrake
             Options.ShowDialog();\r
         }\r
 \r
-\r
         #endregion\r
 \r
         #region Presets Menu\r
@@ -359,12 +363,12 @@ namespace Handbrake
         private void mnu_presetReset_Click(object sender, EventArgs e)\r
         {\r
             treeView_presets.Nodes.Clear();\r
-            grabCLIPresets();\r
+            cliObj.grabCLIPresets();\r
             loadPresetPanel();\r
             if (treeView_presets.Nodes.Count == 0)\r
                 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);\r
             else\r
-                MessageBox.Show("Presets have been updated", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
+                MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
         }\r
         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
         {\r
@@ -410,16 +414,14 @@ namespace Handbrake
 \r
         #endregion\r
 \r
-        // -------------------------------------------------------------- \r
-        // MainWindow Components, Actions and Functions\r
-        // --------------------------------------------------------------\r
+        // MainWindow Components, Actions and Functions ***********************\r
 \r
         #region Actions\r
 \r
         // ToolBar\r
         private void btn_start_Click(object sender, EventArgs e)\r
         {\r
-            if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
+            if (text_source.Text == "" || text_source.Text == "Click 'Source' to continue" || text_destination.Text == "")\r
                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             else\r
             {\r
@@ -436,47 +438,67 @@ namespace Handbrake
         }\r
         private void btn_add2Queue_Click(object sender, EventArgs e)\r
         {\r
-            if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
+            if (text_source.Text == "" || text_source.Text == "Click 'Source' 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
+\r
+                String query = hb_common_func.GenerateTheQuery(this);\r
                 if (rtf_query.Text != "")\r
                     query = rtf_query.Text;\r
-                else\r
-                    query = hb_common_func.GenerateTheQuery(this);\r
 \r
-                queueWindow.list_queue.Items.Add(query);\r
+                encodeQueue.add(query);\r
+\r
+                queueWindow.setQueue(encodeQueue);\r
                 queueWindow.Show();\r
             }\r
         }\r
         private void btn_showQueue_Click(object sender, EventArgs e)\r
         {\r
-            showQueue();\r
+            queueWindow.setQueue(encodeQueue);\r
+            queueWindow.Show();\r
         }\r
         private void btn_ActivityWindow_Click(object sender, EventArgs e)\r
         {\r
-            Form ActivityWindow = new frmActivityWindow();\r
-            ActivityWindow.ShowDialog();\r
+            frmActivityWindow ActivityWindow = new frmActivityWindow("hb_encode_log.dat", this, queueWindow);\r
+            ActivityWindow.Show();\r
         }\r
 \r
         //Source\r
-        private void btn_Browse_Click(object sender, EventArgs e)\r
+        private void btn_dvd_source_Click(object sender, EventArgs e)\r
         {\r
             String filename = "";\r
             text_source.Text = "";\r
-            frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
 \r
-            if (check_fileMode.Checked)\r
-            {\r
-                ISO_Open.ShowDialog();\r
-                filename = ISO_Open.FileName;\r
-            }\r
+            DVD_Open.ShowDialog();\r
+            filename = DVD_Open.SelectedPath;\r
+\r
+            if (filename.StartsWith("\\"))\r
+                MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             else\r
             {\r
-                DVD_Open.ShowDialog();\r
-                filename = DVD_Open.SelectedPath;\r
+                if (filename != "")\r
+                {\r
+                    Form frmRD = new frmReadDVD(filename, this);\r
+                    text_source.Text = filename;\r
+                    frmRD.ShowDialog();\r
+                }\r
+                else\r
+                    text_source.Text = "Click 'Source' to continue";\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
+                    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_file_source_Click(object sender, EventArgs e)\r
+        {\r
+            String filename = "";\r
+            text_source.Text = "";\r
+\r
+            ISO_Open.ShowDialog();\r
+            filename = ISO_Open.FileName;\r
 \r
             if (filename.StartsWith("\\"))\r
                 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
@@ -484,12 +506,12 @@ namespace Handbrake
             {\r
                 if (filename != "")\r
                 {\r
-                    Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
+                    Form frmRD = new frmReadDVD(filename, this);\r
                     text_source.Text = filename;\r
                     frmRD.ShowDialog();\r
                 }\r
                 else\r
-                    text_source.Text = "Click 'Browse' to continue";\r
+                    text_source.Text = "Click 'Source' to continue";\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
@@ -497,16 +519,18 @@ namespace Handbrake
 \r
             }\r
         }\r
+       \r
+\r
         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
         {\r
-            if (drp_dvdtitle.Items.Count == 0)\r
-                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);\r
+            if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))\r
+                MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'Source' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
         }\r
         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             // Reset some values on the form\r
             lbl_Aspect.Text = "Select a Title";\r
-            lbl_RecomendedCrop.Text = "Select a Title";\r
+            //lbl_RecomendedCrop.Text = "Select a Title";\r
             drop_chapterStart.Items.Clear();\r
             drop_chapterFinish.Items.Clear();\r
 \r
@@ -514,13 +538,15 @@ namespace Handbrake
             // Otheriwse if its not, title data has to be loased from parsing.\r
             if (drp_dvdtitle.Text != "Automatic")\r
             {\r
-                Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
+                selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
 \r
                 // Set the Aspect Ratio\r
                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
+                lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;\r
+                lbl_duration.Text = selectedTitle.Duration.ToString();\r
 \r
                 // Set the Recommended Cropping values\r
-                lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
+                //lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
 \r
                 // Populate the Start chapter Dropdown\r
                 drop_chapterStart.Items.Clear();\r
@@ -539,14 +565,22 @@ namespace Handbrake
                 drp_track1Audio.Items.Add("Automatic");\r
                 drp_track1Audio.Items.Add("None");\r
                 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
-                if (drp_track1Audio.Items.Count > 0)\r
-                    drp_track1Audio.Text = drp_track1Audio.Items[0].ToString();\r
+                drp_track1Audio.SelectedIndex = 0;\r
 \r
                 drp_track2Audio.Items.Clear();\r
                 drp_track2Audio.Items.Add("None");\r
                 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
-                if (drp_track2Audio.Items.Count > 0)\r
-                    drp_track2Audio.Text = drp_track2Audio.Items[0].ToString();\r
+                drp_track2Audio.SelectedIndex = 0;\r
+\r
+                drp_track3Audio.Items.Clear();\r
+                drp_track3Audio.Items.Add("None");\r
+                drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
+                drp_track3Audio.SelectedIndex = 0;\r
+\r
+                drp_track4Audio.Items.Clear();\r
+                drp_track4Audio.Items.Add("None");\r
+                drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
+                drp_track4Audio.SelectedIndex = 0;\r
 \r
                 // Populate the Subtitles dropdown\r
                 drp_subtitle.Items.Clear();\r
@@ -564,6 +598,8 @@ namespace Handbrake
         }\r
         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
+            calculateDuration();\r
+\r
             drop_chapterStart.BackColor = Color.White;\r
             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
             {\r
@@ -585,6 +621,8 @@ namespace Handbrake
         }\r
         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
+            calculateDuration();\r
+\r
             drop_chapterFinish.BackColor = Color.White;\r
             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
             {\r
@@ -631,60 +669,52 @@ namespace Handbrake
         private void text_destination_TextChanged(object sender, EventArgs e)\r
         {\r
             setAudioByContainer(text_destination.Text);\r
+            setVideoByContainer(text_destination.Text);\r
         }\r
 \r
         // Output Settings\r
         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
-            //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
-            if (!drp_videoEncoder.Text.Contains("H.264"))\r
+            if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
             {\r
-                check_turbo.CheckState = CheckState.Unchecked;\r
-                check_turbo.Enabled = false;\r
-                h264Tab.Enabled = false;\r
-                rtf_x264Query.Text = "";\r
-                check_iPodAtom.Enabled = false;\r
-                check_iPodAtom.Checked = false;\r
-                check_optimiseMP4.Enabled = false;\r
-                if (drp_anamorphic.Items.Count == 3)\r
-                    drp_anamorphic.Items.RemoveAt(2);\r
+                check_largeFile.Enabled = true;\r
+                check_optimiseMP4.Enabled = true;\r
             }\r
             else\r
             {\r
+                check_largeFile.Enabled = false;\r
+                check_optimiseMP4.Enabled = false;\r
+                check_largeFile.Checked = false;\r
+                check_optimiseMP4.Checked = false;\r
+            }\r
+\r
+\r
+            //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
+            if (drp_videoEncoder.Text.Contains("H.264"))\r
+            {\r
                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
                     check_turbo.Enabled = true;\r
 \r
                 h264Tab.Enabled = true;\r
-                check_iPodAtom.Enabled = true;\r
-                check_optimiseMP4.Enabled = true;\r
+                if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
+                    check_iPodAtom.Enabled = true;\r
+                else\r
+                    check_iPodAtom.Enabled = false;\r
                 if (!drp_anamorphic.Items.Contains("Loose"))\r
                     drp_anamorphic.Items.Add("Loose");\r
             }\r
-\r
-        }\r
-        private void check_largeFile_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))\r
-            {\r
-                MessageBox.Show("You can only use this option with the .mp4/.m4v file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-                check_largeFile.CheckState = CheckState.Unchecked;\r
-            }\r
-        }\r
-        private void check_iPodAtom_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))\r
-            {\r
-                MessageBox.Show("You can only use this option with the .mp4/.m4v file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-                check_iPodAtom.CheckState = CheckState.Unchecked;\r
-            }\r
-        }\r
-        private void check_optimiseMP4_Clicked(object sender, EventArgs e)\r
-        {\r
-            if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))\r
+            else\r
             {\r
-                MessageBox.Show("You can only use this option with the .mp4/.m4v file container.","Warning",MessageBoxButtons.OK,MessageBoxIcon.Warning);\r
-                check_optimiseMP4.CheckState = CheckState.Unchecked;\r
+                check_turbo.CheckState = CheckState.Unchecked;\r
+                check_turbo.Enabled = false;\r
+                h264Tab.Enabled = false;\r
+                rtf_x264Query.Text = "";\r
+                check_iPodAtom.Enabled = false;\r
+                check_iPodAtom.Checked = false;\r
+                if (drp_anamorphic.Items.Count == 3)\r
+                    drp_anamorphic.Items.RemoveAt(2);\r
             }\r
+\r
         }\r
 \r
         //Video Tab\r
@@ -725,26 +755,19 @@ namespace Handbrake
         {\r
             try\r
             {\r
-\r
                 if ((int.Parse(text_width.Text) % 16) != 0)\r
                     text_width.BackColor = Color.LightCoral;\r
                 else\r
                     text_width.BackColor = Color.LightGreen;\r
 \r
 \r
-                if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2))\r
+                if (lbl_Aspect.Text != "Select a Title")\r
                 {\r
-                    double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
-                    double mod16 = height % 16;\r
-                    height = height - mod16;\r
-\r
-                    if (text_width.Text == "")\r
+                    if (drp_anamorphic.Text == "None")\r
                     {\r
-                        text_height.Text = "";\r
-                        text_width.BackColor = Color.White;\r
-                    }\r
-                    else\r
+                        int height = cacluateNonAnamorphicHeight(int.Parse(text_width.Text));\r
                         text_height.Text = height.ToString();\r
+                    }\r
                 }\r
             }\r
             catch (Exception)\r
@@ -787,14 +810,12 @@ namespace Handbrake
                 text_top.Enabled = false;\r
                 text_bottom.Enabled = false;\r
 \r
-                if (lbl_RecomendedCrop.Text != "Select a Title")\r
+                if ((drp_dvdtitle.Text != "Automatic") && (selectedTitle != null))\r
                 {\r
-                    string[] temp = new string[4];\r
-                    temp = lbl_RecomendedCrop.Text.Split('/');\r
-                    text_left.Text = temp[2];\r
-                    text_right.Text = temp[3];\r
-                    text_top.Text = temp[0];\r
-                    text_bottom.Text = temp[1];\r
+                    text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();\r
+                    text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();\r
+                    text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();\r
+                    text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();\r
                 }\r
                 else\r
                 {\r
@@ -803,6 +824,7 @@ namespace Handbrake
                     text_top.Text = "";\r
                     text_bottom.Text = "";\r
                 }\r
+\r
             }\r
 \r
             if ((string)drp_crop.SelectedItem == "No Crop")\r
@@ -815,7 +837,6 @@ namespace Handbrake
                 text_right.Text = "0";\r
                 text_top.Text = "0";\r
                 text_bottom.Text = "0";\r
-\r
             }\r
         }\r
         private void check_vfr_CheckedChanged(object sender, EventArgs e)\r
@@ -868,31 +889,6 @@ namespace Handbrake
         }\r
 \r
         // Audio Tab\r
-        private void drp_track1Audio_SelectedIndexChanged(object sender, EventArgs e)\r
-        {\r
-            if (drp_track1Audio.SelectedItem.Equals("None"))\r
-            {\r
-                drp_audbit_1.Enabled = false;\r
-                drp_audenc_1.Enabled = false;\r
-                drp_audsr_1.Enabled = false;\r
-                drp_audmix_1.Enabled = false;\r
-                drp_audbit_1.Text = "";\r
-                drp_audenc_1.Text = "";\r
-                drp_audsr_1.Text = "";\r
-                drp_audmix_1.Text = "";\r
-            }\r
-            else\r
-            {\r
-                drp_audbit_1.Enabled = true;\r
-                drp_audenc_1.Enabled = true;\r
-                drp_audsr_1.Enabled = true;\r
-                drp_audmix_1.Enabled = true;\r
-                drp_audbit_1.Text = "160";\r
-                drp_audenc_1.Text = "AAC";\r
-                drp_audsr_1.Text = "48";\r
-                drp_audmix_1.Text = "Automatic";\r
-            }\r
-        }\r
         private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             if (drp_track2Audio.SelectedItem.Equals("None"))\r
@@ -901,10 +897,21 @@ namespace Handbrake
                 drp_audenc_2.Enabled = false;\r
                 drp_audsr_2.Enabled = false;\r
                 drp_audmix_2.Enabled = false;\r
+                trackBar2.Enabled = false;\r
                 drp_audbit_2.Text = "";\r
                 drp_audenc_2.Text = "";\r
                 drp_audsr_2.Text = "";\r
-                drp_audmix_2.Text = "";\r
+                drp_audmix_2.Text = "Automatic";\r
+                trackBar2.Value = 0;\r
+\r
+                // Disable the 3rd Track.\r
+                drp_track3Audio.Enabled = false;\r
+                drp_track3Audio.Text = "None";\r
+                drp_audbit_3.Text = "";\r
+                drp_audenc_3.Text = "";\r
+                drp_audsr_3.Text = "";\r
+                drp_audmix_3.Text = "Automatic";\r
+                trackBar3.Value = 0;\r
             }\r
             else\r
             {\r
@@ -912,71 +919,144 @@ namespace Handbrake
                 drp_audenc_2.Enabled = true;\r
                 drp_audsr_2.Enabled = true;\r
                 drp_audmix_2.Enabled = true;\r
+                trackBar2.Enabled = true;\r
                 drp_audbit_2.Text = "160";\r
                 drp_audenc_2.Text = "AAC";\r
                 drp_audsr_2.Text = "48";\r
                 drp_audmix_2.Text = "Automatic";\r
+\r
+                // Enable the 3rd Track.\r
+                drp_track3Audio.Enabled = true;\r
+                drp_audbit_3.Text = "";\r
+                drp_audenc_3.Text = "";\r
+                drp_audsr_3.Text = "";\r
+                drp_audmix_3.Text = "Automatic";\r
             }\r
         }\r
-        private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
+        private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
-            if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
+            if (drp_track3Audio.SelectedItem.Equals("None"))\r
+            {\r
+                drp_audbit_3.Enabled = false;\r
+                drp_audenc_3.Enabled = false;\r
+                drp_audsr_3.Enabled = false;\r
+                drp_audmix_3.Enabled = false;\r
+                trackBar3.Enabled = false;\r
+                drp_audbit_3.Text = "";\r
+                drp_audenc_3.Text = "";\r
+                drp_audsr_3.Text = "";\r
+                drp_audmix_3.Text = "Automatic";\r
+                trackBar3.Value = 0;\r
+\r
+                // Disable the 4th Track.\r
+                drp_track4Audio.Enabled = false;\r
+                drp_track4Audio.Text = "None";\r
+                drp_audbit_4.Text = "";\r
+                drp_audenc_4.Text = "";\r
+                drp_audsr_4.Text = "";\r
+                drp_audmix_4.Text = "Automatic";\r
+\r
+            }\r
+            else\r
+            {\r
+                drp_audbit_3.Enabled = true;\r
+                drp_audenc_3.Enabled = true;\r
+                drp_audsr_3.Enabled = true;\r
+                drp_audmix_3.Enabled = true;\r
+                trackBar3.Enabled = true;\r
+                drp_audbit_3.Text = "160";\r
+                drp_audenc_3.Text = "AAC";\r
+                drp_audsr_3.Text = "48";\r
+                drp_audmix_3.Text = "Automatic";\r
+\r
+                // Enable the 4th Track.\r
+                drp_track4Audio.Enabled = true;\r
+                drp_audbit_4.Text = "";\r
+                drp_audenc_4.Text = "";\r
+                drp_audsr_4.Text = "";\r
+                drp_audmix_4.Text = "Automatic";\r
+            }\r
+\r
+        }\r
+        private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if (drp_track4Audio.SelectedItem.Equals("None"))\r
+            {\r
+                drp_audbit_4.Enabled = false;\r
+                drp_audenc_4.Enabled = false;\r
+                drp_audsr_4.Enabled = false;\r
+                drp_audmix_4.Enabled = false;\r
+                trackBar4.Enabled = false;\r
+                drp_audbit_4.Text = "";\r
+                drp_audenc_4.Text = "";\r
+                drp_audsr_4.Text = "";\r
+                drp_audmix_4.Text = "Automatic";\r
+                trackBar4.Value = 0;\r
+            }\r
+            else\r
             {\r
-                drp_audbit_1.Items.Clear();\r
-                drp_audbit_1.Items.Add("32");\r
-                drp_audbit_1.Items.Add("40");\r
-                drp_audbit_1.Items.Add("48");\r
-                drp_audbit_1.Items.Add("56");\r
-                drp_audbit_1.Items.Add("64");\r
-                drp_audbit_1.Items.Add("80");\r
-                drp_audbit_1.Items.Add("86");\r
-                drp_audbit_1.Items.Add("112");\r
-                drp_audbit_1.Items.Add("128");\r
-                drp_audbit_1.Items.Add("160");\r
-                drp_audbit_1.Items.Add("192");\r
-                drp_audbit_1.Items.Add("224");\r
-                drp_audbit_1.Items.Add("256");\r
-                drp_audbit_1.Items.Add("320");\r
-                drp_audbit_1.Items.Add("384");\r
+                drp_audbit_4.Enabled = true;\r
+                drp_audenc_4.Enabled = true;\r
+                drp_audsr_4.Enabled = true;\r
+                drp_audmix_4.Enabled = true;\r
+                trackBar4.Enabled = true;\r
+                drp_audbit_4.Text = "160";\r
+                drp_audenc_4.Text = "AAC";\r
+                drp_audsr_4.Text = "48";\r
+                drp_audmix_4.Text = "Automatic";\r
             }\r
+        }\r
+\r
+        private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
+                setBitrateSelections384(drp_audbit_1);\r
             else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))\r
             {\r
-                drp_audbit_1.Items.Clear();\r
-                drp_audbit_1.Items.Add("32");\r
-                drp_audbit_1.Items.Add("40");\r
-                drp_audbit_1.Items.Add("48");\r
-                drp_audbit_1.Items.Add("56");\r
-                drp_audbit_1.Items.Add("64");\r
-                drp_audbit_1.Items.Add("80");\r
-                drp_audbit_1.Items.Add("86");\r
-                drp_audbit_1.Items.Add("112");\r
-                drp_audbit_1.Items.Add("128");\r
-                drp_audbit_1.Items.Add("160");\r
+                setBitrateSelections160(drp_audbit_1);\r
                 drp_audbit_1.Text = "160";\r
             }\r
         }\r
         private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
+            if (drp_audmix_1.Text == "Automatic")\r
+                MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+\r
             if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))\r
+                setBitrateSelections384(drp_audbit_2);\r
+            else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))\r
+            {\r
+                setBitrateSelections160(drp_audbit_2);\r
+                drp_audbit_2.Text = "160";\r
+            }\r
+        }\r
+        private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if (drp_audmix_2.Text == "Automatic")\r
+                MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+\r
+            if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))\r
+                setBitrateSelections384(drp_audbit_3);\r
+            else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))\r
+            {\r
+                setBitrateSelections160(drp_audbit_3);\r
+                drp_audbit_3.Text = "160";\r
+            }\r
+        }\r
+        private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if (drp_audmix_3.Text == "Automatic")\r
+                MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+\r
+            if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))\r
+                setBitrateSelections384(drp_audbit_4);\r
+            else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))\r
             {\r
-                drp_audbit_2.Items.Clear();\r
-                drp_audbit_2.Items.Add("32");\r
-                drp_audbit_2.Items.Add("40");\r
-                drp_audbit_2.Items.Add("48");\r
-                drp_audbit_2.Items.Add("56");\r
-                drp_audbit_2.Items.Add("64");\r
-                drp_audbit_2.Items.Add("80");\r
-                drp_audbit_2.Items.Add("86");\r
-                drp_audbit_2.Items.Add("112");\r
-                drp_audbit_2.Items.Add("128");\r
-                drp_audbit_2.Items.Add("160");\r
-                drp_audbit_2.Items.Add("192");\r
-                drp_audbit_2.Items.Add("224");\r
-                drp_audbit_2.Items.Add("256");\r
-                drp_audbit_2.Items.Add("320");\r
-                drp_audbit_2.Items.Add("384");\r
+                setBitrateSelections160(drp_audbit_4);\r
+                drp_audbit_4.Text = "160";\r
             }\r
         }\r
+\r
         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             if (drp_audenc_1.Text == "AC3")\r
@@ -1006,18 +1086,7 @@ namespace Handbrake
                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
                 drp_audmix_1.Items.Add("6 Channel Discrete");\r
 \r
-                drp_audbit_1.Items.Clear();\r
-                drp_audbit_1.Items.Add("32");\r
-                drp_audbit_1.Items.Add("40");\r
-                drp_audbit_1.Items.Add("48");\r
-                drp_audbit_1.Items.Add("56");\r
-                drp_audbit_1.Items.Add("64");\r
-                drp_audbit_1.Items.Add("80");\r
-                drp_audbit_1.Items.Add("86");\r
-                drp_audbit_1.Items.Add("112");\r
-                drp_audbit_1.Items.Add("128");\r
-                drp_audbit_1.Items.Add("160");\r
-\r
+                setBitrateSelections160(drp_audbit_1);\r
             }\r
             else\r
             {\r
@@ -1026,21 +1095,7 @@ namespace Handbrake
                 drp_audmix_1.Items.Add("Dolby Surround");\r
                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
 \r
-                drp_audbit_1.Items.Clear();\r
-                drp_audbit_1.Items.Add("32");\r
-                drp_audbit_1.Items.Add("40");\r
-                drp_audbit_1.Items.Add("48");\r
-                drp_audbit_1.Items.Add("56");\r
-                drp_audbit_1.Items.Add("64");\r
-                drp_audbit_1.Items.Add("80");\r
-                drp_audbit_1.Items.Add("86");\r
-                drp_audbit_1.Items.Add("112");\r
-                drp_audbit_1.Items.Add("128");\r
-                drp_audbit_1.Items.Add("160");\r
-                drp_audbit_1.Items.Add("192");\r
-                drp_audbit_1.Items.Add("224");\r
-                drp_audbit_1.Items.Add("256");\r
-                drp_audbit_1.Items.Add("320");\r
+                setBitrateSelections320(drp_audbit_1);\r
             }\r
         }\r
         private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)\r
@@ -1051,9 +1106,9 @@ namespace Handbrake
                 drp_audbit_2.Enabled = false;\r
                 drp_audsr_2.Enabled = false;\r
 \r
-                drp_audmix_2.Text = "";\r
-                drp_audbit_2.Text = "";\r
-                drp_audsr_2.Text = "";\r
+                drp_audmix_2.Text = "Automatic";\r
+                drp_audbit_2.Text = "160";\r
+                drp_audsr_2.Text = "48";\r
             }\r
             else\r
             {\r
@@ -1068,8 +1123,6 @@ namespace Handbrake
                     drp_audbit_2.Text = "160";\r
                     drp_audsr_2.Text = "48";\r
                 }\r
-\r
-\r
             }\r
 \r
             if (drp_audenc_2.Text == "AAC")\r
@@ -1081,18 +1134,7 @@ namespace Handbrake
                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
                 drp_audmix_2.Items.Add("6 Channel Discrete");\r
 \r
-                drp_audbit_2.Items.Clear();\r
-                drp_audbit_2.Items.Add("32");\r
-                drp_audbit_2.Items.Add("40");\r
-                drp_audbit_2.Items.Add("48");\r
-                drp_audbit_2.Items.Add("56");\r
-                drp_audbit_2.Items.Add("64");\r
-                drp_audbit_2.Items.Add("80");\r
-                drp_audbit_2.Items.Add("86");\r
-                drp_audbit_2.Items.Add("112");\r
-                drp_audbit_2.Items.Add("128");\r
-                drp_audbit_2.Items.Add("160");\r
-\r
+                setBitrateSelections160(drp_audbit_2);\r
             }\r
             else\r
             {\r
@@ -1101,30 +1143,137 @@ namespace Handbrake
                 drp_audmix_2.Items.Add("Dolby Surround");\r
                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
 \r
-                drp_audbit_2.Items.Clear();\r
-                drp_audbit_2.Items.Add("32");\r
-                drp_audbit_2.Items.Add("40");\r
-                drp_audbit_2.Items.Add("48");\r
-                drp_audbit_2.Items.Add("56");\r
-                drp_audbit_2.Items.Add("64");\r
-                drp_audbit_2.Items.Add("80");\r
-                drp_audbit_2.Items.Add("86");\r
-                drp_audbit_2.Items.Add("112");\r
-                drp_audbit_2.Items.Add("128");\r
-                drp_audbit_2.Items.Add("160");\r
-                drp_audbit_2.Items.Add("192");\r
-                drp_audbit_2.Items.Add("224");\r
-                drp_audbit_2.Items.Add("256");\r
-                drp_audbit_2.Items.Add("320");\r
-            }\r
-        }\r
-        private void slider_drc_Scroll(object sender, EventArgs e)\r
-        {\r
-            double value = slider_drc.Value / 10.0;\r
+                setBitrateSelections320(drp_audbit_2);\r
+            }\r
+        }\r
+        private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if (drp_audenc_3.Text == "AC3")\r
+            {\r
+                drp_audmix_3.Enabled = false;\r
+                drp_audbit_3.Enabled = false;\r
+                drp_audsr_3.Enabled = false;\r
+\r
+                drp_audmix_3.Text = "Automatic";\r
+                drp_audbit_3.Text = "160";\r
+                drp_audsr_3.Text = "48";\r
+            }\r
+            else\r
+            {\r
+                // Just make sure not to re-enable the following boxes if the track above is none\r
+                if (drp_track2Audio.Text != "None")\r
+                {\r
+                    drp_audmix_3.Enabled = true;\r
+                    drp_audbit_3.Enabled = true;\r
+                    drp_audsr_3.Enabled = true;\r
+\r
+                    drp_audmix_3.Text = "Automatic";\r
+                    drp_audbit_3.Text = "160";\r
+                    drp_audsr_3.Text = "48";\r
+                }\r
+            }\r
+\r
+\r
+            if (drp_audenc_3.Text == "AAC")\r
+            {\r
+                drp_audmix_3.Items.Clear();\r
+                drp_audmix_3.Items.Add("Mono");\r
+                drp_audmix_3.Items.Add("Stereo");\r
+                drp_audmix_3.Items.Add("Dolby Surround");\r
+                drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
+                drp_audmix_3.Items.Add("6 Channel Discrete");\r
+\r
+                setBitrateSelections160(drp_audbit_3);\r
+            }\r
+            else\r
+            {\r
+                drp_audmix_3.Items.Clear();\r
+                drp_audmix_3.Items.Add("Stereo");\r
+                drp_audmix_3.Items.Add("Dolby Surround");\r
+                drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
+\r
+                setBitrateSelections320(drp_audbit_3);\r
+            }\r
+        }\r
+        private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            if (drp_audenc_4.Text == "AC3")\r
+            {\r
+                drp_audmix_4.Enabled = false;\r
+                drp_audbit_4.Enabled = false;\r
+                drp_audsr_4.Enabled = false;\r
+\r
+                drp_audmix_4.Text = "Automatic";\r
+                drp_audbit_4.Text = "160";\r
+                drp_audsr_4.Text = "48";\r
+            }\r
+            else\r
+            {\r
+                // Just make sure not to re-enable the following boxes if the track above is none\r
+                if (drp_track2Audio.Text != "None")\r
+                {\r
+                    drp_audmix_4.Enabled = true;\r
+                    drp_audbit_4.Enabled = true;\r
+                    drp_audsr_4.Enabled = true;\r
+\r
+                    drp_audmix_4.Text = "Automatic";\r
+                    drp_audbit_4.Text = "160";\r
+                    drp_audsr_4.Text = "48";\r
+                }\r
+            }\r
+\r
+\r
+            if (drp_audenc_4.Text == "AAC")\r
+            {\r
+                drp_audmix_4.Items.Clear();\r
+                drp_audmix_4.Items.Add("Mono");\r
+                drp_audmix_4.Items.Add("Stereo");\r
+                drp_audmix_4.Items.Add("Dolby Surround");\r
+                drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
+                drp_audmix_4.Items.Add("6 Channel Discrete");\r
+\r
+                setBitrateSelections160(drp_audbit_4);\r
+            }\r
+            else\r
+            {\r
+                drp_audmix_4.Items.Clear();\r
+                drp_audmix_4.Items.Add("Stereo");\r
+                drp_audmix_4.Items.Add("Dolby Surround");\r
+                drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
+\r
+                setBitrateSelections320(drp_audbit_4);\r
+            }\r
+        }\r
+\r
+        private void trackBar1_Scroll(object sender, EventArgs e)\r
+        {\r
+            double value = trackBar1.Value / 10.0;\r
+            value++;\r
+\r
+            lbl_drc1.Text = value.ToString();\r
+        }\r
+        private void trackBar2_Scroll(object sender, EventArgs e)\r
+        {\r
+            double value = trackBar2.Value / 10.0;\r
+            value++;\r
+\r
+            lbl_drc2.Text = value.ToString();\r
+        }\r
+        private void trackBar3_Scroll(object sender, EventArgs e)\r
+        {\r
+            double value = trackBar3.Value / 10.0;\r
             value++;\r
 \r
-            lbl_drc.Text = value.ToString();\r
+            lbl_drc3.Text = value.ToString();\r
         }\r
+        private void trackBar4_Scroll(object sender, EventArgs e)\r
+        {\r
+            double value = trackBar4.Value / 10.0;\r
+            value++;\r
+\r
+            lbl_drc4.Text = value.ToString();\r
+        }\r
+\r
         private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             if (drp_subtitle.Text.Contains("None"))\r
@@ -1315,7 +1464,7 @@ namespace Handbrake
             int c = 0;\r
             foreach (string item in user_presets)\r
             {\r
-                string preset_name = selectedPreset.Replace("--", "");\r
+                string preset_name = "+ " + selectedPreset.Replace("--", "").Trim() + ":";\r
                 if (item.Contains(preset_name))\r
                     modified_presets_list.RemoveAt(c);\r
                 c++;\r
@@ -1361,7 +1510,6 @@ namespace Handbrake
                         else\r
                             presetInput.ReadLine();\r
                     }\r
-\r
                     presetInput.Close();\r
                 }\r
 \r
@@ -1400,32 +1548,165 @@ namespace Handbrake
             this.thisDVD = dvd;\r
         }\r
 \r
+        // Chapter Selection Duration calculation\r
+        public void calculateDuration()\r
+        {\r
+\r
+            int start_chapter;\r
+            int end_chapter;\r
+            TimeSpan Duration = TimeSpan.FromSeconds(0.0);\r
+\r
+            try\r
+            {\r
+                // Get the durations between the 2 chapter points and add them together.\r
+                if (drop_chapterStart.Text != "Auto" && drop_chapterFinish.Text != "Auto")\r
+                {\r
+                    start_chapter = int.Parse(drop_chapterStart.Text);\r
+                    end_chapter = int.Parse(drop_chapterFinish.Text);\r
+\r
+                    int position = start_chapter - 1;\r
+\r
+                    while (position != end_chapter)\r
+                    {\r
+                        TimeSpan dur = selectedTitle.Chapters[position].Duration;\r
+                        Duration = Duration + dur;\r
+                        position++;\r
+                    }\r
+                }\r
+            }\r
+            catch (Exception)\r
+            {\r
+                // Don't do anything\r
+            }\r
+\r
+            // Set the Duration\r
+            lbl_duration.Text = Duration.ToString();\r
+        }\r
+        public int cacluateNonAnamorphicHeight(int width)\r
+        {\r
+            float aspect = selectedTitle.AspectRatio;\r
+            int aw;\r
+            int ah;\r
+            if (aspect.ToString() == "1.78")\r
+            {\r
+                aw = 16;\r
+                ah = 9;\r
+            }\r
+            else\r
+            {\r
+                aw = 4;\r
+                ah = 3;\r
+            }\r
+\r
+            double a = width * selectedTitle.Resolution.Width * ah * (selectedTitle.Resolution.Height - (double)text_top.Value - (double)text_bottom.Value);\r
+            double b = selectedTitle.Resolution.Height * aw * (selectedTitle.Resolution.Width - (double)text_left.Value - (double)text_right.Value);\r
+\r
+            double y = a / b;\r
+\r
+            // If it's not Mod 16, make it mod 16\r
+            if ((y % 16) != 0)\r
+            {\r
+                double mod16 = y % 16;\r
+                if (mod16 >= 8)\r
+                {\r
+                    mod16 = 16 - mod16;\r
+                    y = y + mod16;\r
+                }\r
+                else\r
+                {\r
+                    y = y - mod16;\r
+                }\r
+            }\r
+\r
+            //16 * (421 / 16)\r
+            //double z = ( 16 * (( y + 8 ) / 16 ) );\r
+            int x = int.Parse(y.ToString());\r
+            return x;\r
+        }\r
+\r
         // Audio system functions\r
         private void setAudioByContainer(String path)\r
         {\r
-            if ((path.EndsWith(".mp4")) || (path.EndsWith(".mp4")))\r
+            string oldval = "";\r
+\r
+            if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
             {\r
+                oldval = drp_audenc_1.Text;\r
                 drp_audenc_1.Items.Clear();\r
                 drp_audenc_1.Items.Add("AAC");\r
-                drp_audenc_1.SelectedIndex = 0;\r
+                drp_audenc_1.Items.Add("AC3");\r
+                if ((oldval != "AAC") && (oldval != "AC3"))\r
+                    drp_audenc_1.SelectedIndex = 0;\r
 \r
+                oldval = drp_audenc_2.Text;\r
                 drp_audenc_2.Items.Clear();\r
                 drp_audenc_2.Items.Add("AAC");\r
+                drp_audenc_2.Items.Add("AC3");\r
                 if (drp_audenc_2.Enabled)\r
-                    drp_audenc_2.SelectedIndex = 0;\r
+                {\r
+                    if ((oldval != "AAC") && (oldval != "AC3"))\r
+                        drp_audenc_2.SelectedIndex = 0;\r
+                }\r
+\r
+                oldval = drp_audenc_3.Text;\r
+                drp_audenc_3.Items.Clear();\r
+                drp_audenc_3.Items.Add("AAC");\r
+                drp_audenc_3.Items.Add("AC3");\r
+                if (drp_audenc_3.Enabled)\r
+                {\r
+                    if ((oldval != "AAC") && (oldval != "AC3"))\r
+                        drp_audenc_3.SelectedIndex = 0;\r
+                }\r
+\r
+                oldval = drp_audenc_4.Text;\r
+                drp_audenc_4.Items.Clear();\r
+                drp_audenc_4.Items.Add("AAC");\r
+                drp_audenc_4.Items.Add("AC3");\r
+                if (drp_audenc_4.Enabled)\r
+                {\r
+                    if ((oldval != "AAC") && (oldval != "AC3"))\r
+                        drp_audenc_4.SelectedIndex = 0;\r
+                }\r
             }\r
             else if (path.EndsWith(".avi"))\r
             {\r
+                oldval = drp_audenc_1.Text;\r
                 drp_audenc_1.Items.Clear();\r
                 drp_audenc_1.Items.Add("MP3");\r
                 drp_audenc_1.Items.Add("AC3");\r
-                drp_audenc_1.SelectedIndex = 0;\r
+                if ((oldval != "MP3") && (oldval != "AC3"))\r
+                    drp_audenc_1.SelectedIndex = 0;\r
 \r
+                oldval = drp_audenc_2.Text;\r
                 drp_audenc_2.Items.Clear();\r
                 drp_audenc_2.Items.Add("MP3");\r
                 drp_audenc_2.Items.Add("AC3");\r
                 if (drp_audenc_2.Enabled)\r
-                    drp_audenc_2.SelectedIndex = 0;\r
+                {\r
+                    if ((oldval != "MP3") && (oldval != "AC3"))\r
+                        drp_audenc_2.SelectedIndex = 0;\r
+                }\r
+\r
+\r
+                oldval = drp_audenc_3.Text;\r
+                drp_audenc_3.Items.Clear();\r
+                drp_audenc_3.Items.Add("MP3");\r
+                drp_audenc_3.Items.Add("AC3");\r
+                if (drp_audenc_3.Enabled)\r
+                {\r
+                    if ((oldval != "MP3") && (oldval != "AC3"))\r
+                        drp_audenc_3.SelectedIndex = 0;\r
+                }\r
+\r
+                oldval = drp_audenc_4.Text;\r
+                drp_audenc_4.Items.Clear();\r
+                drp_audenc_4.Items.Add("MP3");\r
+                drp_audenc_4.Items.Add("AC3");\r
+                if (drp_audenc_4.Enabled)\r
+                {\r
+                    if ((oldval != "MP3") && (oldval != "AC3"))\r
+                        drp_audenc_4.SelectedIndex = 0;\r
+                }\r
             }\r
             else if (path.EndsWith(".ogm"))\r
             {\r
@@ -1437,6 +1718,16 @@ namespace Handbrake
                 drp_audenc_2.Items.Add("Vorbis");\r
                 if (drp_audenc_2.Enabled)\r
                     drp_audenc_2.SelectedIndex = 0;\r
+\r
+                drp_audenc_3.Items.Clear();\r
+                drp_audenc_3.Items.Add("Vorbis");\r
+                if (drp_audenc_3.Enabled)\r
+                    drp_audenc_3.SelectedIndex = 0;\r
+\r
+                drp_audenc_4.Items.Clear();\r
+                drp_audenc_4.Items.Add("Vorbis");\r
+                if (drp_audenc_4.Enabled)\r
+                    drp_audenc_4.SelectedIndex = 0;\r
             }\r
             else if (path.EndsWith(".mkv"))\r
             {\r
@@ -1445,7 +1736,9 @@ namespace Handbrake
                 drp_audenc_1.Items.Add("MP3");\r
                 drp_audenc_1.Items.Add("AC3");\r
                 drp_audenc_1.Items.Add("Vorbis");\r
-                drp_audenc_1.SelectedIndex = 0;\r
+                if (drp_audenc_1.Text == "")\r
+                    drp_audenc_1.SelectedIndex = 0;\r
+\r
 \r
                 drp_audenc_2.Items.Clear();\r
                 drp_audenc_2.Items.Add("AAC");\r
@@ -1453,9 +1746,137 @@ namespace Handbrake
                 drp_audenc_2.Items.Add("AC3");\r
                 drp_audenc_2.Items.Add("Vorbis");\r
                 if (drp_audenc_2.Enabled)\r
-                    drp_audenc_2.SelectedIndex = 0;\r
+                {\r
+                    if (drp_audenc_2.Text == "")\r
+                        drp_audenc_2.SelectedIndex = 0;\r
+                }\r
+\r
+                drp_audenc_3.Items.Clear();\r
+                drp_audenc_3.Items.Add("AAC");\r
+                drp_audenc_3.Items.Add("MP3");\r
+                drp_audenc_3.Items.Add("AC3");\r
+                drp_audenc_3.Items.Add("Vorbis");\r
+                if (drp_audenc_3.Enabled)\r
+                {\r
+                    if (drp_audenc_3.Text == "")\r
+                        drp_audenc_3.SelectedIndex = 0;\r
+                }\r
+\r
+                drp_audenc_4.Items.Clear();\r
+                drp_audenc_4.Items.Add("AAC");\r
+                drp_audenc_4.Items.Add("MP3");\r
+                drp_audenc_4.Items.Add("AC3");\r
+                drp_audenc_4.Items.Add("Vorbis");\r
+                if (drp_audenc_4.Enabled)\r
+                {\r
+                    if (drp_audenc_4.Text == "")\r
+                        drp_audenc_4.SelectedIndex = 0;\r
+                }\r
             }\r
         }\r
+        private void setVideoByContainer(String path)\r
+        {\r
+            string oldval = "";\r
+\r
+            if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
+            {\r
+                oldval = drp_videoEncoder.Text;\r
+                drp_videoEncoder.Items.Clear();\r
+                drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
+                drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
+                drp_videoEncoder.Items.Add("H.264 (x264)");\r
+                if (oldval == "VP3 (Theora)")\r
+                    drp_videoEncoder.SelectedIndex = 2;\r
+                else\r
+                    drp_videoEncoder.Text = oldval;\r
+\r
+            }\r
+            else if (path.EndsWith(".avi"))\r
+            {\r
+                oldval = drp_videoEncoder.Text;\r
+                drp_videoEncoder.Items.Clear();\r
+                drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
+                drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
+                drp_videoEncoder.Items.Add("H.264 (x264)");\r
+                if (oldval == "VP3 (Theora)")\r
+                    drp_videoEncoder.SelectedIndex = 2;\r
+                else\r
+                    drp_videoEncoder.Text = oldval;\r
+            }\r
+            else if (path.EndsWith(".ogm"))\r
+            {\r
+                oldval = drp_videoEncoder.Text;\r
+                drp_videoEncoder.Items.Clear();\r
+                drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
+                drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
+                drp_videoEncoder.Items.Add("VP3 (Theora)");\r
+                if (oldval == "H.264 (x264)")\r
+                    drp_videoEncoder.SelectedIndex = 2;\r
+                else\r
+                    drp_videoEncoder.Text = oldval;\r
+            }\r
+            else if (path.EndsWith(".mkv"))\r
+            {\r
+                oldval = drp_videoEncoder.Text;\r
+                drp_videoEncoder.Items.Clear();\r
+                drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
+                drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
+                drp_videoEncoder.Items.Add("H.264 (x264)");\r
+                drp_videoEncoder.Items.Add("VP3 (Theora)");\r
+                drp_videoEncoder.Text = oldval;\r
+            }\r
+        }\r
+        private void setBitrateSelections384(ComboBox dropDown)\r
+        {\r
+            dropDown.Items.Clear();\r
+            dropDown.Items.Add("32");\r
+            dropDown.Items.Add("40");\r
+            dropDown.Items.Add("48");\r
+            dropDown.Items.Add("56");\r
+            dropDown.Items.Add("64");\r
+            dropDown.Items.Add("80");\r
+            dropDown.Items.Add("86");\r
+            dropDown.Items.Add("112");\r
+            dropDown.Items.Add("128");\r
+            dropDown.Items.Add("160");\r
+            dropDown.Items.Add("192");\r
+            dropDown.Items.Add("224");\r
+            dropDown.Items.Add("256");\r
+            dropDown.Items.Add("320");\r
+            dropDown.Items.Add("384");\r
+        }\r
+        private void setBitrateSelections320(ComboBox dropDown)\r
+        {\r
+            dropDown.Items.Clear();\r
+            dropDown.Items.Add("32");\r
+            dropDown.Items.Add("40");\r
+            dropDown.Items.Add("48");\r
+            dropDown.Items.Add("56");\r
+            dropDown.Items.Add("64");\r
+            dropDown.Items.Add("80");\r
+            dropDown.Items.Add("86");\r
+            dropDown.Items.Add("112");\r
+            dropDown.Items.Add("128");\r
+            dropDown.Items.Add("160");\r
+            dropDown.Items.Add("192");\r
+            dropDown.Items.Add("224");\r
+            dropDown.Items.Add("256");\r
+            dropDown.Items.Add("320");\r
+        }\r
+        private void setBitrateSelections160(ComboBox dropDown)\r
+        {\r
+            dropDown.Items.Clear();\r
+            dropDown.Items.Add("32");\r
+            dropDown.Items.Add("40");\r
+            dropDown.Items.Add("48");\r
+            dropDown.Items.Add("56");\r
+            dropDown.Items.Add("64");\r
+            dropDown.Items.Add("80");\r
+            dropDown.Items.Add("86");\r
+            dropDown.Items.Add("112");\r
+            dropDown.Items.Add("128");\r
+            dropDown.Items.Add("160");\r
+        }\r
 \r
         // Preset system functions\r
         private void addPresetToList(ArrayList presetNameList)\r
@@ -1470,16 +1891,6 @@ namespace Handbrake
                 treeView_presets.Nodes.Add(preset_treeview);\r
             }\r
         }\r
-        private void grabCLIPresets()\r
-        {\r
-            // Gets the presets from the CLI and stores them in presets.dat\r
-            string appPath = Application.StartupPath.ToString() + "\\";\r
-            string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
-            Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
-            hbproc.WaitForExit();\r
-            hbproc.Dispose();\r
-            hbproc.Close();\r
-        }\r
         private void loadNormalPreset()\r
         {\r
             //Loads the preset called "normal"\r
@@ -1492,7 +1903,7 @@ namespace Handbrake
                     int normal = 0;\r
                     foreach (TreeNode treenode in treeView_presets.Nodes)\r
                     {\r
-                        if (treenode.ToString().Equals("TreeNode: Normal"))\r
+                        if (treenode.Text.ToString().Equals("Normal"))\r
                             normal = treenode.Index;\r
                     }\r
 \r
@@ -1580,24 +1991,13 @@ namespace Handbrake
                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
             }\r
         }\r
-\r
-        // Queue system functions\r
-        private void showQueue()\r
-        {\r
-            queueWindow.Show();\r
-        }\r
         #endregion\r
 \r
         #region Encoding and Queue\r
 \r
         // Declarations\r
-        Functions.CLI process = new Functions.CLI();\r
         private delegate void UpdateUIHandler();\r
-        [DllImport("user32.dll")]\r
-        public static extern void LockWorkStation();\r
-        [DllImport("user32.dll")]\r
-        public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
-\r
+    \r
         // Encoding Functions\r
         private void procMonitor(object state)\r
         {\r
@@ -1606,36 +2006,21 @@ namespace Handbrake
                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
             else\r
             {\r
-                hbProc = process.runCli(this, (string)state, false, false, false, false);\r
+                hbProc = cliObj.runCli(this, (string)state);\r
                 hbProc.WaitForExit();\r
 \r
                 setEncodeLabelFinished();\r
                 hbProc = null;\r
 \r
-                // Do something whent he encode ends.\r
-                switch (Properties.Settings.Default.CompletionOption)\r
+                // If the window is minimized, display the notification in a popup.\r
+                if (FormWindowState.Minimized == this.WindowState)\r
                 {\r
-                    case "Shutdown":\r
-                        System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
-                        break;\r
-                    case "Log Off":\r
-                        ExitWindowsEx(0, 0);\r
-                        break;\r
-                    case "Suspend":\r
-                        Application.SetSuspendState(PowerState.Suspend, true, true);\r
-                        break;\r
-                    case "Hibernate":\r
-                        Application.SetSuspendState(PowerState.Hibernate, true, true);\r
-                        break;\r
-                    case "Lock System":\r
-                        LockWorkStation();\r
-                        break;\r
-                    case "Quit HandBrake":\r
-                        Application.Exit();\r
-                        break;\r
-                    default:\r
-                        break;\r
+                    notifyIcon.BalloonTipText = lbl_encode.Text;\r
+                    notifyIcon.ShowBalloonTip(500);\r
                 }\r
+\r
+                // After the encode is done, we may want to shutdown, suspend etc.\r
+                cliObj.afterEncodeAction();\r
             }\r
         }\r
         private void setEncodeLabelFinished()\r
@@ -1647,11 +2032,54 @@ namespace Handbrake
             }\r
             lbl_encode.Text = "Encoding Finished";\r
         }\r
+        public Boolean isEncoding()\r
+        {\r
+            if (hbProc == null)\r
+                return false;\r
+            else\r
+                return true;\r
+        }\r
 \r
         #endregion\r
 \r
+        #region Taskbar\r
+        private void frmMain_Resize(object sender, EventArgs e)\r
+        {\r
+            if (FormWindowState.Minimized == this.WindowState)\r
+            {\r
+                notifyIcon.Visible = true;\r
+                notifyIcon.BalloonTipText = lbl_encode.Text;\r
+                notifyIcon.ShowBalloonTip(500);\r
+                this.Hide();\r
+            }\r
+            else if (FormWindowState.Normal == this.WindowState)\r
+            {\r
+                notifyIcon.Visible = false;\r
+            }\r
+        }\r
+\r
+        private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)\r
+        {\r
+            this.Visible = true;\r
+            this.Activate();\r
+            this.WindowState = FormWindowState.Normal;\r
+            notifyIcon.Visible = false;\r
+        }\r
+\r
+        private void btn_minimize_Click(object sender, EventArgs e)\r
+        {\r
+            this.WindowState = FormWindowState.Minimized;\r
+        }\r
 \r
+        private void btn_restore_Click(object sender, EventArgs e)\r
+        {\r
+            this.Visible = true;\r
+            this.Activate();\r
+            this.WindowState = FormWindowState.Normal;\r
+            notifyIcon.Visible = false;\r
+        }\r
 \r
+        #endregion\r
 \r
 \r
         // This is the END of the road ------------------------------------------------------------------------------\r