namespace Lattice.Core.DragDrop.Enums; /// /// Определяет эффекты, которые могут быть применены при операции перетаскивания. /// /// /// Этот перечисление используется для указания допустимых операций перетаскивания /// и передачи информации о результате операции между источником и целью. /// [Flags] public enum DragDropEffects { /// /// Операция перетаскивания не разрешена. /// None = 0, /// /// Данные копируются из источника в цель. /// Copy = 1 << 0, /// /// Данные перемещаются из источника в цель. /// Move = 1 << 1, /// /// Создается ссылка на исходные данные. /// Link = 1 << 2, /// /// Целевой элемент может прокручиваться во время перетаскивания. /// Scroll = 1 << 3, /// /// Комбинированный эффект копирования и перемещения. /// CopyOrMove = Copy | Move, /// /// Все эффекты разрешены. /// All = Copy | Move | Link | Scroll } /// /// Расширения для работы с DragDropEffects. /// public static class DragDropEffectsExtensions { /// /// Проверяет, содержит ли эффекты указанный эффект. /// /// Эффекты для проверки. /// Эффект для поиска. /// true, если эффект присутствует; в противном случае — false. public static bool HasEffect(this DragDropEffects effects, DragDropEffects effect) { return (effects & effect) == effect; } /// /// Проверяет, содержат ли эффекты копирование. /// /// Эффекты для проверки. /// true, если разрешено копирование; в противном случае — false. public static bool CanCopy(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Copy); } /// /// Проверяет, содержат ли эффекты перемещение. /// /// Эффекты для проверки. /// true, если разрешено перемещение; в противном случае — false. public static bool CanMove(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Move); } /// /// Проверяет, содержат ли эффекты ссылку. /// /// Эффекты для проверки. /// true, если разрешена ссылка; в противном случае — false. public static bool CanLink(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Link); } /// /// Получает наиболее подходящий эффект на основе модификаторов клавиатуры. /// /// Нажата ли клавиша Control. /// Нажата ли клавиша Shift. /// Нажата ли клавиша Alt. /// Наиболее подходящий эффект перетаскивания. public static DragDropEffects GetEffectFromKeys(bool controlKey, bool shiftKey, bool altKey) { if (controlKey && shiftKey) return DragDropEffects.Link; if (controlKey) return DragDropEffects.Copy; if (shiftKey) return DragDropEffects.Move; if (altKey) return DragDropEffects.Link; return DragDropEffects.Move; // По умолчанию } }