Files
pfUI/modules/unlock.lua
T

661 lines
22 KiB
Lua

pfUI:RegisterModule("unlock", function ()
-- grouped frames
local clusters = {
-- Name Shift Ctrl
{ "pfCombo", 5 },
{ "pfRaid", 40, 5 },
{ "pfGroup", 4 },
{ "pfLootRollFrame", 4 },
}
-- 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"] },
["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 },
-- 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 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", function()
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)
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()
pfUI.gui.frames[category]:Click()
if view then
pfUI.gui.frames[category][view]:Click()
end
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, tonumber(pfUI_config.appearance.border.default)*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"])
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 _, _, _, xpos, ypos = frame:GetPoint()
frame.oldPos = { xpos, ypos }
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()
local _, _, _, xpos, ypos = frame:GetPoint()
local diffxpos = frame.oldPos[1] - xpos
local diffypos = frame.oldPos[2] - ypos
for id, frame in pairs(pfUI.unlock.selection) do
CreateBackdrop(frame.drag, nil, nil, .8)
if frame:GetName() ~= name then
local anchor, _, _, xpos, ypos = frame:GetPoint()
frame:SetPoint(anchor or "TOPLEFT", xpos - diffxpos, ypos - diffypos)
end
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
frame:ClearAllPoints()
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()
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()
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(140)
pfUI.unlock.dock:SetHeight(140)
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)
-- 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, -33)
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, -30)
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 xpos = tonumber(pfUI.unlock.dock.xcoord:GetText())
local ypos = tonumber(pfUI.unlock.dock.ycoord:GetText())
frame:SetPoint("TOPLEFT", 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, -33)
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, -30)
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 xpos = tonumber(pfUI.unlock.dock.xcoord:GetText())
local ypos = tonumber(pfUI.unlock.dock.ycoord:GetText())
frame:SetPoint("TOPLEFT", 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, -55)
pfUI.unlock.dock.reset:SetPoint("TOPRIGHT", -5, -55)
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, -80)
pfUI.unlock.dock.left.texture = pfUI.unlock.dock.left:CreateTexture("arrow")
pfUI.unlock.dock.left.texture:SetTexture("Interface\\AddOns\\pfUI\\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, -80)
pfUI.unlock.dock.right.texture = pfUI.unlock.dock.right:CreateTexture("arrow")
pfUI.unlock.dock.right.texture:SetTexture("Interface\\AddOns\\pfUI\\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, -80)
pfUI.unlock.dock.up.texture = pfUI.unlock.dock.up:CreateTexture("arrow")
pfUI.unlock.dock.up.texture:SetTexture("Interface\\AddOns\\pfUI\\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, -80)
pfUI.unlock.dock.down.texture = pfUI.unlock.dock.down:CreateTexture("arrow")
pfUI.unlock.dock.down.texture:SetTexture("Interface\\AddOns\\pfUI\\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)