Доработан winui
This commit is contained in:
189
Lattice.UI.Docking.WinUI/DockBuilder.cs
Normal file
189
Lattice.UI.Docking.WinUI/DockBuilder.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user