emby-toolbox/EmbyToolbox/Behaviors/ConversionQueueDropTargetBehavior.cs
Emby Toolbox 6264b487fe Initial commit: Emby Toolbox (conversion scroll fix, bulk Del for tracks).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 21:33:47 +05:00

103 lines
2.6 KiB
C#

using System.Windows;
using EmbyToolbox.ViewModels;
namespace EmbyToolbox.Behaviors;
public static class ConversionQueueDropTargetBehavior
{
public static readonly DependencyProperty IsDropTargetEnabledProperty = DependencyProperty.RegisterAttached(
"IsDropTargetEnabled",
typeof(bool),
typeof(ConversionQueueDropTargetBehavior),
new PropertyMetadata(false, OnIsDropTargetEnabledChanged));
public static void SetIsDropTargetEnabled(DependencyObject d, bool value) => d.SetValue(IsDropTargetEnabledProperty, value);
public static bool GetIsDropTargetEnabled(DependencyObject d) => (bool)d.GetValue(IsDropTargetEnabledProperty);
private static void OnIsDropTargetEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is not UIElement el)
{
return;
}
if (e.OldValue is true)
{
el.PreviewDragOver -= OnPreviewDragOver;
el.DragLeave -= OnDragLeave;
el.Drop -= OnDrop;
}
if (e.NewValue is not true)
{
return;
}
el.AllowDrop = true;
el.PreviewDragOver += OnPreviewDragOver;
el.DragLeave += OnDragLeave;
el.Drop += OnDrop;
}
private static void OnDragLeave(object sender, DragEventArgs e)
{
if (sender is not FrameworkElement fe)
{
return;
}
if (fe.DataContext is ConversionViewModel vm)
{
vm.IsQueueDropHighlight = false;
}
}
private static void OnPreviewDragOver(object sender, DragEventArgs e)
{
if (sender is not FrameworkElement fe)
{
return;
}
if (fe.DataContext is not ConversionViewModel vm)
{
return;
}
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Copy;
e.Handled = true;
vm.IsQueueDropHighlight = true;
return;
}
e.Effects = DragDropEffects.None;
vm.IsQueueDropHighlight = false;
}
private static void OnDrop(object sender, DragEventArgs e)
{
if (sender is not FrameworkElement fe)
{
return;
}
if (fe.DataContext is not ConversionViewModel vm)
{
return;
}
vm.IsQueueDropHighlight = false;
if (e.Data.GetData(DataFormats.FileDrop) is not string[] paths || paths.Length == 0)
{
e.Handled = true;
return;
}
vm.ProcessPathsDroppedOnQueue(paths);
e.Handled = true;
}
}