From a9a9bac87f4d2ec34406b4a3daa781eed20280d1 Mon Sep 17 00:00:00 2001 From: Mogzol Date: Mon, 26 Sep 2016 19:56:51 -0700 Subject: [PATCH] Integrate Ookii.Dialogs into BrawlBuilder Instead of loading an external DLL, the necessary components of Ookii.Dialogs (the Vista-style folder browser) are now compiled with BrawlBuilder. --- BrawlBuilder/BrawlBuilder.csproj | 5 +- BrawlBuilder/Program.cs | 33 - BrawlBuilder/VistaFolderBrowserDialog.cs | 859 +++++++++++++++++++++++ Resources/Ookii.Dialogs.dll | Bin 133296 -> 0 bytes Resources/Ookii.Dialogs_license.txt | 4 + 5 files changed, 864 insertions(+), 37 deletions(-) create mode 100644 BrawlBuilder/VistaFolderBrowserDialog.cs delete mode 100644 Resources/Ookii.Dialogs.dll diff --git a/BrawlBuilder/BrawlBuilder.csproj b/BrawlBuilder/BrawlBuilder.csproj index 1f6f086..1b6026e 100644 --- a/BrawlBuilder/BrawlBuilder.csproj +++ b/BrawlBuilder/BrawlBuilder.csproj @@ -40,10 +40,6 @@ Always - - ..\Resources\Ookii.Dialogs.dll - False - @@ -59,6 +55,7 @@ Form + diff --git a/BrawlBuilder/Program.cs b/BrawlBuilder/Program.cs index d200399..f5c7ccb 100644 --- a/BrawlBuilder/Program.cs +++ b/BrawlBuilder/Program.cs @@ -7,48 +7,15 @@ namespace BrawlBuilder { static class Program { - private static string DllDir = Path.GetDirectoryName(Application.ExecutablePath) + @"\Resources\"; - /// /// The main entry point for the application. /// [STAThread] static void Main() { - // Load DLLs from a custom directory - AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CustomAssemblyPathResolver); - Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new BrawlBuilder()); } - - // This allows us to load our DLLs from a folder other than the folder our exe is in. Code based off https://support.microsoft.com/en-gb/kb/837908. - // I was using the application config method for BrawlBuilder up to v1.2, but I hated that I had to include the BrawlBuilder.exe.config file, since - // the reason I want to do this in the first place was to keep everything other than the exe itself outside of the base directory. - private static Assembly CustomAssemblyPathResolver(object sender, ResolveEventArgs args) - { - // Get an array of all the assemblies that BrawlBuilder references - AssemblyName[] referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); - - string assemblyPath = null; - foreach (AssemblyName assemblyName in referencedAssemblies) - { - //Check for the assembly names that have raised the "AssemblyResolve" event. - if (assemblyName.FullName.Substring(0, assemblyName.FullName.IndexOf(",")) == args.Name.Substring(0, args.Name.IndexOf(","))) - { - //Build the path of the assembly from where it has to be loaded. - assemblyPath = DllDir + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"; - break; - } - - } - - if (assemblyPath == null) - return null; - - // Return the loaded assembly. - return Assembly.LoadFrom(assemblyPath); - } } } diff --git a/BrawlBuilder/VistaFolderBrowserDialog.cs b/BrawlBuilder/VistaFolderBrowserDialog.cs new file mode 100644 index 0000000..b0b2a67 --- /dev/null +++ b/BrawlBuilder/VistaFolderBrowserDialog.cs @@ -0,0 +1,859 @@ +/** + * This code was taken from Ookii.Dialogs and reduced to a single file for + * cleanliness and to remove unused code, since all BrawlBuilder used from + * Ookii.Dialogs was the Vista-style folder browser. + * + * Ookii.Dialogs is distributed under the following license: + * ---------------------------------------------------------------------------- + * + * License agreement for Ookii.Dialogs. + * + * Copyright © Sven Groot (Ookii.org) 2009 + * All rights reserved. + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1) Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2) Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3) Neither the name of the ORGANIZATION nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + */ +using System; +using System.Windows.Forms; +using System.ComponentModel; +using System.IO; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; + +// Disable warning CS0108: 'x' hides inherited member 'y'. Use the new keyword if hiding was intended. +#pragma warning disable 0108 + +namespace Ookii.Dialogs.Interop +{ + internal enum HRESULT : long + { + S_FALSE = 0x0001, + S_OK = 0x0000, + E_INVALIDARG = 0x80070057, + E_OUTOFMEMORY = 0x8007000E, + ERROR_CANCELLED = 0x800704C7 + } + + internal static class IIDGuid + { + internal const string IModalWindow = "b4db1657-70d7-485e-8e3e-6fcb5a5c1802"; + internal const string IFileDialog = "42f85136-db7e-439c-85f1-e4075d135fc8"; + internal const string IFileOpenDialog = "d57c7288-d4ad-4768-be02-9d969532d960"; + internal const string IFileDialogEvents = "973510DB-7D7F-452B-8975-74A85828D354"; + internal const string IFileDialogCustomize = "e6fdd21a-163f-4975-9c8c-a69f1ba37034"; + internal const string IShellItem = "43826D1E-E718-42EE-BC55-A1E261C37BFE"; + internal const string IShellItemArray = "B63EA76D-1F85-456F-A19C-48159EFA858B"; + } + + internal static class CLSIDGuid + { + internal const string FileOpenDialog = "DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7"; + } + + // --------------------------------------------------------- + // Coclass interfaces - designed to "look like" the object + // in the API, so that the 'new' operator can be used in a + // straightforward way. Behind the scenes, the C# compiler + // morphs all 'new CoClass()' calls to 'new CoClassWrapper()' + [ComImport, + Guid(IIDGuid.IFileOpenDialog), + CoClass(typeof(FileOpenDialogRCW))] + internal interface NativeFileOpenDialog : IFileOpenDialog + { + } + + // --------------------------------------------------- + // .NET classes representing runtime callable wrappers + [ComImport, + ClassInterface(ClassInterfaceType.None), + TypeLibType(TypeLibTypeFlags.FCanCreate), + Guid(CLSIDGuid.FileOpenDialog)] + internal class FileOpenDialogRCW + { + } + + [ComImport(), + Guid(IIDGuid.IModalWindow), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IModalWindow + { + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), + PreserveSig] + int Show([In] IntPtr parent); + } + + [ComImport, + Guid(IIDGuid.IShellItem), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IShellItem + { + // Not supported: IBindCtx + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void BindToHandler([In, MarshalAs(UnmanagedType.Interface)] IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid, out IntPtr ppv); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetDisplayName([In] NativeMethods.SIGDN sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder); + } + + [ComImport(), + Guid(IIDGuid.IFileDialog), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFileDialog : IModalWindow + { + // Defined on IModalWindow - repeated here due to requirements of COM interop layer + // -------------------------------------------------------------------------------- + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), + PreserveSig] + int Show([In] IntPtr parent); + + // IFileDialog-Specific interface members + // -------------------------------------------------------------------------------- + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] NativeMethods.COMDLG_FILTERSPEC[] rgFilterSpec); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileTypeIndex([In] uint iFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFileTypeIndex(out uint piFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Advise([In, MarshalAs(UnmanagedType.Interface)] IFileDialogEvents pfde, out uint pdwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Unadvise([In] uint dwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetOptions([In] NativeMethods.FOS fos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetOptions(out NativeMethods.FOS pfos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, NativeMethods.FDAP fdap); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Close([MarshalAs(UnmanagedType.Error)] int hr); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetClientGuid([In] ref Guid guid); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void ClearClientData(); + + // Not supported: IShellItemFilter is not defined, converting to IntPtr + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter); + } + + [ComImport, + Guid(IIDGuid.IFileDialogEvents), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFileDialogEvents + { + // NOTE: some of these callbacks are cancelable - returning S_FALSE means that + // the dialog should not proceed (e.g. with closing, changing folder); to + // support this, we need to use the PreserveSig attribute to enable us to return + // the proper HRESULT + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), + PreserveSig] + HRESULT OnFileOk([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), + PreserveSig] + HRESULT OnFolderChanging([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd, [In, MarshalAs(UnmanagedType.Interface)] IShellItem psiFolder); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OnFolderChange([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OnSelectionChange([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OnShareViolation([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd, [In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, out NativeMethods.FDE_SHAREVIOLATION_RESPONSE pResponse); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OnTypeChange([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OnOverwrite([In, MarshalAs(UnmanagedType.Interface)] IFileDialog pfd, [In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, out NativeMethods.FDE_OVERWRITE_RESPONSE pResponse); + } + + [ComImport, + Guid(IIDGuid.IFileDialogCustomize), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFileDialogCustomize + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EnableOpenDropDown([In] int dwIDCtl); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddMenu([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddPushButton([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddComboBox([In] int dwIDCtl); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddRadioButtonList([In] int dwIDCtl); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddCheckButton([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel, [In] bool bChecked); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddEditBox([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddSeparator([In] int dwIDCtl); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddText([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetControlLabel([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetControlState([In] int dwIDCtl, [Out] out NativeMethods.CDCONTROLSTATE pdwState); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetControlState([In] int dwIDCtl, [In] NativeMethods.CDCONTROLSTATE dwState); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetEditBoxText([In] int dwIDCtl, [Out] IntPtr ppszText); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetEditBoxText([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCheckButtonState([In] int dwIDCtl, [Out] out bool pbChecked); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetCheckButtonState([In] int dwIDCtl, [In] bool bChecked); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddControlItem([In] int dwIDCtl, [In] int dwIDItem, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoveControlItem([In] int dwIDCtl, [In] int dwIDItem); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoveAllControlItems([In] int dwIDCtl); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetControlItemState([In] int dwIDCtl, [In] int dwIDItem, [Out] out NativeMethods.CDCONTROLSTATE pdwState); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetControlItemState([In] int dwIDCtl, [In] int dwIDItem, [In] NativeMethods.CDCONTROLSTATE dwState); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetSelectedControlItem([In] int dwIDCtl, [Out] out int pdwIDItem); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetSelectedControlItem([In] int dwIDCtl, [In] int dwIDItem); // Not valid for OpenDropDown + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void StartVisualGroup([In] int dwIDCtl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EndVisualGroup(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void MakeProminent([In] int dwIDCtl); + } + + [ComImport(), + Guid(IIDGuid.IFileOpenDialog), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFileOpenDialog : IFileDialog + { + // Defined on IModalWindow - repeated here due to requirements of COM interop layer + // -------------------------------------------------------------------------------- + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), + PreserveSig] + int Show([In] IntPtr parent); + + // Defined on IFileDialog - repeated here due to requirements of COM interop layer + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileTypes([In] uint cFileTypes, [In] ref NativeMethods.COMDLG_FILTERSPEC rgFilterSpec); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileTypeIndex([In] uint iFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFileTypeIndex(out uint piFileType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Advise([In, MarshalAs(UnmanagedType.Interface)] IFileDialogEvents pfde, out uint pdwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Unadvise([In] uint dwCookie); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetOptions([In] NativeMethods.FOS fos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetOptions(out NativeMethods.FOS pfos); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, NativeMethods.FDAP fdap); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Close([MarshalAs(UnmanagedType.Error)] int hr); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetClientGuid([In] ref Guid guid); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void ClearClientData(); + + // Not supported: IShellItemFilter is not defined, converting to IntPtr + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter); + + // Defined by IFileOpenDialog + // --------------------------------------------------------------------------------- + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetResults([MarshalAs(UnmanagedType.Interface)] out IShellItemArray ppenum); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetSelectedItems([MarshalAs(UnmanagedType.Interface)] out IShellItemArray ppsai); + } + + [ComImport, + Guid(IIDGuid.IShellItemArray), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IShellItemArray + { + // Not supported: IBindCtx + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void BindToHandler([In, MarshalAs(UnmanagedType.Interface)] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, out IntPtr ppvOut); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetPropertyStore([In] int Flags, [In] ref Guid riid, out IntPtr ppv); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetPropertyDescriptionList([In] ref NativeMethods.PROPERTYKEY keyType, [In] ref Guid riid, out IntPtr ppv); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetAttributes([In] NativeMethods.SIATTRIBFLAGS dwAttribFlags, [In] uint sfgaoMask, out uint psfgaoAttribs); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCount(out uint pdwNumItems); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetItemAt([In] uint dwIndex, [MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + // Not supported: IEnumShellItems (will use GetCount and GetItemAt instead) + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EnumItems([MarshalAs(UnmanagedType.Interface)] out IntPtr ppenumShellItems); + } + + class WindowHandleWrapper : IWin32Window + { + private IntPtr _handle; + + public WindowHandleWrapper(IntPtr handle) + { + _handle = handle; + } + + #region IWin32Window Members + + public IntPtr Handle + { + get { return _handle; } + } + + #endregion + } +} + +namespace Ookii.Dialogs +{ + static class NativeMethods + { + public static bool IsWindowsVistaOrLater + { + get + { + return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= new Version(6, 0, 6000); + } + } + + [DllImport("shell32.dll", CharSet = CharSet.Unicode)] + public static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppv); + + public static Interop.IShellItem CreateItemFromParsingName(string path) + { + object item; + Guid guid = new Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe"); // IID_IShellItem + int hr = NativeMethods.SHCreateItemFromParsingName(path, IntPtr.Zero, ref guid, out item); + if (hr != 0) + throw new System.ComponentModel.Win32Exception(hr); + return (Interop.IShellItem)item; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] + internal struct COMDLG_FILTERSPEC + { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszName; + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszSpec; + } + + // Property System structs and consts + [StructLayout(LayoutKind.Sequential, Pack = 4)] + internal struct PROPERTYKEY + { + internal Guid fmtid; + internal uint pid; + } + + [Flags] + internal enum FOS : uint + { + FOS_OVERWRITEPROMPT = 0x00000002, + FOS_STRICTFILETYPES = 0x00000004, + FOS_NOCHANGEDIR = 0x00000008, + FOS_PICKFOLDERS = 0x00000020, + FOS_FORCEFILESYSTEM = 0x00000040, // Ensure that items returned are filesystem items. + FOS_ALLNONSTORAGEITEMS = 0x00000080, // Allow choosing items that have no storage. + FOS_NOVALIDATE = 0x00000100, + FOS_ALLOWMULTISELECT = 0x00000200, + FOS_PATHMUSTEXIST = 0x00000800, + FOS_FILEMUSTEXIST = 0x00001000, + FOS_CREATEPROMPT = 0x00002000, + FOS_SHAREAWARE = 0x00004000, + FOS_NOREADONLYRETURN = 0x00008000, + FOS_NOTESTFILECREATE = 0x00010000, + FOS_HIDEMRUPLACES = 0x00020000, + FOS_HIDEPINNEDPLACES = 0x00040000, + FOS_NODEREFERENCELINKS = 0x00100000, + FOS_DONTADDTORECENT = 0x02000000, + FOS_FORCESHOWHIDDEN = 0x10000000, + FOS_DEFAULTNOMINIMODE = 0x20000000 + } + + internal enum SIGDN : uint + { + SIGDN_NORMALDISPLAY = 0x00000000, // SHGDN_NORMAL + SIGDN_PARENTRELATIVEPARSING = 0x80018001, // SHGDN_INFOLDER | SHGDN_FORPARSING + SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000, // SHGDN_FORPARSING + SIGDN_PARENTRELATIVEEDITING = 0x80031001, // SHGDN_INFOLDER | SHGDN_FOREDITING + SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000, // SHGDN_FORPARSING | SHGDN_FORADDRESSBAR + SIGDN_FILESYSPATH = 0x80058000, // SHGDN_FORPARSING + SIGDN_URL = 0x80068000, // SHGDN_FORPARSING + SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001, // SHGDN_INFOLDER | SHGDN_FORPARSING | SHGDN_FORADDRESSBAR + SIGDN_PARENTRELATIVE = 0x80080001 // SHGDN_INFOLDER + } + + internal enum FDAP + { + FDAP_BOTTOM = 0x00000000, + FDAP_TOP = 0x00000001, + } + + internal enum CDCONTROLSTATE + { + CDCS_INACTIVE = 0x00000000, + CDCS_ENABLED = 0x00000001, + CDCS_VISIBLE = 0x00000002 + } + + internal enum FDE_SHAREVIOLATION_RESPONSE + { + FDESVR_DEFAULT = 0x00000000, + FDESVR_ACCEPT = 0x00000001, + FDESVR_REFUSE = 0x00000002 + } + + internal enum FDE_OVERWRITE_RESPONSE + { + FDEOR_DEFAULT = 0x00000000, + FDEOR_ACCEPT = 0x00000001, + FDEOR_REFUSE = 0x00000002 + } + + internal enum SIATTRIBFLAGS + { + SIATTRIBFLAGS_AND = 0x00000001, // if multiple items and the attirbutes together. + SIATTRIBFLAGS_OR = 0x00000002, // if multiple items or the attributes together. + SIATTRIBFLAGS_APPCOMPAT = 0x00000003, // Call GetAttributes directly on the ShellFolder for multiple attributes + } + } + + /// + /// Prompts the user to select a folder. + /// + /// + /// This class will use the Vista style Select Folder dialog if possible, or the regular FolderBrowserDialog + /// if it is not. Note that the Vista style dialog is very different, so using this class without testing + /// in both Vista and older Windows versions is not recommended. + /// + /// + [DefaultEvent("HelpRequest"), Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), DefaultProperty("SelectedPath"), Description("Prompts the user to select a folder.")] + public sealed class VistaFolderBrowserDialog : CommonDialog + { + private FolderBrowserDialog _downlevelDialog; + private string _description; + private bool _useDescriptionForTitle; + private string _selectedPath; + private System.Environment.SpecialFolder _rootFolder; + + /// + /// Occurs when the user clicks the Help button on the dialog box. + /// + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler HelpRequest + { + add + { + base.HelpRequest += value; + } + remove + { + base.HelpRequest -= value; + } + } + + /// + /// Creates a new instance of the class. + /// + public VistaFolderBrowserDialog() + { + if( !IsVistaFolderDialogSupported ) + _downlevelDialog = new FolderBrowserDialog(); + else + Reset(); + } + + #region Public Properties + + /// + /// Gets a value that indicates whether the current OS supports Vista-style common file dialogs. + /// + /// + /// on Windows Vista or newer operating systems; otherwise, . + /// + [Browsable(false)] + public static bool IsVistaFolderDialogSupported + { + get + { + return NativeMethods.IsWindowsVistaOrLater; + } + } + + /// + /// Gets or sets the descriptive text displayed above the tree view control in the dialog box, or below the list view control + /// in the Vista style dialog. + /// + /// + /// The description to display. The default is an empty string (""). + /// + [Category("Folder Browsing"), DefaultValue(""), Localizable(true), Browsable(true), Description("The descriptive text displayed above the tree view control in the dialog box, or below the list view control in the Vista style dialog.")] + public string Description + { + get + { + if( _downlevelDialog != null ) + return _downlevelDialog.Description; + return _description; + } + set + { + if( _downlevelDialog != null ) + _downlevelDialog.Description = value; + else + _description = value ?? String.Empty; + } + } + + /// + /// Gets or sets the root folder where the browsing starts from. This property has no effect if the Vista style + /// dialog is used. + /// + /// + /// One of the values. The default is Desktop. + /// + /// The value assigned is not one of the values. + [Localizable(false), Description("The root folder where the browsing starts from. This property has no effect if the Vista style dialog is used."), Category("Folder Browsing"), Browsable(true), DefaultValue(typeof(System.Environment.SpecialFolder), "Desktop")] + public System.Environment.SpecialFolder RootFolder + { + get + { + if( _downlevelDialog != null ) + return _downlevelDialog.RootFolder; + return _rootFolder; + } + set + { + if( _downlevelDialog != null ) + _downlevelDialog.RootFolder = value; + else + _rootFolder = value; + } + } + + /// + /// Gets or sets the path selected by the user. + /// + /// + /// The path of the folder first selected in the dialog box or the last folder selected by the user. The default is an empty string (""). + /// + [Browsable(true), Editor("System.Windows.Forms.Design.SelectedPathEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor)), Description("The path selected by the user."), DefaultValue(""), Localizable(true), Category("Folder Browsing")] + public string SelectedPath + { + get + { + if( _downlevelDialog != null ) + return _downlevelDialog.SelectedPath; + return _selectedPath; + } + set + { + if( _downlevelDialog != null ) + _downlevelDialog.SelectedPath = value; + else + _selectedPath = value ?? string.Empty; + } + } + + private bool _showNewFolderButton; + + /// + /// Gets or sets a value indicating whether the New Folder button appears in the folder browser dialog box. This + /// property has no effect if the Vista style dialog is used; in that case, the New Folder button is always shown. + /// + /// + /// if the New Folder button is shown in the dialog box; otherwise, . The default is . + /// + [Browsable(true), Localizable(false), Description("A value indicating whether the New Folder button appears in the folder browser dialog box. This property has no effect if the Vista style dialog is used; in that case, the New Folder button is always shown."), DefaultValue(true), Category("Folder Browsing")] + public bool ShowNewFolderButton + { + get + { + if( _downlevelDialog != null ) + return _downlevelDialog.ShowNewFolderButton; + return _showNewFolderButton; + } + set + { + if( _downlevelDialog != null ) + _downlevelDialog.ShowNewFolderButton = value; + else + _showNewFolderButton = value; + } + } + + + /// + /// Gets or sets a value that indicates whether to use the value of the property + /// as the dialog title for Vista style dialogs. This property has no effect on old style dialogs. + /// + /// to indicate that the value of the property is used as dialog title; + /// to indicate the value is added as additional text to the dialog. The default is . + [Category("Folder Browsing"), DefaultValue(false), Description("A value that indicates whether to use the value of the Description property as the dialog title for Vista style dialogs. This property has no effect on old style dialogs.")] + public bool UseDescriptionForTitle + { + get { return _useDescriptionForTitle; } + set { _useDescriptionForTitle = value; } + } + + #endregion + + #region Public Methods + + /// + /// Resets all properties to their default values. + /// + public override void Reset() + { + _description = string.Empty; + _useDescriptionForTitle = false; + _selectedPath = string.Empty; + _rootFolder = Environment.SpecialFolder.Desktop; + _showNewFolderButton = true; + } + + #endregion + + #region Protected Methods + + /// + /// Specifies a common dialog box. + /// + /// A value that represents the window handle of the owner window for the common dialog box. + /// if the file could be opened; otherwise, . + protected override bool RunDialog(IntPtr hwndOwner) + { + if( _downlevelDialog != null ) + return _downlevelDialog.ShowDialog(hwndOwner == IntPtr.Zero ? null : new Interop.WindowHandleWrapper(hwndOwner)) == DialogResult.OK; + + Ookii.Dialogs.Interop.IFileDialog dialog = null; + try + { + dialog = new Ookii.Dialogs.Interop.NativeFileOpenDialog(); + SetDialogProperties(dialog); + int result = dialog.Show(hwndOwner); + if( result < 0 ) + { + if( (uint)result == (uint)Interop.HRESULT.ERROR_CANCELLED ) + return false; + else + throw System.Runtime.InteropServices.Marshal.GetExceptionForHR(result); + } + GetResult(dialog); + return true; + } + finally + { + if( dialog != null ) + System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dialog); + } + } + + /// + /// Releases the unmanaged resources used by the and optionally releases the managed resources. + /// + /// to release both managed and unmanaged resources; to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + try + { + if( disposing && _downlevelDialog != null ) + _downlevelDialog.Dispose(); + } + finally + { + base.Dispose(disposing); + } + } + + #endregion + + #region Private Methods + + private void SetDialogProperties(Ookii.Dialogs.Interop.IFileDialog dialog) + { + // Description + if( !string.IsNullOrEmpty(_description) ) + { + if( _useDescriptionForTitle ) + { + dialog.SetTitle(_description); + } + else + { + Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog; + customize.AddText(0, _description); + } + } + + dialog.SetOptions(NativeMethods.FOS.FOS_PICKFOLDERS | NativeMethods.FOS.FOS_FORCEFILESYSTEM | NativeMethods.FOS.FOS_FILEMUSTEXIST); + + if( !string.IsNullOrEmpty(_selectedPath) ) + { + string parent = Path.GetDirectoryName(_selectedPath); + if( parent == null || !Directory.Exists(parent) ) + { + dialog.SetFileName(_selectedPath); + } + else + { + string folder = Path.GetFileName(_selectedPath); + dialog.SetFolder(NativeMethods.CreateItemFromParsingName(parent)); + dialog.SetFileName(folder); + } + } + } + + private void GetResult(Ookii.Dialogs.Interop.IFileDialog dialog) + { + Ookii.Dialogs.Interop.IShellItem item; + dialog.GetResult(out item); + item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out _selectedPath); + } + + #endregion + } +} diff --git a/Resources/Ookii.Dialogs.dll b/Resources/Ookii.Dialogs.dll deleted file mode 100644 index 5c6bcfa1d9ff14868fc0abce5d865e4d3970b684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133296 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

CDb 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 diff --git a/Resources/Ookii.Dialogs_license.txt b/Resources/Ookii.Dialogs_license.txt index b4cdc7c..3aab011 100644 --- a/Resources/Ookii.Dialogs_license.txt +++ b/Resources/Ookii.Dialogs_license.txt @@ -1,3 +1,7 @@ +BrawlBuilder uses the Vista-style folder browser from Ookii.Dialogs, which +is distributed under the following license: +--------------------------------------------------------------------------- + License agreement for Ookii.Dialogs. Copyright © Sven Groot (Ookii.org) 2009