Files
Lattice/Lattice.Core.DragDrop/Extensions/DropInfoExtensions.cs

74 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Lattice.Core.DragDrop.Enums;
using Lattice.Core.Geometry;
namespace Lattice.Core.DragDrop.Extensions;
/// <summary>
/// Методы расширения для DropInfo.
/// </summary>
public static class DropInfoExtensions
{
/// <summary>
/// Проверяет, могут ли данные быть приведены к указанному типу.
/// </summary>
/// <typeparam name="T">Тип данных для проверки.</typeparam>
/// <param name="dropInfo">Информация о сбросе.</param>
/// <returns>true, если данные могут быть приведены к типу T; в противном случае — false.</returns>
public static bool CanAccept<T>(this Models.DropInfo dropInfo)
where T : class
{
return dropInfo.Data is T;
}
/// <summary>
/// Пытается получить данные как указанный тип.
/// </summary>
/// <typeparam name="T">Тип, к которому нужно привести данные.</typeparam>
/// <param name="dropInfo">Информация о сбросе.</param>
/// <returns>Данные как тип T или null.</returns>
public static T? GetDataAs<T>(this Models.DropInfo dropInfo)
where T : class
{
return dropInfo.Data as T;
}
/// <summary>
/// Получает данные как указанный тип или выбрасывает исключение.
/// </summary>
/// <typeparam name="T">Тип, к которому нужно привести данные.</typeparam>
/// <param name="dropInfo">Информация о сбросе.</param>
/// <returns>Данные как тип T.</returns>
/// <exception cref="InvalidCastException">Выбрасывается, если данные не могут быть приведены к типу T.</exception>
public static T GetRequiredDataAs<T>(this Models.DropInfo dropInfo)
where T : class
{
if (dropInfo.Data is not T data)
{
throw new InvalidCastException(
$"Ожидался тип {typeof(T).Name}, но получен {dropInfo.Data?.GetType().Name ?? "null"}");
}
return data;
}
/// <summary>
/// Проверяет, содержится ли позиция в указанных границах.
/// </summary>
/// <param name="dropInfo">Информация о сбросе.</param>
/// <param name="bounds">Границы для проверки.</param>
/// <returns>true, если позиция находится в границах; в противном случае — false.</returns>
public static bool IsInBounds(this Models.DropInfo dropInfo, Rect bounds)
{
return bounds.Contains(dropInfo.Position);
}
/// <summary>
/// Проверяет можно ли добавить эффект перетаскивания.
/// </summary>
/// <param name="dropInfo"></param>
/// <param name="effect"></param>
/// <returns></returns>
public static bool CanAcceptEffect(this Models.DropInfo dropInfo, DragDropEffects effect)
{
return dropInfo.AllowedEffects.HasEffect(effect);
}
}