102 lines
3.3 KiB
C#
102 lines
3.3 KiB
C#
namespace Lattice.Core.DragDrop.Enums;
|
||
|
||
/// <summary>
|
||
/// Определяет эффекты, которые могут быть применены при операции перетаскивания.
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// Этот перечисление используется для указания допустимых операций перетаскивания
|
||
/// и передачи информации о результате операции между источником и целью.
|
||
/// </remarks>
|
||
[Flags]
|
||
public enum DragDropEffects
|
||
{
|
||
/// <summary>
|
||
/// Операция перетаскивания не разрешена.
|
||
/// </summary>
|
||
None = 0,
|
||
|
||
/// <summary>
|
||
/// Данные копируются из источника в цель.
|
||
/// </summary>
|
||
Copy = 1 << 0,
|
||
|
||
/// <summary>
|
||
/// Данные перемещаются из источника в цель.
|
||
/// </summary>
|
||
Move = 1 << 1,
|
||
|
||
/// <summary>
|
||
/// Создается ссылка на исходные данные.
|
||
/// </summary>
|
||
Link = 1 << 2,
|
||
|
||
/// <summary>
|
||
/// Целевой элемент может прокручиваться во время перетаскивания.
|
||
/// </summary>
|
||
Scroll = 1 << 3,
|
||
|
||
/// <summary>
|
||
/// Комбинированный эффект копирования и перемещения.
|
||
/// </summary>
|
||
CopyOrMove = Copy | Move,
|
||
|
||
/// <summary>
|
||
/// Все эффекты разрешены.
|
||
/// </summary>
|
||
All = Copy | Move | Link | Scroll
|
||
}
|
||
|
||
/// <summary>
|
||
/// Расширения для работы с DragDropEffects.
|
||
/// </summary>
|
||
public static class DragDropEffectsExtensions
|
||
{
|
||
/// <summary>
|
||
/// Проверяет, содержит ли эффекты указанный эффект.
|
||
/// </summary>
|
||
public static bool HasEffect(this DragDropEffects effects, DragDropEffects effect)
|
||
{
|
||
return (effects & effect) == effect;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Проверяет, содержат ли эффекты копирование.
|
||
/// </summary>
|
||
public static bool CanCopy(this DragDropEffects effects)
|
||
{
|
||
return effects.HasEffect(DragDropEffects.Copy);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Проверяет, содержат ли эффекты перемещение.
|
||
/// </summary>
|
||
public static bool CanMove(this DragDropEffects effects)
|
||
{
|
||
return effects.HasEffect(DragDropEffects.Move);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Проверяет, содержат ли эффекты ссылку.
|
||
/// </summary>
|
||
public static bool CanLink(this DragDropEffects effects)
|
||
{
|
||
return effects.HasEffect(DragDropEffects.Link);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Получает наиболее подходящий эффект на основе модификаторов клавиатуры.
|
||
/// </summary>
|
||
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; // По умолчанию
|
||
}
|
||
} |