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,148 @@
using Lattice.Core.Geometry;
using Lattice.UI.Docking.Abstractions;
namespace Lattice.UI.Docking.Models;
/// <summary>
/// Расширенная информация о перетаскивании для UI-слоя.
/// Добавляет визуальные аспекты и UI-контекст к базовой информации о перетаскивании.
/// </summary>
public class UiDragInfo
{
/// <summary>
/// Базовые данные перетаскивания.
/// </summary>
public Core.DragDrop.Models.DragInfo BaseDragInfo { get; }
/// <summary>
/// UI-контрол, который является источником перетаскивания.
/// </summary>
public IDockControl? SourceControl { get; }
/// <summary>
/// Визуальное представление перетаскиваемого элемента.
/// </summary>
public object? DragVisual { get; set; }
/// <summary>
/// Смещение курсора относительно элемента при начале перетаскивания.
/// </summary>
public Point VisualOffset { get; set; }
/// <summary>
/// Размер визуального представления.
/// </summary>
public Size VisualSize { get; set; }
/// <summary>
/// Прозрачность визуального представления.
/// </summary>
public double VisualOpacity { get; set; } = 0.7;
/// <summary>
/// Инициализирует новый экземпляр <see cref="UiDragInfo"/>.
/// </summary>
public UiDragInfo(Core.DragDrop.Models.DragInfo baseDragInfo, IDockControl? sourceControl = null)
{
BaseDragInfo = baseDragInfo;
SourceControl = sourceControl;
}
}
/// <summary>
/// Расширенная информация о сбросе для UI-слоя.
/// Добавляет визуальные подсказки и UI-контекст.
/// </summary>
public class UiDropInfo
{
/// <summary>
/// Базовые данные сброса.
/// </summary>
public Core.DragDrop.Models.DropInfo BaseDropInfo { get; }
/// <summary>
/// UI-контрол, который является целью сброса.
/// </summary>
public IDockControl? TargetControl { get; }
/// <summary>
/// Позиция сброса относительно элемента.
/// </summary>
public DropPosition DropPosition { get; set; }
/// <summary>
/// Визуальная подсказка для области сброса.
/// </summary>
public object? DropHintVisual { get; set; }
/// <summary>
/// Признак того, что курсор находится над допустимой областью сброса.
/// </summary>
public bool IsOverValidTarget { get; set; }
/// <summary>
/// Интенсивность подсветки области сброса (0.0 - 1.0).
/// </summary>
public double HighlightIntensity { get; set; }
/// <summary>
/// Инициализирует новый экземпляр <see cref="UiDropInfo"/>.
/// </summary>
public UiDropInfo(Core.DragDrop.Models.DropInfo baseDropInfo, IDockControl? targetControl = null)
{
BaseDropInfo = baseDropInfo;
TargetControl = targetControl;
DropPosition = DropPosition.Center;
}
}
/// <summary>
/// Определяет позицию сброса относительно элемента.
/// </summary>
public enum DropPosition
{
/// <summary> Слева от элемента. </summary>
Left,
/// <summary> Справа от элемента. </summary>
Right,
/// <summary> Сверху от элемента. </summary>
Top,
/// <summary> Снизу от элемента. </summary>
Bottom,
/// <summary> В центре элемента (для объединения вкладок). </summary>
Center,
/// <summary> В виде новой вкладки. </summary>
Tab
}
public class DragStartedEventArgs : EventArgs
{
public IDockControl? Source { get; }
public Core.DragDrop.Models.DragInfo DragInfo { get; }
// ... конструктор
}
public class DragUpdatedEventArgs : EventArgs
{
public IDockControl? Source { get; }
public double X { get; }
public double Y { get; }
public Core.DragDrop.Models.DragInfo DragInfo { get; }
// ... конструктор
}
public class DragCompletedEventArgs : EventArgs
{
public IDockControl? Source { get; }
public IDockControl? Target { get; }
public Models.DropPosition DropPosition { get; }
public Core.DragDrop.Models.DragInfo? DragInfo { get; }
public bool Success { get; }
// ... конструктор
}