namespace AcDream.App.UI; /// /// Where a dragged item came from — the retail InqDropIconInfo flag /// distinction (flags & 0xE == 0 fresh-from-inventory vs /// flags & 4 within-list reorder) expressed as a typed enum. The drop /// handler maps SourceKind + target back to the fresh-vs-reorder decision. /// Decomp anchors: gmToolbarUI 0x004bd162 / 0x004bd1af; InqDropIconInfo 230533. /// public enum ItemDragSource { Inventory, ShortcutBar, Equipment, Ground } /// /// Snapshot of a drag-in-progress, taken at drag-begin (so a server move arriving /// mid-drag can't mutate it under us). Port of retail's m_dragElement + /// InqDropIconInfo out-params (objId/container/flags, decomp 230533). /// SourceContainer is intentionally NOT stored: the handler resolves the /// LIVE container via ClientObjectTable.Get(ObjId).ContainerId at drop — the /// same container id retail reads off the dragged element, single source of truth. /// public sealed record ItemDragPayload( uint ObjId, // dragged weenie guid (retail itemID, +0x5FC) ItemDragSource SourceKind, // what kind of slot it left int SourceSlot, // the source cell's SlotIndex (retail m_lastShortcutNumDragged) UiItemSlot SourceCell); // back-ref: reorder-restore / clear source state / ghost