using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
namespace GSS2.UI.Core.Services;
///
/// - сервис навигации между компонентами,
/// работающий с режимами главного окна
/// и одного представления .
/// Условием его работы в режиме главного окна является то, что
/// является
///
///
public class NavigationService
{
private readonly Stack _navigateControls = new Stack();
private readonly IApplicationLifetime? _applicationLifetime;
public NavigationService(IApplicationLifetime? applicationLifetime)
{
_applicationLifetime = applicationLifetime;
}
///
/// Перейти к новому элементу управления
///
/// Новый элемент управления
public void NavigateTo(Control control)
{
_navigateControls.Push(control);
switch (_applicationLifetime)
{
case IClassicDesktopStyleApplicationLifetime desktop
when desktop.MainWindow is MainWindow mainWindow:
mainWindow.SetControl(control);
break;
case ISingleViewApplicationLifetime singleView:
singleView.MainView = control;
break;
}
}
///
/// Вернутся к предыдущему элементу управления
///
///
/// Если и если элемент управления от которого происходит переход, реализует интерфейс
/// , то будет вызван его метод
///
public void NavigateBack(bool dispose = true)
{
if (_navigateControls.Count <= 1)
return;
var lastControl = _navigateControls.Pop();
var control = _navigateControls.Peek();
switch (_applicationLifetime)
{
case IClassicDesktopStyleApplicationLifetime desktop
when desktop.MainWindow is MainWindow mainWindow:
mainWindow.SetControl(control);
break;
case ISingleViewApplicationLifetime singleView:
singleView.MainView = control;
break;
}
if (dispose && lastControl is IDisposable disposable)
disposable.Dispose();
}
}