using Lattice.UI.DragDrop.Abstractions;
using Microsoft.Extensions.DependencyInjection;
namespace Lattice.UI.DragDrop.Extensions;
///
/// Методы расширения для регистрации сервисов перетаскивания.
///
public static class ServiceCollectionExtensions
{
///
/// Добавляет сервисы перетаскивания.
///
public static IServiceCollection AddLatticeDragDrop(this IServiceCollection services)
{
// Регистрируем абстракции, которые будут реализованы в платформенных проектах
services.AddSingleton(typeof(IDragVisualProvider), typeof(DefaultDragVisualProvider));
services.AddSingleton(typeof(IDropVisualAdorner), typeof(DefaultDropVisualAdorner));
services.AddSingleton(typeof(IDragDropHost), typeof(DefaultDragDropHost));
return services;
}
///
/// Реализация по умолчанию для платформ, которые еще не имеют своей реализации.
///
private class DefaultDragVisualProvider : IDragVisualProvider
{
public object CreateDragVisual(Core.DragDrop.Models.DragInfo dragInfo, Core.Geometry.Point initialPosition)
=> new object();
public void UpdateDragVisualPosition(object dragVisual, Core.Geometry.Point position) { }
public void ReleaseDragVisual(object dragVisual) { }
}
private class DefaultDropVisualAdorner : IDropVisualAdorner
{
public void Show(Core.DragDrop.Models.DropInfo dropInfo, Core.Geometry.Rect targetBounds) { }
public void Update(Core.DragDrop.Models.DropInfo dropInfo) { }
public void Hide() { }
}
private class DefaultDragDropHost : IDragDropHost
{
public void ShowDragVisual(object dragVisual, Core.Geometry.Point position) { }
public void UpdateDragVisualPosition(object dragVisual, Core.Geometry.Point position) { }
public void HideDragVisual(object dragVisual) { }
public void ShowDropAdorner(IDropVisualAdorner adorner) { }
public void HideDropAdorner(IDropVisualAdorner adorner) { }
}
}