WoWInterface SVN zz_Actionbuttons

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /trunk
    from Rev 7 to Rev 8
    Reverse comparison

Rev 7 → Rev 8

zz_Actionbuttons/core.lua
1,335 → 1,49
local name, addon = ...
local childName = name
local defaults = {}
local options, db
local _,class = UnitClass('player')
local _G = _G
local buttons = {}
local defBars = {
'Action',
'BonusAction',
'MultiBarRight',
'MultiBarLeft',
'MultiBarBottomRight',
'MultiBarBottomLeft',
'Shapeshift',
'PetAction',
}
local xoffset, yoffset = 8,0
 
local privFrame = {
['Action'] = true,
['MultiBarRight'] = true,
['BonusAction'] = "BonusActionBarFrame",
['Shapeshift'] = "ShapeshiftBarFrame",
}
 
local bagButtons = {
'CharacterBag3Slot',
'CharacterBag2Slot',
'CharacterBag1Slot',
'CharacterBag0Slot',
'MainMenuBarBackpackButton',
}
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 addDrag(self)
if(not hooked[self]) then
local bname = self:GetName()
self:SetParent(UIParent)
self:SetWidth(1)
self:SetHeight(1)
self:SetPoint("CENTER")
if(not _G[bname.."drag"]) then
db['bars'][bname] = db['bars'][bname] or {
['rows'] = 1,
['scale'] = 1,
}
self['db'] = db['bars'][bname]
self['dragAble'] = dragAble
self:SetScale(self['db']['scale'])
addon['AddDrag'](self,"BOX",{
['width'] = 64,
['height'] = 64,
['anchor'] = "TOPLEFT",
['parentanchor'] = "TOPLEFT",
['xOffset'] = 16,
['yOffset'] = 16,
['offset'] = 16,
})
end
hooked[self] = true
else
self:SetScale(self['db']['scale'])
local function createBar(bid,id)
local f = CreateFrame("Frame", "zzABar"..bid, UIParent, "SecureHandlerStateTemplate",id)
f:SetWidth(1)
f:SetHeight(1)
f:SetPoint("CENTER")
f:SetAttribute('_onstate-page', [[
self:SetAttribute('actionpage', newstate)
control:ChildUpdate('actionpage', newstate)
]])
if(class == "WARRIOR") then
RegisterStateDriver(f, "page", "[bonusbar:1] 7;[bonusbar:2] 8;[bonusbar:3] 9;1")
elseif(class == "DRUID") then
RegisterStateDriver(f, "page", "[stance:1] 9;[stance:3,stealth] 8;[stance:3] 7;[stance:5] 10;1") -- 1 bear/ 3 cat/ 5 moonkin
elseif(class == "ROGUE") then
RegisterStateDriver(f, "page", "[stance:1] 7;[stance:3] 8; 1") -- 1 stealth/ 3 shadow dance
end
end
 
local function getBarname(bname)
return (_G[bname] and privFrame[bname] == nil) and bname or ( type(privFrame[bname]) == 'string' and privFrame[bname] or name..bname.."Bar")
end
 
 
local function resizeDrag(self, lastbutton)
local width = (addon['round'](12/self['db']['rows'],0) + .5) * lastbutton:GetWidth()
local height = (self['db']['rows'] + .5) * lastbutton:GetHeight()
_G[self:GetName().."drag"]:ClearAllPoints()
_G[self:GetName().."drag"]:SetWidth(width)
_G[self:GetName().."drag"]:SetHeight(height)
_G[self:GetName().."drag"]:SetPoint("TOPLEFT", _G[self:GetName().."drag"]:GetParent(), "TOPLEFT", - lastbutton:GetWidth()/4,lastbutton:GetHeight()/4)
end
 
local function localButtons()
-- wipe(buttons)
local lastbutton
for b = 1, #defBars do
local barname = getBarname(defBars[b])
local f = _G[barname] or CreateFrame("Frame", barname, UIParent, "SecureHandlerStateTemplate")
UIPARENT_MANAGED_FRAME_POSITIONS[barname] = nil
if(f) then
if(defBars[b]=='Action' and not hooked[f]) then
f:SetAttribute("actionpage",b)
elseif(defBars[b]=='MultiBarRight' and not hooked[f]) then
f:SetAttribute("actionpage",b)
end
f:SetFrameStrata("MEDIUM")
f:SetParent(UIParent)
if(defBars[b] == 'BonusAction' and not hooked[f]) 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)
end
addDrag(f)
local i,y = 1,1
local row = 0
local spr = 12/f['db']['rows']
lastbutton = f
while(_G[defBars[b]..'Button'..i]) do
local button = _G[defBars[b]..'Button'..i]
UIPARENT_MANAGED_FRAME_POSITIONS[button:GetName()] = nil
button:SetParent(f)
if(defBars[b] == 'Action') then
button:SetID(i)
else
-- button:SetID(0)
end
if(addon['MSQ'] and addon['MSQGroup'] and not buttons[button]) then
buttons[button] = true
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
resizeDrag(f, lastbutton)
 
local lastbutton = f
for i = 1, 12 do
local b = CreateFrame("CheckButton", "$PARENTActionButton"..i, f, "ActionButtonTemplate ActionBarButtonCodeTemplate",i)
-- b:SetWidth(32)
-- b:SetHeight(32)
b:SetPoint("TOPLEFT", lastbutton, "TOPRIGHT", xoffset, yoffset)
lastbutton = b
b:SetAttribute('action--base',i)
b:SetAttribute('showgrid', 1)
b:SetAttribute('_childupdate-actionpage', [[
self:SetAttribute('action', self:GetAttribute('action--base'))
]])
b:SetAttribute('action', i)
end
local f = _G[name.."MicroMenu"] or CreateFrame("Frame", name.."MicroMenu", UIParent)
addDrag(f)
local spr = 12/db['bars'][f:GetName()]['rows']
lastbutton = f
local y,row = 1,0
for _, bname in pairs(MICRO_BUTTONS) do
local btn = _G[bname]
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
resizeDrag(f, lastbutton)
f = _G[name.."BagBar"] or CreateFrame("Frame", name.."BagBar", UIParent)
addDrag(f)
local spr = 12/db['bars'][f:GetName()]['rows']
lastbutton = f
local y,row = 1,0
for i = 1, #bagButtons do
local btn = _G[bagButtons[i]]
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
if(addon['MSQ'] and addon['MSQGroup'] and not buttons[btn]) then
buttons[btn] = true
addon['MSQGroup']:AddButton(btn)
end
lastbutton = btn
if(y > spr) then
y = 1
row = row + 1
end
end
end
resizeDrag(f, lastbutton)
if(BonusActionBarFrame:IsVisible()) then
for i = 1, 12 do
_G["ActionButton"..i]:SetAlpha(class == 'WARRIOR' and 1 or 0)
_G["ActionButton"..i]:EnableMouse(class=='WARRIOR')
end
end
end
 
local function getBarPref(pref)
return db['bars'][pref[#pref-1]][pref[#pref]]
local function init(self, event, ...)
_,class = UnitClass('player')
end
 
local function setBarPref(pref,value)
db['bars'][pref[#pref-1]][pref[#pref]] = value
localButtons()
addon['preloads'][#addon['preloads'] + 1] = function(self,event,...)
createBar(1,1)
end
 
local function resetCenter(pref)
_G[pref[#pref-1]]:center()
end
 
local function buildPrefs()
for b = 1, #defBars do
local bname = getBarname(defBars[b])
local o = addon['AddConfigMenu'](addon, {
['name'] = bname,
['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)
addon['AddConfigEntry'](addon, name, 'execute', 'center', 'Center', 'Reset position', 2,resetCenter,nil,nil,nil,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 togglePriv(show)
for k,v in pairs(privFrame) do
if(type(v) == 'boolean') then
_G[name..k.."Bar"]:SetAlpha(show and 1 or 0)
end
end
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","UNIT_ENTERING_VEHICLE"}, "OnEvent", function(self, event,arg1,...)
if(arg1 ~= 'player') then return end
if(event == "UNIT_EXITED_VEHICLE") then
togglePriv(true)
elseif(event == "UNIT_ENTERING_VEHICLE") then
togglePriv(false)
end
end)
MoveMicroButtons = function() end
VehicleMenuBar_MoveMicroButtons = function() end
end
 
addon['startup'](addon, name, childName, init, true, defaults)
\ No newline at end of file +addon['startup'](addon, name, name, init, true, defaults) \ No newline at end of file