From 79735be0338db4d2aab11b187e0591e6bb154c4e Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Mon, 22 Apr 2024 22:30:57 +0100 Subject: [PATCH] Add KeyBindingBehavior --- Bitvault.Avalonia/App.axaml | 38 ------------------- Bitvault.Avalonia/App.axaml.cs | 3 +- Bitvault.Avalonia/LockView.axaml | 24 +++++++----- Bitvault.Avalonia/LockView.axaml.cs | 12 ++---- Bitvault.Avalonia/VaultComponent.cs | 2 + Bitvault.Avalonia/VaultNavigationView.axaml | 8 +++- .../{LoginViewModel.cs => LockViewModel.cs} | 9 ++++- Bitvault/Locked.cs | 6 ++- Bitvault/Unlocked.cs | 6 ++- Bitvault/VaultComponentsInitializer.cs | 16 +++++--- Bitvault/VaultNavigationViewModel.cs | 30 +++++++++++++-- 11 files changed, 82 insertions(+), 72 deletions(-) rename Bitvault/{LoginViewModel.cs => LockViewModel.cs} (69%) diff --git a/Bitvault.Avalonia/App.axaml b/Bitvault.Avalonia/App.axaml index a893936..b7324bf 100644 --- a/Bitvault.Avalonia/App.axaml +++ b/Bitvault.Avalonia/App.axaml @@ -17,47 +17,9 @@ - - - - - - 0,5,6,6 avares://HyperX.Launcher.Avalonia/Assets/SegoeIcons.ttf#Segoe Fluent Icons - - 0 0,8,0,0 diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 36e25d6..236c4cd 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -36,8 +36,7 @@ public partial class App : Application services.AddTemplate("Main"); services.AddHandler(); - services.AddConfiguration(args => args.Name = "Personal", - $"{nameof(VaultConfiguration)}:Personal"); + services.AddConfiguration(args => args.Name = "Personal", "Vault:Personal"); }) .Build(); diff --git a/Bitvault.Avalonia/LockView.axaml b/Bitvault.Avalonia/LockView.axaml index ac86b12..28fa241 100644 --- a/Bitvault.Avalonia/LockView.axaml +++ b/Bitvault.Avalonia/LockView.axaml @@ -1,9 +1,15 @@ - - Welcome to Avalonia! - + + + + + + + + + diff --git a/Bitvault.Avalonia/LockView.axaml.cs b/Bitvault.Avalonia/LockView.axaml.cs index 60f4fd2..487033b 100644 --- a/Bitvault.Avalonia/LockView.axaml.cs +++ b/Bitvault.Avalonia/LockView.axaml.cs @@ -1,12 +1,8 @@ using Avalonia.Controls; -namespace Bitvault.Avalonia +namespace Bitvault.Avalonia; + +public partial class LockView : UserControl { - public partial class LockView : Window - { - public LockView() - { - InitializeComponent(); - } - } + public LockView() => InitializeComponent(); } diff --git a/Bitvault.Avalonia/VaultComponent.cs b/Bitvault.Avalonia/VaultComponent.cs index 2bd9b7b..942db67 100644 --- a/Bitvault.Avalonia/VaultComponent.cs +++ b/Bitvault.Avalonia/VaultComponent.cs @@ -16,5 +16,7 @@ public class VaultComponent : services.AddTemplate(); services.AddTemplate("Vault"); + services.AddTemplate("Lock"); + }); } diff --git a/Bitvault.Avalonia/VaultNavigationView.axaml b/Bitvault.Avalonia/VaultNavigationView.axaml index a0b14ec..6439325 100644 --- a/Bitvault.Avalonia/VaultNavigationView.axaml +++ b/Bitvault.Avalonia/VaultNavigationView.axaml @@ -5,4 +5,10 @@ xmlns:vm="using:Bitvault" x:DataType="vm:VaultNavigationViewModel" Content="{Binding Name}" - MenuItemsSource="{Binding}" /> + MenuItemsSource="{Binding}"> + + + + + + diff --git a/Bitvault/LoginViewModel.cs b/Bitvault/LockViewModel.cs similarity index 69% rename from Bitvault/LoginViewModel.cs rename to Bitvault/LockViewModel.cs index 26a33e4..8055f9a 100644 --- a/Bitvault/LoginViewModel.cs +++ b/Bitvault/LockViewModel.cs @@ -7,4 +7,11 @@ public class LockViewModel(IServiceProvider serviceProvider, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + IConfirmation +{ + public Task Confirm() + { + return Task.FromResult(false); + } +} \ No newline at end of file diff --git a/Bitvault/Locked.cs b/Bitvault/Locked.cs index 072760e..43b8f69 100644 --- a/Bitvault/Locked.cs +++ b/Bitvault/Locked.cs @@ -1,3 +1,5 @@ -namespace Bitvault; +using Toolkit.Foundation; -public record Locked; +namespace Bitvault; + +public record Locked : INotification; diff --git a/Bitvault/Unlocked.cs b/Bitvault/Unlocked.cs index 551b9f9..3b0d0bf 100644 --- a/Bitvault/Unlocked.cs +++ b/Bitvault/Unlocked.cs @@ -1,3 +1,5 @@ -namespace Bitvault; +using Toolkit.Foundation; -public record Unlocked; \ No newline at end of file +namespace Bitvault; + +public record Unlocked : INotification; \ No newline at end of file diff --git a/Bitvault/VaultComponentsInitializer.cs b/Bitvault/VaultComponentsInitializer.cs index 5dc00fc..aae186b 100644 --- a/Bitvault/VaultComponentsInitializer.cs +++ b/Bitvault/VaultComponentsInitializer.cs @@ -5,12 +5,13 @@ namespace Bitvault; public class VaultComponentsInitializer(IServiceProvider provider, IProxyServiceCollection proxy, - IEnumerable> configurations, + IEnumerable> configurations, + IComponentScopeCollection scopes, IVaultHostCollection vaults) : IInitializer { - public Task Initialize() + public async Task Initialize() { - foreach (IConfiguration configuration in configurations) + foreach (IConfigurationDescriptor configuration in configurations) { if (provider.GetRequiredService() is IVaultComponent component) { @@ -36,16 +37,19 @@ public class VaultComponentsInitializer(IServiceProvider provider, provider.GetRequiredService()); services.AddRange(proxy.Services); + + services.AddSingleton(new ComponentScope(configuration.Section)); }); builder.AddConfiguration(configuration.Section, configuration.Value); IComponentHost host = builder.Build(); - host.StartAsync(); + + scopes.Add(new ComponentScopeDescriptor(configuration.Section, + host.Services.GetRequiredService())); vaults.Add(host); + await host.StartAsync(); } } - - return Task.CompletedTask; } } diff --git a/Bitvault/VaultNavigationViewModel.cs b/Bitvault/VaultNavigationViewModel.cs index e00f837..931bed1 100644 --- a/Bitvault/VaultNavigationViewModel.cs +++ b/Bitvault/VaultNavigationViewModel.cs @@ -5,13 +5,18 @@ namespace Bitvault; public partial class VaultNavigationViewModel : ObservableCollectionViewModel, - IMainNavigationViewModel + IMainNavigationViewModel, + INotificationHandler, + INotificationHandler { + [ObservableProperty] + private bool locked; + [ObservableProperty] private string name; public VaultNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + IServiceFactory serviceFactory, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, @@ -21,11 +26,30 @@ public partial class VaultNavigationViewModel : Template = template; Name = name; + + + } + + public IContentTemplate Template { get; set; } + + public Task Handle(Unlocked args, CancellationToken cancellationToken = default) + { + Locked = true; + Add(); Add(); Add(); Add(); + + return Task.CompletedTask; + } - public IContentTemplate Template { get; set; } + public Task Handle(Locked args, CancellationToken cancellationToken = default) + { + Locked = true; + Clear(); + + return Task.CompletedTask; + } } \ No newline at end of file