103 lines
2.6 KiB
C#
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;
|
|
}
|
|
}
|