/
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", |
['Action'] = true, |
['MultiBarRight'] = true, |
['BonusAction'] = "BonusActionBarFrame", |
['Shapeshift'] = "ShapeshiftBarFrame", |
} |
local bagButtons = { |
MainMenuBarBackpackButton, |
CharacterBag0Slot, |
CharacterBag1Slot, |
CharacterBag2Slot, |
CharacterBag3Slot, |
} |
addon['MSQ'] = LibStub("Masque",true) |
if(addon['MSQ']) then addon['MSQGroup'] = addon['MSQ']:Group(name,name) end |
local function 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 |
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 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 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) |
end |
f:SetFrameStrata("MEDIUM") |
if(defBars[b] == 'BonusAction' and not hooked['BonusAction']) then |
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(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 |
addDrag(f) |
local i,y = 1,1 |
local row = 0 |
local spr = 12/db['bars'][defBars[b]]['rows'] |
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 |
buttons[#buttons + 1] = button |
if(addon['MSQ'] and addon['MSQGroup']) then |
addon['MSQGroup']:AddButton(button) |
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, |
}) |
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 |
hooked[f] = true |
end |
local spr = 12/db['bars'][name.."MicroMenu"]['rows'] |
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, #micro do |
local btn = _G[micro[i].."MicroButton"] |
for i = 1, #bagButtons do |
local btn = _G[bagButtons[i]] |
print(i,bagButtons[i], btn) |
if(btn) then |
UIPARENT_MANAGED_FRAME_POSITIONS[btn:GetName()] = nil |
btn:SetParent(f) |
end |
end |
end |
f.SetPoint = dummy |
end |
local function getBarPref(pref) |
local function buildPrefs() |
for b = 1, #defBars do |
local bname = getBarname(defBars[b]) |
local o = addon['AddConfigMenu'](addon, { |
['name'] = defBars[b], |
['name'] = bname, |
['menuGet'] = getBarPref, |
['menuSet'] = setBarPref, |
}, addon['options']['args'][childName]) |
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", |
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,...) |
addon['RegisterFunc']({"UNIT_EXITED_VEHICLE","UNIT_ENTERING_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 |
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) |