CCCPaste

Reorder Container - Fix #1 for 42.12

-- Mouse down: start potential drag-to-reorder
ReorderContainers_Mod.onMouseDown = function(self, x, y)
    -- 'self' is the container BUTTON
    local panel = self.parent
    local page  = panel and panel.parent or nil

    -- Call original (bound in ReorderContainers_InventoryPage.lua)
    self.pre_reorder_onMouseDown(self, x, y)

    self.reorderStartMouseY = getMouseY()
    self.reorderStartY      = self:getY()

    -- Can we drag? (needs the real page)
    self.canDragToReorder = page
        and not ReorderContainers_Mod.isLocked(page)
        and ReorderContainers_Mod.canReorderBackpacks(page) or false
end

-- Mouse move: do the drag inside the PANEL, compare thresholds using PAGE buttonSize
ReorderContainers_Mod.onMouseMove = function(self, dx, dy, skipOgMouseMove)
    if not skipOgMouseMove then
        self.pre_reorder_onMouseMove(self, dx, dy)
    end

    if not (self.pressed and self.canDragToReorder) then return end

    local panel = self.parent
    local page  = panel and panel.parent or nil
    if not (panel and page) then return end

    if math.abs(self.reorderStartMouseY - getMouseY()) > (page.buttonSize / 2) then
        self.draggingToReorder = true
    end

    if self.draggingToReorder then
        local x = getMouseX()
        local y = getMouseY()

        -- Position within the PANEL (buttons are children of the panel now)
        local panelAbsY = panel:getAbsoluteY()
        local newY = y - panelAbsY - (self:getHeight() / 2)

        -- Clamp to panel area (0..panel:getHeight()-button)
        newY = math.max(0, newY)

        self:setY(newY)
        self:bringToTop()
    end
end

-- Mouse move outside: keep existing behavior, re-use our onMouseMove
ReorderContainers_Mod.onMouseMoveOutside = function(self, dx, dy)
    self.pre_reorder_onMouseMoveOutside(self, dx, dy)
    ReorderContainers_Mod.onMouseMove(self, dx, dy, true)

    if self.draggingToReorder and not isMouseButtonDown(0) then
        ReorderContainers_Mod.onMouseUp(self, 0, 0)
    end
end

-- Mouse up: apply new order on the PAGE
ReorderContainers_Mod.onMouseUp = function(self, x, y)
    local panel = self.parent
    local page  = panel and panel.parent or nil

    if self.draggingToReorder and page then
        self.pressed = false
        self.draggingToReorder = false
        page:reorderContainerButtons(self)
        page:refreshBackpacks()
    else
        self.pre_reorder_onMouseUp(self, x, y)
    end
end