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() { } }