using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Avalonia.Threading; using GSS2.Test.ViewModels; using GSS2.Test.Views; using GSS2.UI.Core; using GSS2.UI.Core.Services; using GSS2.UI.Core.ViewModels; namespace GSS2.Test; public partial class App : Application { public override void Initialize() { AvaloniaXamlLoader.Load(this); } public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is null) throw new InvalidOperationException("Application framework initialization cannot be fulfilled, ApplicationLifetime is null"); var loggerFactory = Program.ApplicationHost.Services.GetRequiredService(); var navigationService = Program.ApplicationHost.Services.GetRequiredService(); switch (ApplicationLifetime) { case IClassicDesktopStyleApplicationLifetime desktop: Console.WriteLine("Application running in classic style"); Console.WriteLine($"Application running in {(Program.IsFullscreen ? "fullscreen" : "window")} mode"); desktop.Startup += (_, _) => Program.ApplicationHost.RunAsync(); desktop.Exit += (_, _) => Program.ApplicationHost.StopAsync(); var mainWindowViewModelLogger = loggerFactory.CreateLogger(); var mainWindow = new MainWindow() { DataContext = new MainWindowViewModel(mainWindowViewModelLogger) { SystemDecorations = Program.IsFullscreen ? Avalonia.Controls.SystemDecorations.None : Avalonia.Controls.SystemDecorations.Full, Topmost = Program.IsFullscreen, WindowState = Program.IsFullscreen ? Avalonia.Controls.WindowState.FullScreen : Avalonia.Controls.WindowState.Normal }, }; desktop.MainWindow = mainWindow; Program.ShutdownRequested += (_, _) => Dispatcher.UIThread.Invoke(() => desktop.MainWindow?.Close()); break; case ISingleViewApplicationLifetime singleView: Console.WriteLine("Application running in single view style"); break; default: throw new InvalidOperationException($"Application framework initialization cannot be fulfilled, ApplicationLifetime has unknown type inherited from: {string.Join(", ", ApplicationLifetime.GetType().GetInterfaces().Select(i => i.FullName))}"); } var mainViewLogger = loggerFactory.CreateLogger(); var mainView = new MainView(mainViewLogger) { DataContext = Program.ApplicationHost.Services.GetRequiredService() }; navigationService.NavigateTo(mainView); base.OnFrameworkInitializationCompleted(); } }