144 lines
5.7 KiB
C#
144 lines
5.7 KiB
C#
using Lattice.Core.Docking.Abstractions;
|
|
using Lattice.Core.Docking.Models;
|
|
using Lattice.UI.Docking.Abstractions;
|
|
|
|
namespace Lattice.UI.Docking.Factories;
|
|
|
|
/// <summary>
|
|
/// Предоставляет базовую реализацию фабрики для создания UI-контролов док-системы.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Этот класс реализует общую логику для фабрик контролов, включая настройку
|
|
/// общих свойств и создание контролов для произвольных элементов.
|
|
/// </remarks>
|
|
public abstract class DockControlFactoryBase : IDockControlFactory
|
|
{
|
|
/// <summary>
|
|
/// Получает или задает менеджер контекста для создаваемых контролов.
|
|
/// </summary>
|
|
/// <value>
|
|
/// Экземпляр <see cref="IDockContextManager"/> или null, если не установлен.
|
|
/// </value>
|
|
public IDockContextManager? ContextManager { get; set; }
|
|
|
|
/// <summary>
|
|
/// Создает контрол для группы разделения.
|
|
/// </summary>
|
|
/// <param name="group">Модель группы.</param>
|
|
/// <returns>
|
|
/// Созданный контрол группы.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">
|
|
/// Выбрасывается, если <paramref name="group"/> равен null.
|
|
/// </exception>
|
|
/// <remarks>
|
|
/// Этот метод должен быть реализован в производных классах.
|
|
/// </remarks>
|
|
public abstract IDockGroupControl CreateGroupControl(DockGroup group);
|
|
|
|
/// <summary>
|
|
/// Создает контрол для контейнера вкладок.
|
|
/// </summary>
|
|
/// <param name="leaf">Модель листа.</param>
|
|
/// <returns>
|
|
/// Созданный контрол листа.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">
|
|
/// Выбрасывается, если <paramref name="leaf"/> равен null.
|
|
/// </exception>
|
|
/// <remarks>
|
|
/// Этот метод должен быть реализован в производных классах.
|
|
/// </remarks>
|
|
public abstract IDockLeafControl CreateLeafControl(DockLeaf leaf);
|
|
|
|
/// <summary>
|
|
/// Создает контрол для плавающего окна.
|
|
/// </summary>
|
|
/// <param name="window">Модель окна.</param>
|
|
/// <returns>
|
|
/// Созданный контрол окна.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">
|
|
/// Выбрасывается, если <paramref name="window"/> равен null.
|
|
/// </exception>
|
|
/// <remarks>
|
|
/// Этот метод должен быть реализован в производных классах.
|
|
/// </remarks>
|
|
public abstract IFloatingWindowControl CreateFloatingWindowControl(DockWindow window);
|
|
|
|
/// <summary>
|
|
/// Создает контрол для автоскрываемой панели.
|
|
/// </summary>
|
|
/// <param name="panel">Модель панели.</param>
|
|
/// <returns>
|
|
/// Созданный контрол панели.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">
|
|
/// Выбрасывается, если <paramref name="panel"/> равен null.
|
|
/// </exception>
|
|
/// <remarks>
|
|
/// Этот метод должен быть реализован в производных классах.
|
|
/// </remarks>
|
|
public abstract IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel);
|
|
|
|
/// <summary>
|
|
/// Создает контрол для разделителя.
|
|
/// </summary>
|
|
/// <param name="orientation">Ориентация разделителя.</param>
|
|
/// <returns>
|
|
/// Созданный контрол разделителя.
|
|
/// </returns>
|
|
/// <remarks>
|
|
/// Этот метод должен быть реализован в производных классах.
|
|
/// </remarks>
|
|
public abstract IDockSplitterControl CreateSplitterControl(SplitDirection orientation);
|
|
|
|
/// <inheritdoc/>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Настраивает общие свойства контрола.
|
|
/// </summary>
|
|
/// <param name="control">Контрол для настройки.</param>
|
|
/// <exception cref="ArgumentNullException">
|
|
/// Выбрасывается, если <paramref name="control"/> равен null.
|
|
/// </exception>
|
|
/// <remarks>
|
|
/// Устанавливает общие свойства, такие как контекстный менеджер,
|
|
/// для всех создаваемых контролов.
|
|
/// </remarks>
|
|
protected virtual void ConfigureControl(IDockControl control)
|
|
{
|
|
if (control == null) throw new ArgumentNullException(nameof(control));
|
|
|
|
if (ContextManager != null)
|
|
{
|
|
control.ContextManager = ContextManager;
|
|
}
|
|
}
|
|
} |