DragAndDrop core

This commit is contained in:
FrigaT
2026-01-18 16:33:35 +03:00
parent 9ea82af329
commit 79bdd8bc62
229 changed files with 21214 additions and 2494 deletions

View File

@@ -0,0 +1,96 @@
using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Models;
using Lattice.UI.Docking.Abstractions;
using Lattice.UI.Docking.Factories;
using Microsoft.UI.Xaml;
using System;
namespace Lattice.UI.Docking.WinUI.Factories;
/// <summary>
/// Фабрика контролов для платформы WinUI.
/// Создает UI-элементы для отображения компонентов системы докинга.
/// </summary>
public sealed class WinUIDockControlFactory : DockControlFactoryBase, IDockControlFactory
{
private readonly IDockTheme _theme;
/// <summary>
/// Инициализирует новый экземпляр фабрики WinUI.
/// </summary>
/// <param name="theme">Тема оформления.</param>
public WinUIDockControlFactory(IDockTheme theme)
{
_theme = theme ?? throw new ArgumentNullException(nameof(theme));
}
/// <inheritdoc/>
public override IDockGroupControl CreateGroupControl(DockGroup group)
{
var control = new LatticeDockGroup();
ConfigureControl(control, group);
control.ApplyTheme(_theme);
return control;
}
/// <inheritdoc/>
public override IDockLeafControl CreateLeafControl(DockLeaf leaf)
{
var control = new LatticeTabControl();
ConfigureControl(control, leaf);
control.ApplyTheme(_theme);
return control;
}
/// <inheritdoc/>
public override IFloatingWindowControl CreateFloatingWindowControl(DockWindow window)
{
// TODO: Реализовать создание плавающего окна
throw new NotImplementedException();
}
/// <inheritdoc/>
public override IAutoHidePanelControl CreateAutoHidePanelControl(AutoHidePanel panel)
{
// TODO: Реализовать создание автоскрываемой панели
throw new NotImplementedException();
}
/// <inheritdoc/>
public override IDockSplitterControl CreateSplitterControl(SplitDirection orientation)
{
var control = new LatticeSplitter
{
Orientation = orientation
};
ConfigureControl(control);
control.ApplyTheme(_theme);
return control;
}
/// <summary>
/// Создает хост для размещения системы докинга.
/// </summary>
public IDockHost CreateDockHost()
{
var host = new LatticeDockHost();
ConfigureControl(host);
host.ApplyTheme(_theme);
return host;
}
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)
{
frameworkElement.DataContext = model;
}
}
}