local TL, TC, TR = 'TOPLEFT', 'TOP', 'TOPRIGHT' local ML, MC, MR = 'LEFT', 'CENTER', 'RIGHT' local BL, BC, BR = 'BOTTOMLEFT', 'BOTTOM', 'BOTTOMRIGHT' local _G = _G local bindings = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 'SHIFT-1', 'SHIFT-2', 'SHIFT-3', 'SHIFT-4', 'SHIFT-5', 'SHIFT-6', 'SHIFT-7', 'SHIFT-8', 'SHIFT-9', 'SHIFT-0', 'SHIFT--', 'SHIFT-=', 'CTRL-1', 'CTRL-2', 'CTRL-3', 'CTRL-4', 'CTRL-5', 'CTRL-6', 'CTRL-7', 'CTRL-8', 'CTRL-9', 'CTRL-0', 'CTRL--', 'CTRL-=', 'ALT-1', 'ALT-2', 'ALT-3', 'ALT-4', 'ALT-5', 'ALT-6', 'ALT-7', 'ALT-8', 'ALT-9', 'ALT-0', 'ALT--', 'ALT-=', } local buttonname = 'actionbutton' local barpadding = 1 local function update_bindings () local h,b for i = 1,48 do h = _G[buttonname..i..'HotKey'] b = GetBindingText(bindings[i], 'KEY_') b = b:gsub('SHIFT%-', 's') b = b:gsub('CTRL%-', 'c') b = b:gsub('ALT%-', 'a') h:SetText(b) end end local function update_text () for i = 1,48 do _G[buttonname..i..'Name']:SetText('') end end local function update_looks (b) local name = b:GetName() local icon = _G[name..'Icon'] local texture = _G[name..'NormalTexture2'] or _G[name..'NormalTexture'] icon:SetTexCoord(0.08,0.92,0.08,0.92) texture:SetTexCoord(0,0,0,0) end local function create_button (name, id) local a = this local b = CreateFrame('CheckButton', name..id, UIParent, 'ActionBarButtonTemplate') this = b ActionButton_UpdateAction() this = a b:SetScript('OnAttributeChanged', Actionbutton_Update) b:SetAttribute('type', 'action') b:SetAttribute('action', id) b:SetID(id) return b end local function create_bar (name, first, last, padding) local bar = CreateFrame('Frame', nil, UIParent) local button local numbuttons = last - first + 1 button = _G[name..first] or create_button(name, first) button:SetParent(bar) button:SetPoint(BL, bar, BL) update_looks(button) for i = first + 1, last do button = _G[name..i] or create_button(name, i) button:SetParent(bar) button:SetPoint(ML, _G[name..i-1], MR, padding, 0) update_looks(button) end bar:SetWidth(numbuttons * button:GetWidth() + (numbuttons - 1) * padding) bar:SetHeight(button:GetHeight()) return bar end RegisterEvent('actionbar', 'PLAYER_LOGIN', function () for i = 1, 48 do SetBindingClick(bindings[i], buttonname..i) end end) Actionbar1 = create_bar(buttonname, 1, 12, barpadding) Actionbar1:SetPoint(BC, UIParent, BC, 0, barpadding) Actionbar1:Show() Actionbar2 = create_bar(buttonname, 13, 24, barpadding) Actionbar2:SetPoint(BC, Actionbar1, TC, 0, barpadding) Actionbar2:Show() Actionbar3 = create_bar(buttonname, 25, 36, barpadding) Actionbar3:SetPoint(BC, Actionbar2, TC, 0, barpadding) Actionbar3:Show() Actionbar4 = create_bar(buttonname, 37, 48, barpadding) Actionbar4:SetPoint(BC, Actionbar3, TC, 0, barpadding) Actionbar4:Show() Actionbar5 = create_bar('PetActionButton', 1, 10, barpadding) Actionbar5:SetPoint(BC, Actionbar4, TC, 0, barpadding) Actionbar5:Show() hooksecurefunc('ActionButton_UpdateHotkeys', update_bindings) hooksecurefunc('ActionButton_Update', update_text)