using System; using System.ComponentModel; using System.Reactive; using System.Reactive.Disposables; using System.Threading.Tasks; using Avalonia; using Avalonia.Markup.Xaml; using Avalonia.ReactiveUI; using DesertPaintCodex.Util; using DesertPaintCodex.ViewModels; using ReactiveUI; namespace DesertPaintCodex.Views { public class MainWindow : ReactiveWindow { private bool _closeValidated; public MainWindow() { InitializeComponent(); #if DEBUG this.AttachDevTools(); #endif this.WhenActivated(disposables=> { ViewModel?.Exit.Subscribe(_ => Close()).DisposeWith(disposables); ViewModel?.ShowMessageBoxDialog.RegisterHandler(DialogUtil.ShowDialog).DisposeWith(disposables); ViewModel?.ShowAboutDialog.RegisterHandler(DialogUtil.ShowDialog).DisposeWith(disposables); ViewModel?.ShowScreenSettingsDialog.RegisterHandler(DialogUtil.ShowDialog).DisposeWith(disposables); }); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } public async void OnMainWindowClosing(object? sender, CancelEventArgs e) { if (_closeValidated) return; if (ViewModel == null) return; e.Cancel = true; if (!await ViewModel.ValidateSafeExit()) return; _closeValidated = true; Close(); } } }