diff --git a/Wabbajack.App/Assets/Wabbajack.axaml b/Wabbajack.App/Assets/Wabbajack.axaml index 3d9c8975..46111d3e 100644 --- a/Wabbajack.App/Assets/Wabbajack.axaml +++ b/Wabbajack.App/Assets/Wabbajack.axaml @@ -37,7 +37,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/Wabbajack.App/Controls/LogView.axaml b/Wabbajack.App/Controls/LogView.axaml index bb33f98d..a59ad25a 100644 --- a/Wabbajack.App/Controls/LogView.axaml +++ b/Wabbajack.App/Controls/LogView.axaml @@ -6,23 +6,25 @@ xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Wabbajack.App.Controls.LogView"> - - Current Log Contents - - - - - - - - - - - - - - + + Current Log Contents + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Wabbajack.App/Interfaces/IScreenView.cs b/Wabbajack.App/Interfaces/IScreenView.cs index 5ee01c93..d2ce26e5 100644 --- a/Wabbajack.App/Interfaces/IScreenView.cs +++ b/Wabbajack.App/Interfaces/IScreenView.cs @@ -5,4 +5,5 @@ namespace Wabbajack.App.Interfaces; public interface IScreenView { public Type ViewModelType { get; } + public string HumanName { get; } } \ No newline at end of file diff --git a/Wabbajack.App/Screens/BrowseView.axaml.cs b/Wabbajack.App/Screens/BrowseView.axaml.cs index 64b8d898..aa766c48 100644 --- a/Wabbajack.App/Screens/BrowseView.axaml.cs +++ b/Wabbajack.App/Screens/BrowseView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class BrowseView : ScreenBase { - public BrowseView() + public BrowseView() : base("Web Browser") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Screens/CompilationView.axaml.cs b/Wabbajack.App/Screens/CompilationView.axaml.cs index 18b4e8fe..0f09a05e 100644 --- a/Wabbajack.App/Screens/CompilationView.axaml.cs +++ b/Wabbajack.App/Screens/CompilationView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class CompilationView : ScreenBase { - public CompilationView() + public CompilationView() : base("Compiling") { InitializeComponent(); diff --git a/Wabbajack.App/Screens/CompilerConfigurationView.axaml.cs b/Wabbajack.App/Screens/CompilerConfigurationView.axaml.cs index 4bc24004..ecb150f8 100644 --- a/Wabbajack.App/Screens/CompilerConfigurationView.axaml.cs +++ b/Wabbajack.App/Screens/CompilerConfigurationView.axaml.cs @@ -15,7 +15,7 @@ namespace Wabbajack.App.Screens; public partial class CompilerConfigurationView : ScreenBase { - public CompilerConfigurationView() + public CompilerConfigurationView() : base("Compiler Configuration") { InitializeComponent(); AddAlwaysEnabled.Command = ReactiveCommand.Create(() => AddAlwaysEnabled_Command().FireAndForget()); diff --git a/Wabbajack.App/Screens/ErrorPageView.axaml.cs b/Wabbajack.App/Screens/ErrorPageView.axaml.cs index 36441c1d..234fb8d6 100644 --- a/Wabbajack.App/Screens/ErrorPageView.axaml.cs +++ b/Wabbajack.App/Screens/ErrorPageView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class ErrorPageView : ScreenBase { - public ErrorPageView() + public ErrorPageView() : base("Error") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Screens/LauncherView.axaml.cs b/Wabbajack.App/Screens/LauncherView.axaml.cs index bf0ac326..3c8ccfa9 100644 --- a/Wabbajack.App/Screens/LauncherView.axaml.cs +++ b/Wabbajack.App/Screens/LauncherView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class LauncherView : ScreenBase { - public LauncherView() + public LauncherView() : base("Launch Modlist") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Screens/LogScreenView.axaml.cs b/Wabbajack.App/Screens/LogScreenView.axaml.cs index 85a85735..dd3cb47e 100644 --- a/Wabbajack.App/Screens/LogScreenView.axaml.cs +++ b/Wabbajack.App/Screens/LogScreenView.axaml.cs @@ -4,7 +4,7 @@ namespace Wabbajack.App.Screens; public partial class LogScreenView : ScreenBase { - public LogScreenView() + public LogScreenView() : base("Application Log") { InitializeComponent(); } diff --git a/Wabbajack.App/Screens/PlaySelectView.axaml.cs b/Wabbajack.App/Screens/PlaySelectView.axaml.cs index 28aa6e7f..3a6ffa53 100644 --- a/Wabbajack.App/Screens/PlaySelectView.axaml.cs +++ b/Wabbajack.App/Screens/PlaySelectView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class PlaySelectView : ScreenBase { - public PlaySelectView() + public PlaySelectView() : base("Modlist Selection") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Screens/SettingsView.axaml.cs b/Wabbajack.App/Screens/SettingsView.axaml.cs index 0d7f7c1f..fb7fc1cb 100644 --- a/Wabbajack.App/Screens/SettingsView.axaml.cs +++ b/Wabbajack.App/Screens/SettingsView.axaml.cs @@ -6,7 +6,7 @@ namespace Wabbajack.App.Screens; public partial class SettingsView : ScreenBase { - public SettingsView() + public SettingsView() : base("Settings") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Screens/StandardInstallationView.axaml.cs b/Wabbajack.App/Screens/StandardInstallationView.axaml.cs index c1e76e10..1e0d59a1 100644 --- a/Wabbajack.App/Screens/StandardInstallationView.axaml.cs +++ b/Wabbajack.App/Screens/StandardInstallationView.axaml.cs @@ -10,7 +10,7 @@ namespace Wabbajack.App.Views; public partial class StandardInstallationView : ScreenBase { - public StandardInstallationView() + public StandardInstallationView() : base("Installing") { InitializeComponent(); diff --git a/Wabbajack.App/ViewModels/MainWindowViewModel.cs b/Wabbajack.App/ViewModels/MainWindowViewModel.cs index 530c2a56..420e5141 100644 --- a/Wabbajack.App/ViewModels/MainWindowViewModel.cs +++ b/Wabbajack.App/ViewModels/MainWindowViewModel.cs @@ -68,6 +68,13 @@ public class MainWindowViewModel : ReactiveValidationObject, IActivatableViewMod LogViewButton = ReactiveCommand.Create(() => { Receive(new NavigateTo(typeof(LogScreenViewModel))); }) .DisposeWith(disposables); + + this.WhenAnyValue(vm => vm.CurrentScreen) + .Where(view => view != default) + .Select(view => ((IScreenView) view).HumanName) + .Select(txt => txt == "" ? "Wabbajack" : $"Wabbajack - {txt}") + .BindTo(this, vm => vm.TitleText) + .DisposeWith(disposables); }); CurrentScreen = (Control) _screens.First(s => s.ViewModelType == typeof(ModeSelectionViewModel)); @@ -85,6 +92,8 @@ public class MainWindowViewModel : ReactiveValidationObject, IActivatableViewMod [Reactive] public ReactiveCommand LogViewButton { get; set; } [Reactive] public string ResourceStatus { get; set; } + + [Reactive] public string TitleText { get; set; } public ViewModelActivator Activator { get; } diff --git a/Wabbajack.App/Views/GuidedWebView.axaml.cs b/Wabbajack.App/Views/GuidedWebView.axaml.cs index b9e00b00..7c6ac82f 100644 --- a/Wabbajack.App/Views/GuidedWebView.axaml.cs +++ b/Wabbajack.App/Views/GuidedWebView.axaml.cs @@ -8,7 +8,7 @@ namespace Wabbajack.App.Views; public partial class GuidedWebView : ScreenBase { - public GuidedWebView() : base(false) + public GuidedWebView() : base("Web View", false) { InitializeComponent(); diff --git a/Wabbajack.App/Views/InstallConfigurationView.axaml.cs b/Wabbajack.App/Views/InstallConfigurationView.axaml.cs index cd37b4d9..5292ca79 100644 --- a/Wabbajack.App/Views/InstallConfigurationView.axaml.cs +++ b/Wabbajack.App/Views/InstallConfigurationView.axaml.cs @@ -9,9 +9,9 @@ using Wabbajack.App.ViewModels; namespace Wabbajack.App.Views; -public partial class InstallConfigurationView : ReactiveUserControl, IScreenView +public partial class InstallConfigurationView : ScreenBase, IScreenView { - public InstallConfigurationView() + public InstallConfigurationView() : base("Install Configuration") { InitializeComponent(); DataContext = App.Services.GetService()!; @@ -45,6 +45,9 @@ public partial class InstallConfigurationView : ReactiveUserControl view.InstallPath.SelectedPath) .BindTo(ViewModel, vm => vm.Install) .DisposeWith(disposables); + + this.BindCommand(ViewModel, vm => vm.BeginCommand, view => view.BeginInstall.Button) + .DisposeWith(disposables); }); } diff --git a/Wabbajack.App/Views/MainWindow.axaml b/Wabbajack.App/Views/MainWindow.axaml index 760bbb33..18c23a71 100644 --- a/Wabbajack.App/Views/MainWindow.axaml +++ b/Wabbajack.App/Views/MainWindow.axaml @@ -32,25 +32,26 @@ - + + - + - - - - diff --git a/Wabbajack.App/Views/MainWindow.axaml.cs b/Wabbajack.App/Views/MainWindow.axaml.cs index fe5e25e6..91001076 100644 --- a/Wabbajack.App/Views/MainWindow.axaml.cs +++ b/Wabbajack.App/Views/MainWindow.axaml.cs @@ -16,27 +16,30 @@ public partial class MainWindow : ReactiveWindow InitializeComponent(); DataContext = App.Services.GetService()!; - this.WhenActivated(dispose => + this.WhenActivated(disposables => { CloseButton.Command = ReactiveCommand.Create(() => Environment.Exit(0)) - .DisposeWith(dispose); + .DisposeWith(disposables); MinimizeButton.Command = ReactiveCommand.Create(() => WindowState = WindowState.Minimized) - .DisposeWith(dispose); + .DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.BackButton, view => view.BackButton) - .DisposeWith(dispose); + .DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.SettingsButton, view => view.SettingsButton) - .DisposeWith(dispose); + .DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.LogViewButton, view => view.LogButton) - .DisposeWith(dispose); + .DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.CurrentScreen, view => view.Contents.Content) - .DisposeWith(dispose); + this.OneWayBind(ViewModel, vm => vm.CurrentScreen, view => view.Contents.Content) + .DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.ResourceStatus, view => view.ResourceStatus.Text) - .DisposeWith(dispose); + this.OneWayBind(ViewModel, vm => vm.ResourceStatus, view => view.ResourceStatus.Text) + .DisposeWith(disposables); + + this.OneWayBind(ViewModel, vm => vm.TitleText, view => view.TitleText.Text) + .DisposeWith(disposables); }); diff --git a/Wabbajack.App/Views/ModeSelectionView.axaml.cs b/Wabbajack.App/Views/ModeSelectionView.axaml.cs index eec2e51c..0df4eadb 100644 --- a/Wabbajack.App/Views/ModeSelectionView.axaml.cs +++ b/Wabbajack.App/Views/ModeSelectionView.axaml.cs @@ -9,7 +9,7 @@ namespace Wabbajack.App.Views; public partial class ModeSelectionView : ScreenBase { - public ModeSelectionView(IServiceProvider provider) + public ModeSelectionView(IServiceProvider provider) : base("") { InitializeComponent(); this.WhenActivated(disposables => diff --git a/Wabbajack.App/Views/ScreenBase.cs b/Wabbajack.App/Views/ScreenBase.cs index c2157524..d745fe8b 100644 --- a/Wabbajack.App/Views/ScreenBase.cs +++ b/Wabbajack.App/Views/ScreenBase.cs @@ -1,4 +1,5 @@ using System; +using ReactiveUI.Fody.Helpers; using Wabbajack.App.Interfaces; using Wabbajack.App.ViewModels; @@ -7,9 +8,13 @@ namespace Wabbajack.App.Views; public abstract class ScreenBase : ViewBase, IScreenView where T : ViewModelBase { - protected ScreenBase(bool createViewModel = true) : base(createViewModel) + protected ScreenBase(string humanName, bool createViewModel = true) : base(createViewModel) { + HumanName = humanName; } public Type ViewModelType => typeof(T); + + [Reactive] + public string HumanName { get; set; } } \ No newline at end of file