DragAndDrop core
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user