namespace Lattice.Core.DragDrop.Services; /// /// Предоставляет централизованный сервис для управления операциями перетаскивания. /// public interface IDragDropService : IDisposable { #region Свойства /// /// Активна ли операция перетаскивания. /// bool IsDragActive { get; } /// /// Информация о текущей операции. /// Models.DragInfo? CurrentDragInfo { get; } /// /// Текущая цель сброса. /// Abstractions.IDropTarget? CurrentDropTarget { get; } /// /// Порог начала перетаскивания в пикселях. /// double DragStartThreshold { get; set; } /// /// Включены ли асинхронные операции. /// bool EnableAsyncOperations { get; set; } /// /// Максимальное время ожидания асинхронной операции (мс). /// int AsyncOperationTimeout { get; set; } #endregion #region События /// /// Событие начала операции перетаскивания. /// event EventHandler DragStarted; /// /// Событие обновления позиции перетаскивания. /// event EventHandler DragUpdated; /// /// Событие изменения цели сброса. /// event EventHandler DropTargetChanged; /// /// Событие завершения операции перетаскивания. /// event EventHandler DragCompleted; /// /// Событие отмены операции перетаскивания. /// event EventHandler DragCancelled; /// /// Событие ошибки в операции перетаскивания. /// event EventHandler ErrorOccurred; #endregion #region Регистрация целей сброса /// /// Регистрирует цель сброса. /// string RegisterDropTarget(Abstractions.IDropTarget target, Geometry.Rect bounds, int priority = 0, string? group = null); /// /// Обновляет границы цели сброса. /// bool UpdateDropTargetBounds(string id, Geometry.Rect bounds); /// /// Отменяет регистрацию цели сброса. /// bool UnregisterDropTarget(string id); /// /// Отменяет регистрацию всех целей в группе. /// void UnregisterDropTargetsInGroup(string group); #endregion #region Асинхронные операции /// /// Начинает операцию перетаскивания (асинхронно). /// Task StartDragAsync(Abstractions.IDragSource source, Geometry.Point startPosition); /// /// Обновляет позицию перетаскивания (асинхронно). /// Task UpdateDragAsync(Geometry.Point position); /// /// Завершает операцию перетаскивания (асинхронно). /// Task EndDragAsync(Geometry.Point position); /// /// Отменяет операцию перетаскивания (асинхронно). /// Task CancelDragAsync(); #endregion #region Утилиты /// /// Очищает все зарегистрированные цели. /// void ClearAllDropTargets(); /// /// Получает статистику использования. /// DragDropStats GetStats(); #endregion } /// /// Статистика использования Drag & Drop. /// public class DragDropStats { public int TotalDragOperations { get; set; } public int SuccessfulDrops { get; set; } public int CancelledOperations { get; set; } public int ErrorCount { get; set; } public int RegisteredTargets { get; set; } public TimeSpan AverageOperationTime { get; set; } }