namespace Lattice.Core.DragDrop.Abstractions; /// /// Определяет контракт для объектов, которые могут быть источником данных /// в операции перетаскивания. /// /// /// /// Объекты, реализующие этот интерфейс, могут инициировать операции перетаскивания /// и предоставлять данные для передачи другим элементам через механизм drag-and-drop. /// /// /// Интерфейс полностью асинхронный и поддерживает отмену операций через CancellationToken. /// Все методы должны быть потокобезопасными и поддерживать вызов из любого потока. /// /// public interface IDragSource { /// /// Пытается начать операцию перетаскивания из указанной позиции. /// /// Начальная позиция операции в координатах экрана. /// Токен отмены операции. /// /// Информация о перетаскивании, если операция может быть начата; в противном случае — null. /// Возвращаемый объект должен быть полностью инициализирован, /// включая данные, разрешенные эффекты и ссылку на источник. /// /// /// /// Этот метод вызывается сервисом перетаскивания при попытке начать операцию /// (обычно при нажатии и перемещении мыши). Метод должен проверить, может ли /// источник начать перетаскивание в текущем контексте. /// /// /// Реализация должна быть быстрой и не выполнять длительных операций. /// Если подготовка данных требует времени, ее следует выполнить асинхронно /// после подтверждения возможности начала. /// /// Task TryStartDragAsync(Geometry.Point startPosition, CancellationToken cancellationToken = default); /// /// Уведомляет источник о завершении операции перетаскивания. /// /// Информация о перетаскивании, полученная при начале операции. /// Эффекты, которые были применены при сбросе. /// Токен отмены операции. /// Задача, представляющая асинхронную операцию. /// /// /// Этот метод вызывается после завершения операции перетаскивания /// (успешного или неуспешного). Реализация может: /// /// /// Выполнить очистку ресурсов, связанных с операцией /// Обновить состояние на основе результата (например, удалить данные при перемещении) /// Отобразить визуальную обратную связь о результате /// /// /// Если операция завершилась с эффектом , /// источник обычно должен удалить или обновить исходные данные. /// /// Task OnDragCompletedAsync(Models.DragInfo dragInfo, Enums.DragDropEffects effects, CancellationToken cancellationToken = default); /// /// Уведомляет источник об отмене операции перетаскивания. /// /// Информация о перетаскивании, полученная при начале операции. /// Токен отмены операции. /// Задача, представляющая асинхронную операцию. /// /// /// Этот метод вызывается, когда операция перетаскивания была отменена /// пользователем (например, нажатием клавиши Escape) или системой. /// /// /// Реализация должна выполнить очистку и восстановить исходное состояние. /// Обычно это включает освобождение ресурсов и сброс визуальных индикаторов. /// /// Task OnDragCancelledAsync(Models.DragInfo dragInfo, CancellationToken cancellationToken = default); }