using Lattice.Core.Docking.Engine; using Lattice.Core.Docking.Services; using Lattice.UI.Docking.Abstractions; using Lattice.UI.Docking.Factories; using Lattice.UI.Docking.WinUI.Factories; using Lattice.UI.Docking.WinUI.Services; using System; namespace Lattice.UI.Docking; /// /// Предоставляет упрощенный статический API для инициализации и конфигурации системы докинга Lattice. /// public static class LatticeDock { /// /// Создает новый строитель конфигурации системы докинга для WinUI. /// /// Экземпляр для настройки системы. public static DockBuilder CreateWinUIBuilder() { return new DockBuilder() .WithWinUIFactory() .WithWinUIContextManager() .WithWinUIService(); } /// /// Настраивает строитель для использования фабрики WinUI. /// public static DockBuilder WithWinUIFactory(this DockBuilder builder) { return builder.WithControlFactory(new WinUIDockControlFactory()); } /// /// Настраивает строитель для использования контекстного менеджера WinUI. /// public static DockBuilder WithWinUIContextManager(this DockBuilder builder) { return builder.WithContextManager(new WinUIDockContextManager()); } /// /// Настраивает строитель для использования UI-сервиса WinUI. /// public static DockBuilder WithWinUIService(this DockBuilder builder) { return builder.WithUIService(new WinUIDockUIService()); } } /// /// Предоставляет fluent-интерфейс для конфигурации системы докинга Lattice. /// public sealed class DockBuilder { private readonly LayoutManager _layoutManager; private readonly ContentRegistry _contentRegistry; private IDockControlFactory? _factory; private IDockContextManager? _contextManager; private IDockUIService? _uiService; /// /// Инициализирует новый экземпляр класса . /// Создает менеджер макета и реестр контента по умолчанию. /// public DockBuilder() { _layoutManager = new LayoutManager(); _contentRegistry = new ContentRegistry(); _layoutManager.ContentRegistry = _contentRegistry; } /// /// Регистрирует фабрику контролов для создания UI-элементов. /// /// Фабрика контролов. /// Текущий экземпляр для цепочки вызовов. public DockBuilder WithControlFactory(IDockControlFactory factory) { _factory = factory; return this; } /// /// Регистрирует менеджер контекстных меню. /// /// Менеджер контекстных меню. /// Текущий экземпляр для цепочки вызовов. public DockBuilder WithContextManager(IDockContextManager contextManager) { _contextManager = contextManager; return this; } /// /// Регистрирует UI-сервис для выполнения платформенно-зависимых операций. /// /// UI-сервис. /// Текущий экземпляр для цепочки вызовов. public DockBuilder WithUIService(IDockUIService uiService) { _uiService = uiService; return this; } /// /// Регистрирует тип контента в реестре. /// public DockBuilder RegisterContentType(string contentTypeId, Func factory, ContentMetadata? metadata = null) where T : Core.Docking.Abstractions.IDockContent { _contentRegistry.Register(contentTypeId, factory, metadata); return this; } /// /// Завершает конфигурацию системы докинга и возвращает настроенный экземпляр . /// /// Настроенная система докинга. public IDockSystem Build() { // Настраиваем связи между компонентами if (_factory is DockControlFactoryBase factoryBase && _contextManager != null) { factoryBase.ContextManager = _contextManager; } return new DockSystem(_layoutManager, _contentRegistry, _factory, _contextManager, _uiService); } } /// /// Представляет настроенную систему докинга с доступом ко всем основным компонентам. /// public interface IDockSystem { /// /// Получает менеджер макета. /// LayoutManager LayoutManager { get; } /// /// Получает реестр контента. /// ContentRegistry ContentRegistry { get; } /// /// Получает фабрику контролов. /// IDockControlFactory? ControlFactory { get; } /// /// Получает менеджер контекстных меню. /// IDockContextManager? ContextManager { get; } /// /// Получает UI-сервис. /// IDockUIService? UIService { get; } } /// /// Реализация интерфейса . /// internal sealed class DockSystem : IDockSystem { public LayoutManager LayoutManager { get; } public ContentRegistry ContentRegistry { get; } public IDockControlFactory? ControlFactory { get; } public IDockContextManager? ContextManager { get; } public IDockUIService? UIService { get; } public DockSystem( LayoutManager layoutManager, ContentRegistry contentRegistry, IDockControlFactory? controlFactory, IDockContextManager? contextManager, IDockUIService? uiService) { LayoutManager = layoutManager ?? throw new ArgumentNullException(nameof(layoutManager)); ContentRegistry = contentRegistry ?? throw new ArgumentNullException(nameof(contentRegistry)); ControlFactory = controlFactory; ContextManager = contextManager; UIService = uiService; } }