namespace Lattice.Core.DragDrop.Abstractions;
///
/// Определяет контракт для объектов, которые могут быть источником данных
/// в операции перетаскивания.
///
///
/// Объекты, реализующие этот интерфейс, могут инициировать операции перетаскивания
/// и предоставлять данные для передачи другим элементам через механизм drag-and-drop.
///
public interface IDragSource
{
///
/// Определяет, может ли объект начать операцию перетаскивания.
///
///
/// Информация о перетаскивании, которая будет заполнена данными, если операция разрешена.
///
///
/// true, если объект может начать перетаскивание; в противном случае — false.
///
///
/// Этот метод вызывается системой перетаскивания для проверки возможности
/// начала операции. Если метод возвращает true, он должен заполнить
/// необходимыми данными.
///
bool CanStartDrag(out Models.DragInfo? dragInfo);
///
/// Начинает операцию перетаскивания.
///
/// Информация о перетаскивании.
///
/// true, если операция перетаскивания успешно начата; в противном случае — false.
///
///
/// Этот метод вызывается, когда пользователь начинает перетаскивание элемента.
/// Реализация должна подготовить данные для перетаскивания и, возможно,
/// создать визуальное представление перетаскиваемого объекта.
///
bool StartDrag(Models.DragInfo dragInfo);
///
/// Вызывается при завершении операции перетаскивания.
///
/// Исходная информация о перетаскивании.
/// Эффекты, которые были применены при сбросе.
///
/// Этот метод вызывается после завершения операции перетаскивания
/// (успешного или неуспешного). Реализация может выполнить очистку
/// или обновить состояние на основе результата операции.
///
void DragCompleted(Models.DragInfo dragInfo, Enums.DragDropEffects effects);
///
/// Вызывается при отмене операции перетаскивания.
///
/// Исходная информация о перетаскивании.
///
/// Этот метод вызывается, когда операция перетаскивания была отменена
/// пользователем (например, нажатием клавиши Escape).
///
void DragCancelled(Models.DragInfo dragInfo);
}