Доработан Docking
This commit is contained in:
@@ -11,6 +11,17 @@ namespace Lattice.UI.Docking.WinUI.Factories;
|
||||
/// Фабрика контролов для платформы WinUI.
|
||||
/// Создает UI-элементы для отображения компонентов системы докинга.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// Фабрика реализует паттерн "Абстрактная фабрика", предоставляя единый интерфейс
|
||||
/// для создания всех типов контролов док-системы. Это позволяет абстрагировать
|
||||
/// конкретную UI-платформу (WinUI) от бизнес-логики системы.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Все создаваемые контролы автоматически настраиваются: устанавливаются связи
|
||||
/// с менеджером макета, контекстным менеджером и применяется текущая тема оформления.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockControlFactory
|
||||
{
|
||||
private readonly IDockTheme _theme;
|
||||
@@ -18,13 +29,33 @@ public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockContr
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр фабрики WinUI.
|
||||
/// </summary>
|
||||
/// <param name="theme">Тема оформления.</param>
|
||||
/// <param name="theme">Тема оформления для применения к создаваемым контролам.</param>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Выбрасывается, если <paramref name="theme"/> равен null.
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// Конструктор создает фабрику с заданной темой оформления. Все контролы,
|
||||
/// созданные этой фабрикой, будут автоматически применять указанную тему.
|
||||
/// </remarks>
|
||||
public WinUIDockControlFactory(IDockTheme theme)
|
||||
{
|
||||
_theme = theme ?? throw new ArgumentNullException(nameof(theme));
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
/// <summary>
|
||||
/// Создает контрол для группы разделения.
|
||||
/// </summary>
|
||||
/// <param name="group">Модель группы разделения.</param>
|
||||
/// <returns>
|
||||
/// Созданный контрол группы.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Выбрасывается, если <paramref name="group"/> равен null.
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// Создает экземпляр <see cref="LatticeDockGroup"/>, настраивает его связи
|
||||
/// с моделью и другими сервисами, применяет текущую тему оформления.
|
||||
/// </remarks>
|
||||
public override IDockGroupControl CreateGroupControl(DockGroup group)
|
||||
{
|
||||
var control = new LatticeDockGroup();
|
||||
@@ -33,7 +64,21 @@ public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockContr
|
||||
return control;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
/// <summary>
|
||||
/// Создает контрол для контейнера вкладок.
|
||||
/// </summary>
|
||||
/// <param name="leaf">Модель контейнера вкладок.</param>
|
||||
/// <returns>
|
||||
/// Созданный контрол листа.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Выбрасывается, если <paramref name="leaf"/> равен null.
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// Создает экземпляр <see cref="LatticeTabControl"/>, настраивает его связи
|
||||
/// с моделью и другими сервисами, применяет текущую тему оформления.
|
||||
/// Контрол поддерживает все положения панели вкладок и операции с вкладками.
|
||||
/// </remarks>
|
||||
public override IDockLeafControl CreateLeafControl(DockLeaf leaf)
|
||||
{
|
||||
var control = new LatticeTabControl();
|
||||
@@ -42,21 +87,58 @@ public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockContr
|
||||
return control;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
/// <summary>
|
||||
/// Создает контрол для плавающего окна.
|
||||
/// </summary>
|
||||
/// <param name="window">Модель плавающего окна.</param>
|
||||
/// <returns>
|
||||
/// Созданный контрол окна.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Выбрасывается, если <paramref name="window"/> равен null.
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// В текущей реализации метод не реализован. Плавающие окна требуют
|
||||
/// дополнительной интеграции с оконной системой платформы.
|
||||
/// </remarks>
|
||||
public override IFloatingWindowControl CreateFloatingWindowControl(DockWindow window)
|
||||
{
|
||||
// TODO: Реализовать создание плавающего окна
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
/// <summary>
|
||||
/// Создает контрол для автоскрываемой панели.
|
||||
/// </summary>
|
||||
/// <param name="panel">Модель автоскрываемой панели.</param>
|
||||
/// <returns>
|
||||
/// Созданный контрол панели.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Выбрасывается, если <paramref name="panel"/> равен null.
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// В текущей реализации метод не реализован. Автоскрываемые панели требуют
|
||||
/// сложной логики анимации и взаимодействия с краями окна.
|
||||
/// </remarks>
|
||||
public override IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel)
|
||||
{
|
||||
// TODO: Реализовать создание автоскрываемой панели
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
/// <summary>
|
||||
/// Создает контрол для разделителя.
|
||||
/// </summary>
|
||||
/// <param name="orientation">Ориентация разделителя.</param>
|
||||
/// <returns>
|
||||
/// Созданный контрол разделителя.
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// Создает экземпляр <see cref="LatticeSplitter"/>, настраивает его ориентацию
|
||||
/// и применяет текущую тему оформления. Разделитель поддерживает перетаскивание
|
||||
/// для изменения соотношения размеров между соседними областями.
|
||||
/// </remarks>
|
||||
public override IDockSplitterControl CreateSplitterControl(SplitDirection orientation)
|
||||
{
|
||||
var control = new LatticeSplitter
|
||||
@@ -71,6 +153,14 @@ public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockContr
|
||||
/// <summary>
|
||||
/// Создает хост для размещения системы докинга.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// Созданный док-хост.
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// Создает корневой контейнер для всей системы докинга - экземпляр <see cref="LatticeDockHost"/>.
|
||||
/// Хост управляет всем макетом приложения, включая основное дерево компоновки,
|
||||
/// плавающие окна и автоскрываемые панели.
|
||||
/// </remarks>
|
||||
public IDockHost CreateDockHost()
|
||||
{
|
||||
var host = new LatticeDockHost();
|
||||
@@ -79,13 +169,22 @@ public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockContr
|
||||
return host;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Настраивает созданный контрол.
|
||||
/// </summary>
|
||||
/// <param name="control">Контрол для настройки.</param>
|
||||
/// <param name="model">Модель данных для контрола (опционально).</param>
|
||||
/// <remarks>
|
||||
/// Устанавливает основные связи контрола: модель данных, менеджер макета,
|
||||
/// контекстный менеджер. Также настраивает привязку данных через DataContext.
|
||||
/// Этот метод вызывается для всех создаваемых контролов.
|
||||
/// </remarks>
|
||||
private void ConfigureControl(IDockControl control, IDockElement? model = null)
|
||||
{
|
||||
if (control == null) return;
|
||||
|
||||
control.Model = model;
|
||||
control.LayoutManager = LatticeUIFramework.LayoutManager;
|
||||
control.DragDropService = LatticeUIFramework.DragDropService;
|
||||
control.ContextManager = LatticeUIFramework.ContextManager;
|
||||
|
||||
if (control is FrameworkElement frameworkElement && model != null)
|
||||
|
||||
Reference in New Issue
Block a user