namespace Lattice.Core.DragDrop.Abstractions; /// /// Определяет контракт для объектов, которые могут быть источником данных /// в операции перетаскивания. /// /// /// Объекты, реализующие этот интерфейс, могут инициировать операции перетаскивания /// и предоставлять данные для передачи другим элементам через механизм drag-and-drop. /// public interface IDragSource { /// /// Определяет, может ли объект начать операцию перетаскивания. /// /// /// Кортеж, содержащий флаг возможности начала перетаскивания и информацию о перетаскивании. /// /// /// Этот метод вызывается системой перетаскивания для проверки возможности /// начала операции. Если метод возвращает true, он должен заполнить /// DragInfo необходимыми данными. /// Task<(bool CanStart, Models.DragInfo? DragInfo)> CanStartDragAsync(CancellationToken cancellationToken = default); /// /// Начинает операцию перетаскивания. /// /// Информация о перетаскивании. /// /// true, если операция перетаскивания успешно начата; в противном случае — false. /// /// /// Этот метод вызывается, когда пользователь начинает перетаскивание элемента. /// Реализация должна подготовить данные для перетаскивания и, возможно, /// создать визуальное представление перетаскиваемого объекта. /// Task StartDragAsync(Models.DragInfo dragInfo, CancellationToken cancellationToken = default); /// /// Вызывается при завершении операции перетаскивания. /// /// Исходная информация о перетаскивании. /// Эффекты, которые были применены при сбросе. /// /// Этот метод вызывается после завершения операции перетаскивания /// (успешного или неуспешного). Реализация может выполнить очистку /// или обновить состояние на основе результата операции. /// Task DragCompletedAsync(Models.DragInfo dragInfo, Enums.DragDropEffects effects, CancellationToken cancellationToken = default); /// /// Вызывается при отмене операции перетаскивания. /// /// Исходная информация о перетаскивании. /// /// Этот метод вызывается, когда операция перетаскивания была отменена /// пользователем (например, нажатием клавиши Escape). /// Task DragCancelledAsync(Models.DragInfo dragInfo, CancellationToken cancellationToken = default); }