You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
7.5 KiB
259 lines
7.5 KiB
local _G, type, pairs, unpack, table, tinsert, tremove, string = _G, type, pairs, unpack, table, tinsert, tremove, string
|
|
|
|
local MovAny = _G.MovAny
|
|
|
|
local m = {
|
|
var = "pos",
|
|
orgVar = "orgPos",
|
|
IsValidObject = function(self, o)
|
|
return (o.SetPoint)
|
|
end,
|
|
Enable = function(self)
|
|
if self.lSafeRelatives then
|
|
table.wipe(self.lSafeRelatives)
|
|
else
|
|
self.lSafeRelatives = {}
|
|
end
|
|
end,
|
|
Disable = function()
|
|
end,
|
|
Apply = function(self, e, f, opt)
|
|
opt = opt or e.userData or MovAny:GetUserData(e.name)
|
|
if not opt or e.noMove then
|
|
return
|
|
end
|
|
if opt.pos then
|
|
local relTo = opt.pos[2]
|
|
if not relTo then
|
|
return true
|
|
else
|
|
if not self.lSafeRelatives[relTo] then
|
|
if type(relTo) == "table" and relTo.GetName then
|
|
relTo = relTo:GetName()
|
|
end
|
|
if _G[relTo] then
|
|
self.lSafeRelatives[relTo] = true
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
local fn = f:GetName()
|
|
if opt.orgPos == nil and not MovAny:IsContainer(f:GetName()) and string.match("BagFrame", f:GetName()) ~= nil then
|
|
self:StoreOrgPoints(f, opt)
|
|
end
|
|
if UIPARENT_MANAGED_FRAME_POSITIONS[fn] then
|
|
f.ignoreFramePositionManager = true
|
|
end
|
|
MovAny:UnlockPoint(f)
|
|
f:ClearAllPoints()
|
|
if f.MASetPoint then
|
|
f:MASetPoint(unpack(opt.pos))
|
|
else
|
|
f:SetPoint(unpack(opt.pos))
|
|
end
|
|
MovAny:LockPoint(f, opt)
|
|
if f.OnMAPosition then
|
|
f.OnMAPosition(f)
|
|
end
|
|
if e.onPosition then
|
|
e.onPosition(f)
|
|
end
|
|
if f.attachedChildren then
|
|
for i, v in pairs(f.attachedChildren) do
|
|
if not v.ignoreFramePositionManager and v.GetName and UIPARENT_MANAGED_FRAME_POSITIONS[v:GetName()] and not v.ignoreFramePositionManager and not MovAny:IsModified(v) and v.GetName and UIPARENT_MANAGED_FRAME_POSITIONS[v:GetName()] then
|
|
v.UMFP = true
|
|
v.ignoreFramePositionManager = true
|
|
end
|
|
end
|
|
end
|
|
if UIPanelWindows[fn] and f ~= GameMenuFrame then
|
|
local left = GetUIPanel("left")
|
|
local center = GetUIPanel("center")
|
|
if f == left then
|
|
UIParent.left = nil
|
|
if center then
|
|
UIParent.center = nil
|
|
UIParent.left = center
|
|
end
|
|
elseif f == center then
|
|
UIParent.center = nil
|
|
end
|
|
local wasShown = f:IsShown()
|
|
if f ~= TaxiFrame and f ~= MerchantFrame and f ~= BankFrame and f ~= QuestFrame and f ~= ClassTrainerFrame and (not MovAny:IsProtected(f) or not InCombatLockdown()) then
|
|
--[[if MovAny.rendered then
|
|
--HideUIPanel(f)
|
|
else]]
|
|
--[[local sfx = GetCVar("Sound_EnableSFX")
|
|
if sfx then
|
|
SetCVar("Sound_EnableSFX", 0)
|
|
end]]
|
|
if not MovAny.rendered and wasShown then
|
|
ShowUIPanel(f)
|
|
end
|
|
HideUIPanel(f)
|
|
--[[if sfx then
|
|
SetCVar("Sound_EnableSFX", 1)
|
|
end]]
|
|
--end
|
|
end
|
|
if opt then
|
|
opt.UIPanelWindows = UIPanelWindows[fn]
|
|
end
|
|
UIPanelWindows[fn] = nil
|
|
f:SetAttribute("UIPanelLayout-enabled", false)
|
|
tinsert(UISpecialFrames, f:GetName())
|
|
if wasShown and f ~= TaxiFrame and f ~= MerchantFrame and f ~= BankFrame and f ~= QuestFrame and f ~= ClassTrainerFrame and (not MovAny:IsProtected(f) or not InCombatLockdown()) then
|
|
f:Show()
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
Reset = function(self, e, f, readOnly, opt)
|
|
opt = opt or e.userData or MovAny:GetUserData(e.name)
|
|
if not opt or e.noMove then
|
|
return
|
|
end
|
|
MovAny:UnlockPoint(f)
|
|
local umfp = nil
|
|
if f.ignoreFramePositionManager then
|
|
umfp = true
|
|
f.ignoreFramePositionManager = nil
|
|
end
|
|
|
|
if opt.orgPos then
|
|
self:RestoreOrgPoints(f, opt, readOnly)
|
|
else
|
|
--f:ClearAllPoints()
|
|
return
|
|
end
|
|
--[[if not readOnly and f.MAUnanchoredRelatives then
|
|
--dbg(f:GetName().." got unanchored relatives")
|
|
for i, v in pairs(f.MAUnanchoredRelatives) do
|
|
if not MovAny:IsModified(v) then
|
|
--dbg(" restoring anchor to "..v:GetName().." ")
|
|
MovAny:UnlockPoint(v)
|
|
if v.MAOrgPoint then
|
|
v:SetPoint(unpack(v.MAOrgPoint))
|
|
v.MAOrgPoint = nil
|
|
end
|
|
--else
|
|
--dbg("skipping hooked relative: "..v:GetName())
|
|
end
|
|
end
|
|
f.MAUnanchoredRelatives = nil
|
|
end]]
|
|
if e.positionReset then
|
|
e:positionReset(f, opt, readOnly)
|
|
end
|
|
if f.OnMAPositionReset then
|
|
f.OnMAPositionReset(f, opt, readOnly)
|
|
end
|
|
if not readOnly then
|
|
opt.pos = nil
|
|
end
|
|
if f.attachedChildren then
|
|
for i, v in pairs(f.attachedChildren) do
|
|
if v and not MovAny:IsModified(v) and v.GetName and v.UMFP then
|
|
v.UMFP = nil
|
|
v.ignoreFramePositionManager = nil
|
|
umfp = true
|
|
end
|
|
end
|
|
end
|
|
if opt.UIPanelWindows and not readOnly then
|
|
for i, v in pairs(UISpecialFrames) do
|
|
if v == e.name then
|
|
tremove(UISpecialFrames, i)
|
|
break
|
|
end
|
|
end
|
|
if not readOnly then
|
|
UIPanelWindows[ f:GetName() ] = opt.UIPanelWindows
|
|
opt.UIPanelWindows = nil
|
|
end
|
|
if not readOnly and f:IsShown() and f ~= MerchantFrame and f ~= BankFrame and f ~= QuestFrame and f ~= ClassTrainerFrame and (not MovAny:IsProtected(f) or not InCombatLockdown()) then
|
|
f:SetAttribute("UIPanelLayout-enabled", true)
|
|
ShowUIPanel(f)
|
|
else
|
|
f:SetAttribute("UIPanelLayout-enabled", true)
|
|
end
|
|
end
|
|
if umfp and not InCombatLockdown() then
|
|
UIParent_ManageFramePositions()
|
|
end
|
|
f.MAOrgParent = nil
|
|
end,
|
|
StoreOrgPoints = function(self, f, opt)
|
|
local np = f:GetNumPoints()
|
|
if np == 1 then
|
|
opt.orgPos = MovAny:GetSerializedPoint(f)
|
|
elseif np > 1 then
|
|
opt.orgPos = {}
|
|
for i = 1, np, 1 do
|
|
opt.orgPos[i] = MovAny:GetSerializedPoint(f, i)
|
|
end
|
|
end
|
|
if not opt.orgPos then
|
|
if f == TargetFrameSpellBar then
|
|
opt.orgPos = {"BOTTOM", "TargetFrame", "BOTTOM", -15, 10}
|
|
elseif f == FocusFrameSpellBar then
|
|
opt.orgPos = {"BOTTOM", "FocusFrame", "BOTTOM", 0, 0}
|
|
elseif f == VehicleMenuBarHealthBar then
|
|
opt.orgPos = {"BOTTOMLEFT", "VehicleMenuBarArtFrame", "BOTTOMLEFT", 119, 3}
|
|
elseif f == VehicleMenuBarPowerBar then
|
|
opt.orgPos = {"BOTTOMRIGHT", "VehicleMenuBarArtFrame", "BOTTOMRIGHT", -119, 3}
|
|
elseif f == VehicleMenuBarLeaveButton then
|
|
opt.orgPos = {"BOTTOMRIGHT", "VehicleMenuBar", "BOTTOMRIGHT", 177, 15}
|
|
--[[elseif f == LFDDungeonReadyDialog then
|
|
opt.orgPos = {"TOP", "UIParent", "TOP", 0, -135}
|
|
elseif f == LFDDungeonReadyPopup then
|
|
opt.orgPos = {"TOP", "UIParent", "TOP", 0, -135}
|
|
elseif f == LFDDungeonReadyStatus then]]
|
|
else
|
|
--dbg("Unable to generate restore point for "..f:GetName()..". OrgPos set to default")
|
|
opt.orgPos = {"TOP", "UIParent", "TOP", 0, -135}
|
|
end
|
|
end
|
|
end,
|
|
RestoreOrgPoints = function(self, f, opt, readOnly)
|
|
f:ClearAllPoints()
|
|
if opt then -- and not opt.UIPanelWindows
|
|
if type(opt.orgPos) == "table" then
|
|
if type(opt.orgPos[1]) == "table" then
|
|
for i, v in pairs(opt.orgPos) do
|
|
f:ClearAllPoints()
|
|
if f.MASetPoint then
|
|
f:MASetPoint(unpack(v))
|
|
else
|
|
f:SetPoint(unpack(v))
|
|
end
|
|
end
|
|
else
|
|
f:ClearAllPoints()
|
|
if f.MASetPoint then
|
|
f:MASetPoint(unpack(opt.orgPos))
|
|
else
|
|
f:SetPoint(unpack(opt.orgPos))
|
|
end
|
|
end
|
|
end
|
|
if not readOnly then
|
|
opt.orgPos = nil
|
|
end
|
|
end
|
|
end,
|
|
GetFirstOrgPoint = function(self, opt)
|
|
if opt then -- and not opt.UIPanelWindows
|
|
if type(opt.orgPos) == "table" then
|
|
if type(opt.orgPos[1]) == "table" then
|
|
return opt.orgPos[1]
|
|
else
|
|
return opt.orgPos
|
|
end
|
|
end
|
|
end
|
|
end
|
|
}
|
|
|
|
MovAny:AddModule("Position", m)
|
|
|