mirror of
https://github.com/cyanfish/naps2.git
synced 2024-09-19 03:37:38 +03:00
58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using Eto.Drawing;
|
|
using Eto.Forms;
|
|
using NAPS2.ImportExport.Images;
|
|
|
|
namespace NAPS2.EtoForms;
|
|
|
|
public class ImageListViewBehavior : ListViewBehavior<UiImage>
|
|
{
|
|
private readonly UiThumbnailProvider _thumbnailProvider;
|
|
private readonly ImageTransfer _imageTransfer;
|
|
|
|
public ImageListViewBehavior(UiThumbnailProvider thumbnailProvider, ImageTransfer imageTransfer)
|
|
{
|
|
_thumbnailProvider = thumbnailProvider;
|
|
_imageTransfer = imageTransfer;
|
|
MultiSelect = true;
|
|
ShowLabels = false;
|
|
ScrollOnDrag = true;
|
|
UseHandCursor = true;
|
|
}
|
|
|
|
public override Image GetImage(UiImage item, int imageSize)
|
|
{
|
|
return _thumbnailProvider.GetThumbnail(item, imageSize).ToEtoImage();
|
|
}
|
|
|
|
public override void SetDragData(ListSelection<UiImage> selection, IDataObject dataObject)
|
|
{
|
|
if (selection.Any())
|
|
{
|
|
using var selectedImages = selection.Select(x => x.GetClonedImage()).ToDisposableList();
|
|
_imageTransfer.AddTo(dataObject, selectedImages.InnerList);
|
|
}
|
|
}
|
|
|
|
public override DragEffects GetDropEffect(IDataObject dataObject)
|
|
{
|
|
try
|
|
{
|
|
if (_imageTransfer.IsIn(dataObject))
|
|
{
|
|
var data = _imageTransfer.GetFrom(dataObject);
|
|
return data.ProcessId == Process.GetCurrentProcess().Id
|
|
? DragEffects.Move
|
|
: DragEffects.Copy;
|
|
}
|
|
if (dataObject.Contains("FileDrop")) // TODO: Constant
|
|
{
|
|
return DragEffects.Copy;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.ErrorException("Error receiving drag/drop", ex);
|
|
}
|
|
return DragEffects.None;
|
|
}
|
|
} |