From d7d90b3d5468fec2917c9c677f5d312929e16d9b Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Wed, 10 Jan 2024 19:25:16 +0000 Subject: [PATCH] wrapped custom widget items in containers so we have more control of the surrounding, i.e. divider --- .../Hyperbar.Windows.MediaController.csproj | 42 +++++++++++++++++++ .../MediaController.cs | 10 +++++ .../MediaControllerView.xaml | 8 ++-- .../MediaControllerView.xaml.cs | 9 ++++ .../MediaControllerViewModel.cs | 37 ++++++++++++++++ .../MediaControllerWidgetProvider.cs | 17 ++++++++ .../MediaControllerWidgetView.xaml | 26 ++++++++++++ .../MediaControllerWidgetView.xaml.cs | 8 ++++ .../MediaControllerWidgetViewModel.cs | 12 ++++++ .../MediaInformationView.xaml | 7 ++++ .../MediaInformationView.xaml.cs | 9 ++++ .../Hyperbar.Widget.Primary.csproj | 1 - .../PrimaryWidgetViewModel.cs | 17 +++----- .../{ => Extensions}/WindowExtensions.cs | 0 .../{ => Extensions}/WindowPlacement.cs | 0 .../Hyperbar.Windows.UI.csproj | 1 + .../Templates/DataTemplateConverter.cs | 15 +++++++ .../Templates/TemplateFactory.cs | 2 +- .../Templates/TemplateGenerator.cs | 10 ++--- .../Templates/TemplateGeneratorControl.cs | 6 ++- .../Templates/ValueConverter.cs | 2 +- Hyperbar.Windows/App.xaml | 4 +- Hyperbar.Windows/App.xaml.cs | 22 +++++----- Hyperbar.Windows/Hyperbar.Windows.csproj | 7 ++++ Hyperbar.Windows/Lifecycles/AppInitializer.cs | 4 +- .../IServiceCollectionExtensions.cs | 23 +++++----- .../Templates/DataTemplateConverter.cs | 11 ----- Hyperbar.Windows/Views/CommandView.xaml.cs | 15 ------- Hyperbar.Windows/Views/CommandViewModel.cs | 17 -------- Hyperbar.Windows/Views/WidgetBarView.xaml | 14 +++++++ Hyperbar.Windows/Views/WidgetBarView.xaml.cs | 9 ++++ .../Views/WidgetContainerView.xaml | 14 +++++++ .../Views/WidgetContainerView.xaml.cs | 9 ++++ Hyperbar.Windows/Views/WidgetView.xaml | 4 +- Hyperbar.sln | 20 ++++++++- .../IServiceCollectionExtensions.cs | 2 +- Hyperbar/Mediators/Mediator.cs | 4 +- Hyperbar/Views/IWidgetComponentViewModel.cs | 4 +- Hyperbar/Views/IWidgetView.cs | 4 +- Hyperbar/Views/IWidgetViewModel.cs | 4 +- .../Views/ObservableCollectionViewModel.cs | 4 +- Hyperbar/Views/WidgetBarViewModel.cs | 12 ++++++ Hyperbar/Views/WidgetButtonViewModel.cs | 2 +- ...delBase.cs => WidgetComponentViewModel.cs} | 2 +- Hyperbar/Views/WidgetContainerViewModel.cs | 12 ++++++ 45 files changed, 352 insertions(+), 110 deletions(-) create mode 100644 Hyperbar.Windows.MediaController/Hyperbar.Windows.MediaController.csproj create mode 100644 Hyperbar.Windows.MediaController/MediaController.cs rename Hyperbar.Windows/Views/CommandView.xaml => Hyperbar.Windows.MediaController/MediaControllerView.xaml (71%) create mode 100644 Hyperbar.Windows.MediaController/MediaControllerView.xaml.cs create mode 100644 Hyperbar.Windows.MediaController/MediaControllerViewModel.cs create mode 100644 Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs create mode 100644 Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml create mode 100644 Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml.cs create mode 100644 Hyperbar.Windows.MediaController/MediaControllerWidgetViewModel.cs create mode 100644 Hyperbar.Windows.MediaController/MediaInformationView.xaml create mode 100644 Hyperbar.Windows.MediaController/MediaInformationView.xaml.cs rename Hyperbar.Windows.UI/{ => Extensions}/WindowExtensions.cs (100%) rename Hyperbar.Windows.UI/{ => Extensions}/WindowPlacement.cs (100%) create mode 100644 Hyperbar.Windows.UI/Templates/DataTemplateConverter.cs rename {Hyperbar.Windows => Hyperbar.Windows.UI}/Templates/TemplateFactory.cs (94%) rename {Hyperbar.Windows => Hyperbar.Windows.UI}/Templates/TemplateGenerator.cs (73%) rename {Hyperbar.Windows => Hyperbar.Windows.UI}/Templates/TemplateGeneratorControl.cs (88%) rename {Hyperbar.Windows => Hyperbar.Windows.UI}/Templates/ValueConverter.cs (97%) delete mode 100644 Hyperbar.Windows/Templates/DataTemplateConverter.cs delete mode 100644 Hyperbar.Windows/Views/CommandView.xaml.cs delete mode 100644 Hyperbar.Windows/Views/CommandViewModel.cs create mode 100644 Hyperbar.Windows/Views/WidgetBarView.xaml create mode 100644 Hyperbar.Windows/Views/WidgetBarView.xaml.cs create mode 100644 Hyperbar.Windows/Views/WidgetContainerView.xaml create mode 100644 Hyperbar.Windows/Views/WidgetContainerView.xaml.cs create mode 100644 Hyperbar/Views/WidgetBarViewModel.cs rename Hyperbar/Views/{WidgetComponentViewModelBase.cs => WidgetComponentViewModel.cs} (71%) create mode 100644 Hyperbar/Views/WidgetContainerViewModel.cs diff --git a/Hyperbar.Windows.MediaController/Hyperbar.Windows.MediaController.csproj b/Hyperbar.Windows.MediaController/Hyperbar.Windows.MediaController.csproj new file mode 100644 index 0000000..36a8d9c --- /dev/null +++ b/Hyperbar.Windows.MediaController/Hyperbar.Windows.MediaController.csproj @@ -0,0 +1,42 @@ + + + net8.0-windows10.0.19041.0 + 10.0.17763.0 + win10-x86;win10-x64;win10-arm64 + true + true + enable + enable + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + + + + + MSBuild:Compile + + + + + MSBuild:Compile + + + \ No newline at end of file diff --git a/Hyperbar.Windows.MediaController/MediaController.cs b/Hyperbar.Windows.MediaController/MediaController.cs new file mode 100644 index 0000000..5deeec7 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaController.cs @@ -0,0 +1,10 @@ +namespace Hyperbar.Windows.Primary; + +public class MediaController : + IInitializer +{ + public Task InitializeAsync() + { + throw new NotImplementedException(); + } +} diff --git a/Hyperbar.Windows/Views/CommandView.xaml b/Hyperbar.Windows.MediaController/MediaControllerView.xaml similarity index 71% rename from Hyperbar.Windows/Views/CommandView.xaml rename to Hyperbar.Windows.MediaController/MediaControllerView.xaml index c0a7e1d..f9d3f7f 100644 --- a/Hyperbar.Windows/Views/CommandView.xaml +++ b/Hyperbar.Windows.MediaController/MediaControllerView.xaml @@ -1,14 +1,14 @@ - + xmlns:ui="using:Hyperbar.Windows.UI"> + - \ No newline at end of file + diff --git a/Hyperbar.Windows.MediaController/MediaControllerView.xaml.cs b/Hyperbar.Windows.MediaController/MediaControllerView.xaml.cs new file mode 100644 index 0000000..f89f5d2 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerView.xaml.cs @@ -0,0 +1,9 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Hyperbar.Windows.MediaController; + +public sealed partial class MediaControllerView : + UserControl +{ + public MediaControllerView() => InitializeComponent(); +} diff --git a/Hyperbar.Windows.MediaController/MediaControllerViewModel.cs b/Hyperbar.Windows.MediaController/MediaControllerViewModel.cs new file mode 100644 index 0000000..622d169 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerViewModel.cs @@ -0,0 +1,37 @@ +using CommunityToolkit.Mvvm.ComponentModel; + +namespace Hyperbar.Windows.Primary; + +public partial class MediaInformationViewModel : + WidgetComponentViewModel +{ + [ObservableProperty] + private string title = "this is a test"; + + [ObservableProperty] + private string description = "this is a test description"; + + public MediaInformationViewModel(ITemplateFactory templateFactory) : base(templateFactory) + { + } +} + +public class MediaControllerViewModel : + ObservableCollectionViewModel, + ITemplatedViewModel +{ + public MediaControllerViewModel(ITemplateFactory templateFactory, + IServiceFactory serviceFactory, + IMediator mediator) : base(serviceFactory, mediator) + { + TemplateFactory = templateFactory; + + this.Add(); + this.Add("\uEB9E"); + this.Add("\uE768"); + this.Add("\uE769"); + this.Add("\uEB9D"); + } + + public ITemplateFactory TemplateFactory { get; set; } +} \ No newline at end of file diff --git a/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs b/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs new file mode 100644 index 0000000..fe761f1 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs @@ -0,0 +1,17 @@ +using Hyperbar.Windows.MediaController; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Hyperbar.Windows.Primary; + +public class MediaControllerWidgetProvider : + IWidgetProvider +{ + public void Create(HostBuilderContext comtext, IServiceCollection services) => + services.AddWidgetTemplate() + .AddContentTemplate() + .AddContentTemplate() + .AddContentTemplate() + .AddContentTemplate(); + +} \ No newline at end of file diff --git a/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml b/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml new file mode 100644 index 0000000..f606297 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml.cs b/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml.cs new file mode 100644 index 0000000..709e11f --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerWidgetView.xaml.cs @@ -0,0 +1,8 @@ +using Microsoft.UI.Xaml.Controls; +namespace Hyperbar.Windows.MediaController; + +public sealed partial class MediaControllerWidgetView : + UserControl +{ + public MediaControllerWidgetView() => InitializeComponent(); +} diff --git a/Hyperbar.Windows.MediaController/MediaControllerWidgetViewModel.cs b/Hyperbar.Windows.MediaController/MediaControllerWidgetViewModel.cs new file mode 100644 index 0000000..dd53641 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerWidgetViewModel.cs @@ -0,0 +1,12 @@ +namespace Hyperbar.Windows.Primary; + +public class MediaControllerWidgetViewModel(ITemplateFactory templateFactory, + IServiceFactory serviceFactory, + IMediator mediator, + IEnumerable items) : + ObservableCollectionViewModel(serviceFactory, mediator, items), + IWidgetViewModel, + ITemplatedViewModel +{ + public ITemplateFactory TemplateFactory => templateFactory; +} \ No newline at end of file diff --git a/Hyperbar.Windows.MediaController/MediaInformationView.xaml b/Hyperbar.Windows.MediaController/MediaInformationView.xaml new file mode 100644 index 0000000..798e5dd --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaInformationView.xaml @@ -0,0 +1,7 @@ + + + + diff --git a/Hyperbar.Windows.MediaController/MediaInformationView.xaml.cs b/Hyperbar.Windows.MediaController/MediaInformationView.xaml.cs new file mode 100644 index 0000000..b66b612 --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaInformationView.xaml.cs @@ -0,0 +1,9 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Hyperbar.Windows.MediaController; + +public sealed partial class MediaInformationView : + UserControl +{ + public MediaInformationView() => InitializeComponent(); +} diff --git a/Hyperbar.Windows.Primary/Hyperbar.Widget.Primary.csproj b/Hyperbar.Windows.Primary/Hyperbar.Widget.Primary.csproj index f3e9e72..4a8f052 100644 --- a/Hyperbar.Windows.Primary/Hyperbar.Widget.Primary.csproj +++ b/Hyperbar.Windows.Primary/Hyperbar.Widget.Primary.csproj @@ -7,7 +7,6 @@ - diff --git a/Hyperbar.Windows.Primary/PrimaryWidgetViewModel.cs b/Hyperbar.Windows.Primary/PrimaryWidgetViewModel.cs index f013476..42e89c9 100644 --- a/Hyperbar.Windows.Primary/PrimaryWidgetViewModel.cs +++ b/Hyperbar.Windows.Primary/PrimaryWidgetViewModel.cs @@ -1,18 +1,13 @@  namespace Hyperbar.Windows.Primary; -public class PrimaryWidgetViewModel : - ObservableCollectionViewModel, +public class PrimaryWidgetViewModel(ITemplateFactory templateFactory, + IServiceFactory serviceFactory, + IMediator mediator, + IEnumerable items) : + ObservableCollectionViewModel(serviceFactory, mediator, items), IWidgetViewModel, ITemplatedViewModel { - public PrimaryWidgetViewModel(ITemplateFactory templateFactory, - IServiceFactory serviceFactory, - IMediator mediator, - IEnumerable items) : base(serviceFactory, mediator, items) - { - TemplateFactory = templateFactory; - } - - public ITemplateFactory TemplateFactory { get; } + public ITemplateFactory TemplateFactory => templateFactory; } \ No newline at end of file diff --git a/Hyperbar.Windows.UI/WindowExtensions.cs b/Hyperbar.Windows.UI/Extensions/WindowExtensions.cs similarity index 100% rename from Hyperbar.Windows.UI/WindowExtensions.cs rename to Hyperbar.Windows.UI/Extensions/WindowExtensions.cs diff --git a/Hyperbar.Windows.UI/WindowPlacement.cs b/Hyperbar.Windows.UI/Extensions/WindowPlacement.cs similarity index 100% rename from Hyperbar.Windows.UI/WindowPlacement.cs rename to Hyperbar.Windows.UI/Extensions/WindowPlacement.cs diff --git a/Hyperbar.Windows.UI/Hyperbar.Windows.UI.csproj b/Hyperbar.Windows.UI/Hyperbar.Windows.UI.csproj index f1444b8..ad3d34f 100644 --- a/Hyperbar.Windows.UI/Hyperbar.Windows.UI.csproj +++ b/Hyperbar.Windows.UI/Hyperbar.Windows.UI.csproj @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/Hyperbar.Windows.UI/Templates/DataTemplateConverter.cs b/Hyperbar.Windows.UI/Templates/DataTemplateConverter.cs new file mode 100644 index 0000000..6c4a4cb --- /dev/null +++ b/Hyperbar.Windows.UI/Templates/DataTemplateConverter.cs @@ -0,0 +1,15 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Hyperbar.Windows.UI; + +public class DataTemplateConverter : + ValueConverter +{ + protected override DataTemplateSelector? ConvertTo(object value, + Type? targetType, + object? parameter, + string? language) + { + return new TemplateGenerator(); + } +} diff --git a/Hyperbar.Windows/Templates/TemplateFactory.cs b/Hyperbar.Windows.UI/Templates/TemplateFactory.cs similarity index 94% rename from Hyperbar.Windows/Templates/TemplateFactory.cs rename to Hyperbar.Windows.UI/Templates/TemplateFactory.cs index ca5374e..750e7ad 100644 --- a/Hyperbar.Windows/Templates/TemplateFactory.cs +++ b/Hyperbar.Windows.UI/Templates/TemplateFactory.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.DependencyInjection; -namespace Hyperbar.Windows; +namespace Hyperbar.Windows.UI; public class TemplateFactory(IEnumerable descriptors, IServiceProvider provider) : diff --git a/Hyperbar.Windows/Templates/TemplateGenerator.cs b/Hyperbar.Windows.UI/Templates/TemplateGenerator.cs similarity index 73% rename from Hyperbar.Windows/Templates/TemplateGenerator.cs rename to Hyperbar.Windows.UI/Templates/TemplateGenerator.cs index 4e9e18a..e1055e2 100644 --- a/Hyperbar.Windows/Templates/TemplateGenerator.cs +++ b/Hyperbar.Windows.UI/Templates/TemplateGenerator.cs @@ -2,7 +2,7 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Markup; -namespace Hyperbar.Windows; +namespace Hyperbar.Windows.UI; public class TemplateGenerator : DataTemplateSelector { @@ -10,8 +10,8 @@ public class TemplateGenerator : DataTemplateSelector { string xamlString = @" - + xmlns:ui='using:Hyperbar.Windows.UI'> + "; return (DataTemplate)XamlReader.Load(xamlString); @@ -21,8 +21,8 @@ public class TemplateGenerator : DataTemplateSelector { string xamlString = @" - + xmlns:ui='using:Hyperbar.Windows.UI'> + "; return (DataTemplate)XamlReader.Load(xamlString); diff --git a/Hyperbar.Windows/Templates/TemplateGeneratorControl.cs b/Hyperbar.Windows.UI/Templates/TemplateGeneratorControl.cs similarity index 88% rename from Hyperbar.Windows/Templates/TemplateGeneratorControl.cs rename to Hyperbar.Windows.UI/Templates/TemplateGeneratorControl.cs index f74c3f8..999e6f3 100644 --- a/Hyperbar.Windows/Templates/TemplateGeneratorControl.cs +++ b/Hyperbar.Windows.UI/Templates/TemplateGeneratorControl.cs @@ -1,7 +1,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -namespace Hyperbar.Windows; +namespace Hyperbar.Windows.UI; public class TemplateGeneratorControl : ContentControl @@ -17,5 +17,9 @@ public class TemplateGeneratorControl : { Content = templatedViewModel.TemplateFactory.Create(DataContext.GetType().Name); } + else + { + + } } } \ No newline at end of file diff --git a/Hyperbar.Windows/Templates/ValueConverter.cs b/Hyperbar.Windows.UI/Templates/ValueConverter.cs similarity index 97% rename from Hyperbar.Windows/Templates/ValueConverter.cs rename to Hyperbar.Windows.UI/Templates/ValueConverter.cs index 26513b5..b89f2db 100644 --- a/Hyperbar.Windows/Templates/ValueConverter.cs +++ b/Hyperbar.Windows.UI/Templates/ValueConverter.cs @@ -2,7 +2,7 @@ using Microsoft.UI.Xaml.Data; using Microsoft.UI.Xaml.Markup; -namespace Hyperbar.Windows; +namespace Hyperbar.Windows.UI; public abstract class ValueConverter : MarkupExtension, diff --git a/Hyperbar.Windows/App.xaml b/Hyperbar.Windows/App.xaml index 1c186ec..cf84fd3 100644 --- a/Hyperbar.Windows/App.xaml +++ b/Hyperbar.Windows/App.xaml @@ -3,14 +3,14 @@ x:Class="Hyperbar.Windows.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:desktop="using:Hyperbar.Windows"> + xmlns:ui="using:Hyperbar.Windows.UI"> - + diff --git a/Hyperbar.Windows/App.xaml.cs b/Hyperbar.Windows/App.xaml.cs index 74ad81c..f3db736 100644 --- a/Hyperbar.Windows/App.xaml.cs +++ b/Hyperbar.Windows/App.xaml.cs @@ -1,13 +1,11 @@ -using Hyperbar.Widget.Contextual; -using Hyperbar.Windows.Controls; +using Hyperbar.Windows.Controls; using Hyperbar.Windows.Primary; +using Hyperbar.Windows.UI; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Options; using Microsoft.UI.Dispatching; using Microsoft.UI.Xaml; -using System.Text.Json; namespace Hyperbar.Windows; @@ -17,7 +15,7 @@ public partial class App : public App() => InitializeComponent(); protected override async void OnLaunched(LaunchActivatedEventArgs args) - { + { base.OnLaunched(args); DispatcherQueueSynchronizationContext context = new(DispatcherQueue.GetForCurrentThread()); @@ -44,21 +42,23 @@ public partial class App : services.AddTransient(); services.AddTransient(); - services.AddContentTemplate(); - // services.AddWidgetProvider(); + services.AddContentTemplate(); + + services.AddWidgetProvider(); services.AddWidgetProvider(); services.AddTransient(provider => { - static IEnumerable Resolve(IServiceProvider services) + static IEnumerable Resolve(IServiceProvider services) { foreach (IWidgetContext widgetContext in services.GetServices()) { - if (widgetContext.ServiceProvider.GetService() is - IWidgetViewModel viewModel) + if (widgetContext.ServiceProvider.GetServices() is + IEnumerable viewModels) { - yield return viewModel; + yield return (WidgetContainerViewModel)ActivatorUtilities.CreateInstance(widgetContext.ServiceProvider, + typeof(WidgetContainerViewModel), viewModels); } } } diff --git a/Hyperbar.Windows/Hyperbar.Windows.csproj b/Hyperbar.Windows/Hyperbar.Windows.csproj index 9ef5006..8134743 100644 --- a/Hyperbar.Windows/Hyperbar.Windows.csproj +++ b/Hyperbar.Windows/Hyperbar.Windows.csproj @@ -15,6 +15,7 @@ + @@ -38,10 +39,16 @@ + + + + MSBuild:Compile + + MSBuild:Compile diff --git a/Hyperbar.Windows/Lifecycles/AppInitializer.cs b/Hyperbar.Windows/Lifecycles/AppInitializer.cs index 9df79ff..5236278 100644 --- a/Hyperbar.Windows/Lifecycles/AppInitializer.cs +++ b/Hyperbar.Windows/Lifecycles/AppInitializer.cs @@ -3,8 +3,8 @@ using Microsoft.Extensions.DependencyInjection; namespace Hyperbar.Windows; -public class AppInitializer([FromKeyedServices(nameof(CommandViewModel))] CommandView view, - [FromKeyedServices(nameof(CommandViewModel))] CommandViewModel viewModel, +public class AppInitializer([FromKeyedServices(nameof(WidgetBarViewModel))] WidgetBarView view, + [FromKeyedServices(nameof(WidgetBarViewModel))] WidgetBarViewModel viewModel, DesktopFlyout desktopFlyout) : IInitializer { diff --git a/Hyperbar.Windows/Lifecycles/IServiceCollectionExtensions.cs b/Hyperbar.Windows/Lifecycles/IServiceCollectionExtensions.cs index d6e5f63..55014a5 100644 --- a/Hyperbar.Windows/Lifecycles/IServiceCollectionExtensions.cs +++ b/Hyperbar.Windows/Lifecycles/IServiceCollectionExtensions.cs @@ -1,5 +1,5 @@ using Hyperbar.Windows.Interop; -using Hyperbar.Windows.Primary; +using Hyperbar.Windows.UI; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -28,20 +28,23 @@ namespace Hyperbar.Windows }) .ConfigureServices((context, isolatedServices) => { - isolatedServices.AddHostedService(); - isolatedServices.AddSingleton(provider => new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!))); - - isolatedServices.AddSingleton(); - isolatedServices.AddSingleton(); - isolatedServices.AddHandler(); - isolatedServices.AddHandler(); - isolatedServices.AddTransient(); - isolatedServices.AddContentTemplate(); + isolatedServices.AddHostedService(); isolatedServices.AddTransient(); + isolatedServices.AddSingleton(); + + isolatedServices.AddSingleton(); + + isolatedServices.AddHandler(); + isolatedServices.AddHandler(); + + isolatedServices.AddTransient(); + + isolatedServices.AddContentTemplate(); + isolatedServices.AddContentTemplate(); builder.Create(context, isolatedServices); diff --git a/Hyperbar.Windows/Templates/DataTemplateConverter.cs b/Hyperbar.Windows/Templates/DataTemplateConverter.cs deleted file mode 100644 index 0c365d7..0000000 --- a/Hyperbar.Windows/Templates/DataTemplateConverter.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Microsoft.UI.Xaml.Controls; - -namespace Hyperbar.Windows; - -public class DataTemplateConverter : ValueConverter -{ - protected override DataTemplateSelector? ConvertTo(object value, Type? targetType, object? parameter, string? language) - { - return new TemplateGenerator(); - } -} diff --git a/Hyperbar.Windows/Views/CommandView.xaml.cs b/Hyperbar.Windows/Views/CommandView.xaml.cs deleted file mode 100644 index 35b6abc..0000000 --- a/Hyperbar.Windows/Views/CommandView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Input; - -namespace Hyperbar.Windows; - -public sealed partial class CommandView : - UserControl -{ - public CommandView() => InitializeComponent(); - - protected override void OnKeyDown(KeyRoutedEventArgs e) - { - base.OnKeyDown(e); - } -} \ No newline at end of file diff --git a/Hyperbar.Windows/Views/CommandViewModel.cs b/Hyperbar.Windows/Views/CommandViewModel.cs deleted file mode 100644 index 204c2ba..0000000 --- a/Hyperbar.Windows/Views/CommandViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ - -namespace Hyperbar.Windows; - -public partial class CommandViewModel : - ObservableCollectionViewModel, - ITemplatedViewModel -{ - public CommandViewModel(ITemplateFactory templateFactory, - IServiceFactory serviceFactory, - IMediator mediator, - IEnumerable items) : base(serviceFactory, mediator, items) - { - TemplateFactory = templateFactory; - } - - public ITemplateFactory TemplateFactory { get; } -} \ No newline at end of file diff --git a/Hyperbar.Windows/Views/WidgetBarView.xaml b/Hyperbar.Windows/Views/WidgetBarView.xaml new file mode 100644 index 0000000..0f8dc04 --- /dev/null +++ b/Hyperbar.Windows/Views/WidgetBarView.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Hyperbar.Windows/Views/WidgetBarView.xaml.cs b/Hyperbar.Windows/Views/WidgetBarView.xaml.cs new file mode 100644 index 0000000..8126f50 --- /dev/null +++ b/Hyperbar.Windows/Views/WidgetBarView.xaml.cs @@ -0,0 +1,9 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Hyperbar.Windows; + +public sealed partial class WidgetBarView : + UserControl +{ + public WidgetBarView() => InitializeComponent(); +} \ No newline at end of file diff --git a/Hyperbar.Windows/Views/WidgetContainerView.xaml b/Hyperbar.Windows/Views/WidgetContainerView.xaml new file mode 100644 index 0000000..2723fad --- /dev/null +++ b/Hyperbar.Windows/Views/WidgetContainerView.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/Hyperbar.Windows/Views/WidgetContainerView.xaml.cs b/Hyperbar.Windows/Views/WidgetContainerView.xaml.cs new file mode 100644 index 0000000..76e8c51 --- /dev/null +++ b/Hyperbar.Windows/Views/WidgetContainerView.xaml.cs @@ -0,0 +1,9 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Hyperbar.Windows; + +public sealed partial class WidgetContainerView : + UserControl +{ + public WidgetContainerView() => InitializeComponent(); +} diff --git a/Hyperbar.Windows/Views/WidgetView.xaml b/Hyperbar.Windows/Views/WidgetView.xaml index 50d8e68..a1d793c 100644 --- a/Hyperbar.Windows/Views/WidgetView.xaml +++ b/Hyperbar.Windows/Views/WidgetView.xaml @@ -3,8 +3,8 @@ x:Class="Hyperbar.Windows.WidgetView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:windows="using:Hyperbar.Windows"> - + xmlns:ui="using:Hyperbar.Windows.UI"> + diff --git a/Hyperbar.sln b/Hyperbar.sln index a712ab4..db6b6b0 100644 --- a/Hyperbar.sln +++ b/Hyperbar.sln @@ -15,7 +15,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyperbar.Widget.Primary", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyperbar.Windows.UI", "Hyperbar.Windows.UI\Hyperbar.Windows.UI.csproj", "{ED489968-89A5-42B5-9FC3-20DCF5D78A5E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hyperbar.Windows.Interop", "Hyperbar.Windows.Interop\Hyperbar.Windows.Interop.csproj", "{7263FB8C-4007-4581-8AD7-DCAB2AD7C444}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyperbar.Windows.Interop", "Hyperbar.Windows.Interop\Hyperbar.Windows.Interop.csproj", "{7263FB8C-4007-4581-8AD7-DCAB2AD7C444}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hyperbar.Windows.MediaController", "Hyperbar.Windows.MediaController\Hyperbar.Windows.MediaController.csproj", "{88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -149,6 +151,22 @@ Global {7263FB8C-4007-4581-8AD7-DCAB2AD7C444}.Release|x64.Build.0 = Release|Any CPU {7263FB8C-4007-4581-8AD7-DCAB2AD7C444}.Release|x86.ActiveCfg = Release|Any CPU {7263FB8C-4007-4581-8AD7-DCAB2AD7C444}.Release|x86.Build.0 = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|ARM64.Build.0 = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|x64.ActiveCfg = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|x64.Build.0 = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Debug|x86.Build.0 = Debug|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|Any CPU.Build.0 = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|ARM64.ActiveCfg = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|ARM64.Build.0 = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|x64.ActiveCfg = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|x64.Build.0 = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|x86.ActiveCfg = Release|Any CPU + {88C3EC90-C48C-47B9-89A8-740EFFFE5AAD}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Hyperbar/Extensions/IServiceCollectionExtensions.cs b/Hyperbar/Extensions/IServiceCollectionExtensions.cs index 653f4d3..f382a8f 100644 --- a/Hyperbar/Extensions/IServiceCollectionExtensions.cs +++ b/Hyperbar/Extensions/IServiceCollectionExtensions.cs @@ -96,7 +96,7 @@ public static class IServiceCollectionExtensions key ??= contentType.Name; services.AddTransient(contentType); - services.TryAddTransient(templateType); + services.AddTransient(templateType); services.AddKeyedTransient(contentType, key); services.AddKeyedTransient(templateType, key); diff --git a/Hyperbar/Mediators/Mediator.cs b/Hyperbar/Mediators/Mediator.cs index f11d20a..3a29aeb 100644 --- a/Hyperbar/Mediators/Mediator.cs +++ b/Hyperbar/Mediators/Mediator.cs @@ -6,7 +6,7 @@ namespace Hyperbar; public class Mediator(IServiceProvider provider) : IMediator { - private readonly ConditionalWeakTable addedHandlers = []; + private readonly List> addedHandlers = []; public ValueTask PublishAsync(TNotification notification, CancellationToken cancellationToken = default) @@ -78,7 +78,7 @@ public class Mediator(IServiceProvider provider) : if (interfaceType.GetGenericArguments() is { Length: 1 } arguments) { Type notificationType = arguments[0]; - addedHandlers.Add(notificationType, subject); + addedHandlers.Add(new KeyValuePair(notificationType, subject)); } } } diff --git a/Hyperbar/Views/IWidgetComponentViewModel.cs b/Hyperbar/Views/IWidgetComponentViewModel.cs index 5192f6c..cdba8b4 100644 --- a/Hyperbar/Views/IWidgetComponentViewModel.cs +++ b/Hyperbar/Views/IWidgetComponentViewModel.cs @@ -1,5 +1,3 @@ namespace Hyperbar; -public interface IWidgetComponentViewModel -{ -} \ No newline at end of file +public interface IWidgetComponentViewModel; \ No newline at end of file diff --git a/Hyperbar/Views/IWidgetView.cs b/Hyperbar/Views/IWidgetView.cs index 17e5081..ab21bb5 100644 --- a/Hyperbar/Views/IWidgetView.cs +++ b/Hyperbar/Views/IWidgetView.cs @@ -1,5 +1,3 @@ namespace Hyperbar; -public interface IWidgetView -{ -} \ No newline at end of file +public interface IWidgetView; \ No newline at end of file diff --git a/Hyperbar/Views/IWidgetViewModel.cs b/Hyperbar/Views/IWidgetViewModel.cs index 0028736..f877417 100644 --- a/Hyperbar/Views/IWidgetViewModel.cs +++ b/Hyperbar/Views/IWidgetViewModel.cs @@ -1,5 +1,3 @@ namespace Hyperbar; -public interface IWidgetViewModel -{ -} \ No newline at end of file +public interface IWidgetViewModel; \ No newline at end of file diff --git a/Hyperbar/Views/ObservableCollectionViewModel.cs b/Hyperbar/Views/ObservableCollectionViewModel.cs index 9ff237e..9b9c599 100644 --- a/Hyperbar/Views/ObservableCollectionViewModel.cs +++ b/Hyperbar/Views/ObservableCollectionViewModel.cs @@ -2,12 +2,14 @@ namespace Hyperbar; + public class ObservableCollectionViewModel : ObservableCollection, INotificationHandler>> { private readonly IServiceFactory serviceFactory; - private SynchronizationContext? context; + private readonly SynchronizationContext? context; + public ObservableCollectionViewModel(IServiceFactory serviceFactory, IMediator mediator) { diff --git a/Hyperbar/Views/WidgetBarViewModel.cs b/Hyperbar/Views/WidgetBarViewModel.cs new file mode 100644 index 0000000..0c09499 --- /dev/null +++ b/Hyperbar/Views/WidgetBarViewModel.cs @@ -0,0 +1,12 @@ + +namespace Hyperbar; + +public partial class WidgetBarViewModel(ITemplateFactory templateFactory, + IServiceFactory serviceFactory, + IMediator mediator, + IEnumerable items) : + ObservableCollectionViewModel(serviceFactory, mediator, items), + ITemplatedViewModel +{ + public ITemplateFactory TemplateFactory => templateFactory; +} diff --git a/Hyperbar/Views/WidgetButtonViewModel.cs b/Hyperbar/Views/WidgetButtonViewModel.cs index 3fa76d0..b2d8dc6 100644 --- a/Hyperbar/Views/WidgetButtonViewModel.cs +++ b/Hyperbar/Views/WidgetButtonViewModel.cs @@ -4,7 +4,7 @@ using CommunityToolkit.Mvvm.Input; namespace Hyperbar; public partial class WidgetButtonViewModel : - WidgetComponentViewModelBase + WidgetComponentViewModel { [ObservableProperty] private string? icon; diff --git a/Hyperbar/Views/WidgetComponentViewModelBase.cs b/Hyperbar/Views/WidgetComponentViewModel.cs similarity index 71% rename from Hyperbar/Views/WidgetComponentViewModelBase.cs rename to Hyperbar/Views/WidgetComponentViewModel.cs index c175285..39dc706 100644 --- a/Hyperbar/Views/WidgetComponentViewModelBase.cs +++ b/Hyperbar/Views/WidgetComponentViewModel.cs @@ -2,7 +2,7 @@ namespace Hyperbar; -public partial class WidgetComponentViewModelBase(ITemplateFactory templateFactory) : +public partial class WidgetComponentViewModel(ITemplateFactory templateFactory) : ObservableObject, IWidgetComponentViewModel, ITemplatedViewModel diff --git a/Hyperbar/Views/WidgetContainerViewModel.cs b/Hyperbar/Views/WidgetContainerViewModel.cs new file mode 100644 index 0000000..83196e0 --- /dev/null +++ b/Hyperbar/Views/WidgetContainerViewModel.cs @@ -0,0 +1,12 @@ + +namespace Hyperbar; + +public class WidgetContainerViewModel(ITemplateFactory templateFactory, + IServiceFactory serviceFactory, + IMediator mediator, + IEnumerable items) : + ObservableCollectionViewModel(serviceFactory, mediator, items), + ITemplatedViewModel +{ + public ITemplateFactory TemplateFactory => templateFactory; +} \ No newline at end of file