--LootRollMover by Xruptor
local f = CreateFrame("frame","LRMFrame",UIParent)
f:SetScript("OnEvent", function(self, event, ...) if self[event] then return self[event](self, event, ...) end end)
local debugf = tekDebug and tekDebug:GetFrame("LootRollMover")
local function Debug(...)
if debugf then debugf:AddMessage(string.join(", ", tostringall(...))) end
end
--[[------------------------
ENABLE
--------------------------]]
UIPARENT_MANAGED_FRAME_POSITIONS["GroupLootContainer"] = nil;
function f:PLAYER_LOGIN()
--setup the DB
if not LRMDB then LRMDB = {} end
if LRMDB.scale == nil then LRMDB.scale = 1 end
--draw the anchor
self:DrawAnchor()
--restore previous layout
self:RestoreLayout("LootRollMoverAnchor_Frame")
--slash commands
SLASH_LOOTROLLMOVER1 = "/lrm"
SLASH_LOOTROLLMOVER2 = "/lootrollmover"
SlashCmdList["LOOTROLLMOVER"] = function(cmd)
local a,b,c=strfind(cmd, "(%S+)"); --contiguous string of non-space characters
if a then
if c and c:lower() == "show" then
if not _G["LootRollMoverAnchor_Frame"] then return end
_G["LootRollMoverAnchor_Frame"]:Show()
return true
elseif c and c:lower() == "reset" then
if not _G["LootRollMoverAnchor_Frame"] then return end
_G["LootRollMoverAnchor_Frame"]:ClearAllPoints()
_G["LootRollMoverAnchor_Frame"]:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
_G["LootRollMoverAnchor_Frame"]:Show()
DEFAULT_CHAT_FRAME:AddMessage("LootRollMover: Frame position has been reset!")
return true
elseif c and c:lower() == "scale" then
if b then
local scalenum = strsub(cmd, b+2)
if scalenum and scalenum ~= "" and tonumber(scalenum) then
if not _G["LootRollMoverAnchor_Frame"] then return end
_G["LootRollMoverAnchor_Frame"]:SetScale(tonumber(scalenum))
LRMDB.scale = tonumber(scalenum)
DEFAULT_CHAT_FRAME:AddMessage("LootRollMover: scale has been set to ["..tonumber(scalenum).."]")
return true
end
end
end
end
DEFAULT_CHAT_FRAME:AddMessage("LootRollMover");
DEFAULT_CHAT_FRAME:AddMessage("/lrm show - Toggle moveable anchor")
DEFAULT_CHAT_FRAME:AddMessage("/lrm reset - Reset anchor position")
DEFAULT_CHAT_FRAME:AddMessage("/lrm scale # - Set the scale of the Loot Frames (Default 1)")
end
local ver = GetAddOnMetadata("LootRollMover","Version") or '1.0'
DEFAULT_CHAT_FRAME:AddMessage(string.format("|cFF99CC33%s|r [v|cFFDF2B2B%s|r] Loaded", "LootRollMover", ver or "1.0"))
end
--[[------------------------
CORE
--------------------------]]
--replace the grouplootframe show, it has fixanchors in it
--http://wowprogramming.com/utils/xmlbrowser/live/FrameXML/LootFrame.lua
local function RepositionLootFrames()
if not _G["LootRollMoverAnchor_Frame"] then return end
if not LRMDB then return end
local frame
frame = _G["GroupLootContainer"]
if ( frame ) then
frame:ClearAllPoints()
frame:SetPoint("BOTTOMLEFT", _G["LootRollMoverAnchor_Frame"], "BOTTOMLEFT", 4, 2)
frame:SetScale(LRMDB.scale)
end
for i=1, NUM_GROUP_LOOT_FRAMES do
frame = _G["GroupLootFrame" .. i]
if i == 1 then
if ( frame ) then
frame:ClearAllPoints()
frame:SetPoint("BOTTOMLEFT", _G["LootRollMoverAnchor_Frame"], "BOTTOMLEFT", 4, 2)
frame:SetScale(LRMDB.scale)
end
elseif i > 1 then
if ( frame ) then
frame:ClearAllPoints()
frame:SetPoint("BOTTOM", "GroupLootFrame" .. (i-1), "TOP", 0, 3)
frame:SetScale(LRMDB.scale)
end
end
end
end
hooksecurefunc("GroupLootContainer_OnLoad", RepositionLootFrames)
hooksecurefunc("GroupLootContainer_RemoveFrame", RepositionLootFrames)
hooksecurefunc("GroupLootFrame_OnShow", RepositionLootFrames)
hooksecurefunc("GroupLootFrame_OpenNewFrame", RepositionLootFrames)
hooksecurefunc("GroupLootFrame_OnEvent", RepositionLootFrames)
hooksecurefunc("GroupLootContainer_Update", RepositionLootFrames)
--hooksecurefunc("AlertFrame_FixAnchors", RepositionLootFrames)
function f:DrawAnchor()
local frame = CreateFrame("Frame", "LootRollMoverAnchor_Frame", UIParent)
frame:SetFrameStrata("DIALOG")
frame:SetWidth(GroupLootFrame1:GetWidth())
frame:SetHeight(GroupLootFrame1:GetHeight())
frame:EnableMouse(true)
frame:SetMovable(true)
frame:SetScript("OnMouseDown",function(self, button)
if button == "LeftButton" then
self.isMoving = true
self:StartMoving()
else
self:Hide()
end
end)
frame:SetScript("OnMouseUp",function(self)
if( self.isMoving ) then
self.isMoving = nil
self:StopMovingOrSizing()
f:SaveLayout(self:GetName())
end
end)
local stringA = frame:CreateFontString()
stringA:SetAllPoints(frame)
stringA:SetFontObject("GameFontNormalSmall")
stringA:SetText("LootRollMover\n\nRight click when finished dragging")
frame:SetBackdrop({
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true,
tileSize = 16,
edgeSize = 16,
insets = { left = 5, right = 5, top = 5, bottom = 5 }
})
frame:SetBackdropColor(0.75,0,0,1)
frame:SetBackdropBorderColor(0.75,0,0,1)
frame:SetScale(LRMDB.scale)
frame:Hide()
end
--[[------------------------
LAYOUT SAVE/RESTORE
--------------------------]]
function f:SaveLayout(frame)
if type(frame) ~= "string" then return end
if not _G[frame] then return end
if not LRMDB then LRMDB = {} end
local opt = LRMDB[frame] or nil
if not opt then
LRMDB[frame] = {
["point"] = "CENTER",
["relativePoint"] = "CENTER",
["xOfs"] = 0,
["yOfs"] = 0,
}
opt = LRMDB[frame]
return
end
local point, relativeTo, relativePoint, xOfs, yOfs = _G[frame]:GetPoint()
opt.point = point
opt.relativePoint = relativePoint
opt.xOfs = xOfs
opt.yOfs = yOfs
end
function f:RestoreLayout(frame)
if type(frame) ~= "string" then return end
if not _G[frame] then return end
if not LRMDB then LRMDB = {} end
local opt = LRMDB[frame] or nil
if not opt then
LRMDB[frame] = {
["point"] = "CENTER",
["relativePoint"] = "CENTER",
["xOfs"] = 0,
["yOfs"] = 0,
}
opt = LRMDB[frame]
end
_G[frame]:ClearAllPoints()
_G[frame]:SetPoint(opt.point, UIParent, opt.relativePoint, opt.xOfs, opt.yOfs)
end
if IsLoggedIn() then f:PLAYER_LOGIN() else f:RegisterEvent("PLAYER_LOGIN") end