mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-22 15:46:56 +00:00
771 lines
26 KiB
Lua
771 lines
26 KiB
Lua
pfUI:RegisterModule("unlock", "vanilla:tbc", function ()
|
|
local rawborder, default_border = GetBorderSize()
|
|
|
|
-- grouped frames
|
|
local clusters = {
|
|
-- Name Shift Ctrl
|
|
{ "pfCombo", 5 },
|
|
{ "pfRaid", 40, 5 },
|
|
{ "pfGroup", 4 },
|
|
{ "pfLootRollFrame", 4 },
|
|
}
|
|
|
|
local anchors = {
|
|
"TOPLEFT", "TOP", "TOPRIGHT", "RIGHT", "BOTTOMRIGHT", "BOTTOM", "BOTTOMLEFT", "LEFT", "CENTER"
|
|
}
|
|
|
|
|
|
local spanframe = CreateFrame("Frame", "pfUnlockSelector", UIParent)
|
|
spanframe:Hide()
|
|
|
|
-- frame labels and their config section relation
|
|
local frame_configs = {
|
|
-- unitframes
|
|
["Player"] = { T["Unit Frames"], T["Player"] },
|
|
["Target"] = { T["Unit Frames"], T["Target"] },
|
|
["TargetTarget"] = { T["Unit Frames"], T["Target-Target"] },
|
|
["TargetTargetTarget"] = { T["Unit Frames"], T["Target-Target-Target"] },
|
|
["Pet"] = { T["Unit Frames"], T["Pet"] },
|
|
["PetTarget"] = { T["Unit Frames"], T["Pet-Target"] },
|
|
["Focus"] = { T["Unit Frames"], T["Focus"] },
|
|
|
|
-- combopoints
|
|
["Combo%d"] = { T["Unit Frames"], T["General"] },
|
|
|
|
-- groupframes
|
|
["Raid%d"] = { T["Group Frames"], T["Raid"] },
|
|
["Raid%d%d"] = { T["Group Frames"], T["Raid"] },
|
|
["Group%d"] = { T["Group Frames"], T["Group"] },
|
|
["Party%dTarget"] = { T["Group Frames"], T["Group-Target"] },
|
|
["PartyPet%d"] = { T["Group Frames"], T["Group-Pet"] },
|
|
|
|
-- chat
|
|
["ChatLeft"] = { T["Chat"], nil },
|
|
["ChatRight"] = { T["Chat"], nil },
|
|
["ChatInputBox"] = { T["Chat"], nil },
|
|
|
|
-- loot
|
|
["LootRollFrame%d"] = { T["Loot"], nil },
|
|
|
|
-- panel
|
|
["PanelLeft"] = { T["Panel"], T["General"] },
|
|
["PanelRight"] = { T["Panel"], T["General"] },
|
|
["PanelMinimap"] = { T["Panel"], T["General"] },
|
|
["PanelMicroButton"] = { T["Panel"], T["General"] },
|
|
|
|
-- actionbar
|
|
["ActionBarMain"] = { T["Actionbar"], T["Main Actionbar"]},
|
|
["ActionBarPaging"] = { T["Actionbar"], T["Paging Actionbar"]},
|
|
["ActionBarRight"] = { T["Actionbar"], T["Right Actionbar"]},
|
|
["ActionBarVertical"] = { T["Actionbar"], T["Vertical Actionbar"]},
|
|
["ActionBarLeft"] = { T["Actionbar"], T["Left Actionbar"]},
|
|
["ActionBarTop"] = { T["Actionbar"], T["Top Actionbar"]},
|
|
["ActionBarStanceBar1"] = { T["Actionbar"], T["Stance Bar 1"]},
|
|
["ActionBarStanceBar2"] = { T["Actionbar"], T["Stance Bar 2"]},
|
|
["ActionBarStanceBar3"] = { T["Actionbar"], T["Stance Bar 3"]},
|
|
["ActionBarStanceBar4"] = { T["Actionbar"], T["Stance Bar 4"]},
|
|
["ActionBarStances"] = { T["Actionbar"], T["Stance/Shapeshift Actionbar"]},
|
|
["ActionBarPet"] = { T["Actionbar"], T["Pet Actionbar"]},
|
|
|
|
-- castbar
|
|
["TargetCastbar"] = { T["Castbar"], nil },
|
|
["PlayerCastbar"] = { T["Castbar"], nil },
|
|
["FocusCastbar"] = { T["Castbar"], nil },
|
|
|
|
-- minimap
|
|
["Minimap"] = { T["Minimap"], T["Minimap"] },
|
|
["UITracking"] = { T["Minimap"], T["Minimap"] },
|
|
|
|
-- buffs
|
|
["BuffFrame"] = { T["Buffs"], T["Buff/Debuff Icons"] },
|
|
["DebuffFrame"] = { T["Buffs"], T["Buff/Debuff Icons"] },
|
|
|
|
-- buffbars
|
|
["PlayerBuffBar"] = { T["Buffs"], T["Player Buff Bar"] },
|
|
["PlayerDebuffBar"] = { T["Buffs"], T["Player Debuff Bar"] },
|
|
["TargetDebuffBar"] = { T["Buffs"], T["Target Debuff Bar"] },
|
|
}
|
|
|
|
local function GetFrames()
|
|
-- Return frames based on Ctrl and Shift state
|
|
-- 'this' [frame] the base frame
|
|
-- return [list] all frames that should be selected
|
|
|
|
local frame = this.frame
|
|
local frames = { frame }
|
|
|
|
if IsShiftKeyDown() or IsControlKeyDown() then
|
|
-- search and add clustered frames
|
|
for id, cluster in pairs(clusters) do
|
|
local len = strlen(cluster[1])
|
|
if strsub(frame:GetName(),0,len) == cluster[1] then
|
|
if IsShiftKeyDown() and cluster[2] then
|
|
for i = 1, cluster[2] do
|
|
if _G[cluster[1] .. i] ~= frame then
|
|
table.insert(frames, _G[cluster[1] .. i])
|
|
end
|
|
end
|
|
elseif IsControlKeyDown() and cluster[3] then
|
|
local id = tonumber(strsub(frame:GetName(),len+1,len+2))
|
|
|
|
local b = 1
|
|
for i = cluster[3]+1, cluster[2], cluster[3] do
|
|
b = ( id >= i ) and i or b
|
|
end
|
|
|
|
for i = b, b + cluster[3] - 1 do
|
|
if _G[cluster[1] .. i] ~= frame then
|
|
table.insert(frames, _G[cluster[1] .. i])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return frames
|
|
end
|
|
|
|
local function DraggerOnUpdate()
|
|
this.text:SetAlpha(this.text:GetAlpha() -0.05)
|
|
if this.text:GetAlpha() < 0.1 then
|
|
this.text:SetText(strsub(this:GetParent():GetName(),3))
|
|
this.text:SetAlpha(1)
|
|
this:SetScript("OnUpdate", function() return end)
|
|
end
|
|
end
|
|
|
|
local function SaveScale(frame, scale)
|
|
frame:SetScale(scale)
|
|
|
|
if not C.position[frame:GetName()] then
|
|
C.position[frame:GetName()] = {}
|
|
end
|
|
C.position[frame:GetName()]["scale"] = scale
|
|
|
|
frame.drag.text:SetText(T["Scale"] .. ": " .. scale)
|
|
frame.drag.text:SetAlpha(1)
|
|
|
|
frame.drag:SetScript("OnUpdate", DraggerOnUpdate)
|
|
end
|
|
|
|
local function SavePosition(frame)
|
|
SaveMovable(frame)
|
|
UpdateMovable(frame)
|
|
end
|
|
|
|
local function DrawGrid()
|
|
local grid = CreateFrame("Frame", this:GetName() .. "Grid", pfUI.unlock)
|
|
grid:SetAllPoints(this)
|
|
|
|
local size = 1
|
|
local line = {}
|
|
|
|
local width = GetScreenWidth()
|
|
local height = GetScreenHeight()
|
|
|
|
local ratio = width / GetScreenHeight()
|
|
local rheight = GetScreenHeight() * ratio
|
|
|
|
local wStep = width / 128
|
|
local hStep = rheight / 128
|
|
|
|
-- vertical lines
|
|
for i = 0, 128 do
|
|
if i == 128 / 2 then
|
|
line = grid:CreateTexture(nil, 'BORDER')
|
|
line:SetTexture(.1, .5, .4)
|
|
else
|
|
line = grid:CreateTexture(nil, 'BACKGROUND')
|
|
line:SetTexture(0, 0, 0, .5)
|
|
end
|
|
line:SetPoint("TOPLEFT", grid, "TOPLEFT", i*wStep - (size/2), 0)
|
|
line:SetPoint('BOTTOMRIGHT', grid, 'BOTTOMLEFT', i*wStep + (size/2), 0)
|
|
end
|
|
|
|
-- horizontal lines
|
|
for i = 1, floor(height/hStep) do
|
|
if i == floor(height/hStep / 2) then
|
|
line = grid:CreateTexture(nil, 'BORDER')
|
|
line:SetTexture(.1, .5, .4)
|
|
else
|
|
line = grid:CreateTexture(nil, 'BACKGROUND')
|
|
line:SetTexture(0, 0, 0)
|
|
end
|
|
|
|
line:SetPoint("TOPLEFT", grid, "TOPLEFT", 0, -(i*hStep) + (size/2))
|
|
line:SetPoint('BOTTOMRIGHT', grid, 'TOPRIGHT', 0, -(i*hStep + size/2))
|
|
end
|
|
|
|
return grid
|
|
end
|
|
|
|
local function GetConfigTable(dlabel)
|
|
local cat, conf = nil, nil
|
|
for label, config in pairs(frame_configs) do
|
|
if string.gsub(dlabel, label, "") == "" then
|
|
cat, conf = config[1], config[2]
|
|
end
|
|
end
|
|
|
|
return cat, conf
|
|
end
|
|
|
|
local function OpenConfigDialog(category, view)
|
|
pfUI.gui:Show()
|
|
|
|
if not pfUI.gui.frames[category] then return end
|
|
pfUI.gui.frames[category]:Click()
|
|
|
|
if not view or not pfUI.gui.frames[category][view] then return end
|
|
pfUI.gui.frames[category][view]:Click()
|
|
end
|
|
|
|
local function UpdateDockValues()
|
|
if not pfUI.unlock.dock:IsShown() then return end
|
|
|
|
local dock = pfUI.unlock.dock
|
|
local drag = dock.parent
|
|
local frame = drag.frame
|
|
|
|
-- update dock position
|
|
SetAutoPoint(dock, drag, default_border*2+2)
|
|
|
|
-- update dock entries
|
|
dock.title:SetText(drag.label)
|
|
if pfUI_config["position"] and pfUI_config["position"][drag.fname] and pfUI_config["position"][drag.fname]["xpos"] then
|
|
dock.xcoord:SetText(pfUI_config["position"][drag.fname]["xpos"])
|
|
dock.ycoord:SetText(pfUI_config["position"][drag.fname]["ypos"])
|
|
local anchor = pfUI_config["position"][drag.fname]["anchor"] or "TOPLEFT"
|
|
|
|
for id, k in pairs(anchors) do
|
|
-- get human readable
|
|
local value, text = strsplit(":", k)
|
|
text = text or value
|
|
|
|
if value == anchor then
|
|
UIDropDownMenu_SetSelectedID(pfUI.unlock.dock.anchor, id, 0)
|
|
UIDropDownMenu_SetText(text, pfUI.unlock.dock.anchor)
|
|
end
|
|
end
|
|
|
|
dock.reset:SetText(T["Reset"])
|
|
|
|
dock.up:Enable()
|
|
dock.down:Enable()
|
|
dock.left:Enable()
|
|
dock.right:Enable()
|
|
|
|
dock.up.texture:SetVertexColor(1,.8,0)
|
|
dock.down.texture:SetVertexColor(1,.8,0)
|
|
dock.left.texture:SetVertexColor(1,.8,0)
|
|
dock.right.texture:SetVertexColor(1,.8,0)
|
|
else
|
|
dock.reset:SetText(T["Unlock"])
|
|
dock.xcoord:SetText(T["N/A"])
|
|
dock.ycoord:SetText(T["N/A"])
|
|
|
|
dock.up:Disable()
|
|
dock.down:Disable()
|
|
dock.left:Disable()
|
|
dock.right:Disable()
|
|
|
|
dock.up.texture:SetVertexColor(.4,.4,.4)
|
|
dock.down.texture:SetVertexColor(.4,.4,.4)
|
|
dock.left.texture:SetVertexColor(.4,.4,.4)
|
|
dock.right.texture:SetVertexColor(.4,.4,.4)
|
|
end
|
|
|
|
-- update config button
|
|
local cat, conf = GetConfigTable(drag.label)
|
|
if cat then
|
|
dock.config:Enable()
|
|
else
|
|
dock.config:Disable()
|
|
end
|
|
end
|
|
|
|
local function SetDockToFrame(frame)
|
|
if pfUI.unlock.dock.parent then
|
|
-- reset previous border color
|
|
CreateBackdrop(pfUI.unlock.dock.parent, nil, nil, .8)
|
|
end
|
|
|
|
-- add the new frame
|
|
pfUI.unlock.dock.parent = frame
|
|
|
|
if frame then
|
|
pfUI.unlock.dock.parent.backdrop:SetBackdropBorderColor(.2,1,.8,1)
|
|
pfUI.unlock.dock:Show()
|
|
UpdateDockValues()
|
|
else
|
|
pfUI.unlock.dock:Hide()
|
|
end
|
|
end
|
|
|
|
local function DraggerOnMouseWheel()
|
|
local frame = this.frame
|
|
local scale = round(frame:GetScale() + arg1/10, 1)
|
|
|
|
pfUI.unlock.selection = GetFrames()
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
SaveScale(frame, scale)
|
|
end
|
|
|
|
-- repaint hackfix for panels
|
|
if pfUI.panel and pfUI.chat then
|
|
pfUI.panel.left:SetScale(pfUI.chat.left:GetScale())
|
|
pfUI.panel.right:SetScale(pfUI.chat.right:GetScale())
|
|
end
|
|
|
|
if frame.OnMove then frame:OnMove() end
|
|
QueueFunction(UpdateDockValues)
|
|
end
|
|
|
|
local function DraggerOnMouseDown()
|
|
if arg1 == "MiddleButton" then return end
|
|
if arg1 == "RightButton" then
|
|
if pfUI.unlock.dock.parent == this and pfUI.unlock.dock:IsShown() then
|
|
SetDockToFrame(nil)
|
|
else
|
|
SetDockToFrame(this)
|
|
end
|
|
return
|
|
end
|
|
local frame = this.frame
|
|
|
|
pfUI.unlock.selection = GetFrames()
|
|
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
frame:StartMoving()
|
|
frame:StopMovingOrSizing()
|
|
frame.drag.backdrop:SetBackdropBorderColor(.2,1,.8,1)
|
|
end
|
|
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame.oldPos = { xpos, ypos, anchor }
|
|
frame:StartMoving()
|
|
|
|
if frame.OnMove then frame:OnMove() end
|
|
end
|
|
|
|
local function DraggerOnMouseUp()
|
|
if arg1 == "MiddleButton" then return end
|
|
if arg1 == "RightButton" then return end
|
|
|
|
local frame = this.frame
|
|
local name = this.fname
|
|
|
|
frame:StopMovingOrSizing()
|
|
|
|
-- calculate and move selection offsets
|
|
local anchor, xpos, ypos = ConvertFrameAnchor(frame, frame.oldPos[3])
|
|
local diffxpos = frame.oldPos[1] - xpos
|
|
local diffypos = frame.oldPos[2] - ypos
|
|
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
frame:SetParent("UIParent")
|
|
if frame:GetName() ~= name then
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor or "TOPLEFT", xpos - diffxpos, ypos - diffypos)
|
|
end
|
|
end
|
|
|
|
-- detect best anchor
|
|
local bestanchor = "TOPLEFT"
|
|
local left, top, right, bottom
|
|
spanframe:ClearAllPoints()
|
|
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
if not left or frame:GetLeft() < left then
|
|
spanframe:SetPoint("LEFT", frame, "LEFT", 0, 0)
|
|
left = frame:GetLeft()
|
|
end
|
|
if not top or frame:GetTop() > top then
|
|
top = frame:GetTop()
|
|
spanframe:SetPoint("TOP", frame, "TOP", 0, 0)
|
|
end
|
|
if not right or frame:GetRight() > right then
|
|
right = frame:GetRight()
|
|
spanframe:SetPoint("RIGHT", frame, "RIGHT", 0, 0)
|
|
end
|
|
if not bottom or frame:GetBottom() < bottom then
|
|
bottom = frame:GetBottom()
|
|
spanframe:SetPoint("BOTTOM", frame, "BOTTOM", 0, 0)
|
|
end
|
|
end
|
|
bestanchor = GetBestAnchor(spanframe)
|
|
|
|
-- save all frame positions
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
CreateBackdrop(frame.drag, nil, nil, .8)
|
|
local anchor, x, y = ConvertFrameAnchor(frame, bestanchor)
|
|
frame:ClearAllPoints()
|
|
frame:SetPoint(anchor, UIParent, anchor, x, y)
|
|
SavePosition(frame)
|
|
end
|
|
|
|
this.backdrop:SetBackdropBorderColor(1,1,1,1)
|
|
UpdateDockValues()
|
|
end
|
|
|
|
local function DraggerOnClick()
|
|
pfUI.unlock.selection = GetFrames()
|
|
for id, frame in pairs(pfUI.unlock.selection) do
|
|
pfUI_config["position"][frame:GetName()] = nil
|
|
UpdateMovable(frame)
|
|
|
|
if frame.OnMove then frame:OnMove() end
|
|
end
|
|
UpdateDockValues()
|
|
end
|
|
|
|
local function DraggerOnEnter()
|
|
if pfUI.unlock.dock.parent ~= this then
|
|
this.backdrop:SetBackdropBorderColor(1,1,1,1)
|
|
end
|
|
end
|
|
|
|
local function DraggerOnLeave()
|
|
if pfUI.unlock.dock.parent ~= this then
|
|
CreateBackdrop(this, nil, nil, .8)
|
|
end
|
|
end
|
|
|
|
local function CreateDragger(f)
|
|
local fname = f:GetName()
|
|
local label = string.sub(fname, 1, 2) == "pf" and strsub(fname,3) or fname
|
|
|
|
local d = CreateFrame("Button", fname .. "Drag", f)
|
|
d:RegisterForClicks("MiddleButtonUp")
|
|
d:SetAllPoints(f)
|
|
d:SetFrameStrata("DIALOG")
|
|
d:SetAlpha(1)
|
|
d:EnableMouseWheel(1)
|
|
|
|
d.text = d:CreateFontString("Status", "LOW", "GameFontNormal")
|
|
d.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
d.text:ClearAllPoints()
|
|
d.text:SetAllPoints(d)
|
|
d.text:SetPoint("CENTER", 0, 0)
|
|
d.text:SetFontObject(GameFontWhite)
|
|
|
|
d.frame = f
|
|
d.fname = fname
|
|
d.label = label
|
|
|
|
if d:GetHeight() > (2 * d:GetWidth()) then
|
|
label = strvertical(label)
|
|
end
|
|
|
|
d.text:SetText(label)
|
|
|
|
d:SetScript("OnMouseWheel", DraggerOnMouseWheel)
|
|
d:SetScript("OnMouseDown", DraggerOnMouseDown)
|
|
d:SetScript("OnMouseUp", DraggerOnMouseUp)
|
|
d:SetScript("OnClick", DraggerOnClick)
|
|
d:SetScript("OnEnter", DraggerOnEnter)
|
|
d:SetScript("OnLeave", DraggerOnLeave)
|
|
|
|
CreateBackdrop(d, nil, nil, .8)
|
|
return d
|
|
end
|
|
|
|
table.insert(UISpecialFrames, "pfUnlock")
|
|
pfUI.unlock = CreateFrame("Button", "pfUnlock", UIParent)
|
|
pfUI.unlock.selection = {}
|
|
pfUI.unlock:Hide()
|
|
pfUI.unlock:SetAllPoints(WorldFrame)
|
|
pfUI.unlock:SetFrameStrata("BACKGROUND")
|
|
pfUI.unlock:SetScript("OnClick", function()
|
|
this:Hide()
|
|
end)
|
|
|
|
pfUI.unlock:SetScript("OnShow", function()
|
|
if this.skip then this.skip = nil return end
|
|
if InCombatLockdown and InCombatLockdown() then
|
|
DEFAULT_CHAT_FRAME:AddMessage(ERR_NOT_IN_COMBAT, 1, .2, .2)
|
|
this.skip = true
|
|
this:Hide()
|
|
return
|
|
end
|
|
|
|
this.grid = this.grid or DrawGrid()
|
|
|
|
for name, frame in pairs(pfUI.movables) do
|
|
local frame = frame or _G[name]
|
|
|
|
if not frame:IsShown() then frame.hideLater = true end
|
|
frame.drag = frame.drag or CreateDragger(frame)
|
|
frame:SetMovable(true)
|
|
frame.drag:Show()
|
|
frame:Show()
|
|
end
|
|
|
|
local txt = T["Unlock Mode allows you to move, scale and reset frames:\n\n|cff33ffcc[Left Click]|r Drag Frame\n|cff33ffcc[Middle Click]|r Reset Frame\n|cff33ffcc[Right Click]|r Option Box\n\nHold |cff33ffcc[Shift]|r to select all frames of the same kind\nHold |cff33ffcc[Ctrl]|r to select all frames of the same group\n\n|cff33ffcc[Click]|r on an empty area or press |cff33ffcc[Esc]|r to exit\n"]
|
|
CreateInfoBox(txt, 15, pfUI.unlock, 180)
|
|
pfUI.gui:Hide()
|
|
end)
|
|
|
|
pfUI.unlock:SetScript("OnHide", function()
|
|
if this.skip then this.skip = nil return end
|
|
if InCombatLockdown and InCombatLockdown() then
|
|
this.skip = true
|
|
this:Show()
|
|
return
|
|
end
|
|
|
|
for name, frame in pairs(pfUI.movables) do
|
|
local frame = frame or _G[name]
|
|
|
|
if frame.hideLater == true then frame:Hide() end
|
|
frame:StopMovingOrSizing()
|
|
frame:SetMovable(false)
|
|
frame.drag:Hide()
|
|
UpdateMovable(frame)
|
|
end
|
|
|
|
SetDockToFrame(nil)
|
|
pfUI.unlock:Hide()
|
|
pfUI.gui:Show()
|
|
end)
|
|
|
|
-- dock frame
|
|
pfUI.unlock.dock = CreateFrame("Button", "pfUnlockDock", pfUI.unlock)
|
|
pfUI.unlock.dock:SetWidth(150)
|
|
pfUI.unlock.dock:SetHeight(160)
|
|
pfUI.unlock.dock:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
pfUI.unlock.dock:Hide()
|
|
CreateBackdrop(pfUI.unlock.dock)
|
|
|
|
-- title
|
|
pfUI.unlock.dock.title = pfUI.unlock.dock:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
|
pfUI.unlock.dock.title:SetTextColor(1,1,1,1)
|
|
pfUI.unlock.dock.title:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
|
|
pfUI.unlock.dock.title:SetJustifyH("left")
|
|
pfUI.unlock.dock.title:SetPoint("TOP", 0, -5)
|
|
|
|
-- anchor
|
|
pfUI.unlock.dock.anchor = CreateFrame("Frame", "pfUIUnlockAnchorDropDownMenu", pfUI.unlock.dock, "UIDropDownMenuTemplate")
|
|
pfUI.unlock.dock.anchor:ClearAllPoints()
|
|
pfUI.unlock.dock.anchor:SetPoint("TOP", 0, -25)
|
|
|
|
UIDropDownMenu_SetWidth(120, pfUI.unlock.dock.anchor)
|
|
UIDropDownMenu_SetButtonWidth(120, pfUI.unlock.dock.anchor)
|
|
UIDropDownMenu_JustifyText("RIGHT", pfUI.unlock.dock.anchor)
|
|
UIDropDownMenu_Initialize(pfUI.unlock.dock.anchor, function()
|
|
local info = {}
|
|
for id, k in pairs(anchors) do
|
|
-- get human readable
|
|
local value, text = strsplit(":", k)
|
|
local id = id
|
|
text = text or value
|
|
|
|
info.text = text
|
|
info.checked = false
|
|
info.func = function()
|
|
UIDropDownMenu_SetSelectedID(pfUI.unlock.dock.anchor, id, 0)
|
|
UIDropDownMenu_SetText(text, pfUI.unlock.dock.anchor)
|
|
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, x, y = ConvertFrameAnchor(frame, text)
|
|
frame:ClearAllPoints()
|
|
frame:SetPoint(anchor, UIParent, anchor, x, y)
|
|
|
|
SavePosition(frame)
|
|
UpdateDockValues()
|
|
end
|
|
|
|
UIDropDownMenu_AddButton(info)
|
|
end
|
|
end)
|
|
|
|
SkinDropDown(pfUI.unlock.dock.anchor)
|
|
|
|
-- x coordinates
|
|
pfUI.unlock.dock.xcoordcap = pfUI.unlock.dock:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
|
pfUI.unlock.dock.xcoordcap:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
pfUI.unlock.dock.xcoordcap:SetJustifyH("LEFT")
|
|
pfUI.unlock.dock.xcoordcap:SetPoint("TOPLEFT", 5, -63)
|
|
pfUI.unlock.dock.xcoordcap:SetText("X:")
|
|
pfUI.unlock.dock.xcoord = CreateFrame("EditBox", nil, pfUI.unlock.dock)
|
|
pfUI.unlock.dock.xcoord:SetTextInsets(5, 5, 5, 5)
|
|
pfUI.unlock.dock.xcoord:SetJustifyH("CENTER")
|
|
pfUI.unlock.dock.xcoord:SetWidth(45)
|
|
pfUI.unlock.dock.xcoord:SetHeight(18)
|
|
pfUI.unlock.dock.xcoord:SetPoint("TOPLEFT", pfUI.unlock.dock, "TOPLEFT", 20, -60)
|
|
pfUI.unlock.dock.xcoord:SetFontObject(GameFontNormal)
|
|
pfUI.unlock.dock.xcoord:SetAutoFocus(false)
|
|
|
|
pfUI.unlock.dock.xcoord:SetScript("OnEscapePressed", function(self)
|
|
if tonumber(this:GetText()) then
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor, xpos, ypos)
|
|
SavePosition(frame)
|
|
else
|
|
UpdateDockValues()
|
|
end
|
|
this:ClearFocus()
|
|
end)
|
|
|
|
pfUI.unlock.dock.xcoord:SetScript("OnTextChanged", function(self)
|
|
if tonumber(this:GetText()) then
|
|
this:SetTextColor(1,1,1,1)
|
|
else
|
|
this:SetTextColor(1,.3,.3,1)
|
|
end
|
|
end)
|
|
|
|
CreateBackdrop(pfUI.unlock.dock.xcoord, nil, true)
|
|
|
|
-- y coordinates
|
|
pfUI.unlock.dock.ycoordcap = pfUI.unlock.dock:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
|
pfUI.unlock.dock.ycoordcap:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
pfUI.unlock.dock.ycoordcap:SetText("Y:")
|
|
pfUI.unlock.dock.ycoordcap:SetJustifyH("LEFT")
|
|
pfUI.unlock.dock.ycoordcap:SetPoint("TOPLEFT", 75, -63)
|
|
pfUI.unlock.dock.ycoord = CreateFrame("EditBox", nil, pfUI.unlock.dock)
|
|
pfUI.unlock.dock.ycoord:SetTextInsets(5, 5, 5, 5)
|
|
pfUI.unlock.dock.ycoord:SetJustifyH("CENTER")
|
|
pfUI.unlock.dock.ycoord:SetWidth(45)
|
|
pfUI.unlock.dock.ycoord:SetHeight(18)
|
|
pfUI.unlock.dock.ycoord:SetPoint("TOPLEFT", pfUI.unlock.dock, "TOPLEFT", 90, -60)
|
|
pfUI.unlock.dock.ycoord:SetFontObject(GameFontNormal)
|
|
pfUI.unlock.dock.ycoord:SetAutoFocus(false)
|
|
|
|
pfUI.unlock.dock.ycoord:SetScript("OnEscapePressed", function(self)
|
|
if tonumber(this:GetText()) then
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor, xpos, ypos)
|
|
SavePosition(frame)
|
|
else
|
|
UpdateDockValues()
|
|
end
|
|
this:ClearFocus()
|
|
end)
|
|
|
|
pfUI.unlock.dock.ycoord:SetScript("OnTextChanged", function(self)
|
|
if tonumber(this:GetText()) then
|
|
this:SetTextColor(1,1,1,1)
|
|
else
|
|
this:SetTextColor(1,.3,.3,1)
|
|
end
|
|
end)
|
|
|
|
CreateBackdrop(pfUI.unlock.dock.ycoord, nil, true)
|
|
|
|
-- reset button
|
|
pfUI.unlock.dock.reset = CreateFrame("Button", "pfDragDockReset", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.reset:SetHeight(18)
|
|
pfUI.unlock.dock.reset:SetPoint("TOPLEFT", 5, -85)
|
|
pfUI.unlock.dock.reset:SetPoint("TOPRIGHT", -5, -85)
|
|
pfUI.unlock.dock.reset:SetScript("OnClick", function()
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
|
|
if this:GetText() == T["Reset"] then
|
|
pfUI_config["position"][frame:GetName()] = nil
|
|
frame:ClearAllPoints()
|
|
UpdateMovable(frame)
|
|
else
|
|
frame:StartMoving()
|
|
frame:StopMovingOrSizing()
|
|
SavePosition(frame)
|
|
end
|
|
|
|
if frame.OnMove then frame:OnMove() end
|
|
|
|
QueueFunction(SetDockToFrame, pfUI.unlock.dock.parent)
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.reset,.2,1,.8)
|
|
|
|
-- move left
|
|
pfUI.unlock.dock.left = CreateFrame("Button", "pfDragDockPosUp", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.left:SetHeight(18)
|
|
pfUI.unlock.dock.left:SetWidth(18)
|
|
pfUI.unlock.dock.left:SetPoint("TOP", -50, -110)
|
|
pfUI.unlock.dock.left.texture = pfUI.unlock.dock.left:CreateTexture("arrow")
|
|
pfUI.unlock.dock.left.texture:SetTexture(pfUI.media["img:left"])
|
|
pfUI.unlock.dock.left.texture:ClearAllPoints()
|
|
pfUI.unlock.dock.left.texture:SetPoint("TOPLEFT", pfUI.unlock.dock.left, "TOPLEFT", 4, -2)
|
|
pfUI.unlock.dock.left.texture:SetPoint("BOTTOMRIGHT", pfUI.unlock.dock.left, "BOTTOMRIGHT", -4, 2)
|
|
pfUI.unlock.dock.left:SetScript("OnClick", function()
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor or "TOPLEFT", xpos - 1, ypos)
|
|
SavePosition(frame)
|
|
UpdateDockValues()
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.left,.2,1,.8)
|
|
|
|
-- move right
|
|
pfUI.unlock.dock.right = CreateFrame("Button", "pfDragDockPosUp", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.right:SetHeight(18)
|
|
pfUI.unlock.dock.right:SetWidth(18)
|
|
pfUI.unlock.dock.right:SetPoint("TOP", -25, -110)
|
|
pfUI.unlock.dock.right.texture = pfUI.unlock.dock.right:CreateTexture("arrow")
|
|
pfUI.unlock.dock.right.texture:SetTexture(pfUI.media["img:right"])
|
|
pfUI.unlock.dock.right.texture:ClearAllPoints()
|
|
pfUI.unlock.dock.right.texture:SetPoint("TOPLEFT", pfUI.unlock.dock.right, "TOPLEFT", 4, -2)
|
|
pfUI.unlock.dock.right.texture:SetPoint("BOTTOMRIGHT", pfUI.unlock.dock.right, "BOTTOMRIGHT", -4, 2)
|
|
pfUI.unlock.dock.right:SetScript("OnClick", function()
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor or "TOPLEFT", xpos + 1, ypos)
|
|
SavePosition(frame)
|
|
UpdateDockValues()
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.right,.2,1,.8)
|
|
|
|
-- move up
|
|
pfUI.unlock.dock.up = CreateFrame("Button", "pfDragDockPosUp", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.up:SetHeight(18)
|
|
pfUI.unlock.dock.up:SetWidth(18)
|
|
pfUI.unlock.dock.up:SetPoint("TOP", 25, -110)
|
|
pfUI.unlock.dock.up.texture = pfUI.unlock.dock.up:CreateTexture("arrow")
|
|
pfUI.unlock.dock.up.texture:SetTexture(pfUI.media["img:up"])
|
|
pfUI.unlock.dock.up.texture:ClearAllPoints()
|
|
pfUI.unlock.dock.up.texture:SetPoint("TOPLEFT", pfUI.unlock.dock.up, "TOPLEFT", 4, -2)
|
|
pfUI.unlock.dock.up.texture:SetPoint("BOTTOMRIGHT", pfUI.unlock.dock.up, "BOTTOMRIGHT", -4, 2)
|
|
pfUI.unlock.dock.up:SetScript("OnClick", function()
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor or "TOPLEFT", xpos, ypos + 1)
|
|
SavePosition(frame)
|
|
UpdateDockValues()
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.up,.2,1,.8)
|
|
|
|
-- move down
|
|
pfUI.unlock.dock.down = CreateFrame("Button", "pfDragDockPosUp", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.down:SetHeight(18)
|
|
pfUI.unlock.dock.down:SetWidth(18)
|
|
pfUI.unlock.dock.down:SetPoint("TOP", 50, -110)
|
|
pfUI.unlock.dock.down.texture = pfUI.unlock.dock.down:CreateTexture("arrow")
|
|
pfUI.unlock.dock.down.texture:SetTexture(pfUI.media["img:down"])
|
|
pfUI.unlock.dock.down.texture:ClearAllPoints()
|
|
pfUI.unlock.dock.down.texture:SetPoint("TOPLEFT", pfUI.unlock.dock.down, "TOPLEFT", 4, -2)
|
|
pfUI.unlock.dock.down.texture:SetPoint("BOTTOMRIGHT", pfUI.unlock.dock.down, "BOTTOMRIGHT", -4, 2)
|
|
pfUI.unlock.dock.down:SetScript("OnClick", function()
|
|
local frame = pfUI.unlock.dock.parent.frame
|
|
local anchor, _, _, xpos, ypos = frame:GetPoint()
|
|
frame:SetPoint(anchor or "TOPLEFT", xpos, ypos - 1)
|
|
SavePosition(frame)
|
|
UpdateDockValues()
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.down,.2,1,.8)
|
|
|
|
-- open config
|
|
pfUI.unlock.dock.config = CreateFrame("Button", "pfDragDockConfigOpen", pfUI.unlock.dock, "UIPanelButtonTemplate")
|
|
pfUI.unlock.dock.config:SetHeight(18)
|
|
pfUI.unlock.dock.config:SetPoint("BOTTOMLEFT", 5, 5)
|
|
pfUI.unlock.dock.config:SetPoint("BOTTOMRIGHT", -5, 5)
|
|
pfUI.unlock.dock.config:SetText(T["Configure"])
|
|
pfUI.unlock.dock.config:SetScript("OnClick", function()
|
|
local cat, conf = GetConfigTable(pfUI.unlock.dock.parent.label)
|
|
if cat then OpenConfigDialog(cat, conf) end
|
|
end)
|
|
SkinButton(pfUI.unlock.dock.config,.2,1,.8)
|
|
end)
|