using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Models;
using Lattice.UI.Docking.Abstractions;
namespace Lattice.UI.Docking.Factories;
///
/// Определяет контракт для фабрики, создающей UI-контролы для элементов док-системы.
///
///
/// Фабрика обеспечивает абстракцию над созданием конкретных UI-контролов,
/// что позволяет легко заменять реализации для разных платформ или тем оформления.
///
public interface IDockControlFactory
{
///
/// Создает контрол для группы разделения.
///
/// Модель группы.
///
/// Созданный контрол группы.
///
///
/// Выбрасывается, если равен null.
///
IDockGroupControl CreateGroupControl(DockGroup group);
///
/// Создает контрол для контейнера вкладок.
///
/// Модель листа.
///
/// Созданный контрол листа.
///
///
/// Выбрасывается, если равен null.
///
IDockLeafControl CreateLeafControl(DockLeaf leaf);
///
/// Создает контрол для плавающего окна.
///
/// Модель окна.
///
/// Созданный контрол окна.
///
///
/// Выбрасывается, если равен null.
///
IFloatingWindowControl CreateFloatingWindowControl(DockWindow window);
///
/// Создает контрол для автоскрываемой панели.
///
/// Модель панели.
///
/// Созданный контрол панели.
///
///
/// Выбрасывается, если равен null.
///
IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel);
///
/// Создает контрол для разделителя.
///
/// Ориентация разделителя.
///
/// Созданный контрол разделителя.
///
IDockSplitterControl CreateSplitterControl(SplitDirection orientation);
///
/// Создает контрол для произвольного элемента док-системы.
///
/// Элемент для создания контрола.
///
/// Созданный контрол или null, если тип элемента не поддерживается.
///
///
/// Выбрасывается, если равен null.
///
///
/// Метод использует сопоставление с шаблоном для определения типа элемента
/// и вызова соответствующего метода создания.
///
IDockControl? CreateControlForElement(IDockElement element);
}