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.
132 lines
5.4 KiB
132 lines
5.4 KiB
local _, Cell = ...
|
|
local F = Cell.funcs
|
|
local B = Cell.bFuncs
|
|
local P = Cell.pixelPerfectFuncs
|
|
|
|
local soloFrame = CreateFrame("Frame", "CellSoloFrame", Cell.frames.mainFrame, "SecureFrameTemplate")
|
|
Cell.frames.soloFrame = soloFrame
|
|
soloFrame:SetAllPoints(Cell.frames.mainFrame)
|
|
|
|
local playerButton = CreateFrame("Button", soloFrame:GetName().."Player", soloFrame, "CellUnitButtonTemplate")
|
|
-- playerButton.type = "main" -- layout setup
|
|
playerButton:SetAttribute("unit", "player")
|
|
playerButton:SetPoint("TOPLEFT")
|
|
playerButton:Show()
|
|
Cell.unitButtons.solo["player"] = playerButton
|
|
|
|
local petButton = CreateFrame("Button", soloFrame:GetName().."Pet", soloFrame, "CellUnitButtonTemplate")
|
|
-- petButton.type = "pet" -- layout setup
|
|
petButton:SetAttribute("unit", "pet")
|
|
Cell.unitButtons.solo["pet"] = petButton
|
|
|
|
local init, previousLayout
|
|
local function SoloFrame_UpdateLayout(layout, which)
|
|
if Cell.vars.groupType ~= "solo" and init then return end
|
|
|
|
-- visibility
|
|
if layout == "hide" then
|
|
UnregisterAttributeDriver(soloFrame, "state-visibility")
|
|
soloFrame:Hide()
|
|
if init then
|
|
return
|
|
else
|
|
layout = "default"
|
|
end
|
|
else
|
|
RegisterAttributeDriver(soloFrame, "state-visibility", "[@raid1,exists] hide;[@party1,exists] hide;[group] hide;show")
|
|
end
|
|
|
|
-- update
|
|
init = true
|
|
layout = CellDB["layouts"][layout]
|
|
|
|
if not which or strfind(which, "size$") then
|
|
local width, height = unpack(layout["main"]["size"])
|
|
P.Size(playerButton, width, height)
|
|
if layout["pet"]["sameSizeAsMain"] then
|
|
P.Size(petButton, width, height)
|
|
else
|
|
P.Size(petButton, layout["pet"]["size"][1], layout["pet"]["size"][2])
|
|
end
|
|
end
|
|
|
|
-- NOTE: SetOrientation BEFORE SetPowerSize
|
|
if not which or which == "barOrientation" then
|
|
B.SetOrientation(playerButton, layout["barOrientation"][1], layout["barOrientation"][2])
|
|
B.SetOrientation(petButton, layout["barOrientation"][1], layout["barOrientation"][2])
|
|
end
|
|
|
|
if not which or strfind(which, "power$") or which == "barOrientation" or which == "powerFilter" then
|
|
B.SetPowerSize(playerButton, layout["main"]["powerSize"])
|
|
if layout["pet"]["sameSizeAsMain"] then
|
|
B.SetPowerSize(petButton, layout["main"]["powerSize"])
|
|
else
|
|
B.SetPowerSize(petButton, layout["pet"]["powerSize"])
|
|
end
|
|
end
|
|
|
|
if not which or which == "main-arrangement" or which == "pet-arrangement" then
|
|
petButton:ClearAllPoints()
|
|
if layout["main"]["orientation"] == "vertical" then
|
|
-- anchor
|
|
local point, anchorPoint
|
|
local petSpacing = layout["pet"]["sameArrangementAsMain"] and layout["main"]["spacingY"] or layout["pet"]["spacingY"]
|
|
|
|
if layout["main"]["anchor"] == "BOTTOMLEFT" then
|
|
point, anchorPoint = "BOTTOMLEFT", "TOPLEFT"
|
|
elseif layout["main"]["anchor"] == "BOTTOMRIGHT" then
|
|
point, anchorPoint = "BOTTOMRIGHT", "TOPRIGHT"
|
|
elseif layout["main"]["anchor"] == "TOPLEFT" then
|
|
point, anchorPoint = "TOPLEFT", "BOTTOMLEFT"
|
|
petSpacing = -petSpacing
|
|
elseif layout["main"]["anchor"] == "TOPRIGHT" then
|
|
point, anchorPoint = "TOPRIGHT", "BOTTOMRIGHT"
|
|
petSpacing = -petSpacing
|
|
end
|
|
|
|
petButton:SetPoint(point, playerButton, anchorPoint, 0, P.Scale(petSpacing))
|
|
else
|
|
-- anchor
|
|
local point, anchorPoint
|
|
local petSpacing = layout["pet"]["sameArrangementAsMain"] and layout["main"]["spacingX"] or layout["pet"]["spacingX"]
|
|
|
|
if layout["main"]["anchor"] == "BOTTOMLEFT" then
|
|
point, anchorPoint = "BOTTOMLEFT", "BOTTOMRIGHT"
|
|
elseif layout["main"]["anchor"] == "BOTTOMRIGHT" then
|
|
point, anchorPoint = "BOTTOMRIGHT", "BOTTOMLEFT"
|
|
petSpacing = -petSpacing
|
|
elseif layout["main"]["anchor"] == "TOPLEFT" then
|
|
point, anchorPoint = "TOPLEFT", "TOPRIGHT"
|
|
elseif layout["main"]["anchor"] == "TOPRIGHT" then
|
|
point, anchorPoint = "TOPRIGHT", "TOPLEFT"
|
|
petSpacing = -petSpacing
|
|
end
|
|
|
|
petButton:SetPoint(point, playerButton, anchorPoint, P.Scale(petSpacing), 0)
|
|
end
|
|
end
|
|
|
|
if not which or which == "pet" then
|
|
if layout["pet"]["soloEnabled"] then
|
|
RegisterAttributeDriver(petButton, "state-visibility", "[nopet] hide; [vehicleui] hide; show")
|
|
else
|
|
UnregisterAttributeDriver(petButton, "state-visibility")
|
|
petButton:Hide()
|
|
end
|
|
end
|
|
end
|
|
Cell.RegisterCallback("UpdateLayout", "SoloFrame_UpdateLayout", SoloFrame_UpdateLayout)
|
|
|
|
-- local function SoloFrame_UpdateVisibility(which)
|
|
-- F.Debug("|cffff7fffUpdateVisibility:|r "..(which or "all"))
|
|
|
|
-- if not which or which == "solo" then
|
|
-- if CellDB["general"]["showSolo"] then
|
|
-- RegisterAttributeDriver(soloFrame, "state-visibility", "[@raid1,exists] hide;[@party1,exists] hide;[group] hide;show")
|
|
-- else
|
|
-- UnregisterAttributeDriver(soloFrame, "state-visibility")
|
|
-- soloFrame:Hide()
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- Cell.RegisterCallback("UpdateVisibility", "SoloFrame_UpdateVisibility", SoloFrame_UpdateVisibility)
|