Files
ShaguTweaks-ClassicAPI/mods/actionbar-grid.lua
T

63 lines
2.3 KiB
Lua

-- Extend the native extra-bar preference to main/bonus action buttons.
-- Own exactly one grid reference; drag-and-drop owns its separate reference.
local _G = ShaguTweaks.GetGlobalEnv()
local function BonusVisible()
return _G.BonusActionBarFrame and BonusActionBarFrame:IsVisible()
end
local function HideCoveredButton(button)
if ShaguTweaks.API.IsSupportedRuntime() and BonusVisible() then button:Hide() end
end
local function RefreshBaseButtons()
if not ShaguTweaks.API.IsSupportedRuntime() then return end
local previous = this
for i = 1, 12 do
local button = _G["ActionButton" .. i]
if button then
if BonusVisible() then button:Hide()
else
-- Let the native updater restore filled/empty slot visibility using
-- the existing grid references. Never change the contents of a slot.
this = button
ActionButton_Update()
end
end
end
this = previous
end
local function UpdateGrid()
if not ShaguTweaks.API.IsSupportedRuntime() then return end
local show = _G.ALWAYS_SHOW_MULTIBARS == 1 or _G.ALWAYS_SHOW_MULTIBARS == "1"
for _, prefix in ipairs({"ActionButton", "BonusActionButton"}) do
for i = 1, 12 do
local button = _G[prefix .. i]
if button then
if show and not button.stAlwaysShowGrid then
button.stAlwaysShowGrid = true
ActionButton_ShowGrid(button)
elseif not show and button.stAlwaysShowGrid then
button.stAlwaysShowGrid = nil
ActionButton_HideGrid(button)
end
end
end
end
RefreshBaseButtons()
end
ShaguTweaks.hooksecurefunc("MultiActionBar_UpdateGridVisibility", UpdateGrid)
-- Floating artwork no longer masks the caster bar below the form bar.
-- Native button refreshes and dragging can call Show again: keep covered
-- buttons hidden until the actual bonus frame closes (including animations).
for i = 1, 12 do
local button = _G["ActionButton" .. i]
if button then ShaguTweaks.hooksecurefunc(button, "Show", HideCoveredButton) end
end
if _G.BonusActionBarFrame then
ShaguTweaks.HookScript(BonusActionBarFrame, "OnShow", RefreshBaseButtons)
ShaguTweaks.HookScript(BonusActionBarFrame, "OnHide", RefreshBaseButtons)
end
local events = CreateFrame("Frame")
events:RegisterEvent("PLAYER_ENTERING_WORLD")
events:SetScript("OnEvent", function()
if ShaguTweaks.API.IsSupportedRuntime() then UpdateGrid() end
end)