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:
parent
f38a9e9e55
commit
e05de0d780
@ -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>
|
||||
</Application>
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
</Application>
|
||||
@ -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>()
|
||||
};
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
8
src/Avalonia/Artemis.UI.Shared/Styles/Artemis.axaml
Normal file
8
src/Avalonia/Artemis.UI.Shared/Styles/Artemis.axaml
Normal 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>
|
||||
@ -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>
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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" />
|
||||
|
||||
39
src/Avalonia/Artemis.UI/ArtemisBootstrapper.cs
Normal file
39
src/Avalonia/Artemis.UI/ArtemisBootstrapper.cs
Normal 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>()};
|
||||
}
|
||||
}
|
||||
}
|
||||
13
src/Avalonia/Artemis.UI/Styles/Artemis.axaml
Normal file
13
src/Avalonia/Artemis.UI/Styles/Artemis.axaml
Normal 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>
|
||||
Loading…
x
Reference in New Issue
Block a user