From 9a3f08ce9d7efb8502ef56fee0a7a4c2e247bd52 Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Mon, 15 Feb 2016 20:03:55 +0000 Subject: [PATCH] Basic implementation of BrowseFolderDialog and Win32 Implementation. --- src/Perspex.Controls/Platform/ISystemDialogImpl.cs | 2 ++ src/Perspex.Controls/SystemDialog.cs | 9 +++++++-- src/Windows/Perspex.Win32/Perspex.Win32.csproj | 4 ++++ src/Windows/Perspex.Win32/SystemDialogImpl.cs | 13 +++++++++++++ src/Windows/Perspex.Win32/packages.config | 1 + 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Perspex.Controls/Platform/ISystemDialogImpl.cs b/src/Perspex.Controls/Platform/ISystemDialogImpl.cs index d3af982f95..f45eec8f95 100644 --- a/src/Perspex.Controls/Platform/ISystemDialogImpl.cs +++ b/src/Perspex.Controls/Platform/ISystemDialogImpl.cs @@ -18,5 +18,7 @@ namespace Perspex.Controls.Platform /// The parent window. /// A task returning the selected filenames. Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent); + + Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent); } } diff --git a/src/Perspex.Controls/SystemDialog.cs b/src/Perspex.Controls/SystemDialog.cs index 6eae1e9e9d..b61833390b 100644 --- a/src/Perspex.Controls/SystemDialog.cs +++ b/src/Perspex.Controls/SystemDialog.cs @@ -12,10 +12,9 @@ namespace Perspex.Controls public string InitialDirectory { get; set; } } - public class SaveFileDialog : FileDialog { - public string DefaultExtension { get; set; } + public string DefaultExtension { get; set; } public async Task ShowAsync(Window window = null) => @@ -31,6 +30,12 @@ namespace Perspex.Controls => PerspexLocator.Current.GetService().ShowFileDialogAsync(this, window?.PlatformImpl); } + public class OpenFolderDialog : SystemDialog + { + public Task ShowAsync(Window window = null) + => PerspexLocator.Current.GetService().ShowFolderDialogAsync(this, window?.PlatformImpl); + } + public abstract class SystemDialog { public string Title { get; set; } diff --git a/src/Windows/Perspex.Win32/Perspex.Win32.csproj b/src/Windows/Perspex.Win32/Perspex.Win32.csproj index 0cd573d7b8..d62e03783c 100644 --- a/src/Windows/Perspex.Win32/Perspex.Win32.csproj +++ b/src/Windows/Perspex.Win32/Perspex.Win32.csproj @@ -38,6 +38,10 @@ CS1591 + + ..\..\..\packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll + True + diff --git a/src/Windows/Perspex.Win32/SystemDialogImpl.cs b/src/Windows/Perspex.Win32/SystemDialogImpl.cs index 69f394c75c..7ed1c83d34 100644 --- a/src/Windows/Perspex.Win32/SystemDialogImpl.cs +++ b/src/Windows/Perspex.Win32/SystemDialogImpl.cs @@ -10,6 +10,7 @@ using Perspex.Controls; using Perspex.Controls.Platform; using Perspex.Platform; using Perspex.Win32.Interop; +using Ookii.Dialogs.Wpf; namespace Perspex.Win32 { @@ -128,5 +129,17 @@ namespace Perspex.Win32 return files.Select(f => Path.Combine(dir, f)).ToArray(); }); } + + public Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) + { + VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog(); + + return Task.Factory.StartNew(() => + { + fbd.ShowDialog(); + + return fbd.SelectedPath; + }); + } } } diff --git a/src/Windows/Perspex.Win32/packages.config b/src/Windows/Perspex.Win32/packages.config index 571e4fe023..7ea589649f 100644 --- a/src/Windows/Perspex.Win32/packages.config +++ b/src/Windows/Perspex.Win32/packages.config @@ -1,5 +1,6 @@  +