]> granicus.if.org Git - handbrake/commitdiff
WinGui:
authorsr55 <sr55.hb@outlook.com>
Fri, 11 Mar 2011 22:42:30 +0000 (22:42 +0000)
committersr55 <sr55.hb@outlook.com>
Fri, 11 Mar 2011 22:42:30 +0000 (22:42 +0000)
- Advanced options panel for ffmpeg mpeg-4 encoder options.
- Bug fixes in the new preset service and handling code.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3840 b64f7644-9d1e-0410-96f1-a4d463321fa5

16 files changed:
win/C#/Controls/AdvancedEncoderOpts.Designer.cs [new file with mode: 0644]
win/C#/Controls/AdvancedEncoderOpts.cs [new file with mode: 0644]
win/C#/Controls/AdvancedEncoderOpts.resx [new file with mode: 0644]
win/C#/Functions/PresetLoader.cs
win/C#/Functions/QueryGenerator.cs
win/C#/HandBrake.ApplicationServices/Model/EncodeTask.cs
win/C#/HandBrake.ApplicationServices/Services/Interfaces/IPresetService.cs
win/C#/HandBrake.ApplicationServices/Services/PresetService.cs
win/C#/HandBrake.ApplicationServices/Utilities/PlistUtility.cs
win/C#/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs
win/C#/HandBrake10.sln
win/C#/HandBrakeCS.csproj
win/C#/Program.cs
win/C#/frmMain.Designer.cs
win/C#/frmMain.cs
win/C#/frmQueue.cs

diff --git a/win/C#/Controls/AdvancedEncoderOpts.Designer.cs b/win/C#/Controls/AdvancedEncoderOpts.Designer.cs
new file mode 100644 (file)
index 0000000..4ee6d85
--- /dev/null
@@ -0,0 +1,100 @@
+/*  x264Panel.Designer.cs $\r
+       \r
+          This file is part of the HandBrake source code.\r
+          Homepage: <http://handbrake.fr>.\r
+          It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace Handbrake.Controls\r
+{\r
+    partial class AdvancedEncoderOpts\r
+    {\r
+        /// <summary> \r
+        /// Required designer variable.\r
+        /// </summary>\r
+        private System.ComponentModel.IContainer components = null;\r
+\r
+        /// <summary> \r
+        /// Clean up any resources being used.\r
+        /// </summary>\r
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+        protected override void Dispose(bool disposing)\r
+        {\r
+            if (disposing && (components != null))\r
+            {\r
+                components.Dispose();\r
+            }\r
+            base.Dispose(disposing);\r
+        }\r
+\r
+        #region Component Designer generated code\r
+\r
+        /// <summary> \r
+        /// Required method for Designer support - do not modify \r
+        /// the contents of this method with the code editor.\r
+        /// </summary>\r
+        private void InitializeComponent()\r
+        {\r
+            this.components = new System.ComponentModel.Container();\r
+            this.label43 = new System.Windows.Forms.Label();\r
+            this.advancedQuery = new System.Windows.Forms.RichTextBox();\r
+            this.ToolTip = new System.Windows.Forms.ToolTip(this.components);\r
+            this.label64 = new System.Windows.Forms.Label();\r
+            this.SuspendLayout();\r
+            // \r
+            // label43\r
+            // \r
+            this.label43.AutoSize = true;\r
+            this.label43.BackColor = System.Drawing.Color.Transparent;\r
+            this.label43.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.label43.Location = new System.Drawing.Point(13, 13);\r
+            this.label43.Name = "label43";\r
+            this.label43.Size = new System.Drawing.Size(63, 13);\r
+            this.label43.TabIndex = 49;\r
+            this.label43.Text = "Advanced";\r
+            // \r
+            // advancedQuery\r
+            // \r
+            this.advancedQuery.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.advancedQuery.Location = new System.Drawing.Point(16, 53);\r
+            this.advancedQuery.Name = "advancedQuery";\r
+            this.advancedQuery.Size = new System.Drawing.Size(688, 128);\r
+            this.advancedQuery.TabIndex = 80;\r
+            this.advancedQuery.Text = "";\r
+            // \r
+            // ToolTip\r
+            // \r
+            this.ToolTip.Active = false;\r
+            this.ToolTip.AutomaticDelay = 1000;\r
+            this.ToolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;\r
+            // \r
+            // label64\r
+            // \r
+            this.label64.AutoSize = true;\r
+            this.label64.Location = new System.Drawing.Point(13, 35);\r
+            this.label64.Name = "label64";\r
+            this.label64.Size = new System.Drawing.Size(163, 13);\r
+            this.label64.TabIndex = 81;\r
+            this.label64.Text = "Encoder advanced option string:";\r
+            // \r
+            // x264Panel\r
+            // \r
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;\r
+            this.BackColor = System.Drawing.Color.Transparent;\r
+            this.Controls.Add(this.label64);\r
+            this.Controls.Add(this.advancedQuery);\r
+            this.Controls.Add(this.label43);\r
+            this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.Size = new System.Drawing.Size(720, 305);\r
+            this.ResumeLayout(false);\r
+            this.PerformLayout();\r
+\r
+        }\r
+\r
+        #endregion\r
+\r
+        internal System.Windows.Forms.Label label43;\r
+        internal System.Windows.Forms.RichTextBox advancedQuery;\r
+        private System.Windows.Forms.ToolTip ToolTip;\r
+        internal System.Windows.Forms.Label label64;\r
+    }\r
+}\r
diff --git a/win/C#/Controls/AdvancedEncoderOpts.cs b/win/C#/Controls/AdvancedEncoderOpts.cs
new file mode 100644 (file)
index 0000000..8eb2e8a
--- /dev/null
@@ -0,0 +1,59 @@
+/*  AdvancedEncoderOpts.cs $\r
+    This file is part of the HandBrake source code.\r
+    Homepage: <http://handbrake.fr>.\r
+    It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace Handbrake.Controls\r
+{\r
+    using System.Windows.Forms;\r
+\r
+    /// <summary>\r
+    /// The x264 Panel\r
+    /// </summary>\r
+    public partial class AdvancedEncoderOpts : UserControl\r
+    {\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="AdvancedEncoderOpts"/> class. \r
+        /// </summary>\r
+        public AdvancedEncoderOpts()\r
+        {\r
+            InitializeComponent();\r
+\r
+            if (Properties.Settings.Default.tooltipEnable)\r
+                ToolTip.Active = true;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the X264 query string\r
+        /// </summary>\r
+        public string AdavancedQuery\r
+        {\r
+            get\r
+            {\r
+                return advancedQuery.Text;\r
+            }\r
+\r
+            set\r
+            {\r
+                advancedQuery.Text = value;\r
+            }\r
+        }\r
+\r
+        public bool IsDisabled\r
+        {\r
+            set\r
+            {\r
+                if (value)\r
+                {\r
+                    this.advancedQuery.Enabled = false;\r
+                    this.advancedQuery.Text = "Advanced encoder option passthrough is not currently supported for the encoder you have chosen.";\r
+                }\r
+                else\r
+                {\r
+                    this.advancedQuery.Enabled = true;\r
+                    this.advancedQuery.Text = string.Empty;\r
+                }\r
+            }\r
+        }\r
+    }\r
+}
\ No newline at end of file
diff --git a/win/C#/Controls/AdvancedEncoderOpts.resx b/win/C#/Controls/AdvancedEncoderOpts.resx
new file mode 100644 (file)
index 0000000..89a8b34
--- /dev/null
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+  <!-- \r
+    Microsoft ResX Schema \r
+    \r
+    Version 2.0\r
+    \r
+    The primary goals of this format is to allow a simple XML format \r
+    that is mostly human readable. The generation and parsing of the \r
+    various data types are done through the TypeConverter classes \r
+    associated with the data types.\r
+    \r
+    Example:\r
+    \r
+    ... ado.net/XML headers & schema ...\r
+    <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+    <resheader name="version">2.0</resheader>\r
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+        <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+    </data>\r
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+        <comment>This is a comment</comment>\r
+    </data>\r
+                \r
+    There are any number of "resheader" rows that contain simple \r
+    name/value pairs.\r
+    \r
+    Each data row contains a name, and value. The row also contains a \r
+    type or mimetype. Type corresponds to a .NET class that support \r
+    text/value conversion through the TypeConverter architecture. \r
+    Classes that don't support this are serialized and stored with the \r
+    mimetype set.\r
+    \r
+    The mimetype is used for serialized objects, and tells the \r
+    ResXResourceReader how to depersist the object. This is currently not \r
+    extensible. For a given mimetype the value must be set accordingly:\r
+    \r
+    Note - application/x-microsoft.net.object.binary.base64 is the format \r
+    that the ResXResourceWriter will generate, however the reader can \r
+    read any of the formats listed below.\r
+    \r
+    mimetype: application/x-microsoft.net.object.binary.base64\r
+    value   : The object must be serialized with \r
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+            : and then encoded with base64 encoding.\r
+    \r
+    mimetype: application/x-microsoft.net.object.soap.base64\r
+    value   : The object must be serialized with \r
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+            : and then encoded with base64 encoding.\r
+\r
+    mimetype: application/x-microsoft.net.object.bytearray.base64\r
+    value   : The object must be serialized into a byte array \r
+            : using a System.ComponentModel.TypeConverter\r
+            : and then encoded with base64 encoding.\r
+    -->\r
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+    <xsd:element name="root" msdata:IsDataSet="true">\r
+      <xsd:complexType>\r
+        <xsd:choice maxOccurs="unbounded">\r
+          <xsd:element name="metadata">\r
+            <xsd:complexType>\r
+              <xsd:sequence>\r
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+              </xsd:sequence>\r
+              <xsd:attribute name="name" use="required" type="xsd:string" />\r
+              <xsd:attribute name="type" type="xsd:string" />\r
+              <xsd:attribute name="mimetype" type="xsd:string" />\r
+              <xsd:attribute ref="xml:space" />\r
+            </xsd:complexType>\r
+          </xsd:element>\r
+          <xsd:element name="assembly">\r
+            <xsd:complexType>\r
+              <xsd:attribute name="alias" type="xsd:string" />\r
+              <xsd:attribute name="name" type="xsd:string" />\r
+            </xsd:complexType>\r
+          </xsd:element>\r
+          <xsd:element name="data">\r
+            <xsd:complexType>\r
+              <xsd:sequence>\r
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+              </xsd:sequence>\r
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+              <xsd:attribute ref="xml:space" />\r
+            </xsd:complexType>\r
+          </xsd:element>\r
+          <xsd:element name="resheader">\r
+            <xsd:complexType>\r
+              <xsd:sequence>\r
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+              </xsd:sequence>\r
+              <xsd:attribute name="name" type="xsd:string" use="required" />\r
+            </xsd:complexType>\r
+          </xsd:element>\r
+        </xsd:choice>\r
+      </xsd:complexType>\r
+    </xsd:element>\r
+  </xsd:schema>\r
+  <resheader name="resmimetype">\r
+    <value>text/microsoft-resx</value>\r
+  </resheader>\r
+  <resheader name="version">\r
+    <value>2.0</value>\r
+  </resheader>\r
+  <resheader name="reader">\r
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <resheader name="writer">\r
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <metadata name="ToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+    <value>17, 17</value>\r
+  </metadata>\r
+</root>
\ No newline at end of file
index 84fdb2dfb4b666fb56c2e4409bc45de875f0d2f0..00e8aa46bd883d4d4bd244e6445385448fef4dd8 100644 (file)
@@ -267,7 +267,7 @@ namespace Handbrake.Functions
 \r
             #region Other\r
 \r
-            mainWindow.x264Panel.X264Query = presetQuery.X264Options;\r
+            mainWindow.x264Panel.X264Query = presetQuery.AdvancedEncoderOptions;\r
 \r
             // Set the preset name\r
             mainWindow.labelPreset.Text = "Output Settings (Preset: " + name + ")";\r
index adb2199bc153c0e79af6268112858768ae52c5e5..97499962bb823bb35ac4735f97a3d54884e0b491 100644 (file)
@@ -541,9 +541,26 @@ namespace Handbrake.Functions
 \r
         private static string X264Query(frmMain mainWindow)\r
         {\r
-            if (string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)) return string.Empty;\r
+            string advancedOptions = string.Empty;\r
+            switch (mainWindow.drp_videoEncoder.SelectedIndex)\r
+            {\r
+                case 0: // ffmpeg\r
+                    advancedOptions = string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)\r
+                        ? string.Empty\r
+                        : mainWindow.x264Panel.X264Query;\r
+                    break;\r
+                case 1: // x264\r
+                    advancedOptions = string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)\r
+                        ? string.Empty\r
+                        : mainWindow.x264Panel.X264Query;\r
+                    break;\r
+                case 2: // VP3\r
+                    advancedOptions = string.Empty;\r
+                    break;\r
+            }\r
+\r
 \r
-            return " -x " + mainWindow.x264Panel.X264Query;\r
+            return " -x " + advancedOptions;\r
         }\r
 \r
         private static string ExtraSettings()\r
index c3a58ac40ebf560065051acf975874fe9f56a15d..d600ba81cec0878af8d2246d1ee68466c6e2f44a 100644 (file)
@@ -279,9 +279,9 @@ namespace HandBrake.ApplicationServices.Model
         #region Advanced\r
 \r
         /// <summary>\r
-        /// Gets or sets X264Options.\r
+        /// Gets or sets AdvancedEncoderOptions.\r
         /// </summary>\r
-        public string X264Options { get; set; }\r
+        public string AdvancedEncoderOptions { get; set; }\r
 \r
         #endregion\r
 \r
index 07daab3c9fab7dab443fde0f011c7d94b152ada9..30d6b2f3a693f7dc2003222913efb1288fa07974 100644 (file)
@@ -39,6 +39,14 @@ namespace HandBrake.ApplicationServices.Services.Interfaces
         /// </param>\r
         void Remove(Preset preset);\r
 \r
+        /// <summary>\r
+        /// Remove a group of presets by category\r
+        /// </summary>\r
+        /// <param name="category">\r
+        /// The Category to remove\r
+        /// </param>\r
+        void RemoveGroup(string category);\r
+\r
         /// <summary>\r
         /// Get a Preset\r
         /// </summary>\r
index 9a9f26564dd9509e2a6430274127d0815872a052..f46a8bad1caa6294946d7e977d2318c5b3f41343 100644 (file)
@@ -140,8 +140,23 @@ namespace HandBrake.ApplicationServices.Services
         public void Remove(Preset preset)\r
         {\r
             this.presets.Remove(preset);\r
+            this.UpdatePresetFiles();\r
+        }\r
+\r
+        /// <summary>\r
+        /// Remove a group of presets by category\r
+        /// </summary>\r
+        /// <param name="category">\r
+        /// The Category to remove\r
+        /// </param>\r
+        public void RemoveGroup(string category)\r
+        {\r
+            List<Preset> removeList = this.presets.Where(p => p.Category == category).ToList();\r
+            foreach (Preset preset in removeList)\r
+            {\r
+                this.presets.Remove(preset);\r
+            }\r
 \r
-            // Update the presets file\r
             this.UpdatePresetFiles();\r
         }\r
 \r
index 660bc905d17b753c369df34bc09bcd807b7e74ed..ee1ab225afdecac62b51827b7d040f0f9fd5f463 100644 (file)
@@ -254,7 +254,7 @@ namespace HandBrake.ApplicationServices.Utilities
 \r
                     // Advanced x264 tab\r
                     case "x264Option":\r
-                        parsed.X264Options = value;\r
+                        parsed.AdvancedEncoderOptions = value;\r
                         break;\r
 \r
                     // Preset Information\r
@@ -548,7 +548,7 @@ namespace HandBrake.ApplicationServices.Utilities
             AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0");\r
 \r
             // x264 string\r
-            AddEncodeElement(xmlWriter, "x264Option", "string", parsed.X264Options);\r
+            AddEncodeElement(xmlWriter, "x264Option", "string", parsed.AdvancedEncoderOptions);\r
         }\r
 \r
         /// <summary>\r
index 18619170a1ac24b240009c479dc247b745c028e3..ab90cf010b751b3bbf6a31bc31927043989cfa74 100644 (file)
@@ -103,8 +103,8 @@ namespace HandBrake.ApplicationServices.Utilities
             Match chapterMarkers = Regex.Match(input, @" -m");\r
             Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
 \r
-            // H264 Tab\r
-            Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
+            // Advanced Tab\r
+            Match advanced = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
 \r
             #endregion\r
 \r
@@ -395,10 +395,10 @@ namespace HandBrake.ApplicationServices.Utilities
 \r
                 #endregion\r
 \r
-                #region H.264 and other\r
+                #region Advanced and other\r
 \r
-                if (x264.Success)\r
-                    parsed.X264Options = x264.ToString().Replace("-x ", string.Empty);\r
+                if (advanced.Success)\r
+                    parsed.AdvancedEncoderOptions = advanced.ToString().Replace("-x ", string.Empty);\r
 \r
                 #endregion\r
             }\r
index b7785d1d99b52fa8109e9111a0c67a59710eb100..56c85201d81371426780975b32d9fcb87c472efc 100644 (file)
@@ -29,8 +29,8 @@ Global
                Release|x86 = Release|x86\r
        EndGlobalSection\r
        GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
-               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.ActiveCfg = Debug|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.Build.0 = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.Build.0 = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|x64.ActiveCfg = Debug|x86\r
index 1cd590ce81234269540207f71ddd576a99ad69e5..4a3d043110e5e3313977613a0cbdb3d6ca4ec235 100644 (file)
     <Compile Include="Controls\AudioPanel.Designer.cs">\r
       <DependentUpon>AudioPanel.cs</DependentUpon>\r
     </Compile>\r
+    <Compile Include="Controls\AdvancedEncoderOpts.cs">\r
+      <SubType>UserControl</SubType>\r
+    </Compile>\r
+    <Compile Include="Controls\AdvancedEncoderOpts.Designer.cs">\r
+      <DependentUpon>AdvancedEncoderOpts.cs</DependentUpon>\r
+    </Compile>\r
     <Compile Include="Controls\Filters.cs">\r
       <SubType>UserControl</SubType>\r
     </Compile>\r
       <DependentUpon>AudioPanel.cs</DependentUpon>\r
       <SubType>Designer</SubType>\r
     </EmbeddedResource>\r
+    <EmbeddedResource Include="Controls\AdvancedEncoderOpts.resx">\r
+      <DependentUpon>AdvancedEncoderOpts.cs</DependentUpon>\r
+      <SubType>Designer</SubType>\r
+    </EmbeddedResource>\r
     <EmbeddedResource Include="Controls\Filters.resx">\r
       <DependentUpon>Filters.cs</DependentUpon>\r
       <SubType>Designer</SubType>\r
index 919543c4851f2f0facd0bbc157cfe6fad863e0c2..bf90c2da7dffcd20412a69cec79ff423b0d6e519 100644 (file)
@@ -13,6 +13,7 @@ namespace Handbrake
 \r
     using HandBrake.ApplicationServices;\r
     using HandBrake.ApplicationServices.Services;\r
+    using HandBrake.Framework.Views;\r
 \r
     using Handbrake.Properties;\r
 \r
@@ -121,11 +122,21 @@ namespace Handbrake
         /// <param name="e">Unhandled Exception EventArgs </param>\r
         private static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)\r
         {\r
-            MessageBox.Show(\r
-                "An Unknown Error has occured. \n\n Exception:" + e.ExceptionObject,\r
-                "Unhandled Exception",\r
-                MessageBoxButtons.OK,\r
-                MessageBoxIcon.Error);\r
+            try\r
+            {\r
+                ExceptionWindow window = new ExceptionWindow();\r
+                window.Setup("An Unknown Error has occured.", e.ExceptionObject.ToString());\r
+                window.ShowDialog();              \r
+            }\r
+            catch (Exception)\r
+            {\r
+                MessageBox.Show(\r
+                    "An Unknown Error has occured. \n\n Exception:" + e.ExceptionObject,\r
+                    "Unhandled Exception",\r
+                    MessageBoxButtons.OK,\r
+                    MessageBoxIcon.Error);\r
+            }\r
+\r
         }\r
 \r
         public static int InstanceId;\r
index 525da334c6b73b040ae42723599678d530a65678..1171afa7812b26ff076329974c4e317868486b49 100644 (file)
@@ -117,6 +117,7 @@ namespace Handbrake
             this.tab_chapters = new System.Windows.Forms.TabPage();\r
             this.label31 = new System.Windows.Forms.Label();\r
             this.tab_advanced = new System.Windows.Forms.TabPage();\r
+            this.advancedEncoderOpts = new Handbrake.Controls.AdvancedEncoderOpts();\r
             this.x264Panel = new Handbrake.Controls.x264Panel();\r
             this.tab_query = new System.Windows.Forms.TabPage();\r
             this.btn_clear = new System.Windows.Forms.Button();\r
@@ -285,7 +286,7 @@ namespace Handbrake
             this.check_turbo.Enabled = false;\r
             this.check_turbo.Location = new System.Drawing.Point(495, 134);\r
             this.check_turbo.Name = "check_turbo";\r
-            this.check_turbo.Size = new System.Drawing.Size(101, 17);\r
+            this.check_turbo.Size = new System.Drawing.Size(99, 17);\r
             this.check_turbo.TabIndex = 9;\r
             this.check_turbo.Text = "Turbo first Pass";\r
             this.ToolTip.SetToolTip(this.check_turbo, "Makes the first pass of a 2 pass encode faster.");\r
@@ -555,7 +556,7 @@ namespace Handbrake
             this.radio_cq.BackColor = System.Drawing.Color.Transparent;\r
             this.radio_cq.Location = new System.Drawing.Point(366, 37);\r
             this.radio_cq.Name = "radio_cq";\r
-            this.radio_cq.Size = new System.Drawing.Size(110, 17);\r
+            this.radio_cq.Size = new System.Drawing.Size(105, 17);\r
             this.radio_cq.TabIndex = 3;\r
             this.radio_cq.Text = "Constant Quality:";\r
             this.ToolTip.SetToolTip(this.radio_cq, resources.GetString("radio_cq.ToolTip"));\r
@@ -569,7 +570,7 @@ namespace Handbrake
             this.radio_avgBitrate.Checked = true;\r
             this.radio_avgBitrate.Location = new System.Drawing.Point(367, 108);\r
             this.radio_avgBitrate.Name = "radio_avgBitrate";\r
-            this.radio_avgBitrate.Size = new System.Drawing.Size(116, 17);\r
+            this.radio_avgBitrate.Size = new System.Drawing.Size(112, 17);\r
             this.radio_avgBitrate.TabIndex = 4;\r
             this.radio_avgBitrate.TabStop = true;\r
             this.radio_avgBitrate.Text = "Avg Bitrate (kbps):";\r
@@ -583,7 +584,7 @@ namespace Handbrake
             this.check_2PassEncode.BackColor = System.Drawing.Color.Transparent;\r
             this.check_2PassEncode.Location = new System.Drawing.Point(385, 134);\r
             this.check_2PassEncode.Name = "check_2PassEncode";\r
-            this.check_2PassEncode.Size = new System.Drawing.Size(104, 17);\r
+            this.check_2PassEncode.Size = new System.Drawing.Size(106, 17);\r
             this.check_2PassEncode.TabIndex = 10;\r
             this.check_2PassEncode.Text = "2-Pass Encoding";\r
             this.ToolTip.SetToolTip(this.check_2PassEncode, resources.GetString("check_2PassEncode.ToolTip"));\r
@@ -871,7 +872,7 @@ namespace Handbrake
             this.radio_constantFramerate.Checked = true;\r
             this.radio_constantFramerate.Location = new System.Drawing.Point(0, 0);\r
             this.radio_constantFramerate.Name = "radio_constantFramerate";\r
-            this.radio_constantFramerate.Size = new System.Drawing.Size(122, 17);\r
+            this.radio_constantFramerate.Size = new System.Drawing.Size(117, 17);\r
             this.radio_constantFramerate.TabIndex = 17;\r
             this.radio_constantFramerate.TabStop = true;\r
             this.radio_constantFramerate.Text = "Constant Framerate";\r
@@ -883,7 +884,7 @@ namespace Handbrake
             this.radio_peakAndVariable.BackColor = System.Drawing.Color.Transparent;\r
             this.radio_peakAndVariable.Location = new System.Drawing.Point(0, 23);\r
             this.radio_peakAndVariable.Name = "radio_peakAndVariable";\r
-            this.radio_peakAndVariable.Size = new System.Drawing.Size(116, 17);\r
+            this.radio_peakAndVariable.Size = new System.Drawing.Size(113, 17);\r
             this.radio_peakAndVariable.TabIndex = 19;\r
             this.radio_peakAndVariable.Text = "Variable Framerate";\r
             this.radio_peakAndVariable.UseVisualStyleBackColor = false;\r
@@ -1051,6 +1052,7 @@ namespace Handbrake
             // tab_advanced\r
             // \r
             this.tab_advanced.BackColor = System.Drawing.Color.Transparent;\r
+            this.tab_advanced.Controls.Add(this.advancedEncoderOpts);\r
             this.tab_advanced.Controls.Add(this.x264Panel);\r
             this.tab_advanced.Location = new System.Drawing.Point(4, 22);\r
             this.tab_advanced.Name = "tab_advanced";\r
@@ -1060,6 +1062,16 @@ namespace Handbrake
             this.tab_advanced.Text = "Advanced";\r
             this.tab_advanced.UseVisualStyleBackColor = true;\r
             // \r
+            // advancedEncoderOpts\r
+            // \r
+            this.advancedEncoderOpts.AdavancedQuery = "";\r
+            this.advancedEncoderOpts.BackColor = System.Drawing.Color.Transparent;\r
+            this.advancedEncoderOpts.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.advancedEncoderOpts.Location = new System.Drawing.Point(0, 0);\r
+            this.advancedEncoderOpts.Name = "advancedEncoderOpts";\r
+            this.advancedEncoderOpts.Size = new System.Drawing.Size(720, 209);\r
+            this.advancedEncoderOpts.TabIndex = 1;\r
+            // \r
             // x264Panel\r
             // \r
             this.x264Panel.BackColor = System.Drawing.Color.Transparent;\r
@@ -1935,5 +1947,6 @@ namespace Handbrake
         internal RadioButton radio_peakAndVariable;\r
         internal RadioButton radio_constantFramerate;\r
         private Panel panel1;\r
+        internal Controls.AdvancedEncoderOpts advancedEncoderOpts;\r
     }\r
 }
\ No newline at end of file
index a3cd44187a1131970980e535aa5769e1afad4c3b..0a8305dbea622b2d45758d03461f2ec42c1c764a 100644 (file)
@@ -607,16 +607,29 @@ namespace Handbrake
 \r
         private void BtnRemovePreset_Click(object sender, EventArgs e)\r
         {\r
+            throw new Exception();\r
+            if (treeView_presets.SelectedNode == null)\r
+            {\r
+                return;\r
+            }\r
+\r
             DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset",\r
                                                   MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
             if (result == DialogResult.Yes)\r
             {\r
-                if (treeView_presets.SelectedNode != null)\r
+                if (treeView_presets.SelectedNode.Nodes.Count > 0)\r
                 {\r
+                    // Delete the selected group category\r
+                    this.presetHandler.RemoveGroup(treeView_presets.SelectedNode.Text.Trim());\r
+                }\r
+                else\r
+                {\r
+                    // Delete the selected item.\r
                     presetHandler.Remove((Preset)treeView_presets.SelectedNode.Tag);\r
-                    treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
                 }\r
+                treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
             }\r
+\r
             treeView_presets.Select();\r
         }\r
 \r
@@ -625,14 +638,9 @@ namespace Handbrake
         {\r
             if (treeView_presets.SelectedNode != null)\r
             {\r
-                DialogResult result = MessageBox.Show("Are you sure you wish to set this preset as the default?",\r
-                                                      "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
-                if (result == DialogResult.Yes)\r
-                {\r
-                    Properties.Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text;\r
-                    Properties.Settings.Default.Save();\r
-                    MessageBox.Show("New default preset set.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
-                }\r
+                Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text;\r
+                Settings.Default.Save();\r
+                MessageBox.Show("New default preset set.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
             }\r
             else\r
                 MessageBox.Show("Please select a preset first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
@@ -652,13 +660,6 @@ namespace Handbrake
         {\r
             presetHandler.UpdateBuiltInPresets(string.Empty);\r
             LoadPresetPanel();\r
-            if (treeView_presets.Nodes.Count == 0)\r
-                MessageBox.Show(\r
-                    "Unable to load the presets.xml 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!",\r
-                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
-            else\r
-                MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
-\r
             treeView_presets.ExpandAll();\r
         }\r
 \r
@@ -737,31 +738,7 @@ namespace Handbrake
         {\r
             if (e.KeyCode == Keys.Delete)\r
             {\r
-                DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset",\r
-                                                      MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
-                if (result == DialogResult.Yes)\r
-                {\r
-                    if (treeView_presets.SelectedNode != null)\r
-                        presetHandler.Remove((Preset)treeView_presets.SelectedNode.Tag);\r
-\r
-                    // Remember each nodes expanded status so we can reload it\r
-                    List<bool> nodeStatus = new List<bool>();\r
-                    foreach (TreeNode node in treeView_presets.Nodes)\r
-                        nodeStatus.Add(node.IsExpanded);\r
-\r
-                    // Now reload the preset panel\r
-                    LoadPresetPanel();\r
-\r
-                    // And finally, re-expand any of the nodes if required\r
-                    int i = 0;\r
-                    foreach (TreeNode node in treeView_presets.Nodes)\r
-                    {\r
-                        if (nodeStatus[i])\r
-                            node.Expand();\r
-\r
-                        i++;\r
-                    }\r
-                }\r
+                this.BtnRemovePreset_Click(sender, e);\r
             }\r
         }\r
 \r
@@ -1732,7 +1709,7 @@ namespace Handbrake
         public void SetExtension(string newExtension)\r
         {\r
             if (newExtension == ".mp4" || newExtension == ".m4v")\r
-                if (Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V() || Properties.Settings.Default.useM4v == 2) \r
+                if (Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V() || Properties.Settings.Default.useM4v == 2)\r
                     newExtension = Properties.Settings.Default.useM4v == 1 ? ".mp4" : ".m4v";\r
                 else\r
                     newExtension = ".mp4";\r
@@ -1752,7 +1729,6 @@ namespace Handbrake
                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
                     check_turbo.Enabled = true;\r
 \r
-                tab_advanced.Enabled = true;\r
                 if ((drop_format.Text.Contains("MP4")) || (drop_format.Text.Contains("M4V")))\r
                     check_iPodAtom.Enabled = true;\r
                 else\r
@@ -1762,13 +1738,12 @@ namespace Handbrake
             {\r
                 check_turbo.CheckState = CheckState.Unchecked;\r
                 check_turbo.Enabled = false;\r
-                tab_advanced.Enabled = false;\r
                 x264Panel.X264Query = string.Empty;\r
                 check_iPodAtom.Enabled = false;\r
                 check_iPodAtom.Checked = false;\r
             }\r
 \r
-            // Setup the CQ Slider\r
+            // Setup the CQ Slider and Advanced Panel\r
             switch (drp_videoEncoder.Text)\r
             {\r
                 case "MPEG-4 (FFmpeg)":\r
@@ -1776,12 +1751,13 @@ namespace Handbrake
                         slider_videoQuality.Value = 20; // Just reset to 70% QP 10 on encode change.\r
                     slider_videoQuality.Minimum = 1;\r
                     slider_videoQuality.Maximum = 31;\r
+                    this.x264Panel.Visible = false;\r
+                    this.advancedEncoderOpts.Visible = true;\r
+                    this.advancedEncoderOpts.IsDisabled = false;\r
                     break;\r
                 case "H.264 (x264)":\r
                     slider_videoQuality.Minimum = 0;\r
                     slider_videoQuality.TickFrequency = 1;\r
-\r
-                    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
                     double cqStep = Properties.Settings.Default.x264cqstep;\r
                     double multiplier = 1.0 / cqStep;\r
                     double value = slider_videoQuality.Value * multiplier;\r
@@ -1791,12 +1767,19 @@ namespace Handbrake
                     if (value < slider_videoQuality.Maximum)\r
                         slider_videoQuality.Value = slider_videoQuality.Maximum - (int)value;\r
 \r
+                    this.x264Panel.Visible = true;\r
+                    this.x264Panel.BringToFront();\r
+                    this.advancedEncoderOpts.Visible = false;\r
                     break;\r
                 case "VP3 (Theora)":\r
                     if (slider_videoQuality.Value > 63)\r
                         slider_videoQuality.Value = 45; // Just reset to 70% QP 45 on encode change.\r
                     slider_videoQuality.Minimum = 0;\r
                     slider_videoQuality.Maximum = 63;\r
+\r
+                    this.x264Panel.Visible = false;\r
+                    this.advancedEncoderOpts.Visible = true;\r
+                    this.advancedEncoderOpts.IsDisabled = true;\r
                     break;\r
             }\r
         }\r
@@ -1884,7 +1867,7 @@ namespace Handbrake
                     {\r
                         lbl_SliderValue.Text += " (Warning: lossless)";\r
                     }\r
-                    \r
+\r
                     break;\r
                 case "VP3 (Theora)":\r
                     lbl_SliderValue.Text = "QP:" + slider_videoQuality.Value;\r
@@ -1894,10 +1877,17 @@ namespace Handbrake
 \r
         private void radio_avgBitrate_CheckedChanged(object sender, EventArgs e)\r
         {\r
-            text_bitrate.Enabled = true;\r
-            slider_videoQuality.Enabled = false;\r
+            if (radio_avgBitrate.Checked)\r
+            {\r
+                text_bitrate.Enabled = true;\r
+                if (string.IsNullOrEmpty(text_bitrate.Text))\r
+                {\r
+                    text_bitrate.Text = "1500";\r
+                }\r
+                slider_videoQuality.Enabled = false;\r
 \r
-            check_2PassEncode.Enabled = true;\r
+                check_2PassEncode.Enabled = true;\r
+            }\r
         }\r
 \r
         private void radio_cq_CheckedChanged(object sender, EventArgs e)\r
@@ -2399,13 +2389,15 @@ namespace Handbrake
                 }\r
 \r
                 if (preset.Category == category && rootNode != null)\r
-                    rootNode.Nodes.Add(new TreeNode(preset.Name) { ToolTipText = preset.Description, ForeColor = Color.DarkBlue });\r
+                    rootNode.Nodes.Add(new TreeNode(preset.Name) { ToolTipText = preset.Description, ForeColor = Color.DarkBlue, Tag = preset });\r
             }\r
 \r
             rootNode = null;\r
             category = null;\r
             foreach (Preset preset in this.presetHandler.Presets.Where(p => !p.IsBuildIn)) // User Presets\r
             {\r
+                // If the category of this preset doesn't match the current category we are processing\r
+                // Then we need to create a new root node.\r
                 if (preset.Category != category && preset.Category != string.Empty)\r
                 {\r
                     rootNode = new TreeNode(preset.Category) { ForeColor = Color.Black };\r
@@ -2414,9 +2406,9 @@ namespace Handbrake
                 }\r
 \r
                 if (preset.Category == category && rootNode != null)\r
-                    rootNode.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description });\r
+                    rootNode.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description, Tag = preset });\r
                 else\r
-                    treeView_presets.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description });\r
+                    treeView_presets.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description, Tag = preset });\r
             }\r
 \r
             treeView_presets.Update();\r
index d715d8970d5b7123697d2fa3745581ed98503e74..cf4ac409c7c907095240729c2bfd0d5cbf9de155 100644 (file)
@@ -433,7 +433,7 @@ namespace Handbrake
                 lbl_source.Text = queue.QueueManager.LastProcessedJob.Source + "(Title: " + title + " Chapters: " + chapterlbl + ")";\r
                 lbl_dest.Text = queue.QueueManager.LastProcessedJob.Destination;\r
                 lbl_encodeOptions.Text = "Video: " + parsed.VideoEncoder + " Audio: " + audio + Environment.NewLine +\r
-                                    "x264 Options: " + parsed.X264Options;\r
+                                    "x264 Options: " + parsed.AdvancedEncoderOptions;\r
                }\r
             catch (Exception)\r
             {\r