68 lines
1.8 KiB
C#
68 lines
1.8 KiB
C#
using Harmonia.WinUI.Session;
|
|
using Microsoft.UI.Windowing;
|
|
using Microsoft.UI.Xaml;
|
|
|
|
namespace Harmonia.WinUI;
|
|
|
|
public sealed partial class MainWindow : Window
|
|
{
|
|
private const string ApplicationTitle = "Harmonia";
|
|
|
|
private readonly ISessionService _sessionService;
|
|
private readonly ISessionTracker _sessionTracker;
|
|
|
|
private bool _isSaved;
|
|
|
|
public MainWindow(ISessionService sessionService, ISessionTracker sessionTracker)
|
|
{
|
|
_sessionService = sessionService;
|
|
_sessionTracker = sessionTracker;
|
|
|
|
InitializeComponent();
|
|
InitializeTitleBar();
|
|
InitializeWindowState();
|
|
}
|
|
|
|
private void InitializeTitleBar()
|
|
{
|
|
Title = ApplicationTitle;
|
|
ExtendsContentIntoTitleBar = true;
|
|
SetTitleBar(AppTitleBar);
|
|
}
|
|
|
|
private void InitializeWindowState()
|
|
{
|
|
if (AppWindow.Presenter is OverlappedPresenter presenter && _sessionService.Session.Window.IsMaximized)
|
|
{
|
|
presenter.Maximize();
|
|
}
|
|
|
|
AppWindow.Changed += OnAppWindowChanged;
|
|
}
|
|
|
|
private void OnAppWindowChanged(AppWindow sender, AppWindowChangedEventArgs args)
|
|
{
|
|
if (sender.Presenter is not OverlappedPresenter presenter)
|
|
return;
|
|
|
|
// Ignore the minimized state so a minimize-then-close doesn't lose the maximized flag.
|
|
if (presenter.State is OverlappedPresenterState.Minimized)
|
|
return;
|
|
|
|
_sessionService.Session.Window.IsMaximized = presenter.State == OverlappedPresenterState.Maximized;
|
|
}
|
|
|
|
private async void OnMainWindowClosed(object sender, WindowEventArgs args)
|
|
{
|
|
if (_isSaved)
|
|
return;
|
|
|
|
args.Handled = true;
|
|
|
|
_sessionTracker.Capture();
|
|
await _sessionService.SaveAsync();
|
|
|
|
_isSaved = true;
|
|
Close();
|
|
}
|
|
} |