local addon,data = ...
data = data or {}
data.BlizzUI = data.BlizzUI or CreateFrame("Frame")
--MainMenuBarArtFrame:SetParent(data.BlizzUI)
data.BlizzUI:Hide()
local BUTTON_SIZE, BUTTON_SPACING = 50, 1
------------------------------------------------------
--[[ Bar Setup ]]--
------------------------------------------------------
local barFrame = CreateFrame("Frame", "XBar_Main", UIParent, "SecureHandlerStateTemplate")
barFrame:SetSize((BUTTON_SIZE + BUTTON_SPACING) * NUM_ACTIONBAR_BUTTONS, BUTTON_SIZE)
barFrame:SetPoint("CENTER")
local background = barFrame:CreateTexture(nil, "BACKGROUND")
background:SetColorTexture(0, 0, 0, 0.5)
background:SetAllPoints()
barFrame:Execute([[
ActionButtons = newtable()
]])
------------------------------------------------------
--[[ Button Setup ]]--
------------------------------------------------------
local buttons = { }
for id = 1, NUM_ACTIONBAR_BUTTONS do
local button = CreateFrame("CheckButton", "$parent_Button" .. id, barFrame, "ActionBarButtonTemplate")
button:SetID(id)
button:SetSize(BUTTON_SIZE, BUTTON_SIZE)
if id ~= 1 then
button:SetPoint("LEFT", buttons[id - 1], "RIGHT", BUTTON_SPACING, 0)
else
button:SetPoint("LEFT", 5, 0)
end
local background = button:CreateTexture(nil, "BACKGROUND")
background:SetColorTexture(1, 1, 1, 0.5)
background:SetAllPoints()
button.NormalTexture:Hide()
barFrame:SetFrameRef("button", button)
barFrame:Execute(([[
ActionButtons[%s] = self:GetFrameRef("button")
]]):format(id))
buttons[id] = button
end
barFrame.Buttons = buttons
------------------------------------------------------
--[[ Secure Stuff ]]--
------------------------------------------------------
barFrame:Execute([[
self:SetAttribute("frameref-button", nil)
]])
barFrame:SetAttribute('_onstate-page', ([[
if not newstate then return end
newstate = tonumber(newstate)
if HasVehicleActionBar() then
newPage = GetVehicleBarIndex() or 0
elseif HasOverrideActionBar() then
newPage = GetOverrideBarIndex() or 0
elseif HasTempShapeshiftActionBar() then
newPage = GetTempShapeshiftBarIndex() or 0
elseif HasBonusActionBar() and GetActionBarPage() == 1 then
newPage = GetBonusBarIndex() or 0
else
newPage = 0
end
if ( newPage == 0 ) then
newstate = GetActionBarPage()
end
self:SetAttribute("actionpage", newstate)
for id = 1, #ActionButtons do
ActionButtons[id]:SetAttribute('actionpage', newstate)
end
]]):gsub('NUM_ACTIONBAR_BUTTONS', NUM_ACTIONBAR_BUTTONS))
------------------------------------------------------
--[[ Registration Stuff ]]--
------------------------------------------------------
RegisterStateDriver(
barFrame, "page", string.format(
"[vehicleui][possessbar] %d; [vehicleui] %d; [overridebar] %d; [shapeshift] %d; " ..
"[bar:2] 2; [bar:3] 3; [bar:4] 4; [bar:5] 5; [bar:6] 6; " ..
"[bonusbar:1] 7; [bonusbar:2] 8; [bonusbar:3] 9; [bonusbar:4] 10; [bonusbar:5] 11; 1",
GetVehicleBarIndex(), GetVehicleBarIndex(), GetOverrideBarIndex(), GetTempShapeshiftBarIndex())
);
OverrideActionBarLeaveFrameLeaveButton:SetParent(barFrame)
OverrideActionBarLeaveFrameLeaveButton:SetAllPoints(buttons[12])
RegisterStateDriver(OverrideActionBarLeaveFrameLeaveButton, "visibility", "[canexitvehicle] show; hide")
local function OnEvent(self,event,...)
if event == "UPDATE_VEHICLE_ACTIONBAR" then
barFrame:Execute(([[ self:SetAttribute('state-page',GetVehicleBarIndex()) ]]))
elseif event == "UPDATE_OVERRIDE_ACTIONBAR" then
barFrame:Execute(([[ self:SetAttribute('state-page',GetOverrideBarIndex()) ]]))
end
end
barFrame:RegisterEvent("UPDATE_VEHICLE_ACTIONBAR")
barFrame:RegisterEvent("UPDATE_OVERRIDE_ACTIONBAR")
barFrame:SetScript("OnEvent",OnEvent)