wip..
This commit is contained in:
@@ -8,9 +8,9 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Remove="WidgetConfigurationNavigationView.xaml" />
|
||||
<None Remove="WidgetConfigurationView.xaml" />
|
||||
<None Remove="WidgetNavigationView.xaml" />
|
||||
<None Remove="WidgetSettingsNavigationView.xaml" />
|
||||
<None Remove="WidgetSettingsView.xaml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240124002-experimental2" />
|
||||
@@ -24,7 +24,7 @@
|
||||
<ProjectReference Include="..\Hyperbar\Hyperbar.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Update="WidgetSettingsNavigationView.xaml">
|
||||
<Page Update="WidgetConfigurationNavigationView.xaml">
|
||||
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
@@ -32,7 +32,7 @@
|
||||
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Update="WidgetSettingsView.xaml">
|
||||
<Page Update="WidgetConfigurationView.xaml">
|
||||
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
|
||||
@@ -36,8 +36,8 @@ public static class IServiceCollectionExtensions
|
||||
services.AddContentTemplate<WidgetButtonViewModel, WidgetButtonView>();
|
||||
services.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
|
||||
|
||||
services.AddContentTemplate<WidgetSettingsNavigationViewModel, WidgetSettingsNavigationView>();
|
||||
services.AddContentTemplate<WidgetSettingsViewModel, WidgetSettingsView>("WidgetSettings");
|
||||
services.AddContentTemplate<WidgetConfigurationNavigationViewModel, WidgetConfigurationNavigationView>();
|
||||
services.AddContentTemplate<WidgetConfigurationViewModel, WidgetConfigurationView>("WidgetSettings");
|
||||
})));
|
||||
|
||||
return services;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<NavigationViewItem
|
||||
x:Class="Hyperbar.Widget.Windows.WidgetSettingsNavigationView"
|
||||
x:Class="Hyperbar.Widget.Windows.WidgetConfigurationNavigationView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:interactions="using:Microsoft.Xaml.Interactions.Core"
|
||||
+2
-2
@@ -2,9 +2,9 @@ using Microsoft.UI.Xaml.Controls;
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public sealed partial class WidgetSettingsNavigationView :
|
||||
public sealed partial class WidgetConfigurationNavigationView :
|
||||
NavigationViewItem
|
||||
{
|
||||
public WidgetSettingsNavigationView() =>
|
||||
public WidgetConfigurationNavigationView() =>
|
||||
InitializeComponent();
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public class WidgetSettingsNavigationViewModel(IServiceProvider serviceProvider,
|
||||
public class WidgetConfigurationNavigationViewModel(IServiceProvider serviceProvider,
|
||||
IServiceFactory serviceFactory,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
+5
-5
@@ -2,19 +2,19 @@
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public class WidgetSettingsNavigationViewModelEnumerator(IPublisher publisher,
|
||||
public class WidgetConfigurationNavigationViewModelEnumerator(IPublisher publisher,
|
||||
IWidgetHostCollection widgetHosts) :
|
||||
INotificationHandler<Enumerate<WidgetSettingsNavigationViewModel>>
|
||||
INotificationHandler<Enumerate<WidgetConfigurationNavigationViewModel>>
|
||||
{
|
||||
public async Task Handle(Enumerate<WidgetSettingsNavigationViewModel> args,
|
||||
public async Task Handle(Enumerate<WidgetConfigurationNavigationViewModel> args,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
foreach (IWidgetHost host in widgetHosts)
|
||||
{
|
||||
if (host.Services.GetService<IServiceFactory>() is IServiceFactory serviceFactory)
|
||||
{
|
||||
await publisher.PublishAsync(new Create<WidgetSettingsNavigationViewModel>(serviceFactory
|
||||
.Create<WidgetSettingsNavigationViewModel>(host.Configuration.Name)),
|
||||
await publisher.PublishAsync(new Create<WidgetConfigurationNavigationViewModel>(serviceFactory
|
||||
.Create<WidgetConfigurationNavigationViewModel>(host.Configuration.Name)),
|
||||
nameof(WidgetNavigationViewModel), cancellationToken);
|
||||
}
|
||||
}
|
||||
+2
-4
@@ -1,9 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<UserControl
|
||||
x:Class="Hyperbar.Widget.Windows.WidgetSettingsView"
|
||||
x:Class="Hyperbar.Widget.Windows.WidgetConfigurationView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid>
|
||||
<Button>Test</Button>
|
||||
</Grid>
|
||||
<ListBox ItemsSource="{Binding Mode=TwoWay}" />
|
||||
</UserControl>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public partial class WidgetConfigurationView : UserControl
|
||||
{
|
||||
public WidgetConfigurationView() =>
|
||||
InitializeComponent();
|
||||
|
||||
protected WidgetConfigurationViewModel ViewModel =>
|
||||
(WidgetConfigurationViewModel)DataContext;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using Hyperbar.UI.Windows;
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public class WidgetConfigurationViewModel<TConfiguration, TValue> :
|
||||
ValueViewModel<TValue>,
|
||||
INotificationHandler<Changed<TConfiguration>>
|
||||
where TConfiguration :
|
||||
class
|
||||
{
|
||||
private readonly Func<TConfiguration, TValue> valueFactory;
|
||||
|
||||
public WidgetConfigurationViewModel(IServiceProvider serviceProvider,
|
||||
IServiceFactory serviceFactory,
|
||||
IPublisher publisher,
|
||||
IDisposer disposer,
|
||||
Func<TConfiguration, TValue> valueFactory) : base(serviceProvider, serviceFactory, publisher, disposer)
|
||||
{
|
||||
this.valueFactory = valueFactory;
|
||||
}
|
||||
|
||||
public Task Handle(Changed<TConfiguration> args,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (args.Value is TConfiguration configuration)
|
||||
{
|
||||
valueFactory.Invoke(configuration);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public class WidgetConfigurationViewModel :
|
||||
ObservableCollectionViewModel<IObservableViewModel>
|
||||
{
|
||||
public WidgetConfigurationViewModel(IViewModelTemplateSelector viewModelTemplateSelector,
|
||||
IServiceProvider serviceProvider,
|
||||
IServiceFactory serviceFactory,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
|
||||
{
|
||||
ViewModelTemplateSelector = viewModelTemplateSelector;
|
||||
|
||||
Add<WidgetConfigurationViewModel<WidgetAvailability,
|
||||
bool>>((Func<WidgetAvailability, bool>)(config => config.Value));
|
||||
}
|
||||
|
||||
public IViewModelTemplateSelector ViewModelTemplateSelector { get; }
|
||||
}
|
||||
@@ -10,7 +10,7 @@ public class WidgetNavigationViewModel(IViewModelTemplateSelector viewModelTempl
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer,
|
||||
string text) :
|
||||
NavigationViewModel<WidgetSettingsNavigationViewModel>(serviceProvider, serviceFactory, publisher, subscriber, disposer, text)
|
||||
NavigationViewModel<WidgetConfigurationNavigationViewModel>(serviceProvider, serviceFactory, publisher, subscriber, disposer, text)
|
||||
{
|
||||
public IViewModelTemplateSelector ViewModelTemplateSelector => viewModelTemplateSelector;
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public partial class WidgetSettingsView : UserControl
|
||||
{
|
||||
public WidgetSettingsView() =>
|
||||
InitializeComponent();
|
||||
|
||||
protected WidgetSettingsViewModel ViewModel =>
|
||||
(WidgetSettingsViewModel)DataContext;
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using Hyperbar.UI.Windows;
|
||||
|
||||
namespace Hyperbar.Widget.Windows;
|
||||
|
||||
public class WidgetSettingsViewModel(IViewModelTemplateSelector viewModelTemplateSelector,
|
||||
IServiceProvider serviceProvider,
|
||||
IServiceFactory serviceFactory,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer) :
|
||||
ObservableCollectionViewModel<IObservableViewModel>(serviceProvider, serviceFactory, publisher, subscriber, disposer)
|
||||
{
|
||||
public IViewModelTemplateSelector ViewModelTemplateSelector => viewModelTemplateSelector;
|
||||
}
|
||||
@@ -5,23 +5,21 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:interactions="using:Microsoft.Xaml.Interactions.Core"
|
||||
xmlns:interactivity="using:Microsoft.Xaml.Interactivity">
|
||||
<Grid>
|
||||
<ItemsControl ItemTemplateSelector="{Binding ViewModelTemplateSelector}" ItemsSource="{Binding Mode=TwoWay}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemContainerTransitions>
|
||||
<TransitionCollection>
|
||||
<AddDeleteThemeTransition />
|
||||
</TransitionCollection>
|
||||
</ItemsControl.ItemContainerTransitions>
|
||||
<interactivity:Interaction.Behaviors>
|
||||
<interactions:EventTriggerBehavior EventName="Loaded">
|
||||
<interactions:InvokeCommandAction Command="{Binding InitializeCommand}" />
|
||||
</interactions:EventTriggerBehavior>
|
||||
</interactivity:Interaction.Behaviors>
|
||||
</ItemsControl>
|
||||
</Grid>
|
||||
<ItemsControl ItemTemplateSelector="{Binding ViewModelTemplateSelector}" ItemsSource="{Binding Mode=TwoWay}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemContainerTransitions>
|
||||
<TransitionCollection>
|
||||
<AddDeleteThemeTransition />
|
||||
</TransitionCollection>
|
||||
</ItemsControl.ItemContainerTransitions>
|
||||
<interactivity:Interaction.Behaviors>
|
||||
<interactions:EventTriggerBehavior EventName="Loaded">
|
||||
<interactions:InvokeCommandAction Command="{Binding InitializeCommand}" />
|
||||
</interactions:EventTriggerBehavior>
|
||||
</interactivity:Interaction.Behaviors>
|
||||
</ItemsControl>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user