using Lattice.Core.Docking.Abstractions; using Lattice.Core.Docking.Models; using Lattice.UI.Docking.Abstractions; namespace Lattice.UI.Docking.Factories; /// /// Предоставляет базовую реализацию фабрики для создания UI-контролов док-системы. /// /// /// Этот класс реализует общую логику для фабрик контролов, включая настройку /// общих свойств и создание контролов для произвольных элементов. /// public abstract class DockControlFactoryBase : IDockControlFactory { /// /// Получает или задает менеджер контекста для создаваемых контролов. /// /// /// Экземпляр или null, если не установлен. /// public IDockContextManager? ContextManager { get; set; } /// /// Создает контрол для группы разделения. /// /// Модель группы. /// /// Созданный контрол группы. /// /// /// Выбрасывается, если равен null. /// /// /// Этот метод должен быть реализован в производных классах. /// public abstract IDockGroupControl CreateGroupControl(DockGroup group); /// /// Создает контрол для контейнера вкладок. /// /// Модель листа. /// /// Созданный контрол листа. /// /// /// Выбрасывается, если равен null. /// /// /// Этот метод должен быть реализован в производных классах. /// public abstract IDockLeafControl CreateLeafControl(DockLeaf leaf); /// /// Создает контрол для плавающего окна. /// /// Модель окна. /// /// Созданный контрол окна. /// /// /// Выбрасывается, если равен null. /// /// /// Этот метод должен быть реализован в производных классах. /// public abstract IFloatingWindowControl CreateFloatingWindowControl(DockWindow window); /// /// Создает контрол для автоскрываемой панели. /// /// Модель панели. /// /// Созданный контрол панели. /// /// /// Выбрасывается, если равен null. /// /// /// Этот метод должен быть реализован в производных классах. /// public abstract IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel); /// /// Создает контрол для разделителя. /// /// Ориентация разделителя. /// /// Созданный контрол разделителя. /// /// /// Этот метод должен быть реализован в производных классах. /// public abstract IDockSplitterControl CreateSplitterControl(SplitDirection orientation); /// public virtual IDockControl? CreateControlForElement(IDockElement element) { if (element == null) throw new ArgumentNullException(nameof(element)); IDockControl? control = null; switch (element) { case DockGroup group: control = CreateGroupControl(group); break; case DockLeaf leaf: control = CreateLeafControl(leaf); break; default: control = null; break; } if (control != null) { ConfigureControl(control); } return control; } /// /// Настраивает общие свойства контрола. /// /// Контрол для настройки. /// /// Выбрасывается, если равен null. /// /// /// Устанавливает общие свойства, такие как контекстный менеджер, /// для всех создаваемых контролов. /// protected virtual void ConfigureControl(IDockControl control) { if (control == null) throw new ArgumentNullException(nameof(control)); if (ContextManager != null) { control.ContextManager = ContextManager; } } }