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