using Lattice.Core.Abstractions;
using Lattice.Core.Models;
using Lattice.Core.Services;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
namespace Lattice.Studio.Controls;
///
/// Окно верхнего уровня, содержащее LatticeStudioShell.
/// От него наследуется реальное приложение.
///
public partial class LatticeStudioWindow : Window
{
///
/// Внутренний визуальный Shell.
///
public LatticeStudioShell Shell => ShellRoot;
public LatticeStudioWindow()
{
InitializeComponent();
// Стартовый заголовок
Title = "Lattice IDE";
Shell.Title = Title;
}
///
/// Переопределяем Title, чтобы синхронизировать его с Shell.
///
public new string Title
{
get => base.Title;
set
{
base.Title = value;
if (ShellRoot is not null)
{
ShellRoot.Title = value;
}
}
}
// --------------------------------------------------------------------
// Проксируем свойства Shell наружу
// --------------------------------------------------------------------
public string Subtitle
{
get => Shell.Subtitle;
set => Shell.Subtitle = value;
}
public IconSource TitleBarIcon
{
get => Shell.TitleBarIcon;
set => Shell.TitleBarIcon = value;
}
public object MenuContent
{
get => Shell.MenuContent;
set => Shell.MenuContent = value;
}
public object StatusContent
{
get => Shell.StatusContent;
set => Shell.StatusContent = value;
}
// --------------------------------------------------------------------
// Инициализация сервисов Lattice.Core
// --------------------------------------------------------------------
///
/// Единая точка инициализации окна.
/// Вызывается из конструктора наследника (MainWindow).
///
public void Initialize(
ILayoutService layoutService,
IContextService contextService,
IEnumerable actions,
INotificationService notificationService)
{
Shell.Initialize(layoutService, contextService, actions);
Shell.InitializeNotifications(notificationService);
Shell.SetupWindow(this);
OnShellInitialized();
}
///
/// Инициализирует окно стандартными реализациями сервисов Lattice.Core.
/// Подходит для быстрых прототипов и простых приложений.
///
public void Initialize()
{
var layout = new LayoutService();
var context = new ContextService();
var notifications = new NotificationService();
// Пустой набор команд по умолчанию
var actions = Enumerable.Empty();
Initialize(layout, context, actions, notifications);
}
///
/// Хук для наследников — вызывается после полной инициализации Shell.
///
protected virtual void OnShellInitialized()
{
}
}