// 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; } } } }