// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System.Collections.Generic;
using System.Linq;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.GUI.Drag
{
///
/// Handles a list of s
///
public class DragHandlers : List
{
///
/// Called when drag enter.
///
/// The data.
/// The result.
public DragDropEffect OnDragEnter(DragData data)
{
DragDropEffect effect = DragDropEffect.None;
for (var i = 0; i < Count; i++)
{
var dragHelper = this[i];
if (dragHelper.OnDragEnter(data))
{
effect = dragHelper.Effect;
}
}
return effect;
}
///
/// Called when drag leaves.
///
public void OnDragLeave()
{
for (var i = 0; i < Count; i++)
{
this[i].OnDragLeave();
}
}
///
/// Called when drag drops.
///
/// The instance containing the event data.
public void OnDragDrop(DragEventArgs dragEventArgs)
{
for (var i = 0; i < Count; i++)
{
this[i].OnDragDrop(dragEventArgs);
}
}
///
/// Determines whether has valid drag handler to handle the drag request.
///
public bool HasValidDrag
{
get
{
for (var i = 0; i < Count; i++)
{
if (this[i].HasValidDrag)
{
return true;
}
}
return false;
}
}
///
/// Gets the first valid drag helper.
///
/// The drag helper.
public DragHelper WithValidDrag()
{
return this
.DefaultIfEmpty()
.First(helper => helper.HasValidDrag);
}
///
/// Gets the valid drag effect to use.
///
public DragDropEffect Effect
{
get
{
for (var i = 0; i < Count; i++)
{
var dragHelper = this[i];
if (dragHelper.HasValidDrag)
{
return dragHelper.Effect;
}
}
return DragDropEffect.None;
}
}
}
}