namespace Lattice.UI.Docking.Abstractions; /// /// Предоставляет сервис для операций перетаскивания в UI-слое док-системы. /// Абстрагирует платформенно-зависимую логику перетаскивания и обеспечивает /// единый интерфейс для управления операциями drag-and-drop. /// /// /// Этот интерфейс служит мостом между базовым менеджером перетаскивания из Core /// и UI-контролами, добавляя визуальную обратную связь и обработку событий, /// специфичных для пользовательского интерфейса. /// public interface IDockDragDropService { /// /// Начинает операцию перетаскивания для указанного элемента. /// /// UI-контрол, который инициирует перетаскивание. /// /// Информация о перетаскивании, содержащая данные и параметры операции. /// /// /// Выбрасывается, если или равны null. /// /// /// Этот метод должен создавать визуальное представление перетаскиваемого элемента /// и инициировать отслеживание перемещения мыши. /// void StartDrag(IDockControl element, Core.DragDrop.Models.DragInfo dragInfo); /// /// Обновляет позицию текущей операции перетаскивания. /// /// Новая координата X курсора в экранных координатах. /// Новая координата Y курсора в экранных координатах. /// /// Вызывается при каждом перемещении мыши во время операции перетаскивания. /// Должен обновлять позицию визуального представления и проверять возможные цели сброса. /// void UpdateDrag(double x, double y); /// /// Завершает текущую операцию перетаскивания в указанной позиции. /// /// Координата X завершения перетаскивания. /// Координата Y завершения перетаскивания. /// /// Выполняет сброс данных на текущую цель (если она есть) и очищает ресурсы, /// выделенные для операции перетаскивания. /// void EndDrag(double x, double y); /// /// Отменяет текущую операцию перетаскивания. /// /// /// Вызывается при нажатии клавиши Escape или других действиях, приводящих к отмене. /// Должен восстанавливать исходное состояние элементов и очищать ресурсы. /// void CancelDrag(); /// /// Показывает визуальную подсказку о возможной позиции сброса. /// /// UI-контрол, для которого показывается подсказка. /// Предполагаемая позиция сброса. /// /// Используется для визуальной обратной связи, чтобы пользователь видел, /// куда будет помещен элемент при отпускании кнопки мыши. /// void ShowDropHint(IDockControl element, Models.DropPosition position); /// /// Скрывает текущую визуальную подсказку о сбросе. /// /// /// Вызывается, когда курсор покидает допустимую область сброса /// или операция перетаскивания завершается. /// void HideDropHint(); /// /// Событие, возникающее при начале операции перетаскивания. /// event EventHandler DragStarted; /// /// Событие, возникающее при обновлении позиции перетаскивания. /// event EventHandler DragUpdated; /// /// Событие, возникающее при завершении операции перетаскивания. /// event EventHandler DragCompleted; /// /// Событие, возникающее при отмене операции перетаскивания. /// event EventHandler DragCancelled; } /// /// Предоставляет данные для события начала перетаскивания. /// public class DragStartedEventArgs : EventArgs { /// /// Получает UI-контрол, который инициировал перетаскивание. /// /// /// Экземпляр , представляющий источник перетаскивания. /// Может быть null, если перетаскивание инициировано не из UI-элемента. /// public IDockControl? Source { get; } /// /// Получает информацию о перетаскивании. /// /// /// Экземпляр с данными перетаскивания. /// public Core.DragDrop.Models.DragInfo DragInfo { get; } /// /// Инициализирует новый экземпляр класса . /// /// Источник перетаскивания. /// Информация о перетаскивании. public DragStartedEventArgs(IDockControl? source, Core.DragDrop.Models.DragInfo dragInfo) { Source = source; DragInfo = dragInfo; } } /// /// Предоставляет данные для события обновления перетаскивания. /// public class DragUpdatedEventArgs : EventArgs { /// /// Получает UI-контрол, который инициировал перетаскивание. /// /// /// Экземпляр , представляющий источник перетаскивания. /// public IDockControl? Source { get; } /// /// Получает текущую координату X курсора. /// /// /// Координата X в экранных координатах. /// public double X { get; } /// /// Получает текущую координату Y курсора. /// /// /// Координата Y в экранных координатах. /// public double Y { get; } /// /// Получает информацию о перетаскивании. /// /// /// Экземпляр с текущими данными перетаскивания. /// public Core.DragDrop.Models.DragInfo DragInfo { get; } /// /// Инициализирует новый экземпляр класса . /// /// Источник перетаскивания. /// Текущая координата X. /// Текущая координата Y. /// Информация о перетаскивании. public DragUpdatedEventArgs(IDockControl? source, double x, double y, Core.DragDrop.Models.DragInfo dragInfo) { Source = source; X = x; Y = y; DragInfo = dragInfo; } } /// /// Предоставляет данные для события завершения перетаскивания. /// public class DragCompletedEventArgs : EventArgs { /// /// Получает UI-контрол, который инициировал перетаскивание. /// /// /// Экземпляр , представляющий источник перетаскивания. /// Может быть null, если операция была инициирована не из UI. /// public IDockControl? Source { get; } /// /// Получает UI-контрол, на который был выполнен сброс. /// /// /// Экземпляр , представляющий цель сброса. /// Может быть null, если сброс был выполнен вне допустимой области. /// public IDockControl? Target { get; } /// /// Получает позицию сброса относительно целевого элемента. /// /// /// Значение перечисления , указывающее позицию сброса. /// public Models.DropPosition DropPosition { get; } /// /// Получает информацию о перетаскивании. /// /// /// Экземпляр с данными завершенной операции. /// Может быть null, если операция была отменена. /// public Core.DragDrop.Models.DragInfo? DragInfo { get; } /// /// Получает значение, указывающее успешность операции сброса. /// /// /// true, если данные были успешно сброшены на цель; false, если операция была отменена /// или сброс не был выполнен. /// public bool Success { get; } /// /// Инициализирует новый экземпляр класса . /// /// Источник перетаскивания. /// Цель сброса. /// Позиция сброса. /// Информация о перетаскивании. /// Признак успешности операции. public DragCompletedEventArgs(IDockControl? source, IDockControl? target, Models.DropPosition dropPosition, Core.DragDrop.Models.DragInfo? dragInfo, bool success) { Source = source; Target = target; DropPosition = dropPosition; DragInfo = dragInfo; Success = success; } }