namespace AcDream.App.UI; /// /// 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 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); /// True ⇒ the target cell shows the accept (green) frame; false ⇒ reject (red). bool 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); }