DragAndDrop core
This commit is contained in:
174
Lattice.Core.DragDrop/Services/IDragDropService.cs
Normal file
174
Lattice.Core.DragDrop/Services/IDragDropService.cs
Normal file
@@ -0,0 +1,174 @@
|
||||
namespace Lattice.Core.DragDrop.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Предоставляет централизованный сервис для управления операциями перетаскивания.
|
||||
/// </summary>
|
||||
public interface IDragDropService : IDisposable
|
||||
{
|
||||
#region Свойства
|
||||
|
||||
/// <summary>
|
||||
/// Активна ли операция перетаскивания.
|
||||
/// </summary>
|
||||
bool IsDragActive { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Информация о текущей операции.
|
||||
/// </summary>
|
||||
Models.DragInfo? CurrentDragInfo { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Текущая цель сброса.
|
||||
/// </summary>
|
||||
Abstractions.IDropTarget? CurrentDropTarget { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Порог начала перетаскивания в пикселях.
|
||||
/// </summary>
|
||||
double DragStartThreshold { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Включены ли асинхронные операции.
|
||||
/// </summary>
|
||||
bool EnableAsyncOperations { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Максимальное время ожидания асинхронной операции (мс).
|
||||
/// </summary>
|
||||
int AsyncOperationTimeout { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region События
|
||||
|
||||
/// <summary>
|
||||
/// Событие начала операции перетаскивания.
|
||||
/// </summary>
|
||||
event EventHandler<DragStartedEventArgs> DragStarted;
|
||||
|
||||
/// <summary>
|
||||
/// Событие обновления позиции перетаскивания.
|
||||
/// </summary>
|
||||
event EventHandler<DragUpdatedEventArgs> DragUpdated;
|
||||
|
||||
/// <summary>
|
||||
/// Событие изменения цели сброса.
|
||||
/// </summary>
|
||||
event EventHandler<DropTargetChangedEventArgs> DropTargetChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Событие завершения операции перетаскивания.
|
||||
/// </summary>
|
||||
event EventHandler<DragCompletedEventArgs> DragCompleted;
|
||||
|
||||
/// <summary>
|
||||
/// Событие отмены операции перетаскивания.
|
||||
/// </summary>
|
||||
event EventHandler<DragCancelledEventArgs> DragCancelled;
|
||||
|
||||
/// <summary>
|
||||
/// Событие ошибки в операции перетаскивания.
|
||||
/// </summary>
|
||||
event EventHandler<DragDropErrorEventArgs> ErrorOccurred;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Регистрация целей сброса
|
||||
|
||||
/// <summary>
|
||||
/// Регистрирует цель сброса.
|
||||
/// </summary>
|
||||
string RegisterDropTarget(Abstractions.IDropTarget target, Geometry.Rect bounds, int priority = 0, string? group = null);
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет границы цели сброса.
|
||||
/// </summary>
|
||||
bool UpdateDropTargetBounds(string id, Geometry.Rect bounds);
|
||||
|
||||
/// <summary>
|
||||
/// Отменяет регистрацию цели сброса.
|
||||
/// </summary>
|
||||
bool UnregisterDropTarget(string id);
|
||||
|
||||
/// <summary>
|
||||
/// Отменяет регистрацию всех целей в группе.
|
||||
/// </summary>
|
||||
void UnregisterDropTargetsInGroup(string group);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Асинхронные операции
|
||||
|
||||
/// <summary>
|
||||
/// Начинает операцию перетаскивания (асинхронно).
|
||||
/// </summary>
|
||||
Task<bool> StartDragAsync(Abstractions.IDragSource source, Geometry.Point startPosition);
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет позицию перетаскивания (асинхронно).
|
||||
/// </summary>
|
||||
Task UpdateDragAsync(Geometry.Point position);
|
||||
|
||||
/// <summary>
|
||||
/// Завершает операцию перетаскивания (асинхронно).
|
||||
/// </summary>
|
||||
Task<Enums.DragDropEffects> EndDragAsync(Geometry.Point position);
|
||||
|
||||
/// <summary>
|
||||
/// Отменяет операцию перетаскивания (асинхронно).
|
||||
/// </summary>
|
||||
Task CancelDragAsync();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Синхронные операции (для обратной совместимости)
|
||||
|
||||
/// <summary>
|
||||
/// Начинает операцию перетаскивания (синхронно).
|
||||
/// </summary>
|
||||
bool StartDrag(Abstractions.IDragSource source, Geometry.Point startPosition);
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет позицию перетаскивания (синхронно).
|
||||
/// </summary>
|
||||
void UpdateDrag(Geometry.Point position);
|
||||
|
||||
/// <summary>
|
||||
/// Завершает операцию перетаскивания (синхронно).
|
||||
/// </summary>
|
||||
Enums.DragDropEffects EndDrag(Geometry.Point position);
|
||||
|
||||
/// <summary>
|
||||
/// Отменяет операцию перетаскивания (синхронно).
|
||||
/// </summary>
|
||||
void CancelDrag();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Утилиты
|
||||
|
||||
/// <summary>
|
||||
/// Очищает все зарегистрированные цели.
|
||||
/// </summary>
|
||||
void ClearAllDropTargets();
|
||||
|
||||
/// <summary>
|
||||
/// Получает статистику использования.
|
||||
/// </summary>
|
||||
DragDropStats GetStats();
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Статистика использования Drag & Drop.
|
||||
/// </summary>
|
||||
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; }
|
||||
}
|
||||
Reference in New Issue
Block a user