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.
590 lines
22 KiB
590 lines
22 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local F = Cell.funcs
|
|
local B = Cell.bFuncs
|
|
local P = Cell.pixelPerfectFuncs
|
|
|
|
Cell.unitButtons = {
|
|
["solo"] = {},
|
|
["party"] = {
|
|
["units"] = {}, -- NOTE: update in PartyFrame _initialAttribute-refreshUnitChange
|
|
},
|
|
["raid"] = {
|
|
["units"] = {}, -- NOTE: update in UnitButton_OnAttributeChanged
|
|
},
|
|
["raidpet"] = {
|
|
["units"] = {}, -- NOTE: update in _initialAttribute-refreshUnitChange
|
|
},
|
|
["npc"] = {
|
|
["units"] = {}, -- NOTE: update on creation
|
|
},
|
|
["arena"] = {},
|
|
["spotlight"] = {},
|
|
["quickAssist"] = {
|
|
["units"] = {},
|
|
},
|
|
}
|
|
|
|
-- local hoverTop, hoverBottom, hoverLeft, hoverRight
|
|
local tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY
|
|
-------------------------------------------------
|
|
-- CellMainFrame
|
|
-------------------------------------------------
|
|
local cellMainFrame = CreateFrame("Frame", "CellMainFrame", UIParent, "SecureFrameTemplate")
|
|
Cell.frames.mainFrame = cellMainFrame
|
|
cellMainFrame:SetIgnoreParentScale(true)
|
|
|
|
local hoverFrame = CreateFrame("Frame", nil, cellMainFrame, "BackdropTemplate")
|
|
-- Cell:StylizeFrame(hoverFrame, {1,0,0,0.3}, {0,0,0,0})
|
|
|
|
local anchorFrame = CreateFrame("Frame", "CellAnchorFrame", cellMainFrame)
|
|
Cell.frames.anchorFrame = anchorFrame
|
|
PixelUtil.SetPoint(anchorFrame, "TOPLEFT", UIParent, "CENTER", 1, -1)
|
|
P:Size(anchorFrame, 20, 10)
|
|
anchorFrame:SetMovable(true)
|
|
anchorFrame:SetClampedToScreen(true)
|
|
|
|
local function RegisterButtonEvents(frame)
|
|
-- frame:RegisterForDrag("LeftButton")
|
|
frame:SetScript("OnDragStart", function()
|
|
anchorFrame:StartMoving()
|
|
anchorFrame:SetUserPlaced(false)
|
|
end)
|
|
frame:SetScript("OnDragStop", function()
|
|
anchorFrame:StopMovingOrSizing()
|
|
P:SavePosition(anchorFrame, Cell.vars.currentLayoutTable["main"]["position"])
|
|
-- if not InCombatLockdown() then
|
|
-- P:PixelPerfectPoint(anchorFrame)
|
|
-- end
|
|
end)
|
|
|
|
frame:HookScript("OnEnter", function()
|
|
hoverFrame:GetScript("OnEnter")(hoverFrame)
|
|
-- Cell.frames.menuFrame:SetFrameStrata("HIGH")
|
|
-- Cell.frames.menuFrame:SetToplevel(true)
|
|
end)
|
|
frame:HookScript("OnLeave", function()
|
|
hoverFrame:GetScript("OnLeave")(hoverFrame)
|
|
-- Cell.frames.menuFrame:SetFrameStrata(CellDB["appearance"]["strata"])
|
|
-- Cell.frames.menuFrame:SetToplevel(false)
|
|
end)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- buttons
|
|
-------------------------------------------------
|
|
local menuFrame = CreateFrame("Frame", "CellMenuFrame", cellMainFrame)
|
|
Cell.frames.menuFrame = menuFrame
|
|
menuFrame:SetAllPoints(anchorFrame)
|
|
menuFrame:SetFrameLevel(27)
|
|
|
|
local options = Cell:CreateButton(menuFrame, "", "red", {20, 10}, false, true)
|
|
P:Point(options, "TOPLEFT", menuFrame)
|
|
RegisterButtonEvents(options)
|
|
options:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
|
options:SetScript("OnClick", function(self, button)
|
|
if button == "LeftButton" then
|
|
F:ShowOptionsFrame()
|
|
elseif button == "RightButton" then
|
|
F:IterateAllUnitButtons(B.UpdateAll, true)
|
|
F:Print(L["Unit buttons refreshed (%s)."]:format(F:UpperFirst(L["all"])))
|
|
end
|
|
end)
|
|
options:HookScript("OnEnter", function()
|
|
CellTooltip:SetOwner(options, "ANCHOR_NONE")
|
|
CellTooltip:SetPoint(tooltipPoint, options, tooltipRelativePoint, tooltipX, tooltipY)
|
|
CellTooltip:AddLine(L["Options"])
|
|
CellTooltip:AddLine("|cffffb5c5"..L["Right-Click"]..": |cffffffff"..L["refresh unit buttons"])
|
|
CellTooltip:Show()
|
|
end)
|
|
options:HookScript("OnLeave", function()
|
|
CellTooltip:Hide()
|
|
end)
|
|
|
|
local raid = Cell:CreateButton(menuFrame, "", "blue", {20, 10}, false, true)
|
|
P:Point(raid, "LEFT", options, "RIGHT", 1, 0)
|
|
RegisterButtonEvents(raid)
|
|
raid:SetScript("OnClick", function()
|
|
F:ShowRaidRosterFrame()
|
|
end)
|
|
|
|
-- local tools = Cell:CreateButton(menuFrame, "", "chartreuse", {20, 10}, false, true, nil, nil, "SecureHandlerAttributeTemplate,SecureHandlerClickTemplate")
|
|
-- tools:SetSize(20, 10)
|
|
-- tools:EnableMouse(true)
|
|
-- P:Point(tools, "LEFT", raid, "RIGHT", 1, 0)
|
|
-- RegisterButtonEvents(tools)
|
|
-- tools:SetAttribute("_onclick", [[
|
|
-- print(self:GetFrameRef("main"))
|
|
-- print(self:GetAttribute("main"))
|
|
-- ]])
|
|
-- SecureHandlerSetFrameRef(tools, "main", cellMainFrame)
|
|
|
|
-- REVIEW: raid tool button
|
|
--[===[
|
|
local frame = CreateFrame("Frame", nil, cellMainFrame, "BackdropTemplate")
|
|
Cell:StylizeFrame(frame)
|
|
frame:SetSize(100, 100)
|
|
frame:SetPoint("BOTTOMLEFT", cellMainFrame, "TOPLEFT", 0, 30)
|
|
frame:Hide()
|
|
|
|
local mark = Cell:CreateButton(frame, "", "accent-hover", {20, 20}, false, false, nil, nil, "SecureActionButtonTemplate")
|
|
mark:SetPoint("CENTER")
|
|
mark:SetSize(20, 20)
|
|
mark.texture = mark:CreateTexture(nil, "ARTWORK")
|
|
mark.texture:SetColorTexture(1, 0, 0, 0.4)
|
|
mark.texture:SetAllPoints(mark)
|
|
mark:SetAttribute("type", "worldmarker")
|
|
mark:SetAttribute("marker", 1)
|
|
|
|
-- local tools = Cell:CreateButton(menuFrame, "", "chartreuse", {20, 10}, false, true, nil, nil, "SecureHandlerAttributeTemplate,SecureHandlerClickTemplate")
|
|
local tools = CreateFrame("Frame", nil, menuFrame, "BackdropTemplate,SecureHandlerMouseUpDownTemplate")
|
|
Cell:StylizeFrame(tools)
|
|
tools:SetSize(20, 10)
|
|
tools:EnableMouse(true)
|
|
P:Point(tools, "LEFT", raid, "RIGHT", 1, 0)
|
|
tools:SetFrameStrata("MEDIUM")
|
|
RegisterButtonEvents(tools)
|
|
-- tools:SetScript("_onclick", function()
|
|
-- print(frame:IsShown())
|
|
-- end)
|
|
tools:SetFrameRef("frame", frame)
|
|
|
|
tools:SetAttribute("_onmousedown", [=[
|
|
-- self, button
|
|
local frame = self:GetFrameRef("frame")
|
|
local raidMarksFrame = self:GetFrameRef("raidMarksFrame")
|
|
if frame:IsShown() then
|
|
frame:Hide()
|
|
raidMarksFrame:Hide()
|
|
else
|
|
frame:Show()
|
|
raidMarksFrame:Show()
|
|
end
|
|
]=])
|
|
]===]
|
|
|
|
-------------------------------------------------
|
|
-- LoadingBar
|
|
-------------------------------------------------
|
|
local loadingBar = CreateFrame("StatusBar", "CellLoadingBar", options)
|
|
loadingBar:Hide()
|
|
loadingBar:SetStatusBarTexture(Cell.vars.whiteTexture)
|
|
loadingBar:SetStatusBarColor(0.5, 1, 0)
|
|
P:Height(loadingBar, 1)
|
|
P:Point(loadingBar, "BOTTOMLEFT", options, 1, 1)
|
|
P:Point(loadingBar, "BOTTOMRIGHT", options, -1, 1)
|
|
|
|
-------------------------------------------------
|
|
-- MemoryUsage
|
|
-------------------------------------------------
|
|
--[==[@debug@
|
|
-- local memUsage = CreateFrame("Frame", nil, cellMainFrame)
|
|
-- memUsage:SetSize(10, 10)
|
|
-- memUsage:SetPoint("LEFT", raid, "RIGHT", 5, 0)
|
|
-- memUsage.text = memUsage:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
-- memUsage.text:SetPoint("LEFT")
|
|
-- memUsage:SetScript("OnUpdate", function(self, elapsed)
|
|
-- self.elapsed = (self.elapsed or 0) + elapsed
|
|
-- if self.elapsed > 1 then
|
|
-- UpdateAddOnMemoryUsage()
|
|
-- memUsage.text:SetFormattedText("%.2fMB", GetAddOnMemoryUsage("Cell")/1024)
|
|
-- self.elapsed = 0
|
|
-- end
|
|
-- end)
|
|
--@end-debug@]==]
|
|
|
|
-------------------------------------------------
|
|
-- fadeIn & fadeOut
|
|
-------------------------------------------------
|
|
local fadingIn, fadedIn, fadingOut, fadedOut
|
|
menuFrame.fadeIn = menuFrame:CreateAnimationGroup()
|
|
menuFrame.fadeIn.alpha = menuFrame.fadeIn:CreateAnimation("alpha")
|
|
menuFrame.fadeIn.alpha:SetFromAlpha(0)
|
|
menuFrame.fadeIn.alpha:SetToAlpha(1)
|
|
menuFrame.fadeIn.alpha:SetDuration(0.5)
|
|
menuFrame.fadeIn.alpha:SetSmoothing("OUT")
|
|
menuFrame.fadeIn:SetScript("OnPlay", function()
|
|
menuFrame.fadeOut:Finish()
|
|
fadingIn = true
|
|
|
|
if Cell.frames.battleResFrame and CellDB["general"]["menuPosition"] == "top_bottom" then
|
|
Cell.frames.battleResFrame:OnMenuShow()
|
|
end
|
|
end)
|
|
menuFrame.fadeIn:SetScript("OnFinished", function()
|
|
fadingIn = false
|
|
fadingOut = false
|
|
fadedIn = true
|
|
fadedOut = false
|
|
menuFrame:SetAlpha(1)
|
|
|
|
if CellDB["general"]["fadeOut"] and not hoverFrame:IsMouseOver() then
|
|
menuFrame.fadeOut:Play()
|
|
end
|
|
end)
|
|
|
|
menuFrame.fadeOut = menuFrame:CreateAnimationGroup()
|
|
menuFrame.fadeOut.alpha = menuFrame.fadeOut:CreateAnimation("alpha")
|
|
menuFrame.fadeOut.alpha:SetFromAlpha(1)
|
|
menuFrame.fadeOut.alpha:SetToAlpha(0)
|
|
menuFrame.fadeOut.alpha:SetDuration(0.5)
|
|
menuFrame.fadeOut.alpha:SetSmoothing("OUT")
|
|
menuFrame.fadeOut:SetScript("OnPlay", function()
|
|
menuFrame.fadeIn:Finish()
|
|
fadingOut = true
|
|
|
|
if Cell.frames.battleResFrame and CellDB["general"]["menuPosition"] == "top_bottom" then
|
|
Cell.frames.battleResFrame:OnMenuHide()
|
|
end
|
|
end)
|
|
menuFrame.fadeOut:SetScript("OnFinished", function()
|
|
fadingIn = false
|
|
fadingOut = false
|
|
fadedIn = false
|
|
fadedOut = true
|
|
menuFrame:SetAlpha(0)
|
|
|
|
if hoverFrame:IsMouseOver() then
|
|
menuFrame.fadeIn:Play()
|
|
end
|
|
end)
|
|
|
|
hoverFrame:SetScript("OnEnter", function()
|
|
if not CellDB["general"]["fadeOut"] then return end
|
|
if not (fadingIn or fadedIn) then
|
|
menuFrame.fadeIn:Play()
|
|
end
|
|
end)
|
|
hoverFrame:SetScript("OnLeave", function()
|
|
if not CellDB["general"]["fadeOut"] then return end
|
|
if hoverFrame:IsMouseOver() then return end
|
|
if not (fadingOut or fadedOut) then
|
|
menuFrame.fadeOut:Play()
|
|
end
|
|
end)
|
|
|
|
local function UpdateHoverFrame()
|
|
local anchor = Cell.vars.currentLayoutTable["main"]["anchor"]
|
|
local top, bottom, left, right
|
|
|
|
if CellDB["general"]["menuPosition"] == "top_bottom" then
|
|
top, bottom = anchorFrame, anchorFrame
|
|
if strfind(anchor, "LEFT$") then
|
|
left = anchorFrame
|
|
right = raid:IsShown() and raid or anchorFrame
|
|
else -- RIGHT$
|
|
left = raid:IsShown() and raid or anchorFrame
|
|
right = anchorFrame
|
|
end
|
|
else -- left_right
|
|
left, right = anchorFrame, anchorFrame
|
|
if strfind(anchor, "^TOP") then
|
|
top = anchorFrame
|
|
bottom = raid:IsShown() and raid or anchorFrame
|
|
else -- ^BOTTOM
|
|
top = raid:IsShown() and raid or anchorFrame
|
|
bottom = anchorFrame
|
|
end
|
|
end
|
|
|
|
hoverFrame:ClearAllPoints()
|
|
-- hoverFrame:SetPoint("TOP", top, 0, hoverTop)
|
|
-- hoverFrame:SetPoint("BOTTOM", bottom, 0, hoverBottom)
|
|
-- hoverFrame:SetPoint("LEFT", left, hoverLeft, 0)
|
|
-- hoverFrame:SetPoint("RIGHT", right, hoverRight, 0)
|
|
hoverFrame:SetPoint("TOP", top, 0, 1)
|
|
hoverFrame:SetPoint("BOTTOM", bottom, 0, -1)
|
|
hoverFrame:SetPoint("LEFT", left, -1, 0)
|
|
hoverFrame:SetPoint("RIGHT", right, 1, 0)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- raid setup
|
|
-------------------------------------------------
|
|
local tankIcon = F:GetDefaultRoleIconEscapeSequence("TANK")
|
|
local healerIcon = F:GetDefaultRoleIconEscapeSequence("HEALER")
|
|
local damagerIcon = F:GetDefaultRoleIconEscapeSequence("DAMAGER")
|
|
|
|
-- local GetGroupMemberCountsForDisplay = GetGroupMemberCountsForDisplay
|
|
-- if not GetGroupMemberCountsForDisplay then
|
|
-- GetGroupMemberCountsForDispla = function()
|
|
-- local data = GetGroupMemberCounts()
|
|
-- data.DAMAGER = data.DAMAGER + data.NOROLE --People without a role count as damager
|
|
-- data.NOROLE = 0
|
|
-- return data
|
|
-- end
|
|
-- end
|
|
|
|
local function GetRaidSetupDetail(role)
|
|
local line = " "
|
|
|
|
for class in F:IterateClasses() do
|
|
if Cell.vars.raidSetup[role][class] then
|
|
local r, g, b = F:ConvertRGB_256(F:GetClassColor(class))
|
|
|
|
for i = 1, Cell.vars.raidSetup[role][class] do
|
|
if line ~= " " then
|
|
line = line .. "|TInterface\\AddOns\\Cell\\Media\\white:10:1:0:0:1:10:1:1:1:10:0:0:0|t"
|
|
end
|
|
|
|
line = line .. "|TInterface\\AddOns\\Cell\\Media\\white:10:2:0:0:2:10:1:2:1:10:"..r..":"..g..":"..b.."|t"
|
|
end
|
|
end
|
|
end
|
|
|
|
return line
|
|
end
|
|
|
|
local function UpdateRaidSetupTooltip()
|
|
CellTooltip:ClearLines()
|
|
CellTooltip:AddLine(L["Raid"])
|
|
|
|
if CELL_TOOLTIP_REMOVE_RAID_SETUP_DETAILS then
|
|
CellTooltip:AddLine(tankIcon.." |cffffffff"..Cell.vars.raidSetup.TANK.ALL)
|
|
CellTooltip:AddLine(healerIcon.." |cffffffff"..Cell.vars.raidSetup.HEALER.ALL)
|
|
CellTooltip:AddLine(damagerIcon.." |cffffffff"..Cell.vars.raidSetup.DAMAGER.ALL)
|
|
else
|
|
CellTooltip:AddLine(tankIcon.." |cffffffff"..Cell.vars.raidSetup.TANK.ALL.."|r"..GetRaidSetupDetail("TANK"))
|
|
CellTooltip:AddLine(healerIcon.." |cffffffff"..Cell.vars.raidSetup.HEALER.ALL.."|r"..GetRaidSetupDetail("HEALER"))
|
|
CellTooltip:AddLine(damagerIcon.." |cffffffff"..Cell.vars.raidSetup.DAMAGER.ALL.."|r"..GetRaidSetupDetail("DAMAGER"))
|
|
end
|
|
|
|
CellTooltip:Show()
|
|
end
|
|
|
|
raid:HookScript("OnEnter", function()
|
|
CellTooltip:SetOwner(raid, "ANCHOR_NONE")
|
|
CellTooltip:SetPoint(tooltipPoint, raid, tooltipRelativePoint, tooltipX, tooltipY)
|
|
UpdateRaidSetupTooltip()
|
|
end)
|
|
|
|
raid:HookScript("OnLeave", function()
|
|
CellTooltip:Hide()
|
|
end)
|
|
|
|
function F:UpdateRaidSetup()
|
|
if CellTooltip:GetOwner() == raid then
|
|
UpdateRaidSetupTooltip()
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- group type changed
|
|
-------------------------------------------------
|
|
local function MainFrame_UpdateVisibility()
|
|
if Cell.vars.groupType == "solo" then
|
|
if CellDB["general"]["showSolo"] then
|
|
menuFrame:Show()
|
|
else
|
|
menuFrame:Hide()
|
|
end
|
|
elseif Cell.vars.groupType == "party" then
|
|
if CellDB["general"]["showParty"] then
|
|
menuFrame:Show()
|
|
else
|
|
menuFrame:Hide()
|
|
end
|
|
else
|
|
if CellDB["general"]["showRaid"] then
|
|
menuFrame:Show()
|
|
else
|
|
menuFrame:Hide()
|
|
end
|
|
end
|
|
end
|
|
Cell:RegisterCallback("UpdateVisibility", "MainFrame_UpdateVisibility", MainFrame_UpdateVisibility)
|
|
|
|
local function MainFrame_GroupTypeChanged(groupType)
|
|
if groupType == "raid" then
|
|
raid:Show()
|
|
else
|
|
raid:Hide()
|
|
end
|
|
UpdateHoverFrame()
|
|
-- check whether menu should be shown
|
|
MainFrame_UpdateVisibility()
|
|
end
|
|
Cell:RegisterCallback("GroupTypeChanged", "MainFrame_GroupTypeChanged", MainFrame_GroupTypeChanged)
|
|
|
|
-------------------------------------------------
|
|
-- event
|
|
-------------------------------------------------
|
|
-- cellMainFrame:RegisterEvent("PET_BATTLE_OPENING_START")
|
|
-- cellMainFrame:RegisterEvent("PET_BATTLE_OVER")
|
|
-- cellMainFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
-- cellMainFrame:SetScript("OnEvent", function(self, event, ...)
|
|
-- if event == "PET_BATTLE_OPENING_START" then
|
|
-- cellMainFrame:Hide()
|
|
-- elseif event == "PET_BATTLE_OVER" then
|
|
-- cellMainFrame:Show()
|
|
-- -- elseif event == "PLAYER_ENTERING_WORLD" then
|
|
-- -- tools:SetFrameRef("raidMarksFrame", Cell.frames.raidMarksFrame)
|
|
-- end
|
|
-- end)
|
|
|
|
-------------------------------------------------
|
|
-- load & update
|
|
-------------------------------------------------
|
|
local function UpdatePosition()
|
|
local anchor = Cell.vars.currentLayoutTable["main"]["anchor"]
|
|
|
|
cellMainFrame:ClearAllPoints()
|
|
P:ClearPoints(raid)
|
|
|
|
if CellDB["general"]["menuPosition"] == "top_bottom" then
|
|
P:Size(anchorFrame, 20, 10)
|
|
P:Size(options, 20, 10)
|
|
P:Size(raid, 20, 10)
|
|
|
|
|
|
if anchor == "BOTTOMLEFT" then
|
|
cellMainFrame:SetPoint("BOTTOMLEFT", anchorFrame, "TOPLEFT", 0, 4)
|
|
P:Point(raid, "BOTTOMLEFT", options, "BOTTOMRIGHT", 1, 0)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "TOPLEFT", "BOTTOMLEFT", 0, -3
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 5, -20, -20, 20
|
|
|
|
elseif anchor == "BOTTOMRIGHT" then
|
|
cellMainFrame:SetPoint("BOTTOMRIGHT", anchorFrame, "TOPRIGHT", 0, 4)
|
|
P:Point(raid, "BOTTOMRIGHT", options, "BOTTOMLEFT", -1, 0)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "TOPRIGHT", "BOTTOMRIGHT", 0, -3
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 5, -20, -20, 20
|
|
|
|
elseif anchor == "TOPLEFT" then
|
|
cellMainFrame:SetPoint("TOPLEFT", anchorFrame, "BOTTOMLEFT", 0, -4)
|
|
P:Point(raid, "TOPLEFT", options, "TOPRIGHT", 1, 0)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "BOTTOMLEFT", "TOPLEFT", 0, 3
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -5, -20, 20
|
|
|
|
elseif anchor == "TOPRIGHT" then
|
|
cellMainFrame:SetPoint("TOPRIGHT", anchorFrame, "BOTTOMRIGHT", 0, -4)
|
|
P:Point(raid, "TOPRIGHT", options, "TOPLEFT", -1, 0)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "BOTTOMRIGHT", "TOPRIGHT", 0, 3
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -5, -20, 20
|
|
end
|
|
else -- left_right
|
|
P:Size(anchorFrame, 10, 20)
|
|
P:Size(options, 10, 20)
|
|
P:Size(raid, 10, 20)
|
|
|
|
if anchor == "BOTTOMLEFT" then
|
|
cellMainFrame:SetPoint("BOTTOMLEFT", anchorFrame, "BOTTOMRIGHT", 4, 0)
|
|
P:Point(raid, "BOTTOMLEFT", options, "TOPLEFT", 0, 1)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "BOTTOMRIGHT", "BOTTOMLEFT", -3, 0
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -20, -20, 5
|
|
|
|
elseif anchor == "BOTTOMRIGHT" then
|
|
cellMainFrame:SetPoint("BOTTOMRIGHT", anchorFrame, "BOTTOMLEFT", -4, 0)
|
|
P:Point(raid, "BOTTOMRIGHT", options, "TOPRIGHT", 0, 1)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "BOTTOMLEFT", "BOTTOMRIGHT", 3, 0
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -20, -5, 20
|
|
|
|
elseif anchor == "TOPLEFT" then
|
|
cellMainFrame:SetPoint("TOPLEFT", anchorFrame, "TOPRIGHT", 4, 0)
|
|
P:Point(raid, "TOPLEFT", options, "BOTTOMLEFT", 0, -1)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "TOPRIGHT", "TOPLEFT", -3, 0
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -20, -20, 5
|
|
|
|
elseif anchor == "TOPRIGHT" then
|
|
cellMainFrame:SetPoint("TOPRIGHT", anchorFrame, "TOPLEFT", -4, 0)
|
|
P:Point(raid, "TOPRIGHT", options, "BOTTOMRIGHT", 0, -1)
|
|
tooltipPoint, tooltipRelativePoint, tooltipX, tooltipY = "TOPLEFT", "TOPRIGHT", 3, 0
|
|
-- hoverTop, hoverBottom, hoverLeft, hoverRight = 20, -20, -5, 20
|
|
end
|
|
end
|
|
|
|
UpdateHoverFrame()
|
|
end
|
|
|
|
local function UpdateMenu(which)
|
|
F:Debug("|cff00bfffUpdateMenu:|r", which)
|
|
|
|
if not which or which == "lock" then
|
|
if CellDB["general"]["locked"] then
|
|
options:RegisterForDrag()
|
|
raid:RegisterForDrag()
|
|
-- tools:RegisterForDrag()
|
|
else
|
|
options:RegisterForDrag("LeftButton")
|
|
raid:RegisterForDrag("LeftButton")
|
|
-- tools:RegisterForDrag("LeftButton")
|
|
end
|
|
end
|
|
|
|
if not which or which == "fadeOut" then
|
|
if CellDB["general"]["fadeOut"] then
|
|
menuFrame.fadeOut:Play()
|
|
-- local totalElapsed = 0
|
|
-- menuFrame:SetScript("OnUpdate", function(self, elapsed)
|
|
-- totalElapsed = totalElapsed + elapsed
|
|
-- if totalElapsed >= 0.25 then
|
|
-- totalElapsed = 0
|
|
-- if (options:IsShown() and options:IsMouseOver(hoverTop, hoverBottom, hoverLeft, hoverRight)) or (raid:IsShown() and raid:IsMouseOver(hoverTop, hoverBottom, hoverLeft, hoverRight)) then -- mouseover
|
|
-- if not (fadingIn or fadedIn) then
|
|
-- menuFrame.fadeIn:Play()
|
|
-- end
|
|
-- else -- mouseout
|
|
-- if not (fadingOut or fadedOut) then
|
|
-- menuFrame.fadeOut:Play()
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- end)
|
|
else
|
|
menuFrame.fadeIn:Play()
|
|
-- menuFrame:SetScript("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
if which == "position" then
|
|
UpdatePosition()
|
|
end
|
|
end
|
|
Cell:RegisterCallback("UpdateMenu", "MainFrame_UpdateMenu", UpdateMenu)
|
|
|
|
local init
|
|
local function MainFrame_UpdateLayout(layout, which)
|
|
F:Debug("|cffff0066UpdateLayout:|r layout:", layout, " which:", which)
|
|
|
|
if not init then
|
|
init = true
|
|
--! NOTE: a reload during pet battle prevents HEADER from CREATING CHILDs (unit buttons), this hide delay is a MUST
|
|
RegisterStateDriver(cellMainFrame, "visibility", "[petbattle] hide; show")
|
|
end
|
|
|
|
layout = Cell.vars.currentLayoutTable
|
|
|
|
if not which or which == "main-size" then
|
|
P:Size(cellMainFrame, unpack(layout["main"]["size"]))
|
|
end
|
|
|
|
if not which or which == "main-arrangement" then
|
|
UpdatePosition()
|
|
end
|
|
|
|
-- load position
|
|
if not which then
|
|
if not P:LoadPosition(anchorFrame, layout["main"]["position"]) then
|
|
P:ClearPoints(anchorFrame)
|
|
-- no position, use default
|
|
PixelUtil.SetPoint(anchorFrame, "TOPLEFT", UIParent, "CENTER", 1, -1)
|
|
end
|
|
end
|
|
end
|
|
Cell:RegisterCallback("UpdateLayout", "MainFrame_UpdateLayout", MainFrame_UpdateLayout)
|
|
|
|
local function UpdatePixelPerfect()
|
|
F:Debug("|cffffff7fUpdatePixelPerfect")
|
|
P:Resize(cellMainFrame)
|
|
-- P:Repoint(cellMainFrame)
|
|
P:Resize(anchorFrame)
|
|
options:UpdatePixelPerfect()
|
|
raid:UpdatePixelPerfect()
|
|
P:Repoint(loadingBar)
|
|
P:Resize(loadingBar)
|
|
|
|
-- NOTE: update pixel perfect for each button moved to UpdateIndicators
|
|
-- F:IterateAllUnitButtons(function(b)
|
|
-- B:UpdatePixelPerfect(b)
|
|
-- end)
|
|
end
|
|
Cell:RegisterCallback("UpdatePixelPerfect", "MainFrame_UpdatePixelPerfect", UpdatePixelPerfect)
|