WoWInterface SVN zz_Actionbuttons

[/] [trunk/] [zz_Actionbuttons/] [core.lua] - Rev 5

Go to most recent revision | Compare with Previous | Blame | View Log

local name, addon = ...
local childName = name
local defaults = {}
local options, db
local _G = _G
local buttons = {}
local defBars = {
        'Action','MultiBarBottomLeft','MultiBarBottomRight','MultiBarLeft','MultiBarRight','Shapeshift','PetAction' ,'BonusAction'
}
local micro = {
        'Character',
        'Spellbook',
        'Talent',
        'Achievement',
        'QuestLog',
        'Guild',
        'PVP',
        'LFD',
        'Raid',
        'EJ',
        'MainMenu',
        'Help',
}
local privFrame = {
        ['Action'] = "MainMenuBar",
        ['BonusAction'] = "BonusActionBarFrame",
        ['Shapeshift'] = "ShapeshiftBarFrame",
}
addon['MSQ'] = LibStub("Masque",true)
if(addon['MSQ']) then addon['MSQGroup'] = addon['MSQ']:Group(name,name) end
local function dragAble()
        return db['dragAble']
end
local hooked = {}
local dummy = function() end
local function localButtons()
        wipe(buttons)
        local lastbutton
        for b = 1, #defBars do
                local barname = _G[defBars[b]] and defBars[b] or ( type(privFrame[defBars[b]]) == 'string' and privFrame[defBars[b]] or name..defBars[b].."Bar")
                local f = _G[barname] or CreateFrame("Frame", barname, UIParent, "SecureHandlerStateTemplate")
                UIPARENT_MANAGED_FRAME_POSITIONS[barname] = nil
                if(f) then
                        f:SetFrameStrata("MEDIUM")
                        if(defBars[b] == 'BonusAction' and not hooked['BonusAction']) then
                                f:HookScript("OnShow", function(self,...)
                                        for i = 1, 12 do
                                                _G["ActionButton"..i]:SetAlpha(0)
                                                _G["ActionButton"..i]:EnableMouse(false)
                                        end
                                end)
                                f:HookScript("OnHide", function(self,...)
                                        for i = 1, 12 do
                                                _G["ActionButton"..i]:SetAlpha(1)
                                                _G["ActionButton"..i]:EnableMouse(true)
                                        end
                                end)
                                hooked['BonusAction'] = true
                                f:ClearAllPoints()
                                f:SetWidth(1)
                                f:SetHeight(1)
                                f:SetPoint("CENTER")
                        end

                        db['bars'][defBars[b]] = db['bars'][defBars[b]] or {
                                ['rows'] = 1,
                                ['scale'] = 1,
                        }
                        f:SetParent(UIParent)
                        f:SetScale(db['bars'][defBars[b]]['scale'])
                        f['db'] = db['bars'][defBars[b]]
                        f['dragAble'] = dragAble
                        if(not _G[barname.."drag"]) then
                                addon['AddDrag'](f,"BOX",{
                                        ['width'] = 64,
                                        ['height'] = 64,
                                        ['anchor'] = "TOPLEFT",
                                        ['parentanchor'] = "TOPLEFT",
                                        ['xOffset'] = 16,
                                        ['yOffset'] = 16,
                                        ['offset'] = 16,
                                })
                        end
                        local i,y = 1,1
                        local row = 0
                        local spr = 12/db['bars'][defBars[b]]['rows']
                        while(_G[defBars[b]..'Button'..i]) do
                                local button = _G[defBars[b]..'Button'..i]
                                UIPARENT_MANAGED_FRAME_POSITIONS[button:GetName()] = nil
                                button:SetParent(f)
                                buttons[#buttons + 1] = button
                                if(addon['MSQ'] and addon['MSQGroup']) then
                                        addon['MSQGroup']:AddButton(button)
                                end
                                button:ClearAllPoints()
                                if(y == 1) then
                                        button:SetPoint("TOPLEFT", f, "TOPLEFT",0 , -row * button:GetHeight())
                                else
                                        button:SetPoint("TOPLEFT", lastbutton, "TOPRIGHT")
                                end
                                lastbutton = button
                                i = i + 1
                                y = y + 1
                                if(y > spr) then
                                        y = 1
                                        row = row + 1
                                end
                        end
                end
        end
        local f = _G[name.."MicroMenu"] or CreateFrame("Frame", name.."MicroMenu", UIParent)
        
        if(not hooked[f]) then
                f:SetWidth(1)
                f:SetHeight(1)
                f:SetPoint("CENTER")
                if(not _G[name.."MicroMenu".."drag"]) then
                        db['bars'][name.."MicroMenu"] = db['bars'][name.."MicroMenu"] or {
                                ['rows'] = 1,
                                ['scale'] = 1,
                        }
                        f['db'] = db['bars'][name.."MicroMenu"]
                        f['dragAble'] = dragAble
                        addon['AddDrag'](f,"BOX",{
                                ['width'] = 64,
                                ['height'] = 64,
                                ['anchor'] = "TOPLEFT",
                                ['parentanchor'] = "TOPLEFT",
                                ['xOffset'] = 16,
                                ['yOffset'] = 16,
                                ['offset'] = 16,
                        })
                end
                hooked[f] = true
        end
        local spr = 12/db['bars'][name.."MicroMenu"]['rows']
        lastbutton = f
        local y,row = 1,0
        for i = 1, #micro do
                local btn = _G[micro[i].."MicroButton"]
                if(btn) then
                        UIPARENT_MANAGED_FRAME_POSITIONS[btn:GetName()] = nil
                        btn:SetParent(f)
                        btn:ClearAllPoints()
                        if(y == 1) then
                                btn:SetPoint("TOPLEFT", f, "TOPLEFT",0 , -row * 34)
                        else
                                btn:SetPoint("TOPLEFT", lastbutton, "TOPRIGHT")
                        end
                        y = y + 1
                        lastbutton = btn
                        if(y > spr) then
                                y = 1
                                row = row + 1
                        end
                end
        end
        f.SetPoint = dummy
end

local function getBarPref(pref)
        return db['bars'][pref[#pref-1]][pref[#pref]]
end

local function setBarPref(pref,value)
        db['bars'][pref[#pref-1]][pref[#pref]] = value
        localButtons()
end

local function buildPrefs()
        for b = 1, #defBars do
                local o = addon['AddConfigMenu'](addon, {
                        ['name'] = defBars[b],
                        ['menuGet'] = getBarPref,
                        ['menuSet'] = setBarPref,
                }, addon['options']['args'][childName])
                addon['AddConfigEntry'](addon, name, 'range', 'rows', 'Rows', 'Number of rows', 0,1,12,1,false,o)
                addon['AddConfigEntry'](addon, name, 'range', 'scale', 'Scale', 'Scale of this bar', 1,0.1,3,0.1,true,o)
        end
        local o = addon['AddConfigMenu'](addon, {
                ['name'] = name.."MicroMenu",
                ['menuGet'] = getBarPref,
                ['menuSet'] = setBarPref,
        }, addon['options']['args'][childName])
        addon['AddConfigEntry'](addon, name, 'range', 'rows', 'Rows', 'Number of rows', 0,1,12,1,false,o)
        addon['AddConfigEntry'](addon, name, 'range', 'scale', 'Scale', 'Scale of this bar', 1,0.1,3,0.1,true,o)
end

local function getPref(pref)
        return db[pref[#pref]]
end

local function setPref(pref,value)
        db[pref[#pref]] = value
end
do
-- Copied from HBar
        local textures = {              -- Table with textures we wish to remove
                ReputationWatchBarTexture0,
                ReputationWatchBarTexture1,
                ReputationWatchBarTexture2,
                ReputationWatchBarTexture3,
                ReputationXPBarTexture0,
                ReputationXPBarTexture1,
                ReputationXPBarTexture2,
                ReputationXPBarTexture3,
                MainMenuXPBarTexture0,
                MainMenuXPBarTexture1,
                MainMenuXPBarTexture2,
                MainMenuXPBarTexture3,
                MainMenuMaxLevelBar0,
                MainMenuMaxLevelBar1,
                MainMenuMaxLevelBar2,
                MainMenuMaxLevelBar3,
                MainMenuBarTexture0,
                MainMenuBarTexture1,
                MainMenuBarTexture2,
                MainMenuBarTexture3,
                SlidingActionBarTexture0,       
                SlidingActionBarTexture1,
                BonusActionBarTexture0,
                BonusActionBarTexture1,
        }
        local hide = {
                MainMenuBarLeftEndCap,
                MainMenuBarRightEndCap,
                ReputationWatchBar,
                MainMenuExpBar,
                ActionBarUpButton,
                ActionBarDownButton,
                MainMenuBarPageNumber,
                BonusActionBarFrameTexture1,
                BonusActionBarFrameTexture2,
                BonusActionBarFrameTexture3,
                BonusActionBarFrameTexture4,
        }

        for _, frame in pairs(textures) do      -- Set the textures of the items in "textures" to nil
                frame:SetTexture("");
                frame.SetTexture = function() end
        end
        for _, frame in pairs(hide) do  -- Set the textures of the items in "textures" to nil
                frame:Hide()
                frame.Show = frame.Hide
        end
        MainMenuBar:SetFrameStrata("BACKGROUND")
end
local function init()
        options = addon['InitConfig'](addon, childName, true, {
                ['type'] = "launcher",
        }, getPref, setPref)
        db = addon['db']['profile'][childName]
        db['bars'] = db['bars'] or {}
        localButtons()
        addon['AddConfigEntry'](addon, name, 'toggle', 'dragAble', 'Unlocked', 'Use alt+click to move your bars', 0)
        buildPrefs()
        addon['RegisterFunc']({"UNIT_EXITED_VEHICLE"}, "OnEvent", function(self, event,arg1,...)
                if(arg1 ~= 'player') then return end
                for b = 1, #defBars do
                        local barname = _G[defBars[b]] and defBars[b] or ( type(privFrame[defBars[b]]) == 'string' and privFrame[defBars[b]] or name..defBars[b].."Bar")
                        local f = _G[barname] or CreateFrame("Frame", barname, UIParent, "SecureHandlerStateTemplate")
                        print(f, barname)
                        if(f) then
        --                      addon['LoadFrame'](f)
                                localButtons()
                        end
                end
        end)
end

addon['startup'](addon, name, childName, init, true, defaults)

Go to most recent revision | Compare with Previous | Blame