--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local select = _G.select; local pairs = _G.pairs; local type = _G.type; local tostring = _G.tostring; local tonumber = _G.tonumber; local tinsert = _G.tinsert; local string = _G.string; local math = _G.math; local table = _G.table; --[[ STRING METHODS ]]-- local format, find, lower, match = string.format, string.find, string.lower, string.match; --[[ MATH METHODS ]]-- local floor, abs, min, max = math.floor, math.abs, math.min, math.max; --[[ TABLE METHODS ]]-- local tremove, tcopy, twipe, tsort, tconcat, tdump = table.remove, table.copy, table.wipe, table.sort, table.concat, table.dump; --[[ ########################################################## GET ADDON DATA ########################################################## ]]-- local SV, L = unpack(SVUI); local ErrorStorage = {} BINDING_HEADER_SVUIDEBUG = "Supervillain UI: Debugger"; --[[ ########################################################## CUSTOM MESSAGE WINDOW ########################################################## ]]-- function SVUI_ScriptError_OnLoad() SVUI_ScriptError.Source = ""; SVUI_ScriptError:SetFixedPanelTemplate("Transparent") SVUI_ScriptErrorDialog:SetFixedPanelTemplate("Transparent") SVUI_ScriptErrorDialog.Input:SetScript("OnTextChanged", function(self, userInput) if userInput then return end local _, max = SVUI_ScriptErrorDialogScrollBar:GetMinMaxValues() for i = 1, max do ScrollFrameTemplate_OnMouseWheel(SVUI_ScriptErrorDialog, -1) end end) _G["SVUI_ScriptError"]:RegisterForDrag("LeftButton"); end function SVUI_ScriptError_OnShow() if SVUI_ScriptError.Source then local txt = SVUI_ScriptError.Source; SVUI_ScriptError.Title:SetText(txt); end end --[[ ########################################################## OTHER SLASH COMMANDS ########################################################## ]]-- local function GetOriginalContext() UIParentLoadAddOn("Blizzard_DebugTools") local orig_DevTools_RunDump = DevTools_RunDump local originalContext DevTools_RunDump = function(value, context) originalContext = context end DevTools_Dump("") DevTools_RunDump = orig_DevTools_RunDump return originalContext end local function SV_Dump(value) local context = GetOriginalContext() local buffer = "" context.Write = function(self, msg) buffer = buffer.."\n"..msg end DevTools_RunDump(value, context) return buffer.."\n"..table.dump(value) end local function DebugDump(any) if type(any)=="string" then return any elseif type(any) == "table" then return SV_Dump(any) elseif any==nil or type(any)=="number" then return tostring(any) end return any end local function DebugOutput(msg) if not SVUI_ScriptError:IsShown() then SVUI_ScriptError:Show() end local outputString = SVUI_ScriptErrorDialog.Input:GetText() outputString = outputString .. "\n" .. msg tinsert(ErrorStorage,msg); SVUI_ScriptErrorDialog.Input:SetText(outputString) end local function ShowDebug(header, ...) local value = (header and format("Debug %s: ", header)) or "Debug: " value = format("|cff11ff11 %s|r", value) for i = 1, select('#', ...), 2 do local name = select(i, ...) local var = DebugDump(select(i+1, ...)) value = format("%s %s = ", value, name)..var end SVUI_ScriptError.Source = header; DebugOutput(value) end function DebugThisFrame(arg) local outputString = " "; if arg then arg = _G[arg] or GetMouseFocus() else arg = GetMouseFocus() end if arg and (arg.GetName and arg:GetName()) then local point, relativeTo, relativePoint, xOfs, yOfs = arg:GetPoint() outputString = outputString.."|cffCC0000----------------------------".."\n" outputString = outputString.."|cffCC00FF--Mouseover Frame".."|r".."\n" outputString = outputString.."|cffCC0000----------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Name: |cffFFD100"..arg:GetName().."\n" if arg:GetParent() and arg:GetParent():GetName() then outputString = outputString.."|cff00D1FF".."Parent: |cffFFD100"..arg:GetParent():GetName().."\n" end outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg:GetHeight()).."\n" outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..arg:GetFrameStrata().."\n" outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..arg:GetFrameLevel().."\n" outputString = outputString.."|cff00D1FF".."IsShown: |cffFFD100"..tostring(arg:IsShown()).."\n" if xOfs then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",xOfs).."\n" end if yOfs then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",yOfs).."\n" end if relativeTo and relativeTo:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..point.."|r anchored to "..relativeTo:GetName().."'s |cffFFD100"..relativePoint.."\n" end local bg = arg:GetBackdrop() if type(bg) == "table" then outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n" outputString = outputString..tdump(bg).."\n" end if arg._template then outputString = outputString.."Template Name: |cff00FF55"..arg._template.."\n" end if arg.Panel then local cpt, crt, crp, cxo, cyo = arg.Panel:GetPoint() outputString = outputString.."|cffFF8800>> backdropFrame --------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg.Panel:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg.Panel:GetHeight()).."\n" outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..arg.Panel:GetFrameStrata().."\n" outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..arg.Panel:GetFrameLevel().."\n" if cxo then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n" end if cyo then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n" end if crt and crt:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n" end bg = arg.Panel:GetBackdrop() if type(bg) == "table" then outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n" outputString = outputString..tdump(bg).."\n" end if arg._skin then local cpt, crt, crp, cxo, cyo = arg._skin:GetPoint() outputString = outputString.."|cffFF7700>> backdropTexture --------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",arg._skin:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",arg._skin:GetHeight()).."\n" if cxo then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n" end if cyo then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n" end if crt and crt:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n" end bg = arg._skin:GetTexture() if bg then outputString = outputString.."|cff00D1FF".."Texture: |cffFFD100"..bg.."\n" end end end local childFrames = { arg:GetChildren() } if #childFrames > 0 then outputString = outputString.."|cffCC00FF>>>> Child Frames----------------------------".."|r".."\n".."\n" for _, child in ipairs(childFrames) do local cpt, crt, crp, cxo, cyo = child:GetPoint() if child:GetName() then outputString = outputString.."\n\n|cff00FF55++"..child:GetName().."|r".."\n" else outputString = outputString.."\n\n|cff99FF55+!!+".."Anonymous Frame".."|r".."\n" end outputString = outputString.."|cffCC00FF----------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child:GetHeight()).."\n" outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..child:GetFrameStrata().."\n" outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..child:GetFrameLevel().."\n" if cxo then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n" end if cyo then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n" end if crt and crt:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n" end bg = child:GetBackdrop() if type(bg) == "table" then outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n" outputString = outputString..tdump(bg).."\n" end if child._template then outputString = outputString.."Template Name: |cff00FF55"..child._template.."\n" end if child.Panel then local cpt, crt, crp, cxo, cyo = child.Panel:GetPoint() outputString = outputString.."|cffFF8800>> backdropFrame --------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child.Panel:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child.Panel:GetHeight()).."\n" outputString = outputString.."|cff00D1FF".."Strata: |cffFFD100"..child.Panel:GetFrameStrata().."\n" outputString = outputString.."|cff00D1FF".."Level: |cffFFD100"..child.Panel:GetFrameLevel().."\n" if cxo then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n" end if cyo then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n" end if crt and crt:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n" end bg = child.Panel:GetBackdrop() if type(bg) == "table" then outputString = outputString.."|cffFF9900>> BACKDROP --------------------------|r".."\n" outputString = outputString..tdump(bg).."\n" end if child._skin then local cpt, crt, crp, cxo, cyo = child._skin:GetPoint() outputString = outputString.."|cffFF7700>> backdropTexture --------------------------|r".."\n" outputString = outputString.."|cff00D1FF".."Width: |cffFFD100"..format("%.2f",child._skin:GetWidth()).."\n" outputString = outputString.."|cff00D1FF".."Height: |cffFFD100"..format("%.2f",child._skin:GetHeight()).."\n" if cxo then outputString = outputString.."|cff00D1FF".."X: |cffFFD100"..format("%.2f",cxo).."\n" end if cyo then outputString = outputString.."|cff00D1FF".."Y: |cffFFD100"..format("%.2f",cyo).."\n" end if crt and crt:GetName() then outputString = outputString.."|cff00D1FF".."Point: |cffFFD100"..cpt.."|r anchored to "..crt:GetName().."'s |cffFFD100"..crp.."\n" end bg = child._skin:GetTexture() if bg then outputString = outputString.."|cffFF9900----------------------------|r".."\n" outputString = outputString..bg.."\n" end outputString = outputString.."|cffCC0000----------------------------|r".."\n" end end end outputString = outputString.."\n\n" end elseif arg == nil or arg == "" then outputString = outputString.."Invalid frame name".."\n" else outputString = outputString.."Could not find frame info".."\n" end DebugOutput(outputString) end SLASH_SVUI_FRAME_DEBUG1 = "/svdf" SlashCmdList["SVUI_FRAME_DEBUG"] = DebugThisFrame;