using Lattice.Core.Docking.Engine; using Lattice.Core.Docking.Services; using Lattice.UI.Docking.Abstractions; using Lattice.UI.Docking.Factories; namespace Lattice.UI.Docking; /// /// Предоставляет статический API для инициализации и управления UI-фреймворком Lattice. /// public static class LatticeUIFramework { private static bool _isInitialized; private static LatticeBuilder? _currentBuilder; /// /// Получает значение, указывающее, инициализирован ли фреймворк. /// public static bool IsInitialized => _isInitialized; /// /// Получает текущий строитель конфигурации фреймворка. /// public static LatticeBuilder CurrentBuilder { get { if (!_isInitialized) throw new InvalidOperationException("Lattice framework is not initialized. Call Initialize() first."); return _currentBuilder!; } } /// /// Получает менеджер макета из текущего строителя. /// public static LayoutManager? LayoutManager => _currentBuilder?.LayoutManager; /// /// Получает реестр контента из текущего строителя. /// public static ContentRegistry? ContentRegistry => _currentBuilder?.ContentRegistry; /// /// Получает фабрику контролов из текущего строителя. /// public static IDockControlFactory? ControlFactory => _currentBuilder?.ControlFactory; /// /// Получает менеджер контекстных меню из текущего строителя. /// public static IDockContextManager? ContextManager => _currentBuilder?.ContextManager; /// /// Получает UI-сервис из текущего строителя. /// public static IDockUIService? UIService => _currentBuilder?.UIService; /// /// Инициализирует фреймворк Lattice с указанными параметрами. /// public static LatticeBuilder Initialize(LatticeOptions? options = null) { if (_isInitialized) throw new InvalidOperationException("Lattice framework is already initialized"); options ??= new LatticeOptions(); var layoutManager = new LayoutManager(); var contentRegistry = new ContentRegistry(); _currentBuilder = new LatticeBuilder(layoutManager, contentRegistry, options); _isInitialized = true; return _currentBuilder; } /// /// Сбрасывает состояние фреймворка к неинициализированному. /// public static void Reset() { _isInitialized = false; _currentBuilder = null; } } /// /// Представляет настройки инициализации фреймворка Lattice. /// public class LatticeOptions { /// /// Получает или задает значение, указывающее, следует ли автоматически /// регистрировать стандартные команды. /// public bool RegisterDefaultCommands { get; set; } = true; /// /// Получает или задает значение, указывающее, следует ли автоматически /// создавать сервисы при их первом запросе. /// public bool AutoCreateServices { get; set; } = true; /// /// Получает или задает идентификатор приложения. /// public string? ApplicationId { get; set; } /// /// Получает или задает значение, указывающее, следует ли включить /// расширенное логирование операций системы. /// public bool EnableVerboseLogging { get; set; } = false; } /// /// Предоставляет fluent-интерфейс для конфигурации фреймворка Lattice. /// public sealed class LatticeBuilder { private readonly LayoutManager _layoutManager; private readonly ContentRegistry _contentRegistry; private readonly LatticeOptions _options; private IDockControlFactory? _controlFactory; private IDockContextManager? _contextManager; private IDockUIService? _uiService; private bool _isBuilt; /// /// Получает менеджер макета. /// public LayoutManager LayoutManager => _layoutManager; /// /// Получает реестр контента. /// public ContentRegistry ContentRegistry => _contentRegistry; /// /// Получает фабрику контролов. /// public IDockControlFactory? ControlFactory => _controlFactory; /// /// Получает менеджер контекстных меню. /// public IDockContextManager? ContextManager => _contextManager; /// /// Получает UI-сервис. /// public IDockUIService? UIService => _uiService; /// /// Инициализирует новый экземпляр класса . /// internal LatticeBuilder(LayoutManager layoutManager, ContentRegistry contentRegistry, LatticeOptions options) { _layoutManager = layoutManager ?? throw new ArgumentNullException(nameof(layoutManager)); _contentRegistry = contentRegistry ?? throw new ArgumentNullException(nameof(contentRegistry)); _options = options ?? throw new ArgumentNullException(nameof(options)); _layoutManager.ContentRegistry = contentRegistry; } /// /// Регистрирует фабрику контролов для создания UI-элементов. /// public LatticeBuilder WithControlFactory(IDockControlFactory factory) { _controlFactory = factory ?? throw new ArgumentNullException(nameof(factory)); return this; } /// /// Регистрирует менеджер контекстных меню для управления контекстными действиями. /// public LatticeBuilder WithContextManager(IDockContextManager manager) { _contextManager = manager ?? throw new ArgumentNullException(nameof(manager)); return this; } /// /// Регистрирует UI-сервис для выполнения платформенно-зависимых операций. /// public LatticeBuilder WithUIService(IDockUIService service) { _uiService = service ?? throw new ArgumentNullException(nameof(service)); return this; } /// /// Регистрирует тип контента в реестре. /// public LatticeBuilder RegisterContentType(string contentTypeId, Func factory, ContentMetadata? metadata = null) where T : Core.Docking.Abstractions.IDockContent { if (string.IsNullOrWhiteSpace(contentTypeId)) throw new ArgumentNullException(nameof(contentTypeId)); _contentRegistry.Register(contentTypeId, factory, metadata); return this; } /// /// Завершает конфигурацию фреймворка. /// public ILatticeFramework Build() { if (_isBuilt) throw new InvalidOperationException("Framework has already been built."); _isBuilt = true; return new LatticeFramework(this); } } /// /// Предоставляет интерфейс для доступа к компонентам фреймворка Lattice. /// public interface ILatticeFramework { /// /// Получает менеджер макета. /// LayoutManager LayoutManager { get; } /// /// Получает реестр контента. /// ContentRegistry ContentRegistry { get; } /// /// Получает фабрику контролов. /// IDockControlFactory? ControlFactory { get; } /// /// Получает менеджер контекстных меню. /// IDockContextManager? ContextManager { get; } /// /// Получает UI-сервис. /// IDockUIService? UIService { get; } } /// /// Реализация интерфейса . /// internal class LatticeFramework : ILatticeFramework { private readonly LatticeBuilder _builder; /// /// Инициализирует новый экземпляр класса . /// public LatticeFramework(LatticeBuilder builder) { _builder = builder ?? throw new ArgumentNullException(nameof(builder)); } /// public LayoutManager LayoutManager => _builder.LayoutManager; /// public ContentRegistry ContentRegistry => _builder.ContentRegistry; /// public IDockControlFactory? ControlFactory => _builder.ControlFactory; /// public IDockContextManager? ContextManager => _builder.ContextManager; /// public IDockUIService? UIService => _builder.UIService; }