From d3d0a29bcbe8951f6e26c9f281a87297c6efa645 Mon Sep 17 00:00:00 2001 From: EzioTheDeadPoet <52624146+EzioTheDeadPoet@users.noreply.github.com> Date: Fri, 4 Nov 2022 17:41:45 +0100 Subject: [PATCH 1/2] correction --- Wabbajack.Compiler/CompilerSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wabbajack.Compiler/CompilerSettings.cs b/Wabbajack.Compiler/CompilerSettings.cs index 8dddaa71..57c97eff 100644 --- a/Wabbajack.Compiler/CompilerSettings.cs +++ b/Wabbajack.Compiler/CompilerSettings.cs @@ -64,7 +64,7 @@ public class CompilerSettings public RelativePath[] Include { get; set; } = Array.Empty(); /// - /// These files are inlined into the modlist + /// These files are ignored when compiling the modlist /// public RelativePath[] Ignore { get; set; } = Array.Empty(); From 7ca983e26a23164c20cbf426d6e9212a57342daf Mon Sep 17 00:00:00 2001 From: EzioTheDeadPoet <52624146+EzioTheDeadPoet@users.noreply.github.com> Date: Fri, 4 Nov 2022 20:28:33 +0100 Subject: [PATCH 2/2] compiler settings file picker QoL changes allow selection of files for including. allow selection of files for ignoring. allow multiselect for files and folders. allow multiselect for additional profiles. allow multiselect for always enabled mods. --- .../Views/Compilers/CompilerView.xaml | 12 +- .../Views/Compilers/CompilerView.xaml.cs | 126 ++++++++++++++---- 2 files changed, 111 insertions(+), 27 deletions(-) diff --git a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml index c1fb0b94..b88638c3 100644 --- a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml +++ b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml @@ -165,7 +165,11 @@ - + + + @@ -179,7 +183,11 @@ - + + + diff --git a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs index da3702f7..b5abf0f2 100644 --- a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs +++ b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs @@ -219,6 +219,7 @@ namespace Wabbajack .DisposeWith(disposables); AddInclude.Command = ReactiveCommand.CreateFromTask(async () => await AddIncludeCommand()); + AddIncludeFiles.Command = ReactiveCommand.CreateFromTask(async () => await AddIncludeFilesCommand()); ViewModel.WhenAnyValue(vm => vm.Ignore) .WhereNotNull() @@ -227,6 +228,7 @@ namespace Wabbajack .DisposeWith(disposables); AddIgnore.Command = ReactiveCommand.CreateFromTask(async () => await AddIgnoreCommand()); + AddIgnoreFiles.Command = ReactiveCommand.CreateFromTask(async () => await AddIgnoreFilesCommand()); }); @@ -258,16 +260,19 @@ namespace Wabbajack EnsurePathExists = true, EnsureReadOnly = false, EnsureValidNames = true, - Multiselect = false, + Multiselect = true, ShowPlacesList = true, }; if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; - var selectedPath = dlg.FileNames.First().ToAbsolutePath(); + foreach (var fileName in dlg.FileNames) + { + var selectedPath = fileName.ToAbsolutePath(); - if (!selectedPath.InFolder(ViewModel.Source)) return; - - ViewModel.AddAlwaysEnabled(selectedPath.RelativeTo(ViewModel.Source)); + if (!selectedPath.InFolder(ViewModel.Source)) continue; + + ViewModel.AddAlwaysEnabled(selectedPath.RelativeTo(ViewModel.Source)); + } } public async Task AddOtherProfileCommand() @@ -295,16 +300,19 @@ namespace Wabbajack EnsurePathExists = true, EnsureReadOnly = false, EnsureValidNames = true, - Multiselect = false, + Multiselect = true, ShowPlacesList = true, }; if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; - var selectedPath = dlg.FileNames.First().ToAbsolutePath(); - - if (!selectedPath.InFolder(ViewModel.Source.Combine("profiles"))) return; - - ViewModel.AddOtherProfile(selectedPath.FileName.ToString()); + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); + + if (!selectedPath.InFolder(ViewModel.Source.Combine("profiles"))) continue; + + ViewModel.AddOtherProfile(selectedPath.FileName.ToString()); + } } public Task AddNoMatchIncludeCommand() @@ -321,16 +329,20 @@ namespace Wabbajack EnsurePathExists = true, EnsureReadOnly = false, EnsureValidNames = true, - Multiselect = false, + Multiselect = true, ShowPlacesList = true, }; if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return Task.CompletedTask; - var selectedPath = dlg.FileNames.First().ToAbsolutePath(); + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); - if (!selectedPath.InFolder(ViewModel.Source)) return Task.CompletedTask; + if (!selectedPath.InFolder(ViewModel.Source)) continue; + + ViewModel.AddNoMatchInclude(selectedPath.RelativeTo(ViewModel!.Source)); + } - ViewModel.AddNoMatchInclude(selectedPath.RelativeTo(ViewModel!.Source)); return Task.CompletedTask; } @@ -338,7 +350,7 @@ namespace Wabbajack { var dlg = new CommonOpenFileDialog { - Title = "Please select a file to include", + Title = "Please select folders to include", IsFolderPicker = true, InitialDirectory = ViewModel!.Source.ToString(), AddToMostRecentlyUsedList = false, @@ -348,23 +360,55 @@ namespace Wabbajack EnsurePathExists = true, EnsureReadOnly = false, EnsureValidNames = true, - Multiselect = false, + Multiselect = true, ShowPlacesList = true, }; if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; - var selectedPath = dlg.FileNames.First().ToAbsolutePath(); + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); - if (!selectedPath.InFolder(ViewModel.Source)) return; + if (!selectedPath.InFolder(ViewModel.Source)) continue; - ViewModel.AddInclude(selectedPath.RelativeTo(ViewModel!.Source)); + ViewModel.AddInclude(selectedPath.RelativeTo(ViewModel!.Source)); + } + } + + public async Task AddIncludeFilesCommand() + { + var dlg = new CommonOpenFileDialog + { + Title = "Please select files to include", + IsFolderPicker = false, + InitialDirectory = ViewModel!.Source.ToString(), + AddToMostRecentlyUsedList = false, + AllowNonFileSystemItems = false, + DefaultDirectory = ViewModel!.Source.ToString(), + EnsureFileExists = true, + EnsurePathExists = true, + EnsureReadOnly = false, + EnsureValidNames = true, + Multiselect = true, + ShowPlacesList = true, + }; + + if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); + + if (!selectedPath.InFolder(ViewModel.Source)) continue; + + ViewModel.AddInclude(selectedPath.RelativeTo(ViewModel!.Source)); + } } public async Task AddIgnoreCommand() { var dlg = new CommonOpenFileDialog { - Title = "Please select a file to ignore", + Title = "Please select folders to ignore", IsFolderPicker = true, InitialDirectory = ViewModel!.Source.ToString(), AddToMostRecentlyUsedList = false, @@ -374,16 +418,48 @@ namespace Wabbajack EnsurePathExists = true, EnsureReadOnly = false, EnsureValidNames = true, - Multiselect = false, + Multiselect = true, ShowPlacesList = true, }; if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; - var selectedPath = dlg.FileNames.First().ToAbsolutePath(); + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); - if (!selectedPath.InFolder(ViewModel.Source)) return; + if (!selectedPath.InFolder(ViewModel.Source)) continue; - ViewModel.AddIgnore(selectedPath.RelativeTo(ViewModel!.Source)); + ViewModel.AddIgnore(selectedPath.RelativeTo(ViewModel!.Source)); + } + } + + public async Task AddIgnoreFilesCommand() + { + var dlg = new CommonOpenFileDialog + { + Title = "Please select files to ignore", + IsFolderPicker = false, + InitialDirectory = ViewModel!.Source.ToString(), + AddToMostRecentlyUsedList = false, + AllowNonFileSystemItems = false, + DefaultDirectory = ViewModel!.Source.ToString(), + EnsureFileExists = true, + EnsurePathExists = true, + EnsureReadOnly = false, + EnsureValidNames = true, + Multiselect = true, + ShowPlacesList = true, + }; + + if (dlg.ShowDialog() != CommonFileDialogResult.Ok) return; + foreach (var filename in dlg.FileNames) + { + var selectedPath = filename.ToAbsolutePath(); + + if (!selectedPath.InFolder(ViewModel.Source)) continue; + + ViewModel.AddIgnore(selectedPath.RelativeTo(ViewModel!.Source)); + } } } }