WoWInterface SVN zz_Actionbuttons

Compare Revisions

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

Rev 8 → Rev 7

trunk/zz_Actionbuttons/core.lua
1,49 → 1,335
local name, addon = ...
local childName = name
local defaults = {}
local options, db
local _,class = UnitClass('player')
local _G = _G
local xoffset, yoffset = 8,0
local buttons = {}
local defBars = {
'Action',
'BonusAction',
'MultiBarRight',
'MultiBarLeft',
'MultiBarBottomRight',
'MultiBarBottomLeft',
'Shapeshift',
'PetAction',
}
 
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
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'])
end
 
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 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)
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 init(self, event, ...)
_,class = UnitClass('player')
local function getBarPref(pref)
return db['bars'][pref[#pref-1]][pref[#pref]]
end
 
addon['preloads'][#addon['preloads'] + 1] = function(self,event,...)
createBar(1,1)
local function setBarPref(pref,value)
db['bars'][pref[#pref-1]][pref[#pref]] = value
localButtons()
end
 
addon['startup'](addon, name, name, init, true, defaults)
\ No newline at end of file +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