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 @@ + + + -