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
{
///
/// Получает или задает сервис перетаскивания для создаваемых контролов.
///
public Services.IDockDragDropService? DragDropService { get; set; }
///
/// Получает или задает менеджер контекста для создаваемых контролов.
///
public Services.IDockContextManager? ContextManager { get; set; }
///
public abstract IDockGroupControl CreateGroupControl(DockGroup group);
///
public abstract IDockLeafControl CreateLeafControl(DockLeaf leaf);
///
public abstract IFloatingWindowControl CreateFloatingWindowControl(DockWindow window);
///
public abstract IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel);
///
public abstract IDockSplitterControl CreateSplitterControl(SplitDirection orientation);
///
/// Создает контрол для произвольного элемента док-системы.
///
public virtual IDockControl? CreateControlForElement(IDockElement element)
{
return element switch
{
DockGroup group => CreateGroupControl(group),
DockLeaf leaf => CreateLeafControl(leaf),
_ => null
};
}
///
/// Настраивает общие свойства контрола.
///
protected virtual void ConfigureControl(IDockControl control)
{
if (DragDropService != null)
{
control.DragDropService = DragDropService;
}
if (ContextManager != null)
{
control.ContextManager = ContextManager;
}
}
}