DragAndDrop core
This commit is contained in:
102
Lattice.Core.DragDrop/Enums/DragDropEffects.cs
Normal file
102
Lattice.Core.DragDrop/Enums/DragDropEffects.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
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; // По умолчанию
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user