From 64f2ec885e4934e502a19f91cd74633174705b59 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 27 Apr 2013 19:43:15 +0100 Subject: [PATCH] Use WPF for file conflict dialog. MessageService.ShowCustomDialog() does not set focus to the accept button. Extract common code from the NuGet addin dialogs. --- .../Project/PackageManagement.csproj | 7 +++ .../Project/Src/FileConflictResolver.cs | 36 +++-------- .../Project/Src/FileConflictView.xaml | 63 +++++++++++++++++++ .../Project/Src/FileConflictView.xaml.cs | 32 ++++++++++ .../Project/Src/FileConflictViewModel.cs | 48 ++++++++++++++ .../Project/Src/LicenseAcceptanceService.cs | 14 +---- .../Project/Src/LicenseAcceptanceView.xaml | 2 +- .../Project/Src/SelectProjectsService.cs | 16 +---- .../Project/Src/ServiceWithWorkbenchOwner.cs | 24 +++++++ 9 files changed, 188 insertions(+), 54 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/FileConflictViewModel.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/ServiceWithWorkbenchOwner.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 8c5a032d6a..39a71f8593 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -148,6 +148,11 @@ + + FileConflictView.xaml + Code + + @@ -226,6 +231,7 @@ + @@ -480,6 +486,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs index 667623f706..47b2281cc3 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs @@ -7,38 +7,22 @@ using NuGet; namespace ICSharpCode.PackageManagement { - public class FileConflictResolver : IFileConflictResolver + public class FileConflictResolver : ServiceWithWorkbenchOwner, IFileConflictResolver { - string[] buttons = new string[] { "Yes", "Yes to All", "No", "No to All" }; - - const int YesButtonIndex = 0; - const int YesToAllButtonIndex = 1; - const int NoButtonIndex = 2; - const int NoToAllButtonIndex = 3; - public FileConflictResolution ResolveFileConflict(string message) { - int result = MessageService.ShowCustomDialog( - "File Conflict", - message, - NoButtonIndex, // "No" is default accept button. - -1, - buttons); - return MapResultToFileConflictResolution(result); + var viewModel = new FileConflictViewModel(message); + FileConflictView view = CreateFileConflictView(viewModel); + view.ShowDialog(); + return viewModel.GetResolution(); } - FileConflictResolution MapResultToFileConflictResolution(int result) + FileConflictView CreateFileConflictView(FileConflictViewModel viewModel) { - switch (result) { - case YesButtonIndex: - return FileConflictResolution.Overwrite; - case YesToAllButtonIndex: - return FileConflictResolution.OverwriteAll; - case NoToAllButtonIndex: - return FileConflictResolution.IgnoreAll; - default: - return FileConflictResolution.Ignore; - } + var view = new FileConflictView(); + view.ViewModel = viewModel; + view.Owner = Owner; + return view; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml new file mode 100644 index 0000000000..6691328ddb --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml @@ -0,0 +1,63 @@ + + + +