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
{
///
/// Проверяет, содержит ли эффекты указанный эффект.
///
public static bool HasEffect(this DragDropEffects effects, DragDropEffects effect)
{
return (effects & effect) == effect;
}
///
/// Проверяет, содержат ли эффекты копирование.
///
public static bool CanCopy(this DragDropEffects effects)
{
return effects.HasEffect(DragDropEffects.Copy);
}
///
/// Проверяет, содержат ли эффекты перемещение.
///
public static bool CanMove(this DragDropEffects effects)
{
return effects.HasEffect(DragDropEffects.Move);
}
///
/// Проверяет, содержат ли эффекты ссылку.
///
public static bool CanLink(this DragDropEffects effects)
{
return effects.HasEffect(DragDropEffects.Link);
}
///
/// Получает наиболее подходящий эффект на основе модификаторов клавиатуры.
///
public static DragDropEffects GetEffectFromKeys(bool controlKey, bool shiftKey, bool altKey)
{
if (controlKey && altKey)
return DragDropEffects.Link;
if (controlKey)
return DragDropEffects.Copy;
if (shiftKey)
return DragDropEffects.Move;
if (altKey)
return DragDropEffects.Link;
return DragDropEffects.Move; // По умолчанию
}
}