More work

This commit is contained in:
TheXamlGuy
2024-02-04 14:08:38 +00:00
parent be3fe89387
commit 731cf3cdf3
34 changed files with 381 additions and 177 deletions
+6 -2
View File
@@ -43,11 +43,15 @@ public partial class App :
services.AddHandler<AppConfigurationChangedHandler>();
services.AddConfiguration<AppConfiguration>(args =>
{
args.Placement = DesktopBarPlacemenet.Top;
args.Placement = DesktopApplicationBarPlacemenet.Top;
});
services.AddSingleton<DesktopApplicationBar>();
services.AddContentTemplate<ApplicationBarViewModel, ApplicationBarView>();
services.AddContentTemplate<PrimaryViewModel, PrimaryView>();
services.AddContentTemplate<SecondaryViewModel, SecondaryView>();
services.AddTransient<IInitializer, AppInitializer>();
services.AddSingleton<DesktopBar>();
})
.Build();
@@ -4,5 +4,5 @@ namespace Hyperbar.Windows;
public class AppConfiguration
{
public DesktopBarPlacemenet Placement { get; set; }
public DesktopApplicationBarPlacemenet Placement { get; set; }
}
@@ -1,13 +1,12 @@
using Hyperbar.Controls.Windows;
using Hyperbar.Widget;
using Hyperbar.Widget.Windows;
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar.Windows;
public class AppInitializer([FromKeyedServices(nameof(WidgetViewModel))] WidgetBarView view,
[FromKeyedServices(nameof(WidgetViewModel))] WidgetViewModel viewModel,
DesktopBar desktopFlyout,
public class AppInitializer([FromKeyedServices(nameof(ApplicationBarViewModel))] ApplicationBarView view,
[FromKeyedServices(nameof(ApplicationBarViewModel))] ApplicationBarViewModel viewModel,
DesktopApplicationBar desktopFlyout,
AppConfiguration configuration) :
IInitializer
{
+29
View File
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<UserControl
x:Class="Hyperbar.Windows.ApplicationBarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:windows="using:Hyperbar.UI.Windows">
<ItemsControl ItemTemplateSelector="{Binding Converter={windows:DataTemplateConverter}}" ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="400" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<AddDeleteThemeTransition />
</TransitionCollection>
</ItemsControl.ItemContainerTransitions>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="windows:GridExtension.GridColumnBindingPath" Value="Index" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</UserControl>
@@ -0,0 +1,9 @@
using Microsoft.UI.Xaml.Controls;
namespace Hyperbar.Windows;
public sealed partial class ApplicationBarView :
UserControl
{
public ApplicationBarView() => InitializeComponent();
}
@@ -0,0 +1,20 @@
namespace Hyperbar.Widget;
[NotificationHandler(nameof(IWidgetHostViewModel))]
public partial class ApplicationBarViewModel :
ObservableCollectionViewModel<IDisposable>,
ITemplatedViewModel
{
public ApplicationBarViewModel(ITemplateFactory templateFactory,
IServiceFactory serviceFactory,
IMediator mediator,
IDisposer disposer) : base(serviceFactory, mediator, disposer)
{
TemplateFactory = templateFactory;
Add<PrimaryViewModel>(0);
Add<SecondaryViewModel>(1);
}
public ITemplateFactory TemplateFactory { get; }
}
@@ -2,7 +2,7 @@
namespace Hyperbar.Windows;
public class AppConfigurationChangedHandler(DesktopBar desktopFlyout,
public class AppConfigurationChangedHandler(DesktopApplicationBar desktopFlyout,
AppConfiguration configuration) :
INotificationHandler<Changed<AppConfiguration>>
{
+21
View File
@@ -13,6 +13,11 @@
<Nullable>enable</Nullable>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>
<ItemGroup>
<None Remove="ApplicationBarView.xaml" />
<None Remove="PrimaryView.xaml" />
<None Remove="SecondaryView.xaml" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
@@ -48,4 +53,20 @@
<ProjectReference Include="..\Hyperbar.Widget\Hyperbar.Widget.csproj" />
<ProjectReference Include="..\Hyperbar\Hyperbar.csproj" />
</ItemGroup>
<ItemGroup>
<Page Update="SecondaryView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="PrimaryView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="ApplicationBarView.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
</Project>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<UserControl
x:Class="Hyperbar.Windows.PrimaryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:windows="using:Hyperbar.UI.Windows">
<ItemsControl
HorizontalAlignment="Center"
ItemTemplateSelector="{Binding Converter={windows:DataTemplateConverter}}"
ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</UserControl>
+28
View File
@@ -0,0 +1,28 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
namespace Hyperbar.Windows
{
public sealed partial class PrimaryView : UserControl
{
public PrimaryView()
{
this.InitializeComponent();
}
}
}
+19
View File
@@ -0,0 +1,19 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace Hyperbar.Widget;
[NotificationHandler(nameof(IWidgetHostViewModel))]
public partial class PrimaryViewModel(ITemplateFactory templateFactory,
IServiceFactory serviceFactory,
IMediator mediator,
IDisposer disposer,
int index) :
ObservableCollectionViewModel<IWidgetViewModel>(serviceFactory, mediator, disposer),
IWidgetHostViewModel,
ITemplatedViewModel
{
[ObservableProperty]
private int index = index;
public ITemplateFactory TemplateFactory => templateFactory;
}
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<UserControl
x:Class="Hyperbar.Windows.SecondaryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:windows="using:Hyperbar.UI.Windows">
<ItemsControl
HorizontalAlignment="Center"
ItemTemplateSelector="{Binding Converter={windows:DataTemplateConverter}}"
ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</UserControl>
+28
View File
@@ -0,0 +1,28 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
namespace Hyperbar.Windows
{
public sealed partial class SecondaryView : UserControl
{
public SecondaryView()
{
this.InitializeComponent();
}
}
}
+17
View File
@@ -0,0 +1,17 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace Hyperbar.Widget;
public partial class SecondaryViewModel(ITemplateFactory templateFactory,
IServiceFactory serviceFactory,
IMediator mediator,
IDisposer disposer,
int index) :
ObservableCollectionViewModel<IDisposable>(serviceFactory, mediator, disposer),
ITemplatedViewModel
{
[ObservableProperty]
private int index = index;
public ITemplateFactory TemplateFactory => templateFactory;
}