1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

UI - Added basic implementation for each OS

This commit is contained in:
Robert 2021-11-18 23:16:07 +01:00
parent f38a9e9e55
commit e05de0d780
16 changed files with 79 additions and 189 deletions

View File

@ -1,6 +1,5 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Artemis.UI.Linux"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
x:Class="Artemis.UI.Linux.App">
<Application.DataTemplates>
@ -8,6 +7,7 @@
</Application.DataTemplates>
<Application.Styles>
<FluentTheme Mode="Light"/>
<StyleInclude Source="avares://Artemis.UI/Styles/Artemis.axaml" />
<StyleInclude Source="avares://Artemis.UI.Shared/Styles/Artemis.axaml" />
</Application.Styles>
</Application>

View File

@ -1,50 +1,26 @@
using Artemis.Core.Ninject;
using Artemis.UI.Ninject;
using Artemis.UI.Screens.Root.ViewModels;
using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using Ninject;
using ReactiveUI;
using Splat.Ninject;
namespace Artemis.UI.Linux
{
public class App : Application
{
private StandardKernel _kernel = null!;
public override void Initialize()
{
InitializeNinject();
ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
desktop.MainWindow = new MainWindow
{
DataContext = _kernel.Get<RootViewModel>()
};
ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
base.OnFrameworkInitializationCompleted();
}
private void InitializeNinject()
{
_kernel = new StandardKernel();
_kernel.Settings.InjectNonPublic = true;
_kernel.Load<CoreModule>();
_kernel.Load<UIModule>();
_kernel.Load<SharedUIModule>();
_kernel.UseNinjectDependencyResolver();
}
}
}

View File

@ -1,6 +1,5 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Artemis.UI.MacOS"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
x:Class="Artemis.UI.MacOS.App">
<Application.DataTemplates>
@ -8,6 +7,7 @@
</Application.DataTemplates>
<Application.Styles>
<FluentTheme Mode="Light"/>
<StyleInclude Source="avares://Artemis.UI/Styles/Artemis.axaml" />
<StyleInclude Source="avares://Artemis.UI.Shared/Styles/Artemis.axaml" />
</Application.Styles>
</Application>

View File

@ -1,50 +1,26 @@
using Artemis.Core.Ninject;
using Artemis.UI.Ninject;
using Artemis.UI.Screens.Root.ViewModels;
using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using Ninject;
using ReactiveUI;
using Splat.Ninject;
namespace Artemis.UI.MacOS
{
public class App : Application
{
private StandardKernel _kernel = null!;
public override void Initialize()
{
InitializeNinject();
ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
desktop.MainWindow = new MainWindow
{
DataContext = _kernel.Get<RootViewModel>()
};
ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
base.OnFrameworkInitializationCompleted();
}
private void InitializeNinject()
{
_kernel = new StandardKernel();
_kernel.Settings.InjectNonPublic = true;
_kernel.Load<CoreModule>();
_kernel.Load<UIModule>();
_kernel.Load<SharedUIModule>();
_kernel.UseNinjectDependencyResolver();
}
}
}

View File

@ -0,0 +1,8 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StyleInclude Source="/Styles/Border.axaml" />
<StyleInclude Source="/Styles/Button.axaml" />
<StyleInclude Source="/Styles/TextBlock.axaml" />
<StyleInclude Source="/Styles/Sidebar.axaml" />
<StyleInclude Source="/Styles/InfoBar.axaml" />
</Styles>

View File

@ -1,31 +1,13 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Artemis.UI.Windows"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
xmlns:styling="clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia"
x:Class="Artemis.UI.Windows.App">
<Application.DataTemplates>
<ui:ViewLocator/>
</Application.DataTemplates>
<Application.Styles>
<!-- Third party styles -->
<styling:FluentAvaloniaTheme RequestedTheme="Dark" CustomAccentColor="#4db6ac" />
<StyleInclude Source="avares://Material.Icons.Avalonia/App.xaml" />
<!-- Grab the window styling from Avalonia -->
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/Window.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/TitleBar.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/CaptionButtons.xaml" />
<!-- Global styles -->
<!-- <StyleInclude Source="/Styles/Border.axaml" /> -->
<!-- <StyleInclude Source="/Styles/Button.axaml" /> -->
<!-- <StyleInclude Source="/Styles/TextBlock.axaml" /> -->
<!-- <StyleInclude Source="/Styles/Sidebar.axaml" /> -->
<!-- Shared styles -->
<!-- TODO: Make a single file-->
<StyleInclude Source="avares://Artemis.UI.Shared/Styles/InfoBar.axaml" />
<StyleInclude Source="avares://Artemis.UI/Styles/Artemis.axaml" />
<StyleInclude Source="avares://Artemis.UI.Shared/Styles/Artemis.axaml" />
</Application.Styles>
</Application>

View File

@ -1,27 +1,18 @@
using Artemis.Core.Ninject;
using Artemis.UI.Ninject;
using Artemis.UI.Screens.Root.ViewModels;
using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using FluentAvalonia.Styling;
using Ninject;
using ReactiveUI;
using Splat.Ninject;
namespace Artemis.UI.Windows
{
public class App : Application
{
private StandardKernel _kernel = null!;
public override void Initialize()
{
InitializeNinject();
ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
AvaloniaXamlLoader.Load(this);
}
@ -29,26 +20,11 @@ namespace Artemis.UI.Windows
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = _kernel.Get<RootViewModel>()
};
ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
AvaloniaLocator.Current.GetService<FluentAvaloniaTheme>().ForceNativeTitleBarToTheme(desktop.MainWindow, "Dark");
}
base.OnFrameworkInitializationCompleted();
}
private void InitializeNinject()
{
_kernel = new StandardKernel();
_kernel.Settings.InjectNonPublic = true;
_kernel.Load<CoreModule>();
_kernel.Load<UIModule>();
_kernel.Load<SharedUIModule>();
_kernel.UseNinjectDependencyResolver();
}
}
}

View File

@ -1,30 +0,0 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sty="using:FluentAvalonia.Styling"
xmlns:ui="clr-namespace:Artemis.UI"
x:Class="Artemis.UI.App">
<Application.DataTemplates>
<ui:ViewLocator />
</Application.DataTemplates>
<Application.Styles>
<!-- Third party styles -->
<sty:FluentAvaloniaTheme RequestedTheme="Dark" CustomAccentColor="#4db6ac" />
<StyleInclude Source="avares://Material.Icons.Avalonia/App.xaml" />
<!-- Grab the window styling from Avalonia -->
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/Window.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/TitleBar.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/CaptionButtons.xaml" />
<!-- Global styles -->
<StyleInclude Source="/Styles/Border.axaml" />
<StyleInclude Source="/Styles/Button.axaml" />
<StyleInclude Source="/Styles/TextBlock.axaml" />
<StyleInclude Source="/Styles/Sidebar.axaml" />
<!-- Shared styles -->
<!-- TODO: Make a single file-->
<StyleInclude Source="avares://Artemis.UI.Avalonia.Shared/Styles/InfoBar.axaml" />
</Application.Styles>
</Application>

View File

@ -1,54 +0,0 @@
using Artemis.Core.Ninject;
using Artemis.UI.Ninject;
using Artemis.UI.Screens.Root.ViewModels;
using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using FluentAvalonia.Styling;
using Ninject;
using ReactiveUI;
using Splat.Ninject;
namespace Artemis.UI
{
public class App : Application
{
private StandardKernel _kernel = null!;
public override void Initialize()
{
InitializeNinject();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = _kernel.Get<RootViewModel>()
};
AvaloniaLocator.Current.GetService<FluentAvaloniaTheme>().ForceNativeTitleBarToTheme(desktop.MainWindow, "Dark");
}
base.OnFrameworkInitializationCompleted();
}
private void InitializeNinject()
{
_kernel = new StandardKernel();
_kernel.Settings.InjectNonPublic = true;
_kernel.Load<CoreModule>();
_kernel.Load<UIModule>();
_kernel.Load<SharedUIModule>();
_kernel.UseNinjectDependencyResolver();
}
}
}

View File

@ -8,6 +8,10 @@
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
<ItemGroup>
<None Remove="Artemis.UI.Avalonia.csproj.DotSettings" />
<None Remove="Artemis.UI.csproj.DotSettings" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.10" />
<PackageReference Include="Avalonia.Controls.PanAndZoom" Version="4.2.0" />

View File

@ -0,0 +1,39 @@
using Artemis.Core.Ninject;
using Artemis.UI.Exceptions;
using Artemis.UI.Ninject;
using Artemis.UI.Screens.Root.ViewModels;
using Artemis.UI.Shared.Ninject;
using Avalonia.Controls.ApplicationLifetimes;
using Ninject;
using Splat.Ninject;
namespace Artemis.UI
{
public static class ArtemisBootstrapper
{
private static StandardKernel? _kernel;
public static void Bootstrap()
{
if (_kernel != null)
throw new ArtemisUIException("UI already bootstrapped");
_kernel = new StandardKernel();
_kernel.Settings.InjectNonPublic = true;
_kernel.Load<CoreModule>();
_kernel.Load<UIModule>();
_kernel.Load<SharedUIModule>();
_kernel.UseNinjectDependencyResolver();
}
public static void ConfigureApplicationLifetime(IClassicDesktopStyleApplicationLifetime applicationLifetime)
{
if (_kernel == null)
throw new ArtemisUIException("UI not yet bootstrapped");
applicationLifetime.MainWindow = new MainWindow {DataContext = _kernel.Get<RootViewModel>()};
}
}
}

View File

@ -0,0 +1,13 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:styling="clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia">
<!-- Third party styles -->
<styling:FluentAvaloniaTheme RequestedTheme="Dark" />
<StyleInclude Source="avares://Material.Icons.Avalonia/App.xaml" />
<!-- Grab the window styling from Avalonia -->
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/Window.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/TitleBar.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/CaptionButtons.xaml" />
</Styles>