WoWInterface SVN idActionbar

[/] [trunk/] [Addon.lua] - Rev 9

Compare with Previous | Blame | View Log

local _G = _G
local TL, TC, TR = 'TOPLEFT', 'TOP', 'TOPRIGHT'
local ML, MC, MR = 'LEFT', 'CENTER', 'RIGHT'
local BL, BC, BR = 'BOTTOMLEFT', 'BOTTOM', 'BOTTOMRIGHT'

local eventframe = CreateFrame('Frame')

local BUTTON_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 BUTTON_NAME = 'idActionbarButton'
local BUTTON_PADDING = 1
local BAR_NAME = 'idActionbarBar'

local bars = {}
_G.IDACTIONBAR_BARS = bars

local enable
local onevent
local set_button_look_zoomed
local create_button
local create_bar

local buttons

function set_button_look_zoomed (button)
        local name = button:GetName()
        local icon = _G[name..'Icon']
        local texture = _G[name..'NormalTexture2'] or _G[name..'NormalTexture']
        _G[name..'Name']:Hide()
        _G[name..'HotKey']:Hide()

        icon:SetTexCoord(0.08,0.92,0.08,0.92)
        texture:SetTexCoord(0,0,0,0)
end

function create_button (id)
        local button = CreateFrame('CheckButton', BUTTON_NAME .. id, UIParent, 'ActionBarButtonTemplate')
        button:SetAttribute('type', 'action')
        button:SetAttribute('action', id)
        return button
end

function create_bar (barname, buttons, cols)
        local bar = CreateFrame('Frame', barname, UIParent)
        local rows = math.ceil(#buttons / cols)

        bar.buttons = buttons

        for i, button in ipairs(buttons) do
                button:SetParent(bar)
                set_button_look_zoomed(button)

                button:ClearAllPoints()
                if i == 1 then
                        button:SetPoint(BL, bar, BL)
                else
                        if i % cols == 1 then
                                button:SetPoint(BC, buttons[i - cols], TC, 0, BUTTON_PADDING)
                        else
                                button:SetPoint(ML, buttons[i - 1], MR, BUTTON_PADDING, 0)
                        end
                end
        end

        bar:SetWidth(buttons[1]:GetWidth() * cols + BUTTON_PADDING * (cols - 1))
        bar:SetHeight(buttons[1]:GetHeight() * rows + BUTTON_PADDING * (rows - 1))

        return bar
end

function enable ()
        buttons = {}
        for i = 1,48 do buttons[i] = create_button(i) end
        bars.bar1 = create_bar(BAR_NAME .. 1, buttons, 12)

        buttons = {}
        for i = 1,10 do buttons[i] = _G['PetActionButton' .. i] end
        bars.bar2 = create_bar(BAR_NAME .. 'Pet', buttons, 10)

        bars.bar1:SetPoint(BC, UIParent, BC, 0, BUTTON_PADDING)
        bars.bar2:SetPoint(BC, bars.bar1, TC, 0, BUTTON_PADDING)

        MainMenuBar:Hide()
        MainMenuBar:SetScript('OnShow', MainMenuBar.Hide)

        for i = 1, 48 do
                SetBindingClick(BUTTON_BINDINGS[i], BUTTON_NAME .. i)
        end
end

function onevent (frame, event, ...)
        if event == 'PLAYER_LOGIN' then
                enable()
        end
end

eventframe:SetScript('OnEvent', onevent)
eventframe:RegisterEvent('PLAYER_LOGIN')

Compare with Previous | Blame