From 2ab10fe1bbf865d13215b52b210bcca55bc3d5a5 Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 4 Jan 2020 20:33:38 -0600 Subject: [PATCH 1/4] BackNavigatingVM. Removed navigation stack --- Wabbajack/View Models/BackNavigatingVM.cs | 30 +++++++++++++++++++++++ Wabbajack/View Models/LoginManagerVM.cs | 7 +++--- Wabbajack/View Models/MainWindowVM.cs | 18 ++++++-------- Wabbajack/Wabbajack.csproj | 1 + 4 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 Wabbajack/View Models/BackNavigatingVM.cs diff --git a/Wabbajack/View Models/BackNavigatingVM.cs b/Wabbajack/View Models/BackNavigatingVM.cs new file mode 100644 index 00000000..4cef6cd5 --- /dev/null +++ b/Wabbajack/View Models/BackNavigatingVM.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Wabbajack.Common; +using Wabbajack.Lib; + +namespace Wabbajack +{ + public class BackNavigatingVM : ViewModel + { + [Reactive] + public ViewModel NavigateBackTarget { get; set; } + public ICommand BackCommand { get; } + + public BackNavigatingVM(MainWindowVM mainWindowVM) + { + BackCommand = ReactiveCommand.Create( + execute: () => Utils.CatchAndLog(() => mainWindowVM.ActivePane = NavigateBackTarget), + canExecute: this.WhenAny(x => x.NavigateBackTarget) + .Select(x => x != null) + .ObserveOnGuiThread()); + } + } +} diff --git a/Wabbajack/View Models/LoginManagerVM.cs b/Wabbajack/View Models/LoginManagerVM.cs index 7c37cbf3..f157bd14 100644 --- a/Wabbajack/View Models/LoginManagerVM.cs +++ b/Wabbajack/View Models/LoginManagerVM.cs @@ -5,20 +5,19 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Input; using ReactiveUI; +using ReactiveUI.Fody.Helpers; using Wabbajack.Lib; using Wabbajack.Lib.Downloaders; namespace Wabbajack { - public class LoginManagerVM : ViewModel + public class LoginManagerVM : BackNavigatingVM { - private MainWindowVM mainWindowVM; - public ICommand BackCommand { get; } public List Downloaders { get; } public LoginManagerVM(MainWindowVM mainWindowVM) + : base(mainWindowVM) { - BackCommand = ReactiveCommand.Create(() => mainWindowVM.NavigateBack()); Downloaders = DownloadDispatcher.Downloaders.OfType().ToList(); } } diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index f7fded99..52142f09 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -1,4 +1,4 @@ -using DynamicData; +using DynamicData; using DynamicData.Binding; using ReactiveUI; using ReactiveUI.Fody.Helpers; @@ -40,8 +40,6 @@ namespace Wabbajack public readonly UserInterventionHandlers UserInterventionHandlers; public readonly LoginManagerVM LoginManagerVM; - public readonly List NavigationTrail = new List(); - public ICommand CopyVersionCommand { get; } public ICommand ShowLoginManagerVM { get; } @@ -150,16 +148,14 @@ namespace Wabbajack installer.ModListLocation.TargetPath = path; } - public void NavigateBack() - { - var prev = NavigationTrail.Last(); - NavigationTrail.RemoveAt(NavigationTrail.Count - 1); - ActivePane = prev; - } - public void NavigateTo(ViewModel vm) { - NavigationTrail.Add(ActivePane); + ActivePane = vm; + } + + public void NavigateTo(BackNavigatingVM vm) + { + vm.NavigateBackTarget = ActivePane; ActivePane = vm; } diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj index 510f112a..9f0ab68b 100644 --- a/Wabbajack/Wabbajack.csproj +++ b/Wabbajack/Wabbajack.csproj @@ -172,6 +172,7 @@ MSBuild:Compile Designer + AttentionBorder.xaml From 907a5a2da111ffff123025337434149eb5c47966 Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 4 Jan 2020 20:50:05 -0600 Subject: [PATCH 2/4] MainWindowVM.ActivePane set made private --- Wabbajack/View Models/BackNavigatingVM.cs | 2 +- Wabbajack/View Models/Compilers/CompilerVM.cs | 2 +- Wabbajack/View Models/Installers/InstallerVM.cs | 2 +- Wabbajack/View Models/MainWindowVM.cs | 8 ++++---- Wabbajack/View Models/ModListGalleryVM.cs | 2 +- Wabbajack/View Models/ModeSelectionVM.cs | 4 ++-- Wabbajack/View Models/UserInterventionHandlers.cs | 6 +++--- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Wabbajack/View Models/BackNavigatingVM.cs b/Wabbajack/View Models/BackNavigatingVM.cs index 4cef6cd5..cce5e5f6 100644 --- a/Wabbajack/View Models/BackNavigatingVM.cs +++ b/Wabbajack/View Models/BackNavigatingVM.cs @@ -21,7 +21,7 @@ namespace Wabbajack public BackNavigatingVM(MainWindowVM mainWindowVM) { BackCommand = ReactiveCommand.Create( - execute: () => Utils.CatchAndLog(() => mainWindowVM.ActivePane = NavigateBackTarget), + execute: () => Utils.CatchAndLog(() => mainWindowVM.NavigateTo(NavigateBackTarget)), canExecute: this.WhenAny(x => x.NavigateBackTarget) .Select(x => x != null) .ObserveOnGuiThread()); diff --git a/Wabbajack/View Models/Compilers/CompilerVM.cs b/Wabbajack/View Models/Compilers/CompilerVM.cs index 86ae7666..c9719104 100644 --- a/Wabbajack/View Models/Compilers/CompilerVM.cs +++ b/Wabbajack/View Models/Compilers/CompilerVM.cs @@ -139,7 +139,7 @@ namespace Wabbajack BackCommand = ReactiveCommand.Create( execute: () => { - mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM; + mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM); StartedCompilation = false; Completed = null; }, diff --git a/Wabbajack/View Models/Installers/InstallerVM.cs b/Wabbajack/View Models/Installers/InstallerVM.cs index fea14272..3a74ab86 100644 --- a/Wabbajack/View Models/Installers/InstallerVM.cs +++ b/Wabbajack/View Models/Installers/InstallerVM.cs @@ -182,7 +182,7 @@ namespace Wabbajack { StartedInstallation = false; Completed = null; - mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM; + mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM); }, canExecute: this.WhenAny(x => x.Installing) .Select(x => !x)); diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index 52142f09..3e32d0a5 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -29,7 +29,7 @@ namespace Wabbajack public MainSettings Settings { get; } [Reactive] - public ViewModel ActivePane { get; set; } + public ViewModel ActivePane { get; private set; } public ObservableCollectionExtended Log { get; } = new ObservableCollectionExtended(); @@ -101,12 +101,12 @@ namespace Wabbajack if (IsStartingFromModlist(out var path)) { Installer.Value.ModListLocation.TargetPath = path; - ActivePane = Installer.Value; + NavigateTo(Installer.Value); } else { // Start on mode selection - ActivePane = ModeSelectionVM; + NavigateTo(ModeSelectionVM); } try @@ -144,7 +144,7 @@ namespace Wabbajack if (path == null) return; var installer = Installer.Value; Settings.Installer.LastInstalledListLocation = path; - ActivePane = installer; + NavigateTo(installer); installer.ModListLocation.TargetPath = path; } diff --git a/Wabbajack/View Models/ModListGalleryVM.cs b/Wabbajack/View Models/ModListGalleryVM.cs index 7332446f..62a6a944 100644 --- a/Wabbajack/View Models/ModListGalleryVM.cs +++ b/Wabbajack/View Models/ModListGalleryVM.cs @@ -30,7 +30,7 @@ namespace Wabbajack { MWVM = mainWindowVM; BackCommand = ReactiveCommand.Create( - execute: () => mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM); + execute: () => mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM)); RefreshCommand = ReactiveCommand.Create(() => { }); RefreshCommand.StartingExecution() diff --git a/Wabbajack/View Models/ModeSelectionVM.cs b/Wabbajack/View Models/ModeSelectionVM.cs index de1a4ae7..33330252 100644 --- a/Wabbajack/View Models/ModeSelectionVM.cs +++ b/Wabbajack/View Models/ModeSelectionVM.cs @@ -32,8 +32,8 @@ namespace Wabbajack _mainVM.OpenInstaller(path); }); - CompileCommand = ReactiveCommand.Create(() => mainVM.ActivePane = mainVM.Compiler.Value); - BrowseCommand = ReactiveCommand.Create(() => mainVM.ActivePane = mainVM.Gallery.Value); + CompileCommand = ReactiveCommand.Create(() => mainVM.NavigateTo(mainVM.Compiler.Value)); + BrowseCommand = ReactiveCommand.Create(() => mainVM.NavigateTo(mainVM.Gallery.Value)); } } } diff --git a/Wabbajack/View Models/UserInterventionHandlers.cs b/Wabbajack/View Models/UserInterventionHandlers.cs index 7a2ef7cd..8281fea1 100644 --- a/Wabbajack/View Models/UserInterventionHandlers.cs +++ b/Wabbajack/View Models/UserInterventionHandlers.cs @@ -29,11 +29,11 @@ namespace Wabbajack CancellationTokenSource cancel = new CancellationTokenSource(); var oldPane = MainWindow.ActivePane; var vm = await WebBrowserVM.GetNew(); - MainWindow.ActivePane = vm; + MainWindow.NavigateTo(vm); vm.BackCommand = ReactiveCommand.Create(() => { cancel.Cancel(); - MainWindow.ActivePane = oldPane; + MainWindow.NavigateTo(oldPane); intervention.Cancel(); }); @@ -51,7 +51,7 @@ namespace Wabbajack intervention.Cancel(); } - MainWindow.ActivePane = oldPane; + MainWindow.NavigateTo(oldPane); } public async Task Handle(IUserIntervention msg) From 43aca88879e30adf40504186595140aae79fd1c6 Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 4 Jan 2020 21:06:34 -0600 Subject: [PATCH 3/4] Implemented IBackNavigatingVM various places --- Wabbajack/View Models/BackNavigatingVM.cs | 22 +++++++++++++++---- Wabbajack/View Models/Compilers/CompilerVM.cs | 13 ++++++++--- .../View Models/Installers/InstallerVM.cs | 14 +++++++++--- Wabbajack/View Models/MainWindowVM.cs | 6 ++--- Wabbajack/View Models/ModListGalleryVM.cs | 6 ++--- Wabbajack/View Models/WebBrowserVM.cs | 5 ++++- 6 files changed, 48 insertions(+), 18 deletions(-) diff --git a/Wabbajack/View Models/BackNavigatingVM.cs b/Wabbajack/View Models/BackNavigatingVM.cs index cce5e5f6..3be998bf 100644 --- a/Wabbajack/View Models/BackNavigatingVM.cs +++ b/Wabbajack/View Models/BackNavigatingVM.cs @@ -12,19 +12,33 @@ using Wabbajack.Lib; namespace Wabbajack { - public class BackNavigatingVM : ViewModel + public interface IBackNavigatingVM : IReactiveObject + { + ViewModel NavigateBackTarget { get; set; } + IReactiveCommand BackCommand { get; } + } + + public class BackNavigatingVM : ViewModel, IBackNavigatingVM { [Reactive] public ViewModel NavigateBackTarget { get; set; } - public ICommand BackCommand { get; } + public IReactiveCommand BackCommand { get; protected set; } public BackNavigatingVM(MainWindowVM mainWindowVM) { BackCommand = ReactiveCommand.Create( execute: () => Utils.CatchAndLog(() => mainWindowVM.NavigateTo(NavigateBackTarget)), - canExecute: this.WhenAny(x => x.NavigateBackTarget) - .Select(x => x != null) + canExecute: this.ConstructCanNavigateBack() .ObserveOnGuiThread()); } } + + public static class IBackNavigatingVMExt + { + public static IObservable ConstructCanNavigateBack(this IBackNavigatingVM vm) + { + return vm.WhenAny(x => x.NavigateBackTarget) + .Select(x => x != null); + } + } } diff --git a/Wabbajack/View Models/Compilers/CompilerVM.cs b/Wabbajack/View Models/Compilers/CompilerVM.cs index c9719104..5b447370 100644 --- a/Wabbajack/View Models/Compilers/CompilerVM.cs +++ b/Wabbajack/View Models/Compilers/CompilerVM.cs @@ -18,13 +18,16 @@ using Wabbajack.Lib; namespace Wabbajack { - public class CompilerVM : ViewModel + public class CompilerVM : ViewModel, IBackNavigatingVM { public MainWindowVM MWVM { get; } private readonly ObservableAsPropertyHelper _image; public BitmapImage Image => _image.Value; + [Reactive] + public ViewModel NavigateBackTarget { get; set; } + [Reactive] public ModManager SelectedCompilerType { get; set; } @@ -143,8 +146,12 @@ namespace Wabbajack StartedCompilation = false; Completed = null; }, - canExecute: this.WhenAny(x => x.Compiling) - .Select(x => !x)); + canExecute: Observable.CombineLatest( + this.WhenAny(x => x.Compiling) + .Select(x => !x), + this.ConstructCanNavigateBack(), + resultSelector: (i, b) => i && b) + .ObserveOnGuiThread()); // Compile progress updates and populate ObservableCollection Dictionary cpuDisplays = new Dictionary(); diff --git a/Wabbajack/View Models/Installers/InstallerVM.cs b/Wabbajack/View Models/Installers/InstallerVM.cs index 3a74ab86..87b86e59 100644 --- a/Wabbajack/View Models/Installers/InstallerVM.cs +++ b/Wabbajack/View Models/Installers/InstallerVM.cs @@ -20,10 +20,11 @@ using DynamicData.Binding; using Wabbajack.Common.StatusFeed; using System.Reactive; using System.Collections.Generic; +using System.Windows.Input; namespace Wabbajack { - public class InstallerVM : ViewModel + public class InstallerVM : ViewModel, IBackNavigatingVM { public SlideShow Slideshow { get; } @@ -37,6 +38,9 @@ namespace Wabbajack public FilePickerVM ModListLocation { get; } + [Reactive] + public ViewModel NavigateBackTarget { get; set; } + private readonly ObservableAsPropertyHelper _installer; public ISubInstallerVM Installer => _installer.Value; @@ -184,8 +188,12 @@ namespace Wabbajack Completed = null; mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM); }, - canExecute: this.WhenAny(x => x.Installing) - .Select(x => !x)); + canExecute: Observable.CombineLatest( + this.WhenAny(x => x.Installing) + .Select(x => !x), + this.ConstructCanNavigateBack(), + resultSelector: (i, b) => i && b) + .ObserveOnGuiThread()); _percentCompleted = this.WhenAny(x => x.Installer.ActiveInstallation) .StartWith(default(AInstaller)) diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index 3e32d0a5..72c508f9 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -1,4 +1,4 @@ -using DynamicData; +using DynamicData; using DynamicData.Binding; using ReactiveUI; using ReactiveUI.Fody.Helpers; @@ -43,7 +43,6 @@ namespace Wabbajack public ICommand CopyVersionCommand { get; } public ICommand ShowLoginManagerVM { get; } - public ICommand GoBackCommand { get; } public string VersionDisplay { get; } public MainWindowVM(MainWindow mainWindow, MainSettings settings) @@ -153,7 +152,8 @@ namespace Wabbajack ActivePane = vm; } - public void NavigateTo(BackNavigatingVM vm) + public void NavigateTo(T vm) + where T : ViewModel, IBackNavigatingVM { vm.NavigateBackTarget = ActivePane; ActivePane = vm; diff --git a/Wabbajack/View Models/ModListGalleryVM.cs b/Wabbajack/View Models/ModListGalleryVM.cs index 62a6a944..84ff0a96 100644 --- a/Wabbajack/View Models/ModListGalleryVM.cs +++ b/Wabbajack/View Models/ModListGalleryVM.cs @@ -15,22 +15,20 @@ using Wabbajack.Lib.ModListRegistry; namespace Wabbajack { - public class ModListGalleryVM : ViewModel + public class ModListGalleryVM : BackNavigatingVM { public MainWindowVM MWVM { get; } public ObservableCollectionExtended ModLists { get; } = new ObservableCollectionExtended(); - public IReactiveCommand BackCommand { get; } public IReactiveCommand RefreshCommand { get; } private int missingHashFallbackCounter; public ModListGalleryVM(MainWindowVM mainWindowVM) + : base(mainWindowVM) { MWVM = mainWindowVM; - BackCommand = ReactiveCommand.Create( - execute: () => mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM)); RefreshCommand = ReactiveCommand.Create(() => { }); RefreshCommand.StartingExecution() diff --git a/Wabbajack/View Models/WebBrowserVM.cs b/Wabbajack/View Models/WebBrowserVM.cs index 1a1094ab..2edb3331 100644 --- a/Wabbajack/View Models/WebBrowserVM.cs +++ b/Wabbajack/View Models/WebBrowserVM.cs @@ -13,7 +13,7 @@ using Wabbajack.Lib.WebAutomation; namespace Wabbajack { - public class WebBrowserVM : ViewModel + public class WebBrowserVM : ViewModel, IBackNavigatingVM { [Reactive] public string Instructions { get; set; } @@ -21,6 +21,9 @@ namespace Wabbajack public IWebBrowser Browser { get; } = new ChromiumWebBrowser(); public CefSharpWrapper Driver => new CefSharpWrapper(Browser); + [Reactive] + public ViewModel NavigateBackTarget { get; set; } + [Reactive] public IReactiveCommand BackCommand { get; set; } From e49f1dd5ca0b97f636a208211e92bd456268dab7 Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 4 Jan 2020 21:09:02 -0600 Subject: [PATCH 4/4] Basic settings page that just shows logins for now --- Wabbajack/Settings.cs | 5 +- .../UserInterventions/ShowLoginManager.cs | 21 ----- Wabbajack/View Models/MainWindowVM.cs | 11 ++- .../{ => Settings}/LoginManagerVM.cs | 7 +- Wabbajack/View Models/Settings/SettingsVM.cs | 23 +++++ .../View Models/UserInterventionHandlers.cs | 4 - Wabbajack/Views/LinksView.xaml | 22 ++--- Wabbajack/Views/LinksView.xaml.cs | 6 -- Wabbajack/Views/LoginManagerView.xaml | 89 ------------------- Wabbajack/Views/MainWindow.xaml | 21 ++++- .../Views/Settings/LoginManagerView.xaml | 50 +++++++++++ .../{ => Settings}/LoginManagerView.xaml.cs | 0 Wabbajack/Views/Settings/SettingsView.xaml | 37 ++++++++ Wabbajack/Views/Settings/SettingsView.xaml.cs | 28 ++++++ Wabbajack/Wabbajack.csproj | 28 ++++-- 15 files changed, 195 insertions(+), 157 deletions(-) delete mode 100644 Wabbajack/UserInterventions/ShowLoginManager.cs rename Wabbajack/View Models/{ => Settings}/LoginManagerVM.cs (72%) create mode 100644 Wabbajack/View Models/Settings/SettingsVM.cs delete mode 100644 Wabbajack/Views/LoginManagerView.xaml create mode 100644 Wabbajack/Views/Settings/LoginManagerView.xaml rename Wabbajack/Views/{ => Settings}/LoginManagerView.xaml.cs (100%) create mode 100644 Wabbajack/Views/Settings/SettingsView.xaml create mode 100644 Wabbajack/Views/Settings/SettingsView.xaml.cs diff --git a/Wabbajack/Settings.cs b/Wabbajack/Settings.cs index f6111ebd..264b81bf 100644 --- a/Wabbajack/Settings.cs +++ b/Wabbajack/Settings.cs @@ -5,11 +5,12 @@ using System.IO; using System.Reactive; using System.Reactive.Subjects; using Wabbajack.Common; +using Wabbajack.Lib; namespace Wabbajack { [JsonObject(MemberSerialization.OptOut)] - public class MainSettings + public class MainSettings : ViewModel { private static string _filename = "settings.json"; @@ -21,7 +22,7 @@ namespace Wabbajack public CompilerSettings Compiler { get; set; } = new CompilerSettings(); private Subject _saveSignal = new Subject(); - [JsonIgnoreAttribute] + [JsonIgnore] public IObservable SaveSignal => _saveSignal; public static bool TryLoadTypicalSettings(out MainSettings settings) diff --git a/Wabbajack/UserInterventions/ShowLoginManager.cs b/Wabbajack/UserInterventions/ShowLoginManager.cs deleted file mode 100644 index 672f2bb3..00000000 --- a/Wabbajack/UserInterventions/ShowLoginManager.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Wabbajack.Common; - -namespace Wabbajack.UserInterventions -{ - public class ShowLoginManager : AUserIntervention - { - public override string ShortDescription => "User requested to show the login manager"; - - public override string ExtendedDescription => "User requested to show the UI for managing all the logins supported by Wabbajack"; - - public override void Cancel() - { - } - } -} diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index 72c508f9..8a5f16de 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -35,14 +35,15 @@ namespace Wabbajack public readonly Lazy Compiler; public readonly Lazy Installer; + public readonly Lazy SettingsPane; public readonly Lazy Gallery; public readonly ModeSelectionVM ModeSelectionVM; public readonly UserInterventionHandlers UserInterventionHandlers; - public readonly LoginManagerVM LoginManagerVM; public ICommand CopyVersionCommand { get; } - public ICommand ShowLoginManagerVM { get; } + public ICommand OpenSettingsCommand { get; } + public string VersionDisplay { get; } public MainWindowVM(MainWindow mainWindow, MainSettings settings) @@ -51,10 +52,10 @@ namespace Wabbajack Settings = settings; Installer = new Lazy(() => new InstallerVM(this)); Compiler = new Lazy(() => new CompilerVM(this)); + SettingsPane = new Lazy(() => new SettingsVM(this)); Gallery = new Lazy(() => new ModListGalleryVM(this)); ModeSelectionVM = new ModeSelectionVM(this); UserInterventionHandlers = new UserInterventionHandlers(this); - LoginManagerVM = new LoginManagerVM(this); // Set up logging Utils.LogMessages @@ -123,6 +124,10 @@ namespace Wabbajack { Clipboard.SetText($"Wabbajack {VersionDisplay}\n{ThisAssembly.Git.Sha}"); }); + OpenSettingsCommand = ReactiveCommand.Create( + canExecute: this.WhenAny(x => x.ActivePane) + .Select(active => !SettingsPane.IsValueCreated || !object.ReferenceEquals(active, SettingsPane.Value)), + execute: () => NavigateTo(SettingsPane.Value)); } private static bool IsStartingFromModlist(out string modlistPath) { diff --git a/Wabbajack/View Models/LoginManagerVM.cs b/Wabbajack/View Models/Settings/LoginManagerVM.cs similarity index 72% rename from Wabbajack/View Models/LoginManagerVM.cs rename to Wabbajack/View Models/Settings/LoginManagerVM.cs index f157bd14..04e6cd0d 100644 --- a/Wabbajack/View Models/LoginManagerVM.cs +++ b/Wabbajack/View Models/Settings/LoginManagerVM.cs @@ -4,9 +4,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; -using ReactiveUI; -using ReactiveUI.Fody.Helpers; -using Wabbajack.Lib; using Wabbajack.Lib.Downloaders; namespace Wabbajack @@ -15,8 +12,8 @@ namespace Wabbajack { public List Downloaders { get; } - public LoginManagerVM(MainWindowVM mainWindowVM) - : base(mainWindowVM) + public LoginManagerVM(SettingsVM settingsVM) + : base(settingsVM.MWVM) { Downloaders = DownloadDispatcher.Downloaders.OfType().ToList(); } diff --git a/Wabbajack/View Models/Settings/SettingsVM.cs b/Wabbajack/View Models/Settings/SettingsVM.cs new file mode 100644 index 00000000..ebdead16 --- /dev/null +++ b/Wabbajack/View Models/Settings/SettingsVM.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ReactiveUI; +using Wabbajack.Lib; + +namespace Wabbajack +{ + public class SettingsVM : BackNavigatingVM + { + public MainWindowVM MWVM { get; } + public LoginManagerVM LoginManagerVM { get; } + + public SettingsVM(MainWindowVM mainWindowVM) + : base(mainWindowVM) + { + MWVM = mainWindowVM; + LoginManagerVM = new LoginManagerVM(this); + } + } +} diff --git a/Wabbajack/View Models/UserInterventionHandlers.cs b/Wabbajack/View Models/UserInterventionHandlers.cs index 8281fea1..3694bbb8 100644 --- a/Wabbajack/View Models/UserInterventionHandlers.cs +++ b/Wabbajack/View Models/UserInterventionHandlers.cs @@ -11,7 +11,6 @@ using Wabbajack.Common; using Wabbajack.Lib.Downloaders; using Wabbajack.Lib.NexusApi; using Wabbajack.Lib.WebAutomation; -using Wabbajack.UserInterventions; namespace Wabbajack { @@ -76,9 +75,6 @@ namespace Wabbajack break; case ConfirmationIntervention c: break; - case ShowLoginManager c: - MainWindow.NavigateTo(MainWindow.LoginManagerVM); - break; default: throw new NotImplementedException($"No handler for {msg}"); } diff --git a/Wabbajack/Views/LinksView.xaml b/Wabbajack/Views/LinksView.xaml index 0a4c867c..7b725aba 100644 --- a/Wabbajack/Views/LinksView.xaml +++ b/Wabbajack/Views/LinksView.xaml @@ -12,22 +12,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Wabbajack/Views/MainWindow.xaml b/Wabbajack/Views/MainWindow.xaml index a2cedc17..fe5ea129 100644 --- a/Wabbajack/Views/MainWindow.xaml +++ b/Wabbajack/Views/MainWindow.xaml @@ -3,6 +3,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:Wabbajack" xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" @@ -39,18 +40,36 @@ + + + -