OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 6 Jun 2010 18:22:39 +0000 (18:22 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 6 Jun 2010 18:22:39 +0000 (18:22 +0000)
- Moved all the services that handle parsing, scanning, encodes and the queue out into a separate library.

git-svn-id: svn://localhost/HandBrake/trunk@3362 b64f7644-9d1e-0410-96f1-a4d463321fa5

42 files changed:
win/C#/Controls/AudioPanel.cs
win/C#/Controls/PictureSettings.cs
win/C#/Functions/Main.cs
win/C#/HandBrake.ApplicationServices/Functions/GrowlCommunicator.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Functions/Main.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Functions/Win32.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Init.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Model/Cropping.cs [moved from win/C#/Model/Cropping.cs with 93% similarity]
win/C#/HandBrake.ApplicationServices/Model/Job.cs [moved from win/C#/Model/Job.cs with 93% similarity]
win/C#/HandBrake.ApplicationServices/Model/SubtitleType.cs [moved from win/C#/Model/SubtitleType.cs with 84% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/AudioTrack.cs [moved from win/C#/Parsing/AudioTrack.cs with 96% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/Chapter.cs [moved from win/C#/Parsing/Chapter.cs with 95% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/DVD.cs [moved from win/C#/Parsing/DVD.cs with 93% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/Parser.cs [moved from win/C#/Parsing/Parser.cs with 96% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/Subtitle.cs [moved from win/C#/Parsing/Subtitle.cs with 94% similarity]
win/C#/HandBrake.ApplicationServices/Parsing/Title.cs [moved from win/C#/Parsing/Title.cs with 95% similarity]
win/C#/HandBrake.ApplicationServices/Properties/AssemblyInfo.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Properties/Resources.Designer.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Properties/Resources.resx [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Properties/Settings.Designer.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Properties/Settings.settings [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Resources/ErrorX.png [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Resources/copy.png [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Resources/logo64.png [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Services/Encode.cs [moved from win/C#/Services/Encode.cs with 93% similarity]
win/C#/HandBrake.ApplicationServices/Services/Queue.cs [moved from win/C#/Services/Queue.cs with 95% similarity]
win/C#/HandBrake.ApplicationServices/Services/Scan.cs [moved from win/C#/Services/Scan.cs with 90% similarity]
win/C#/HandBrake.ApplicationServices/app.config [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/frmExceptionWindow.Designer.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/frmExceptionWindow.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/frmExceptionWindow.resx [new file with mode: 0644]
win/C#/HandBrake.sln
win/C#/HandBrakeCS.csproj
win/C#/Installer/Installer.nsi
win/C#/Installer/MakeNightly.nsi.tmpl
win/C#/Program.cs
win/C#/frmActivityWindow.cs
win/C#/frmMain.cs
win/C#/frmOptions.cs
win/C#/frmPreview.cs
win/C#/frmQueue.cs

index 9159105..6d4b008 100644 (file)
@@ -10,7 +10,9 @@ namespace Handbrake.Controls
     using System.Linq;\r
     using System.Windows.Forms;\r
     using Functions;\r
-    using Parsing;\r
+\r
+    using HandBrake.ApplicationServices.Parsing;\r
+\r
     using Presets;\r
     using AudioTrack = Model.AudioTrack;\r
 \r
index 333bec3..1528d07 100644 (file)
@@ -9,7 +9,9 @@ namespace Handbrake.Controls
     using System.Drawing;\r
     using System.Globalization;\r
     using System.Windows.Forms;\r
-    using Parsing;\r
+\r
+    using HandBrake.ApplicationServices.Parsing;\r
+\r
     using Presets;\r
 \r
     /// <summary>\r
index d7380b2..d0c82cd 100644 (file)
@@ -8,7 +8,6 @@ namespace Handbrake.Functions
     using System;\r
     using System.Collections.Generic;\r
     using System.Diagnostics;\r
-    using System.Globalization;\r
     using System.IO;\r
     using System.Net;\r
     using System.Text;\r
@@ -16,8 +15,11 @@ namespace Handbrake.Functions
     using System.Threading;\r
     using System.Windows.Forms;\r
     using System.Xml.Serialization;\r
+\r
+    using HandBrake.ApplicationServices.Model;\r
+    using HandBrake.ApplicationServices.Parsing;\r
+\r
     using Model;\r
-    using Parsing;\r
 \r
     /// <summary>\r
     /// Useful functions which various screens can use.\r
diff --git a/win/C#/HandBrake.ApplicationServices/Functions/GrowlCommunicator.cs b/win/C#/HandBrake.ApplicationServices/Functions/GrowlCommunicator.cs
new file mode 100644 (file)
index 0000000..579b92a
--- /dev/null
@@ -0,0 +1,119 @@
+/*  GrowlCommunicator.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.ApplicationServices.Functions\r
+{\r
+    using System;\r
+\r
+    using Growl.Connector;\r
+\r
+    /// <summary>\r
+    /// Provides all functionality for communicating with Growl for Windows.\r
+    /// </summary>\r
+    /// <remarks>\r
+    /// This class is implemented as a static class because:\r
+    ///     1. It allows nearly all of the Growl-related code to be in one place\r
+    ///     2. It prevents the main form, queue handler, and any other part of Handbrake from having to declare\r
+    ///        or track any new instance variables\r
+    /// </remarks>\r
+    public static class GrowlCommunicator\r
+    {\r
+        /// <summary>\r
+        /// The <see cref="GrowlConnector"/> that actually talks to Growl\r
+        /// </summary>\r
+        private static GrowlConnector growl;\r
+\r
+        /// <summary>\r
+        /// The Handbrake application instance that is registered with Growl\r
+        /// </summary>\r
+        private static Application application;\r
+\r
+        /// <summary>\r
+        /// Notification shown upon completion of encoding\r
+        /// </summary>\r
+        private static NotificationType encodeOrQueueCompleted = new NotificationType("EncodeOrQueue", "HandBrake Status");\r
+\r
+        /// <summary>\r
+        /// Checks to see if Growl is currently running on the local machine.\r
+        /// </summary>\r
+        /// <returns>\r
+        /// <c>true</c> if Growl is running;\r
+        /// <c>false</c> otherwise\r
+        /// </returns>\r
+        public static bool IsRunning()\r
+        {\r
+            Initialize();\r
+\r
+            return growl.IsGrowlRunning();\r
+        }\r
+\r
+        /// <summary>\r
+        /// Registers Handbrake with the local Growl instance\r
+        /// </summary>\r
+        /// <remarks>\r
+        /// This should usually be called at application start-up\r
+        /// </remarks>\r
+        public static void Register()\r
+        {\r
+            Initialize();\r
+            growl.Register(application, new[] {encodeOrQueueCompleted});\r
+        }\r
+\r
+        /// <summary>\r
+        /// Sends a notification to Growl. (Since Handbrake currently only supports one type of notification with\r
+        /// static text, this is a shortcut method).\r
+        /// </summary>\r
+        /// <param name="title">\r
+        /// The title.\r
+        /// </param>\r
+        /// <param name="text">\r
+        /// The text to display.\r
+        /// </param>\r
+        public static void Notify(string title, string text)\r
+        {\r
+            Notification notification = new Notification(application.Name, encodeOrQueueCompleted.Name, String.Empty, \r
+                                                         title, text);\r
+            growl.Notify(notification);\r
+        }\r
+\r
+        /// <summary>\r
+        /// Sends a notification to Growl. (This is the more generic version that could be used in the future if \r
+        /// more notification types are implemented)\r
+        /// </summary>\r
+        /// <param name="notificationType">The <see cref="NotificationType">type</see> of notification to send</param>\r
+        /// <param name="title">The notification title</param>\r
+        /// <param name="text">The notification text</param>\r
+        /// <param name="imageUrl">The notification image as a url</param>\r
+        public static void Notify(NotificationType notificationType, string title, string text, string imageUrl)\r
+        {\r
+            Notification notification = new Notification(application.Name, notificationType.Name, String.Empty, title, \r
+                                                         text)\r
+                                            {\r
+                                                Icon = imageUrl\r
+                                            };\r
+\r
+            growl.Notify(notification);\r
+        }\r
+\r
+        /// <summary>\r
+        /// Initializes the GrowlCommunicator\r
+        /// </summary>\r
+        private static void Initialize()\r
+        {\r
+            if (growl == null)\r
+            {\r
+                growl = new GrowlConnector\r
+                            {\r
+                                EncryptionAlgorithm = Cryptography.SymmetricAlgorithmType.PlainText\r
+                            };\r
+\r
+                application = new Application("Handbrake")\r
+                                  {\r
+                                      Icon = Properties.Resources.logo64\r
+                                  };\r
+            }\r
+        }\r
+    }\r
+}
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/Functions/Main.cs b/win/C#/HandBrake.ApplicationServices/Functions/Main.cs
new file mode 100644 (file)
index 0000000..0696101
--- /dev/null
@@ -0,0 +1,83 @@
+/*  Main.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.ApplicationServices.Functions\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Diagnostics;\r
+\r
+    /// <summary>\r
+    /// Useful functions which various screens can use.\r
+    /// </summary>\r
+    public static class Main\r
+    {\r
+        /// <summary>\r
+        /// Get the Process ID of HandBrakeCLI for the current instance.\r
+        /// </summary>\r
+        /// <param name="before">List of processes before the new process was started</param>\r
+        /// <returns>Int - Process ID</returns>\r
+        public static int GetCliProcess(Process[] before)\r
+        {\r
+            // This is a bit of a cludge. Maybe someone has a better idea on how to impliment this.\r
+            // Since we used CMD to start HandBrakeCLI, we don't get the process ID from hbProc.\r
+            // Instead we take the processes before and after, and get the ID of HandBrakeCLI.exe\r
+            // avoiding any previous instances of HandBrakeCLI.exe in before.\r
+            // Kill the current process.\r
+\r
+            DateTime startTime = DateTime.Now;\r
+            TimeSpan duration;\r
+\r
+            Process[] hbProcesses = Process.GetProcessesByName("HandBrakeCLI");\r
+            while (hbProcesses.Length == 0)\r
+            {\r
+                hbProcesses = Process.GetProcessesByName("HandBrakeCLI");\r
+                duration = DateTime.Now - startTime;\r
+                if (duration.Seconds > 5 && hbProcesses.Length == 0)\r
+                    // Make sure we don't wait forever if the process doesn't start\r
+                    return -1;\r
+            }\r
+\r
+            Process hbProcess = null;\r
+            foreach (Process process in hbProcesses)\r
+            {\r
+                bool found = false;\r
+                // Check if the current CLI instance was running before we started the current one\r
+                foreach (Process bprocess in before)\r
+                {\r
+                    if (process.Id == bprocess.Id)\r
+                        found = true;\r
+                }\r
+\r
+                // If it wasn't running before, we found the process we want.\r
+                if (!found)\r
+                {\r
+                    hbProcess = process;\r
+                    break;\r
+                }\r
+            }\r
+            if (hbProcess != null)\r
+                return hbProcess.Id;\r
+\r
+            return -1;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Show the Exception Window\r
+        /// </summary>\r
+        /// <param name="shortError">\r
+        /// The short error.\r
+        /// </param>\r
+        /// <param name="longError">\r
+        /// The long error.\r
+        /// </param>\r
+        public static void ShowExceptiowWindow(string shortError, string longError)\r
+        {\r
+            frmExceptionWindow exceptionWindow = new frmExceptionWindow();\r
+            exceptionWindow.Setup(shortError, longError);\r
+            exceptionWindow.Show();\r
+        }\r
+    }\r
+}
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/Functions/Win32.cs b/win/C#/HandBrake.ApplicationServices/Functions/Win32.cs
new file mode 100644 (file)
index 0000000..a3caf38
--- /dev/null
@@ -0,0 +1,143 @@
+/*  win32.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.ApplicationServices.Functions\r
+{\r
+    using System;\r
+    using System.Runtime.InteropServices;\r
+\r
+    /// <summary>\r
+    /// Win32 API calls\r
+    /// </summary>\r
+    public class Win32\r
+    {\r
+        /// <summary>\r
+        /// Set the Forground Window\r
+        /// </summary>\r
+        /// <param name="hWnd">\r
+        /// The h wnd.\r
+        /// </param>\r
+        /// <returns>\r
+        /// A Boolean true when complete.\r
+        /// </returns>\r
+        [DllImport("user32.dll")]\r
+        public static extern bool SetForegroundWindow(int hWnd);\r
+\r
+        /// <summary>\r
+        /// Lock the workstation\r
+        /// </summary>\r
+        [DllImport("user32.dll")]\r
+        public static extern void LockWorkStation();\r
+\r
+        /// <summary>\r
+        /// Exit Windows\r
+        /// </summary>\r
+        /// <param name="uFlags">\r
+        /// The u flags.\r
+        /// </param>\r
+        /// <param name="dwReason">\r
+        /// The dw reason.\r
+        /// </param>\r
+        /// <returns>\r
+        /// an integer\r
+        /// </returns>\r
+        [DllImport("user32.dll")]\r
+        public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
+\r
+        /// <summary>\r
+        /// System Memory Status\r
+        /// </summary>\r
+        public struct MEMORYSTATUS // Unused var's are required here.\r
+        {\r
+            /// <summary>\r
+            /// Unknown\r
+            /// </summary>\r
+            public UInt32 dwLength;\r
+\r
+            /// <summary>\r
+            /// Memory Load\r
+            /// </summary>\r
+            public UInt32 dwMemoryLoad;\r
+\r
+            /// <summary>\r
+            /// Total Physical Memory\r
+            /// </summary>\r
+            public UInt32 dwTotalPhys; // Used\r
+\r
+            /// <summary>\r
+            /// Available Physical Memory\r
+            /// </summary>\r
+            public UInt32 dwAvailPhys;\r
+\r
+            /// <summary>\r
+            /// Total Page File\r
+            /// </summary>\r
+            public UInt32 dwTotalPageFile;\r
+\r
+            /// <summary>\r
+            /// Available Page File\r
+            /// </summary>\r
+            public UInt32 dwAvailPageFile;\r
+\r
+            /// <summary>\r
+            /// Total Virtual Memory\r
+            /// </summary>\r
+            public UInt32 dwTotalVirtual;\r
+\r
+            /// <summary>\r
+            /// Available Virtual Memory\r
+            /// </summary>\r
+            public UInt32 dwAvailVirtual;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Global Memory Status\r
+        /// </summary>\r
+        /// <param name="lpBuffer">\r
+        /// The lp buffer.\r
+        /// </param>\r
+        [DllImport("kernel32.dll")]\r
+        public static extern void GlobalMemoryStatus\r
+        (\r
+            ref MEMORYSTATUS lpBuffer\r
+        );\r
+\r
+        /// <summary>\r
+        /// Generate a Console Ctrl Event\r
+        /// </summary>\r
+        /// <param name="sigevent">\r
+        /// The sigevent.\r
+        /// </param>\r
+        /// <param name="dwProcessGroupId">\r
+        /// The dw process group id.\r
+        /// </param>\r
+        /// <returns>\r
+        /// Bool true is sucess\r
+        /// </returns>\r
+        [DllImport("kernel32.dll", SetLastError = true)]\r
+        public static extern bool GenerateConsoleCtrlEvent(ConsoleCtrlEvent sigevent, int dwProcessGroupId);\r
+\r
+        /// <summary>\r
+        /// Console Ctrl Event\r
+        /// </summary>\r
+        public enum ConsoleCtrlEvent\r
+        {\r
+            /// <summary>\r
+            /// Ctrl - C\r
+            /// </summary>\r
+            CTRL_C = 0,\r
+\r
+            /// <summary>\r
+            /// Ctrl - Break\r
+            /// </summary>\r
+            CTRL_BREAK = 1,\r
+\r
+            /// <summary>\r
+            /// Ctrl - Close\r
+            /// </summary>\r
+            CTRL_CLOSE = 2,\r
+        }\r
+    }\r
+}\r
diff --git a/win/C#/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj b/win/C#/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
new file mode 100644 (file)
index 0000000..ebeb307
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <PropertyGroup>\r
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+    <ProductVersion>9.0.21022</ProductVersion>\r
+    <SchemaVersion>2.0</SchemaVersion>\r
+    <ProjectGuid>{087A2BA8-BAC2-4577-A46F-07FF9D420016}</ProjectGuid>\r
+    <OutputType>Library</OutputType>\r
+    <AppDesignerFolder>Properties</AppDesignerFolder>\r
+    <RootNamespace>HandBrake.ApplicationServices</RootNamespace>\r
+    <AssemblyName>HandBrake.ApplicationServices</AssemblyName>\r
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
+    <FileAlignment>512</FileAlignment>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <DebugType>full</DebugType>\r
+    <Optimize>false</Optimize>\r
+    <OutputPath>bin\Debug\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <WarningLevel>4</WarningLevel>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>pdbonly</DebugType>\r
+    <Optimize>true</Optimize>\r
+    <OutputPath>bin\Release\</OutputPath>\r
+    <DefineConstants>TRACE</DefineConstants>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <WarningLevel>4</WarningLevel>\r
+  </PropertyGroup>\r
+  <ItemGroup>\r
+    <Reference Include="Growl.Connector, Version=2.0.0.0, Culture=neutral, PublicKeyToken=980c2339411be384, processorArchitecture=MSIL">\r
+      <SpecificVersion>False</SpecificVersion>\r
+      <HintPath>..\libraries\Growl.Connector.dll</HintPath>\r
+    </Reference>\r
+    <Reference Include="Growl.CoreLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=13e59d82e007b064, processorArchitecture=MSIL">\r
+      <SpecificVersion>False</SpecificVersion>\r
+      <HintPath>..\libraries\Growl.CoreLibrary.dll</HintPath>\r
+    </Reference>\r
+    <Reference Include="System" />\r
+    <Reference Include="System.Core">\r
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
+    </Reference>\r
+    <Reference Include="System.Drawing" />\r
+    <Reference Include="System.Windows.Forms" />\r
+    <Reference Include="System.Xml.Linq">\r
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
+    </Reference>\r
+    <Reference Include="System.Data.DataSetExtensions">\r
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
+    </Reference>\r
+    <Reference Include="System.Data" />\r
+    <Reference Include="System.Xml" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <Compile Include="frmExceptionWindow.cs">\r
+      <SubType>Form</SubType>\r
+    </Compile>\r
+    <Compile Include="frmExceptionWindow.Designer.cs">\r
+      <DependentUpon>frmExceptionWindow.cs</DependentUpon>\r
+    </Compile>\r
+    <Compile Include="Functions\GrowlCommunicator.cs" />\r
+    <Compile Include="Functions\Main.cs" />\r
+    <Compile Include="Functions\Win32.cs" />\r
+    <Compile Include="Init.cs" />\r
+    <Compile Include="Model\Cropping.cs" />\r
+    <Compile Include="Model\Job.cs" />\r
+    <Compile Include="Model\SubtitleType.cs" />\r
+    <Compile Include="Parsing\AudioTrack.cs" />\r
+    <Compile Include="Parsing\Chapter.cs" />\r
+    <Compile Include="Parsing\DVD.cs" />\r
+    <Compile Include="Parsing\Parser.cs" />\r
+    <Compile Include="Parsing\Subtitle.cs" />\r
+    <Compile Include="Parsing\Title.cs" />\r
+    <Compile Include="Properties\AssemblyInfo.cs" />\r
+    <Compile Include="Properties\Resources.Designer.cs">\r
+      <AutoGen>True</AutoGen>\r
+      <DesignTime>True</DesignTime>\r
+      <DependentUpon>Resources.resx</DependentUpon>\r
+    </Compile>\r
+    <Compile Include="Properties\Settings.Designer.cs">\r
+      <AutoGen>True</AutoGen>\r
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
+      <DependentUpon>Settings.settings</DependentUpon>\r
+    </Compile>\r
+    <Compile Include="Services\Encode.cs" />\r
+    <Compile Include="Services\Queue.cs" />\r
+    <Compile Include="Services\Scan.cs" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="app.config" />\r
+    <None Include="Properties\Settings.settings">\r
+      <Generator>SettingsSingleFileGenerator</Generator>\r
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r
+    </None>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <EmbeddedResource Include="frmExceptionWindow.resx">\r
+      <DependentUpon>frmExceptionWindow.cs</DependentUpon>\r
+      <SubType>Designer</SubType>\r
+    </EmbeddedResource>\r
+    <EmbeddedResource Include="Properties\Resources.resx">\r
+      <Generator>ResXFileCodeGenerator</Generator>\r
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+      <SubType>Designer</SubType>\r
+    </EmbeddedResource>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\logo64.png" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\ErrorX.png" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\copy.png" />\r
+  </ItemGroup>\r
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
+       Other similar extension points exist, see Microsoft.Common.targets.\r
+  <Target Name="BeforeBuild">\r
+  </Target>\r
+  <Target Name="AfterBuild">\r
+  </Target>\r
+  -->\r
+</Project>
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/Init.cs b/win/C#/HandBrake.ApplicationServices/Init.cs
new file mode 100644 (file)
index 0000000..a0a85d4
--- /dev/null
@@ -0,0 +1,69 @@
+/*  Init.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.ApplicationServices\r
+{\r
+    /// <summary>\r
+    /// Initialize ApplicationServices\r
+    /// </summary>\r
+    public class Init\r
+    {\r
+        /// <summary>\r
+        /// Setup the Settings used by the applicaiton with this library\r
+        /// </summary>\r
+        /// <param name="cli_minimized">\r
+        /// The cli_minimized.\r
+        /// </param>\r
+        /// <param name="completionOption">\r
+        /// The completion option.\r
+        /// </param>\r
+        /// <param name="disableDvdNav">\r
+        /// The disable dvd nav.\r
+        /// </param>\r
+        /// <param name="enocdeStatusInGui">\r
+        /// The enocde status in gui.\r
+        /// </param>\r
+        /// <param name="growlEncode">\r
+        /// The growl encode.\r
+        /// </param>\r
+        /// <param name="growlQueue">\r
+        /// The growl queue.\r
+        /// </param>\r
+        /// <param name="processPriority">\r
+        /// The process priority.\r
+        /// </param>\r
+        /// <param name="saveLogPath">\r
+        /// The save log path.\r
+        /// </param>\r
+        /// <param name="saveLogToSpecifiedPath">\r
+        /// The save log to specified path.\r
+        /// </param>\r
+        /// <param name="saveLogWithVideo">\r
+        /// The save log with video.\r
+        /// </param>\r
+        /// <param name="showCliForInGuiEncodeStatus">\r
+        /// The show cli for in gui encode status.\r
+        /// </param>\r
+        public static void SetupSettings(bool cli_minimized, string completionOption, bool disableDvdNav, bool enocdeStatusInGui,\r
+                                  bool growlEncode, bool growlQueue, string processPriority, string saveLogPath, bool saveLogToSpecifiedPath,\r
+                                  bool saveLogWithVideo, bool showCliForInGuiEncodeStatus)\r
+        {\r
+            Properties.Settings.Default.cli_minimized = cli_minimized;\r
+            Properties.Settings.Default.CompletionOption = completionOption;\r
+            Properties.Settings.Default.disableDvdNav = disableDvdNav;\r
+            Properties.Settings.Default.enocdeStatusInGui = enocdeStatusInGui;\r
+            Properties.Settings.Default.growlEncode = growlEncode;\r
+            Properties.Settings.Default.growlQueue = growlQueue;\r
+            Properties.Settings.Default.processPriority = processPriority;\r
+            Properties.Settings.Default.saveLogPath = saveLogPath;\r
+            Properties.Settings.Default.saveLogToSpecifiedPath = saveLogToSpecifiedPath;\r
+            Properties.Settings.Default.saveLogWithVideo = saveLogWithVideo;\r
+            Properties.Settings.Default.showCliForInGuiEncodeStatus = showCliForInGuiEncodeStatus;\r
+\r
+            Properties.Settings.Default.Save();\r
+        }\r
+\r
+    }\r
+}\r
similarity index 93%
rename from win/C#/Model/Cropping.cs
rename to win/C#/HandBrake.ApplicationServices/Model/Cropping.cs
index 63a84af..ae39636 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Model\r
+namespace HandBrake.ApplicationServices.Model\r
 {\r
     /// <summary>\r
     /// Cropping T B L R\r
similarity index 93%
rename from win/C#/Model/Job.cs
rename to win/C#/HandBrake.ApplicationServices/Model/Job.cs
index 6f27212..9d4b375 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Model\r
+namespace HandBrake.ApplicationServices.Model\r
 {\r
     /// <summary>\r
     /// The job.\r
similarity index 84%
rename from win/C#/Model/SubtitleType.cs
rename to win/C#/HandBrake.ApplicationServices/Model/SubtitleType.cs
index a9c8609..b7ceabd 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Model\r
+namespace HandBrake.ApplicationServices.Model\r
 {\r
     /// <summary>\r
     /// Subtitle Type. \r
similarity index 96%
rename from win/C#/Parsing/AudioTrack.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/AudioTrack.cs
index fb00bcf..f83660b 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System.Collections.Generic;\r
     using System.IO;\r
similarity index 95%
rename from win/C#/Parsing/Chapter.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/Chapter.cs
index ca8fc30..b39f2ba 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System;\r
     using System.Collections.Generic;\r
similarity index 93%
rename from win/C#/Parsing/DVD.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/DVD.cs
index 5e3d411..c7e5a27 100644 (file)
@@ -2,7 +2,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System.Collections.Generic;\r
     using System.IO;\r
similarity index 96%
rename from win/C#/Parsing/Parser.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/Parser.cs
index 5eb7952..1e6329d 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System;\r
     using System.Globalization;\r
@@ -41,7 +41,7 @@ namespace Handbrake.Parsing
     /// <summary>\r
     /// A simple wrapper around a StreamReader to keep track of the entire output from a cli process\r
     /// </summary>\r
-    internal class Parser : StreamReader\r
+    public class Parser : StreamReader\r
     {\r
         /// <summary>\r
         /// The Buffer StringBuilder\r
similarity index 94%
rename from win/C#/Parsing/Subtitle.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/Subtitle.cs
index fd0cdc5..31ec350 100644 (file)
@@ -3,13 +3,13 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System.Collections.Generic;\r
     using System.IO;\r
     using System.Text.RegularExpressions;\r
 \r
-    using Handbrake.Model;\r
+    using HandBrake.ApplicationServices.Model;\r
 \r
     /// <summary>\r
     /// An object that represents a subtitle associated with a Title, in a DVD\r
similarity index 95%
rename from win/C#/Parsing/Title.cs
rename to win/C#/HandBrake.ApplicationServices/Parsing/Title.cs
index 3a3e6ca..0aad4d5 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Parsing\r
+namespace HandBrake.ApplicationServices.Parsing\r
 {\r
     using System;\r
     using System.Collections.Generic;\r
@@ -12,7 +12,7 @@ namespace Handbrake.Parsing
     using System.IO;\r
     using System.Text.RegularExpressions;\r
 \r
-    using Handbrake.Model;\r
+    using HandBrake.ApplicationServices.Model;\r
 \r
     /// <summary>\r
     /// An object that represents a single Title of a DVD\r
@@ -205,7 +205,7 @@ namespace Handbrake.Parsing
             if (m.Success)\r
                 thisTitle.SourceName = path.Replace("+ stream:", string.Empty).Trim();\r
 \r
-            if (!Properties.Settings.Default.noDvdNav)\r
+            if (!Properties.Settings.Default.disableDvdNav)\r
             {\r
                 // Get the Angles for the title.\r
                 m = Regex.Match(output.ReadLine(), @"  \+ angle\(s\) ([0-9])");\r
diff --git a/win/C#/HandBrake.ApplicationServices/Properties/AssemblyInfo.cs b/win/C#/HandBrake.ApplicationServices/Properties/AssemblyInfo.cs
new file mode 100644 (file)
index 0000000..98c308a
--- /dev/null
@@ -0,0 +1,36 @@
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following \r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("HandBrake.ApplicationServices")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("Microsoft")]\r
+[assembly: AssemblyProduct("HandBrake.ApplicationServices")]\r
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible \r
+// to COM components.  If you need to access a type in this assembly from \r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("1fe2c0f6-53e0-4633-88ef-c3cbd8be02a7")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+//      Major Version\r
+//      Minor Version \r
+//      Build Number\r
+//      Revision\r
+//\r
+// You can specify all the values or you can default the Build and Revision Numbers \r
+// by using the '*' as shown below:\r
+// [assembly: AssemblyVersion("1.0.*")]\r
+[assembly: AssemblyVersion("1.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
diff --git a/win/C#/HandBrake.ApplicationServices/Properties/Resources.Designer.cs b/win/C#/HandBrake.ApplicationServices/Properties/Resources.Designer.cs
new file mode 100644 (file)
index 0000000..9b12f72
--- /dev/null
@@ -0,0 +1,84 @@
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+//     This code was generated by a tool.\r
+//     Runtime Version:2.0.50727.4927\r
+//\r
+//     Changes to this file may cause incorrect behavior and will be lost if\r
+//     the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.ApplicationServices.Properties {\r
+    using System;\r
+    \r
+    \r
+    /// <summary>\r
+    ///   A strongly-typed resource class, for looking up localized strings, etc.\r
+    /// </summary>\r
+    // This class was auto-generated by the StronglyTypedResourceBuilder\r
+    // class via a tool like ResGen or Visual Studio.\r
+    // To add or remove a member, edit your .ResX file then rerun ResGen\r
+    // with the /str option, or rebuild your VS project.\r
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]\r
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+    internal class Resources {\r
+        \r
+        private static global::System.Resources.ResourceManager resourceMan;\r
+        \r
+        private static global::System.Globalization.CultureInfo resourceCulture;\r
+        \r
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+        internal Resources() {\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Returns the cached ResourceManager instance used by this class.\r
+        /// </summary>\r
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+        internal static global::System.Resources.ResourceManager ResourceManager {\r
+            get {\r
+                if (object.ReferenceEquals(resourceMan, null)) {\r
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HandBrake.ApplicationServices.Properties.Resources", typeof(Resources).Assembly);\r
+                    resourceMan = temp;\r
+                }\r
+                return resourceMan;\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Overrides the current thread's CurrentUICulture property for all\r
+        ///   resource lookups using this strongly typed resource class.\r
+        /// </summary>\r
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+        internal static global::System.Globalization.CultureInfo Culture {\r
+            get {\r
+                return resourceCulture;\r
+            }\r
+            set {\r
+                resourceCulture = value;\r
+            }\r
+        }\r
+        \r
+        internal static System.Drawing.Bitmap copy {\r
+            get {\r
+                object obj = ResourceManager.GetObject("copy", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        internal static System.Drawing.Bitmap ErrorX {\r
+            get {\r
+                object obj = ResourceManager.GetObject("ErrorX", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        internal static System.Drawing.Bitmap logo64 {\r
+            get {\r
+                object obj = ResourceManager.GetObject("logo64", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+    }\r
+}\r
diff --git a/win/C#/HandBrake.ApplicationServices/Properties/Resources.resx b/win/C#/HandBrake.ApplicationServices/Properties/Resources.resx
new file mode 100644 (file)
index 0000000..9971f5d
--- /dev/null
@@ -0,0 +1,130 @@
+<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <resheader name="writer">\r
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+  <data name="copy" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+  <data name="ErrorX" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\ErrorX.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+  <data name="logo64" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\logo64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+</root>
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/Properties/Settings.Designer.cs b/win/C#/HandBrake.ApplicationServices/Properties/Settings.Designer.cs
new file mode 100644 (file)
index 0000000..bf27819
--- /dev/null
@@ -0,0 +1,158 @@
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+//     This code was generated by a tool.\r
+//     Runtime Version:2.0.50727.4927\r
+//\r
+//     Changes to this file may cause incorrect behavior and will be lost if\r
+//     the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.ApplicationServices.Properties {\r
+    \r
+    \r
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]\r
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r
+        \r
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r
+        \r
+        public static Settings Default {\r
+            get {\r
+                return defaultInstance;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool disableDvdNav {\r
+            get {\r
+                return ((bool)(this["disableDvdNav"]));\r
+            }\r
+            set {\r
+                this["disableDvdNav"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool saveLogWithVideo {\r
+            get {\r
+                return ((bool)(this["saveLogWithVideo"]));\r
+            }\r
+            set {\r
+                this["saveLogWithVideo"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("")]\r
+        public string saveLogPath {\r
+            get {\r
+                return ((string)(this["saveLogPath"]));\r
+            }\r
+            set {\r
+                this["saveLogPath"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool saveLogToSpecifiedPath {\r
+            get {\r
+                return ((bool)(this["saveLogToSpecifiedPath"]));\r
+            }\r
+            set {\r
+                this["saveLogToSpecifiedPath"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool growlQueue {\r
+            get {\r
+                return ((bool)(this["growlQueue"]));\r
+            }\r
+            set {\r
+                this["growlQueue"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("")]\r
+        public string CompletionOption {\r
+            get {\r
+                return ((string)(this["CompletionOption"]));\r
+            }\r
+            set {\r
+                this["CompletionOption"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("")]\r
+        public string processPriority {\r
+            get {\r
+                return ((string)(this["processPriority"]));\r
+            }\r
+            set {\r
+                this["processPriority"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool cli_minimized {\r
+            get {\r
+                return ((bool)(this["cli_minimized"]));\r
+            }\r
+            set {\r
+                this["cli_minimized"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool showCliForInGuiEncodeStatus {\r
+            get {\r
+                return ((bool)(this["showCliForInGuiEncodeStatus"]));\r
+            }\r
+            set {\r
+                this["showCliForInGuiEncodeStatus"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool enocdeStatusInGui {\r
+            get {\r
+                return ((bool)(this["enocdeStatusInGui"]));\r
+            }\r
+            set {\r
+                this["enocdeStatusInGui"] = value;\r
+            }\r
+        }\r
+        \r
+        [global::System.Configuration.UserScopedSettingAttribute()]\r
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]\r
+        public bool growlEncode {\r
+            get {\r
+                return ((bool)(this["growlEncode"]));\r
+            }\r
+            set {\r
+                this["growlEncode"] = value;\r
+            }\r
+        }\r
+    }\r
+}\r
diff --git a/win/C#/HandBrake.ApplicationServices/Properties/Settings.settings b/win/C#/HandBrake.ApplicationServices/Properties/Settings.settings
new file mode 100644 (file)
index 0000000..20239af
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='utf-8'?>\r
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HandBrake.ApplicationServices.Properties" GeneratedClassName="Settings">\r
+  <Profiles />\r
+  <Settings>\r
+    <Setting Name="disableDvdNav" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="saveLogWithVideo" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="saveLogPath" Type="System.String" Scope="User">\r
+      <Value Profile="(Default)" />\r
+    </Setting>\r
+    <Setting Name="saveLogToSpecifiedPath" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="growlQueue" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="CompletionOption" Type="System.String" Scope="User">\r
+      <Value Profile="(Default)" />\r
+    </Setting>\r
+    <Setting Name="processPriority" Type="System.String" Scope="User">\r
+      <Value Profile="(Default)" />\r
+    </Setting>\r
+    <Setting Name="cli_minimized" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="showCliForInGuiEncodeStatus" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="enocdeStatusInGui" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+    <Setting Name="growlEncode" Type="System.Boolean" Scope="User">\r
+      <Value Profile="(Default)">False</Value>\r
+    </Setting>\r
+  </Settings>\r
+</SettingsFile>
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/Resources/ErrorX.png b/win/C#/HandBrake.ApplicationServices/Resources/ErrorX.png
new file mode 100644 (file)
index 0000000..75c63c0
Binary files /dev/null and b/win/C#/HandBrake.ApplicationServices/Resources/ErrorX.png differ
diff --git a/win/C#/HandBrake.ApplicationServices/Resources/copy.png b/win/C#/HandBrake.ApplicationServices/Resources/copy.png
new file mode 100644 (file)
index 0000000..c11c6a7
Binary files /dev/null and b/win/C#/HandBrake.ApplicationServices/Resources/copy.png differ
diff --git a/win/C#/HandBrake.ApplicationServices/Resources/logo64.png b/win/C#/HandBrake.ApplicationServices/Resources/logo64.png
new file mode 100644 (file)
index 0000000..12808f6
Binary files /dev/null and b/win/C#/HandBrake.ApplicationServices/Resources/logo64.png differ
similarity index 93%
rename from win/C#/Services/Encode.cs
rename to win/C#/HandBrake.ApplicationServices/Services/Encode.cs
index a6da850..491668d 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr/>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Services\r
+namespace HandBrake.ApplicationServices.Services\r
 {\r
     using System;\r
     using System.Diagnostics;\r
@@ -11,9 +11,11 @@ namespace Handbrake.Services
     using System.Text;\r
     using System.Threading;\r
     using System.Windows.Forms;\r
-    using Functions;\r
-    using Model;\r
-    using Properties;\r
+\r
+    using HandBrake.ApplicationServices.Functions;\r
+    using HandBrake.ApplicationServices.Model;\r
+    using HandBrake.ApplicationServices.Properties;\r
+\r
     using Timer = System.Threading.Timer;\r
 \r
     /// <summary>\r
@@ -222,12 +224,7 @@ namespace Handbrake.Services
             }\r
             catch (Exception exc)\r
             {\r
-                MessageBox.Show(\r
-                    "It would appear that HandBrakeCLI has not started correctly. You should take a look at the Activity log as it may indicate the reason why.\n\nDetailed Error Information: error occured in runCli()\n\n" +\r
-                    exc,\r
-                    "Error",\r
-                    MessageBoxButtons.OK,\r
-                    MessageBoxIcon.Error);\r
+                Main.ShowExceptiowWindow("It would appear that HandBrakeCLI has not started correctly. You should take a look at the Activity log as it may indicate the reason why.\n\nDetailed Error Information: error occured in runCli()", exc.ToString());\r
             }\r
         }\r
 \r
@@ -340,7 +337,7 @@ namespace Handbrake.Services
                 this.EncodeEnded(this, new EventArgs());\r
 \r
             // Growl\r
-            if (Settings.Default.growlQueue)\r
+        if (Settings.Default.growlQueue)\r
                 GrowlCommunicator.Notify("Queue Completed", "Put down that cocktail...\nyour Handbrake queue is done.");\r
 \r
             // Do something whent he encode ends.\r
@@ -440,11 +437,7 @@ namespace Handbrake.Services
             }\r
             catch (Exception exc)\r
             {\r
-                MessageBox.Show(\r
-                    "Something went a bit wrong trying to copy your log file.\nError Information:\n\n" + exc,\r
-                    "Error",\r
-                    MessageBoxButtons.OK,\r
-                    MessageBoxIcon.Error);\r
+                Main.ShowExceptiowWindow("Unable to make a copy of the log file", exc.ToString());\r
             }\r
         }\r
 \r
similarity index 95%
rename from win/C#/Services/Queue.cs
rename to win/C#/HandBrake.ApplicationServices/Services/Queue.cs
index d3d9430..f61bb6e 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr/>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Services\r
+namespace HandBrake.ApplicationServices.Services\r
 {\r
     using System;\r
     using System.Collections.Generic;\r
@@ -13,8 +13,9 @@ namespace Handbrake.Services
     using System.Threading;\r
     using System.Windows.Forms;\r
     using System.Xml.Serialization;\r
-    using Functions;\r
-    using Model;\r
+\r
+    using HandBrake.ApplicationServices.Functions;\r
+    using HandBrake.ApplicationServices.Model;\r
 \r
     /// <summary>\r
     /// The HandBrake Queue\r
@@ -237,7 +238,7 @@ namespace Handbrake.Services
         /// Writes the current state of the queue in the form of a batch (.bat) file.\r
         /// </summary>\r
         /// <param name="file">The location of the file to write the batch file to.</param>\r
-        public void WriteBatchScriptToFile(string file)\r
+        public bool WriteBatchScriptToFile(string file)\r
         {\r
             string queries = string.Empty;\r
             foreach (Job queueItem in this.queue)\r
@@ -263,14 +264,14 @@ namespace Handbrake.Services
                         line.WriteLine(strCmdLine);\r
                     }\r
 \r
-                    MessageBox.Show("Your batch script has been sucessfully saved.", "Status", MessageBoxButtons.OK,\r
-                                    MessageBoxIcon.Asterisk);\r
+                    return true;\r
                 }\r
                 catch (Exception exc)\r
                 {\r
                     Main.ShowExceptiowWindow("Unable to write to the file. Please make sure that the location has the correct permissions for file writing.", exc.ToString());\r
                 }\r
             }\r
+            return false;\r
         }\r
 \r
         /// <summary>\r
similarity index 90%
rename from win/C#/Services/Scan.cs
rename to win/C#/HandBrake.ApplicationServices/Services/Scan.cs
index 3c62ec9..1f54fa9 100644 (file)
@@ -3,7 +3,7 @@
     Homepage: <http://handbrake.fr>.\r
     It may be used under the terms of the GNU General Public License. */\r
 \r
-namespace Handbrake.Services\r
+namespace HandBrake.ApplicationServices.Services\r
 {\r
     using System;\r
     using System.Diagnostics;\r
@@ -11,7 +11,9 @@ namespace Handbrake.Services
     using System.Text;\r
     using System.Threading;\r
     using System.Windows.Forms;\r
-    using Parsing;\r
+\r
+    using HandBrake.ApplicationServices.Functions;\r
+    using HandBrake.ApplicationServices.Parsing;\r
 \r
     /// <summary>\r
     /// Scan a Source\r
@@ -125,9 +127,9 @@ namespace Handbrake.Services
             }\r
             catch (Exception ex)\r
             {\r
-                MessageBox.Show(\r
-                    "Unable to kill HandBrakeCLI.exe \nYou may need to manually kill HandBrakeCLI.exe using the Windows Task Manager if it does not close automatically within the next few minutes. \n\nError Information: \n" +\r
-                    ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                Main.ShowExceptiowWindow("Unable to kill HandBrakeCLI.exe \n" +\r
+                "You may need to manually kill HandBrakeCLI.exe using the Windows Task Manager if it does not close automatically" + \r
+                " within the next few minutes. ", ex.ToString());\r
             }\r
         }\r
 \r
@@ -158,7 +160,7 @@ namespace Handbrake.Services
                     File.Delete(dvdInfoPath);\r
 \r
                 string extraArguments = string.Empty;\r
-                if (Properties.Settings.Default.noDvdNav)\r
+                if (Properties.Settings.Default.disableDvdNav)\r
                     extraArguments = " --no-dvdnav";\r
 \r
                 if (title > 0)\r
@@ -200,9 +202,7 @@ namespace Handbrake.Services
             }\r
             catch (Exception exc)\r
             {\r
-                frmExceptionWindow exceptionWindow = new frmExceptionWindow();\r
-                exceptionWindow.Setup("frmMain.cs - scanProcess() Error", exc.ToString());\r
-                exceptionWindow.ShowDialog();\r
+                Main.ShowExceptiowWindow("frmMain.cs - scanProcess() Error", exc.ToString());\r
             }\r
         }\r
 \r
diff --git a/win/C#/HandBrake.ApplicationServices/app.config b/win/C#/HandBrake.ApplicationServices/app.config
new file mode 100644 (file)
index 0000000..5b9648f
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<configuration>\r
+    <configSections>\r
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >\r
+            <section name="HandBrake.ApplicationServices.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />\r
+        </sectionGroup>\r
+    </configSections>\r
+    <userSettings>\r
+        <HandBrake.ApplicationServices.Properties.Settings>\r
+            <setting name="disableDvdNav" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="saveLogWithVideo" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="saveLogPath" serializeAs="String">\r
+                <value />\r
+            </setting>\r
+            <setting name="saveLogToSpecifiedPath" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="growlQueue" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="CompletionOption" serializeAs="String">\r
+                <value />\r
+            </setting>\r
+            <setting name="processPriority" serializeAs="String">\r
+                <value />\r
+            </setting>\r
+            <setting name="cli_minimized" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="showCliForInGuiEncodeStatus" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="enocdeStatusInGui" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+            <setting name="growlEncode" serializeAs="String">\r
+                <value>False</value>\r
+            </setting>\r
+        </HandBrake.ApplicationServices.Properties.Settings>\r
+    </userSettings>\r
+</configuration>
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.Designer.cs b/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.Designer.cs
new file mode 100644 (file)
index 0000000..bdc4799
--- /dev/null
@@ -0,0 +1,249 @@
+namespace HandBrake.ApplicationServices\r
+{\r
+    partial class frmExceptionWindow\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 Windows Form 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
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmExceptionWindow));\r
+            this.panel1 = new System.Windows.Forms.Panel();\r
+            this.panel2 = new System.Windows.Forms.Panel();\r
+            this.PictureBox1 = new System.Windows.Forms.PictureBox();\r
+            this.label3 = new System.Windows.Forms.Label();\r
+            this.label1 = new System.Windows.Forms.Label();\r
+            this.lbl_shortError = new System.Windows.Forms.Label();\r
+            this.panel3 = new System.Windows.Forms.Panel();\r
+            this.panel5 = new System.Windows.Forms.Panel();\r
+            this.panel4 = new System.Windows.Forms.Panel();\r
+            this.panel6 = new System.Windows.Forms.Panel();\r
+            this.btn_close = new System.Windows.Forms.Button();\r
+            this.btn_copy = new System.Windows.Forms.Button();\r
+            this.rtf_exceptionFull = new System.Windows.Forms.RichTextBox();\r
+            this.rightClickMenu = new System.Windows.Forms.ContextMenuStrip(this.components);\r
+            this.mnu_copy_log = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.panel1.SuspendLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).BeginInit();\r
+            this.panel4.SuspendLayout();\r
+            this.panel6.SuspendLayout();\r
+            this.rightClickMenu.SuspendLayout();\r
+            this.SuspendLayout();\r
+            // \r
+            // panel1\r
+            // \r
+            this.panel1.BackColor = System.Drawing.Color.White;\r
+            this.panel1.Controls.Add(this.panel2);\r
+            this.panel1.Controls.Add(this.PictureBox1);\r
+            this.panel1.Controls.Add(this.label3);\r
+            this.panel1.Controls.Add(this.label1);\r
+            this.panel1.Controls.Add(this.lbl_shortError);\r
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.panel1.Location = new System.Drawing.Point(0, 0);\r
+            this.panel1.Name = "panel1";\r
+            this.panel1.Size = new System.Drawing.Size(669, 97);\r
+            this.panel1.TabIndex = 61;\r
+            // \r
+            // panel2\r
+            // \r
+            this.panel2.BackColor = System.Drawing.SystemColors.Control;\r
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.panel2.Location = new System.Drawing.Point(0, 87);\r
+            this.panel2.MaximumSize = new System.Drawing.Size(0, 10);\r
+            this.panel2.MinimumSize = new System.Drawing.Size(0, 10);\r
+            this.panel2.Name = "panel2";\r
+            this.panel2.Size = new System.Drawing.Size(669, 10);\r
+            this.panel2.TabIndex = 59;\r
+            // \r
+            // PictureBox1\r
+            // \r
+            this.PictureBox1.Image = global::HandBrake.ApplicationServices.Properties.Resources.ErrorX;\r
+            this.PictureBox1.InitialImage = null;\r
+            this.PictureBox1.Location = new System.Drawing.Point(12, 12);\r
+            this.PictureBox1.Name = "PictureBox1";\r
+            this.PictureBox1.Size = new System.Drawing.Size(64, 64);\r
+            this.PictureBox1.TabIndex = 24;\r
+            this.PictureBox1.TabStop = false;\r
+            // \r
+            // label3\r
+            // \r
+            this.label3.AutoSize = true;\r
+            this.label3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.label3.Location = new System.Drawing.Point(84, 63);\r
+            this.label3.Name = "label3";\r
+            this.label3.Size = new System.Drawing.Size(80, 13);\r
+            this.label3.TabIndex = 57;\r
+            this.label3.Text = "Error Details:";\r
+            // \r
+            // label1\r
+            // \r
+            this.label1.AutoSize = true;\r
+            this.label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.label1.Location = new System.Drawing.Point(84, 12);\r
+            this.label1.Name = "label1";\r
+            this.label1.Size = new System.Drawing.Size(150, 16);\r
+            this.label1.TabIndex = 25;\r
+            this.label1.Text = "An Error has occured.";\r
+            // \r
+            // lbl_shortError\r
+            // \r
+            this.lbl_shortError.Location = new System.Drawing.Point(84, 33);\r
+            this.lbl_shortError.Name = "lbl_shortError";\r
+            this.lbl_shortError.Size = new System.Drawing.Size(573, 30);\r
+            this.lbl_shortError.TabIndex = 58;\r
+            this.lbl_shortError.Text = "An Unknown Error has occured.";\r
+            // \r
+            // panel3\r
+            // \r
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Left;\r
+            this.panel3.Location = new System.Drawing.Point(0, 97);\r
+            this.panel3.Name = "panel3";\r
+            this.panel3.Size = new System.Drawing.Size(76, 216);\r
+            this.panel3.TabIndex = 68;\r
+            // \r
+            // panel5\r
+            // \r
+            this.panel5.Dock = System.Windows.Forms.DockStyle.Right;\r
+            this.panel5.Location = new System.Drawing.Point(640, 97);\r
+            this.panel5.Name = "panel5";\r
+            this.panel5.Size = new System.Drawing.Size(29, 216);\r
+            this.panel5.TabIndex = 69;\r
+            // \r
+            // panel4\r
+            // \r
+            this.panel4.Controls.Add(this.panel6);\r
+            this.panel4.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.panel4.Location = new System.Drawing.Point(0, 313);\r
+            this.panel4.Name = "panel4";\r
+            this.panel4.Size = new System.Drawing.Size(669, 42);\r
+            this.panel4.TabIndex = 69;\r
+            // \r
+            // panel6\r
+            // \r
+            this.panel6.Controls.Add(this.btn_close);\r
+            this.panel6.Controls.Add(this.btn_copy);\r
+            this.panel6.Dock = System.Windows.Forms.DockStyle.Right;\r
+            this.panel6.Location = new System.Drawing.Point(491, 0);\r
+            this.panel6.Name = "panel6";\r
+            this.panel6.Size = new System.Drawing.Size(178, 42);\r
+            this.panel6.TabIndex = 58;\r
+            // \r
+            // btn_close\r
+            // \r
+            this.btn_close.BackColor = System.Drawing.Color.Transparent;\r
+            this.btn_close.FlatAppearance.BorderColor = System.Drawing.Color.Black;\r
+            this.btn_close.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.btn_close.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));\r
+            this.btn_close.Location = new System.Drawing.Point(105, 8);\r
+            this.btn_close.Name = "btn_close";\r
+            this.btn_close.Size = new System.Drawing.Size(70, 25);\r
+            this.btn_close.TabIndex = 56;\r
+            this.btn_close.Text = "OK";\r
+            this.btn_close.UseVisualStyleBackColor = false;\r
+            this.btn_close.Click += new System.EventHandler(this.btn_close_Click);\r
+            // \r
+            // btn_copy\r
+            // \r
+            this.btn_copy.BackColor = System.Drawing.Color.Transparent;\r
+            this.btn_copy.FlatAppearance.BorderColor = System.Drawing.Color.Black;\r
+            this.btn_copy.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+            this.btn_copy.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));\r
+            this.btn_copy.Image = global::HandBrake.ApplicationServices.Properties.Resources.copy;\r
+            this.btn_copy.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
+            this.btn_copy.Location = new System.Drawing.Point(14, 8);\r
+            this.btn_copy.Name = "btn_copy";\r
+            this.btn_copy.Size = new System.Drawing.Size(85, 25);\r
+            this.btn_copy.TabIndex = 57;\r
+            this.btn_copy.Text = "Copy";\r
+            this.btn_copy.UseVisualStyleBackColor = false;\r
+            this.btn_copy.Click += new System.EventHandler(this.btn_copy_Click);\r
+            // \r
+            // rtf_exceptionFull\r
+            // \r
+            this.rtf_exceptionFull.ContextMenuStrip = this.rightClickMenu;\r
+            this.rtf_exceptionFull.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.rtf_exceptionFull.Location = new System.Drawing.Point(76, 97);\r
+            this.rtf_exceptionFull.Name = "rtf_exceptionFull";\r
+            this.rtf_exceptionFull.Size = new System.Drawing.Size(564, 216);\r
+            this.rtf_exceptionFull.TabIndex = 70;\r
+            this.rtf_exceptionFull.Text = "";\r
+            // \r
+            // rightClickMenu\r
+            // \r
+            this.rightClickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.mnu_copy_log});\r
+            this.rightClickMenu.Name = "rightClickMenu";\r
+            this.rightClickMenu.Size = new System.Drawing.Size(153, 48);\r
+            // \r
+            // mnu_copy_log\r
+            // \r
+            this.mnu_copy_log.Image = global::HandBrake.ApplicationServices.Properties.Resources.copy;\r
+            this.mnu_copy_log.Name = "mnu_copy_log";\r
+            this.mnu_copy_log.Size = new System.Drawing.Size(152, 22);\r
+            this.mnu_copy_log.Text = "Copy";\r
+            this.mnu_copy_log.Click += new System.EventHandler(this.mnu_copy_log_Click);\r
+            // \r
+            // frmExceptionWindow\r
+            // \r
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+            this.ClientSize = new System.Drawing.Size(669, 355);\r
+            this.Controls.Add(this.rtf_exceptionFull);\r
+            this.Controls.Add(this.panel3);\r
+            this.Controls.Add(this.panel5);\r
+            this.Controls.Add(this.panel4);\r
+            this.Controls.Add(this.panel1);\r
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
+            this.Name = "frmExceptionWindow";\r
+            this.Text = "Error";\r
+            this.panel1.ResumeLayout(false);\r
+            this.panel1.PerformLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).EndInit();\r
+            this.panel4.ResumeLayout(false);\r
+            this.panel6.ResumeLayout(false);\r
+            this.rightClickMenu.ResumeLayout(false);\r
+            this.ResumeLayout(false);\r
+\r
+        }\r
+\r
+        #endregion\r
+\r
+        private System.Windows.Forms.Panel panel1;\r
+        private System.Windows.Forms.Panel panel2;\r
+        internal System.Windows.Forms.PictureBox PictureBox1;\r
+        private System.Windows.Forms.Label label3;\r
+        private System.Windows.Forms.Label label1;\r
+        private System.Windows.Forms.Label lbl_shortError;\r
+        private System.Windows.Forms.Panel panel3;\r
+        private System.Windows.Forms.Panel panel5;\r
+        private System.Windows.Forms.Panel panel4;\r
+        private System.Windows.Forms.RichTextBox rtf_exceptionFull;\r
+        internal System.Windows.Forms.Button btn_close;\r
+        private System.Windows.Forms.Panel panel6;\r
+        internal System.Windows.Forms.Button btn_copy;\r
+        private System.Windows.Forms.ContextMenuStrip rightClickMenu;\r
+        private System.Windows.Forms.ToolStripMenuItem mnu_copy_log;\r
+    }\r
+}
\ No newline at end of file
diff --git a/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.cs b/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.cs
new file mode 100644 (file)
index 0000000..3be1cf2
--- /dev/null
@@ -0,0 +1,81 @@
+/*  frmExceptionWindow.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.ApplicationServices\r
+{\r
+    using System;\r
+    using System.Windows.Forms;\r
+\r
+    /// <summary>\r
+    /// A window to display Exceptions in a form which can be easily copied and reported by users.\r
+    /// </summary>\r
+    public partial class frmExceptionWindow : Form\r
+    {\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="frmExceptionWindow"/> class.\r
+        /// </summary>\r
+        public frmExceptionWindow()\r
+        {\r
+            InitializeComponent();\r
+        }\r
+\r
+        /// <summary>\r
+        /// Setup the window with the error message.\r
+        /// </summary>\r
+        /// <param name="shortError">\r
+        /// The short error.\r
+        /// </param>\r
+        /// <param name="longError">\r
+        /// The long error.\r
+        /// </param>\r
+        public void Setup(string shortError, string longError)\r
+        {\r
+            lbl_shortError.Text = shortError;\r
+            rtf_exceptionFull.Text = shortError + Environment.NewLine + longError;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Copy the Exception Information to the Clipboard.\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The e.\r
+        /// </param>\r
+        private void btn_copy_Click(object sender, EventArgs e)\r
+        {\r
+            Clipboard.SetDataObject(rtf_exceptionFull.SelectedText != string.Empty ? rtf_exceptionFull.SelectedText : rtf_exceptionFull.Text, true);\r
+        }\r
+\r
+        /// <summary>\r
+        /// Copy from the right click menu\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The e.\r
+        /// </param>\r
+        private void mnu_copy_log_Click(object sender, EventArgs e)\r
+        {\r
+            Clipboard.SetDataObject(rtf_exceptionFull.SelectedText != string.Empty ? rtf_exceptionFull.SelectedText : rtf_exceptionFull.Text, true);\r
+        } \r
+\r
+        /// <summary>\r
+        /// Close the window\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The e.\r
+        /// </param>\r
+        private void btn_close_Click(object sender, EventArgs e)\r
+        {\r
+            this.Close();\r
+        }\r
+    }\r
+}\r
diff --git a/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.resx b/win/C#/HandBrake.ApplicationServices/frmExceptionWindow.resx
new file mode 100644 (file)
index 0000000..6df001c
--- /dev/null
@@ -0,0 +1,503 @@
+<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <resheader name="writer">\r
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+  </resheader>\r
+  <metadata name="rightClickMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+    <value>17, 17</value>\r
+  </metadata>\r
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        AAABAAYAMDAAAAEACACoDgAAZgAAACAgAAABAAgAqAgAAA4PAAAQEAAAAQAIAGgFAAC2FwAAMDAAAAEA\r
+        IACoJQAAHh0AACAgAAABACAAqBAAAMZCAAAQEAAAAQAgAGgEAABuUwAAKAAAADAAAABgAAAAAQAIAAAA\r
+        AACACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAD///8A/wAAAAD/AAAAAIAAgICAAICAAAAAgAAAAICAAIAA\r
+        AACAAIAAgP//ACAgIADg4OAAIAAAAAAgAABg4CAAQOBAAGBgYAAgYAAAQKDgAAAAIABAwCAAIEAAAECg\r
+        AABg4AAAIGCAAECAoABgoMAAYECgAGDAAABgICAAoKCgAOAAAAAgIAAAAGAAAEDgAABgAAAAIAAgAEAg\r
+        IAAgQGAAIIDAAADg4ABgAGAAgOD/ACCA/wCgAAAAQGAAACCAAAAAoAAAYCAAAAAgIAAgIEAAYGBAAEBg\r
+        YAAAIIAAAGCAAGCAgABAAKAAAICgAACgoACAoKAAIKDAAECgwAAAAOAAQADgAADA4ABgwOAAIODgAADg\r
+        AADA4AAAAEAgAKDgIAAA4EAAYABAAABAYACAAGAAgCBgAGAggABA4KAAAECgAGBAwADgIOAAIEDgAACA\r
+        4ADgoOAAYAD/ACBg/wAAoP8A4KD/AGD//wAICAgACAAAAAgIAAAAAJgACAAIAAAACAAACAAACBAQACA4\r
+        SAAgYIgAOHCIADhw+AAIGAAAEBAIACg4QAAwYHgAAACIACA4QAAoQFAAKFh4AHh4eAAwaIAAIGiQADh4\r
+        mAAACAgAEAgIABAYGAAgGBgASEhIABhIYAAoUGAAIFBoAChQaAAoWGgAMFhoAChoiAAweJgAKHioACiA\r
+        sAAIEAAACAgQAAgQGAAQGCAAGCAoABhAUAAoSFgAaGhoABhQcAAgWHAAKFhwADhgcAAYWIAAOGiAAIiI\r
+        iAAoaJAAKHCYACh4oAA4gKAAMICoAKioqAAwmNAAEDgAAChYAAAweAAAMIgQAAgYGAAYGBgACBggABAg\r
+        KAAgKCgAKCgoACAwOAA4ODgAKDhIADBQWABYWFgAGEhoADBYcAAYUHgAGFh4ACBYeAAoYHgAKGCAABhY\r
+        iAAgaJgAKICoACiIuAC4uLgAMJDIADiw6AAQCAAAABgAAAggAAAAOAAAMGgAABgQCAAwgAgAEAgQABgQ\r
+        EAAwmBgAGBggAAgYKAAAICgACCAoABgoMAAgKDAAGDBAABg4QAAYOFAAEEBYACBIWAAwSFgAOEhYACBI\r
+        YAAQSGgAOFhoABhIcAAoUHAAQFhwACBgeABAaIAAIGiIADBwiABAcIgAGGCQADhwkABYeJAACBCgAChw\r
+        oAAweKAAKIC4ACiQwAAwmMgAOKjgADBg6ABAsOgAELD4AAgoAAAIMAAAGDAAABhIAAAYUAAAKHgAAACY\r
+        AAAwmAAAAMgAABAACAAIEAgAEBgIABA4CAAYOAgAMHgIABAYEAAYGBAAIBgQACh4EAAwmBAAEBAYABgg\r
+        GAAoIBgAGCAgAAgIKAAgICgAGAgwAAggMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r
+        AAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r
+        AAAAAAAAAAAAAAAAAAAAAAAAn2KfdXV1XAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoo2+QIJCJb28Sd3em\r
+        nQAAAFuKqW0aqsd6Y5/DXAAAAAAAAAAAAAAAAAAAAAAAAAB3kAWQkG8SpqaJb28gsncAbIeSroyii21x\r
+        kczIwwAAAAAAAAAAAAAAAAAAAAAAAABoo4mJkLKylm9vb5BvdwwAcZO/fox7z2NjqsOss2MAWwAAAAAA\r
+        AAAAAAAAAAAAAAAAvaGmo5ANlgUFEiBvo1xjq3p6qMTJroBkxXt9cGzFnAAAAAAAAAAAAAAAAAAAAAAA\r
+        AAAAAL2ylgV3vQAAAGOvxMXXq41uh6yVjxqp1YhknwAAAAAAAAAAAAAAAAAAAAAAAAAAAABvsolbAAAA\r
+        +5KneouS2Kx4pZF9ndywsXuvkocAAAAAAAAAAAAAAAAAAAAAAAAAAAB3sncAAAAAdayHca95bH9+cKmv\r
+        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\r
+        eAAoaIgAMICoAChggAAACAgAEAgIABgYGAAoUGgAKFhwAChwkAAIGAgACBAQABAgKAAQKDgAIEhgACBQ\r
+        aAAAAHgAIFh4AChgeAAAeHgAeHh4AChogAAwaIAAIGCIADBoiAA4cIgAIGiQADhwkAAoeKgAKICwAAgQ\r
+        AAAIIAAACAAIABhICAAICBAAMIgQABAYGAAYICgAGCgwAEhISAAwSFgAGFBoAChYaAAICHgAOGiAACh4\r
+        oAAweKAAGAAAAAAIAAAAGAAACBgAABAoAAAYUAAAKGAAAChoAAAAeAAAAAAIAAgQCAAQEAgAGP8IACAY\r
+        EAAIEBgAMJAYABggIAAAACgACBAoACgwMAAAKDgAEDA4ADg4OAAoOEAAGDhIACA4SAAAQEgAMEBIAEhQ\r
+        UAAISFgAIEhYAChIWAAwUFgAIEhoAEhYaAAYUHAAMFhwABhYeAAoWHgAIFiAAEhwgACIiIgAGGCQAAAA\r
+        mAAgcJgAKHCYADB4mACYmJgAACjIAEBw+ACo//8ASAAAAFgAAABoAAAAeAAAABAIAABICAAAGCgAAAA4\r
+        AAAYOAAACEAAAAhIAAAoUAAAAFgAACBYAAAAaAAAIGgAADB4AAAAiAAAMIgAAGiIAACAmAAAGAAIADAI\r
+        CABgCAgAEBgIAAggCAAQIAgAECgIAAgwCAAQMAgAODAIABA4CAAYOAgAEEAIABhACAAgQAgAIFAIAChg\r
+        CAAwgAgAMJAIADCoCAAACBAAGBAQABggEAAoIBAAKGAQAChoEAAgeBAAKHgQAEh4EAAY+BAACAAYAAAI\r
+        GAAICBgAEAgYAAAQGAAQEBgAABgYAAgYGAAYMBgAKHgYADCYGAAwoBgAMKgYAGj/GABgCCAACBAgAAgY\r
+        IAAQGCAAGBggACggIABIcCAACAAoABAAKAAAECgAEBAoAAggKAAACDAASAgwAAgQMAAIKDAAECgwAAAA\r
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r
+        AAAAAAAAAAAARxBSUlJHAAAAAABYWFlY8kYAAAAAAAAAAAAAAAAAAJFgqqRLSzAwBXMAkKJbW1pdSVmE\r
+        AAAAAAAAAAAAAAAAEJdLqhpgYKQFkf9NmVRanHVJVZRQAAAAAAAAAAAAAAAAUY6RO6qXMHNYW5MxdFpm\r
+        TVtPSpAAAAAAAAAAAAAAAAAAAAAFpIYAAFSeW09PU15KU05MaEkAAAAAAAAAAAAAAAAAAEtgAAAAk55j\r
+        ml5Mp2haXUqpW3IAAAAAAAAAAAAAAAAAS0sAAEpJoE5PpZpMZVWnMZyZVQAAAAAAAAAAAAAAAABLMAAA\r
+        cqCeSnppZGZKWzFNaV2ecAAAAAAAAAAAAAAAAEtLAACLVF6iZHROp2eiW1paeWnxAAAAAAAAAAAAAABI\r
+        GmAAAElJSmh6SWNVSk5hZqJ1VXUAAAAAAAAAAAAAlpmjeJAAk12eZXZ5p3WndnZpaUlbZgAAAAAAAAAA\r
+        m2lFRTw8PDZeWV1OlE0xeWlNeVVdZmmZUAAAAAAAjzYKRaysRUVFRa02SXSnYaFNTUxpTFSoTmKTAAAA\r
+        AI8KOkSrrKysrKxErDullF6fVWhiVakLaVWbVZoAAAAAqK2sRKZEqyCsRKummKBZT0xPTHppZVMLqVN4\r
+        cQAAAAA6O6sYGKYYGKsYphgELjejY09KTTZNaWdMNpkAAAAA+zc6XFxcd3d3XASmXEw6PZZiZ6g2ZUw2\r
+        T2QLnwAAAAAdoTtcLcV3pndfLi2jraMtcmNkT05np0xnaXhUAAAAAAD5NKL87xgYd1+eLZ06+1wAVE6o\r
+        p2cKZ2WjjgAAAAAAAAAQo67EcuZuj5jkACue9gAAkTEKeJfbioptRgAAAAAAAACIr0dLVwBXmEeL5Qg4\r
+        AAAAAOnqwNbVb9O5AAAAAAAAAP38RmDae3tfkDqIX0UAAABq3W9v6+2BtssAAAAAAAD9q6v7AFl1dV9f\r
+        mpgIXwAAAABrtG9v7O2BagAAAACSF52fL/AAAAAAAHUAAAAAAAAAAACC1NS+3s/ZzAAAAJ03MjqjdJ0A\r
+        AAC3FIMUtwAAAAAAzr27goK5awAAAAAAWaNgGho3dAAAyr+/v4ODtQAAAMmAAM+2zxMTawAAAAAAAK6z\r
+        kZ1xAAC1un3HVwAAAAAAAAAAawB/ftAAAAAAAABCNUIAAAAAAAAAAF8AAAAAAAAAAEcAAGpGAAAAAAAA\r
+        AEKsEQAAAAAAAAAAlZUAAAAAAAAAAAAAAEgAAAAAAAAAAC3hAAAAAAAAAAAAAAAAAAAAAAAAAAAARgAA\r
+        AAD///////////4BwH/8AAAf/AAAD/4AAA//xgAP/84AB//MAAf/zAAD/8wAA/+MAAP/BAAD/AAAAfAA\r
+        AAHgAAAB4AAAAeAAAAPAAAADwAAAA+AAIAfgADAD8AA8A/gAOAPwgDwDwPv+AcBwfAfAYDkD8GD/Q+P9\r
+        /s/j/P/v8///7ygAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAA////AFEl\r
+        swBJDW0ABEMwAAJHSQAFDwIAXl9ZAHJtagBwfYQAQVNqAAFtAAAAZgAAAz0CABQ/AQAXQwAAGkAAAA8g\r
+        AQAhSJQAM1SRABw6fgAFVk0ADE48AAplaQAgWgIAMYcMACl7CwAOJwMAAAMtABwPNwAhIQAABxACAA9S\r
+        UAAnQUgAAISfACRoDAAxmwQAK4MHABMpAAA8P1kATBMbACQSVwAKL1EADS5CADFMVQABIF4AJ3CGADB2\r
+        kAAzdlEAMnY1ABMnEwBARooAVVq5ABgATwAWBn0ABh56AAULaQBOeKYAT3WSACpNZwAucpgAMHifADFx\r
+        nwA1b5YAMF93AEBalgBvjecADCLAAAkPpQAbJr4AFiLGAAAJjgAzbIEANGh8AClhgAAzfKEAMHWWADJz\r
+        kwAsW3MAQ4mvADyY9AAtgf8AIpr/ACuk/wBdk9UAG0tkACladQAqbI4AK3GUAC5vjwArbpEALWJ7ACdl\r
+        aAAOaoQAJJ20ABx0gQAeTF8AJ116ACViggAgZosAJmeJAChvlAAhZIgAH1ZyAHVmYwAaPVMAJ19+ACto\r
+        hgAmaIwAKGB9ACFdfAAgY4YAGU5qAFtgYQAYQVgAIVx7ACtrjgAtZYIAJmKAACNhgQAmX3wAIUpdAHp6\r
+        ewARN0wAH1R0ACdXcgApXnoAJ2B+ACligQAdSmAAKiopAGZlZQCRkZEAbm9vAFFSUwAWO08AJFRuACFP\r
+        agAhUm0AHD9RAAMKDgA3NjUAWlpaADk5OQA3NzcAPDk3AAYSGQAVNUgAFjFAAA8jLwABAgQAVQAAAP//\r
+        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\r
+</value>\r
+  </data>\r
+</root>
\ No newline at end of file
index b35faa5..40ed306 100644 (file)
@@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 10.00
 # Visual Studio 2008\r
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandBrakeCS", "HandBrakeCS.csproj", "{A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}"\r
 EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandBrake.ApplicationServices", "HandBrake.ApplicationServices\HandBrake.ApplicationServices.csproj", "{087A2BA8-BAC2-4577-A46F-07FF9D420016}"\r
+EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Build|Any CPU = Build|Any CPU\r
@@ -37,6 +39,21 @@ Global
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|x86.ActiveCfg = Release|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|x86.Build.0 = Release|x86\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Build|Any CPU.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Build|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Build|x86.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Any CPU.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|x86.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Any CPU.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|x86.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x86.ActiveCfg = Release|Any CPU\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
index 7d72151..e6b7cd2 100644 (file)
       <DependentUpon>frmExceptionWindow.cs</DependentUpon>\r
     </Compile>\r
     <Compile Include="Model\ActivityLogMode.cs" />\r
-    <Compile Include="Model\Cropping.cs" />\r
-    <Compile Include="Model\SubtitleType.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
-    <Compile Include="Services\Encode.cs" />\r
     <Compile Include="frmPreview.cs">\r
       <SubType>Form</SubType>\r
     </Compile>\r
     <Compile Include="Functions\PresetLoader.cs" />\r
     <Compile Include="Functions\QueryGenerator.cs" />\r
     <Compile Include="Functions\Main.cs" />\r
-    <Compile Include="Services\Scan.cs" />\r
     <Compile Include="Functions\System.cs" />\r
     <Compile Include="Functions\UpdateCheckInformation.cs" />\r
     <Compile Include="Functions\Win32.cs" />\r
     <Compile Include="Presets\PlistPresetHandler.cs" />\r
     <Compile Include="Presets\Preset.cs" />\r
     <Compile Include="Presets\PresetsHandler.cs" />\r
-    <Compile Include="Services\Queue.cs" />\r
     <Compile Include="Functions\AppcastReader.cs" />\r
     <Compile Include="Functions\QueryParser.cs" />\r
-    <Compile Include="Parsing\AudioTrack.cs" />\r
-    <Compile Include="Parsing\Chapter.cs" />\r
-    <Compile Include="Parsing\DVD.cs" />\r
-    <Compile Include="Parsing\Parser.cs" />\r
-    <Compile Include="Parsing\Subtitle.cs" />\r
-    <Compile Include="Parsing\Title.cs" />\r
     <Compile Include="Program.cs" />\r
     <EmbeddedResource Include="Controls\AudioPanel.resx">\r
       <DependentUpon>AudioPanel.cs</DependentUpon>\r
     <Compile Include="frmSplashScreen.Designer.cs">\r
       <DependentUpon>frmSplashScreen.cs</DependentUpon>\r
     </Compile>\r
-    <Compile Include="Model\Job.cs" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Content Include="handbrakepineapple.ico" />\r
       <Isolated>False</Isolated>\r
     </COMReference>\r
   </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="HandBrake.ApplicationServices\HandBrake.ApplicationServices.csproj">\r
+      <Project>{087A2BA8-BAC2-4577-A46F-07FF9D420016}</Project>\r
+      <Name>HandBrake.ApplicationServices</Name>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />\r
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
        Other similar extension points exist, see Microsoft.Common.targets.\r
index 3a17b33..51ec1df 100644 (file)
@@ -80,7 +80,7 @@ Function .onInit
   StrCmp $R0 "" done\r
 \r
   MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \\r
-  "${PRODUCT_NAME} ${PRODUCT_VERSION} is already installed. $\n$\nClick `OK` to remove the \\r
+  "${PRODUCT_NAME} is already installed. $\n$\nClick `OK` to remove the \\r
   previous version or `Cancel` to continue." \\r
   IDOK uninst\r
   goto done\r
@@ -131,10 +131,10 @@ Section "Handbrake" SEC01
   File "AxInterop.QTOControlLib.dll"\r
   File "Growl.Connector.dll"\r
   File "Growl.CoreLibrary.dll"\r
-  File "libgcc_s_sjlj-1.dll"\r
   File "HandBrakeCLI.exe"\r
   File "Handbrake.exe.config"\r
   File "handbrakepineapple.ico"\r
+  File "HandBrake.ApplicationServices.dll"\r
 \r
   SetOutPath "$INSTDIR\doc"\r
   SetOverwrite ifnewer\r
@@ -182,6 +182,7 @@ Section Uninstall
   Delete "$INSTDIR\Growl.Connector.dll"\r
   Delete "$INSTDIR\Growl.CoreLibrary.dll"\r
   Delete "$INSTDIR\libgcc_s_sjlj-1.dll"\r
+  Delete "$INSTDIR\HandBrake.ApplicationServices.dll"\r
   Delete "$INSTDIR\doc\AUTHORS"\r
   Delete "$INSTDIR\doc\COPYING"\r
   Delete "$INSTDIR\doc\CREDITS"\r
index c900019..5a13a6b 100644 (file)
@@ -80,7 +80,7 @@ Function .onInit
   StrCmp $R0 "" done\r
 \r
   MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \\r
-  "${PRODUCT_NAME} ${PRODUCT_VERSION} is already installed. $\n$\nClick `OK` to remove the \\r
+  "${PRODUCT_NAME} is already installed. $\n$\nClick `OK` to remove the \\r
   previous version or `Cancel` to continue." \\r
   IDOK uninst\r
   goto done\r
@@ -131,6 +131,7 @@ Section "Handbrake" SEC01
   File "Growl.Connector.dll"\r
   File "Growl.CoreLibrary.dll"\r
   File "Handbrake.exe.config"\r
+  File "HandBrake.ApplicationServices.dll"\r
 SectionEnd\r
 \r
 Section -AdditionalIcons\r
@@ -167,6 +168,7 @@ Section Uninstall
   Delete "$INSTDIR\Handbrake.exe.config"\r
   Delete "$INSTDIR\Growl.Connector.dll"\r
   Delete "$INSTDIR\Growl.CoreLibrary.dll"\r
+  Delete "$INSTDIR\HandBrake.ApplicationServices.dll"\r
   RMDir  "$INSTDIR"\r
   Delete "$SMPROGRAMS\Handbrake\Uninstall.lnk"\r
   Delete "$DESKTOP\Handbrake.lnk"\r
index fa18674..d5da8f2 100644 (file)
@@ -9,6 +9,8 @@ namespace Handbrake
     using System.IO;\r
     using System.Windows.Forms;\r
 \r
+    using HandBrake.ApplicationServices;\r
+\r
     using Handbrake.Properties;\r
 \r
     using Presets;\r
@@ -73,6 +75,8 @@ namespace Handbrake
                     x.UpdateBuiltInPresets();\r
                 }\r
 \r
+                InitializeApplicationServices();\r
+\r
                 Application.EnableVisualStyles();\r
                 Application.SetCompatibleTextRenderingDefault(false);\r
                 Application.Run(new frmMain());\r
@@ -80,6 +84,17 @@ namespace Handbrake
         }\r
 \r
         /// <summary>\r
+        /// Initialize App Services\r
+        /// </summary>\r
+        private static void InitializeApplicationServices()\r
+        {\r
+            Init.SetupSettings(Settings.Default.cli_minimized, Settings.Default.CompletionOption, Settings.Default.noDvdNav,\r
+                               Settings.Default.enocdeStatusInGui, Settings.Default.growlEncode, Settings.Default.growlQueue,\r
+                               Settings.Default.processPriority, Settings.Default.saveLogPath, Settings.Default.saveLogToSpecifiedPath,\r
+                               Settings.Default.saveLogWithVideo, Settings.Default.showCliForInGuiEncodeStatus);\r
+        }\r
+\r
+        /// <summary>\r
         /// Throw up an error message for any unhandled exceptions.\r
         /// </summary>\r
         /// <param name="sender">The sender</param>\r
index 613a1a4..b979e4b 100644 (file)
@@ -13,8 +13,10 @@ namespace Handbrake
     using System.Threading;\r
     using System.Windows.Forms;\r
     using Functions;\r
+\r
+    using HandBrake.ApplicationServices.Services;\r
+\r
     using Model;\r
-    using Services;\r
     using Timer = System.Threading.Timer;\r
 \r
     /// <summary>\r
index 91e3970..b7fcef9 100644 (file)
@@ -16,11 +16,14 @@ namespace Handbrake
     using System.Threading;\r
     using System.Windows.Forms;\r
     using Functions;\r
+\r
+    using HandBrake.ApplicationServices.Model;\r
+    using HandBrake.ApplicationServices.Parsing;\r
+    using HandBrake.ApplicationServices.Services;\r
+\r
     using Model;\r
-    using Parsing;\r
     using Presets;\r
     using Properties;\r
-    using Services;\r
 \r
     public partial class frmMain : Form\r
     {\r
index 26bb264..64b778f 100644 (file)
@@ -12,6 +12,10 @@ namespace Handbrake
     using System.Windows.Forms;\r
     using Functions;\r
 \r
+    using HandBrake.ApplicationServices;\r
+\r
+    using Handbrake.Properties;\r
+\r
     public partial class frmOptions : Form\r
     {\r
         private frmMain mainWindow;\r
@@ -483,8 +487,21 @@ namespace Handbrake
         private void btn_close_Click(object sender, EventArgs e)\r
         {\r
             Properties.Settings.Default.Save(); // Small hack for Vista. Seems to work fine on XP without this\r
+            UpdateApplicationServicesSettings();\r
+\r
             this.Close();\r
         }\r
 \r
+        /// <summary>\r
+        /// Initialize App Services\r
+        /// </summary>\r
+        private static void UpdateApplicationServicesSettings()\r
+        {\r
+            Init.SetupSettings(Settings.Default.cli_minimized, Settings.Default.CompletionOption, Settings.Default.noDvdNav,\r
+                               Settings.Default.enocdeStatusInGui, Settings.Default.growlEncode, Settings.Default.growlQueue,\r
+                               Settings.Default.processPriority, Settings.Default.saveLogPath, Settings.Default.saveLogToSpecifiedPath,\r
+                               Settings.Default.saveLogWithVideo, Settings.Default.showCliForInGuiEncodeStatus);\r
+        }\r
+\r
     }\r
 }
\ No newline at end of file
index 14080bd..41ceb51 100644 (file)
@@ -12,10 +12,12 @@ namespace Handbrake
     using System.Threading;\r
     using System.Windows.Forms;\r
     using Functions;\r
+\r
+    using HandBrake.ApplicationServices.Parsing;\r
+    using HandBrake.ApplicationServices.Services;\r
+\r
     using QTOControlLib;\r
     using QTOLibrary;\r
-    using Services;\r
-    using Parsing;\r
 \r
     public partial class frmPreview : Form\r
     {\r
index 93587db..dfc636e 100644 (file)
@@ -11,8 +11,11 @@ namespace Handbrake
     using System.ComponentModel;\r
     using System.Windows.Forms;\r
     using Functions;\r
+\r
+    using HandBrake.ApplicationServices.Model;\r
+    using HandBrake.ApplicationServices.Services;\r
+\r
     using Model;\r
-    using Services;\r
 \r
     /// <summary>\r
     /// The Queue Window\r