Доработан winui

This commit is contained in:
2026-02-01 09:26:13 +03:00
parent 584df249f6
commit e8b4cb9881
26 changed files with 1842 additions and 2373 deletions

View File

@@ -0,0 +1,189 @@
using Lattice.Core.Docking.Engine;
using Lattice.Core.Docking.Services;
using Lattice.UI.Docking.Abstractions;
using Lattice.UI.Docking.Factories;
using Lattice.UI.Docking.WinUI.Factories;
using Lattice.UI.Docking.WinUI.Services;
using System;
namespace Lattice.UI.Docking;
/// <summary>
/// Предоставляет упрощенный статический API для инициализации и конфигурации системы докинга Lattice.
/// </summary>
public static class LatticeDock
{
/// <summary>
/// Создает новый строитель конфигурации системы докинга для WinUI.
/// </summary>
/// <returns>Экземпляр <see cref="DockBuilder"/> для настройки системы.</returns>
public static DockBuilder CreateWinUIBuilder()
{
return new DockBuilder()
.WithWinUIFactory()
.WithWinUIContextManager()
.WithWinUIService();
}
/// <summary>
/// Настраивает строитель для использования фабрики WinUI.
/// </summary>
public static DockBuilder WithWinUIFactory(this DockBuilder builder)
{
return builder.WithControlFactory(new WinUIDockControlFactory());
}
/// <summary>
/// Настраивает строитель для использования контекстного менеджера WinUI.
/// </summary>
public static DockBuilder WithWinUIContextManager(this DockBuilder builder)
{
return builder.WithContextManager(new WinUIDockContextManager());
}
/// <summary>
/// Настраивает строитель для использования UI-сервиса WinUI.
/// </summary>
public static DockBuilder WithWinUIService(this DockBuilder builder)
{
return builder.WithUIService(new WinUIDockUIService());
}
}
/// <summary>
/// Предоставляет fluent-интерфейс для конфигурации системы докинга Lattice.
/// </summary>
public sealed class DockBuilder
{
private readonly LayoutManager _layoutManager;
private readonly ContentRegistry _contentRegistry;
private IDockControlFactory? _factory;
private IDockContextManager? _contextManager;
private IDockUIService? _uiService;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="DockBuilder"/>.
/// Создает менеджер макета и реестр контента по умолчанию.
/// </summary>
public DockBuilder()
{
_layoutManager = new LayoutManager();
_contentRegistry = new ContentRegistry();
_layoutManager.ContentRegistry = _contentRegistry;
}
/// <summary>
/// Регистрирует фабрику контролов для создания UI-элементов.
/// </summary>
/// <param name="factory">Фабрика контролов.</param>
/// <returns>Текущий экземпляр <see cref="DockBuilder"/> для цепочки вызовов.</returns>
public DockBuilder WithControlFactory(IDockControlFactory factory)
{
_factory = factory;
return this;
}
/// <summary>
/// Регистрирует менеджер контекстных меню.
/// </summary>
/// <param name="contextManager">Менеджер контекстных меню.</param>
/// <returns>Текущий экземпляр <see cref="DockBuilder"/> для цепочки вызовов.</returns>
public DockBuilder WithContextManager(IDockContextManager contextManager)
{
_contextManager = contextManager;
return this;
}
/// <summary>
/// Регистрирует UI-сервис для выполнения платформенно-зависимых операций.
/// </summary>
/// <param name="uiService">UI-сервис.</param>
/// <returns>Текущий экземпляр <see cref="DockBuilder"/> для цепочки вызовов.</returns>
public DockBuilder WithUIService(IDockUIService uiService)
{
_uiService = uiService;
return this;
}
/// <summary>
/// Регистрирует тип контента в реестре.
/// </summary>
public DockBuilder RegisterContentType<T>(string contentTypeId, Func<T> factory, ContentMetadata? metadata = null)
where T : Core.Docking.Abstractions.IDockContent
{
_contentRegistry.Register(contentTypeId, factory, metadata);
return this;
}
/// <summary>
/// Завершает конфигурацию системы докинга и возвращает настроенный экземпляр <see cref="IDockSystem"/>.
/// </summary>
/// <returns>Настроенная система докинга.</returns>
public IDockSystem Build()
{
// Настраиваем связи между компонентами
if (_factory is DockControlFactoryBase factoryBase && _contextManager != null)
{
factoryBase.ContextManager = _contextManager;
}
return new DockSystem(_layoutManager, _contentRegistry, _factory, _contextManager, _uiService);
}
}
/// <summary>
/// Представляет настроенную систему докинга с доступом ко всем основным компонентам.
/// </summary>
public interface IDockSystem
{
/// <summary>
/// Получает менеджер макета.
/// </summary>
LayoutManager LayoutManager { get; }
/// <summary>
/// Получает реестр контента.
/// </summary>
ContentRegistry ContentRegistry { get; }
/// <summary>
/// Получает фабрику контролов.
/// </summary>
IDockControlFactory? ControlFactory { get; }
/// <summary>
/// Получает менеджер контекстных меню.
/// </summary>
IDockContextManager? ContextManager { get; }
/// <summary>
/// Получает UI-сервис.
/// </summary>
IDockUIService? UIService { get; }
}
/// <summary>
/// Реализация интерфейса <see cref="IDockSystem"/>.
/// </summary>
internal sealed class DockSystem : IDockSystem
{
public LayoutManager LayoutManager { get; }
public ContentRegistry ContentRegistry { get; }
public IDockControlFactory? ControlFactory { get; }
public IDockContextManager? ContextManager { get; }
public IDockUIService? UIService { get; }
public DockSystem(
LayoutManager layoutManager,
ContentRegistry contentRegistry,
IDockControlFactory? controlFactory,
IDockContextManager? contextManager,
IDockUIService? uiService)
{
LayoutManager = layoutManager ?? throw new ArgumentNullException(nameof(layoutManager));
ContentRegistry = contentRegistry ?? throw new ArgumentNullException(nameof(contentRegistry));
ControlFactory = controlFactory;
ContextManager = contextManager;
UIService = uiService;
}
}