namespace AcDream.App.UI;
///
/// Visual result of a drag-over query. Retail handlers can consume a drag-over
/// message without setting either accept or reject art; shortcut aliases over a
/// physical item list use that neutral path.
///
public enum ItemDragAcceptance
{
None,
Accept,
Reject,
}
///
/// A panel controller implements this and registers itself on each of its
/// s. Port of retail's m_dragHandler vtable
/// (RegisterItemListDragHandler, decomp 230461; confirmed acclient
/// 0x004a539e + the gmToolbarUI block 0x004bdd89).
/// decides the neutral/accept/reject overlay only (advisory).
/// is authoritative — it performs the action, or
/// no-ops to reject.
///
public interface IItemListDragHandler
{
/// The drag STARTED from a cell in this list — retail's RecvNotice_ItemListBeginDrag
/// → RemoveShortcut (decomp 0x004bd930/0x004bd450): the handler removes the lifted item from its
/// model + wire so the source slot empties immediately. The item is "in hand" until
/// HandleDropRelease (place) or the drag ends off-target (stays removed). No restore on cancel.
void OnDragLift(UiItemList sourceList, UiItemSlot sourceCell, ItemDragPayload payload);
/// Returns the advisory target-cell overlay state.
ItemDragAcceptance OnDragOver(UiItemList targetList, UiItemSlot targetCell, ItemDragPayload payload);
/// Perform the drop (issue the per-panel wire action), or no-op to reject.
void HandleDropRelease(UiItemList targetList, UiItemSlot targetCell, ItemDragPayload payload);
}