local ADDON_NAME, VARREN_DEV_TOOLS = ... --message('Hello World!') function VARREN_DEV_TOOLS:new(o) o = o or {} setmetatable(o, self) self.__index = self self.data = {} return o end function VARREN_DEV_TOOLS:Init() self:initGUI() end function VARREN_DEV_TOOLS:initGUI() self.frame = self:CreateFrame() -- message('Hello World!') local test = "<html><body><p>Demo Start</p><p>" local testtbl = { a = {h=7,g=45},b=10,c=15 } for key, value in pairs(C_LFGList) do test = test .. key .. "<br />" end self:AddNode(testtbl, "testtbl") test = test .. "</p><p>Demo End</p></body></html>" --frame:SetText(test) --frame:SetFont('Fonts\\FRIZQT__.TTF', 11) end function VARREN_DEV_TOOLS:CreateFrame() -- local frame = CreateFrame("Frame", "MUI_BuffFrame", UIParent, "BasicFrameTemplateWithInset") local frame = CreateFrame("Frame", "MUI_BuffFrame", UIParent) --local frame = CreateFrame("SimpleHTML", "MUI_BuffFrame", UIParent) --local scrollFrame = CreateFrame("ScrollFrame") -- scrollFrame:SetScrollChild(frame) -- scrollFrame:SetSize(800, 800) frame:SetSize(800, 800) frame:SetPoint("CENTER", UIParent, "CENTER") frame:Show() -- scrollFrame:Show() return frame end function VARREN_DEV_TOOLS:AddNodeAtPosition(var, helperText, order, position) local mybutton = CreateFrame("Button", "mybutton".. position, self.frame, "UIPanelButtonTemplate") mybutton:SetPoint("TOP", 2 + 22 * order, -22 * (position + 1)) mybutton:SetWidth(790 - (22 * order)) mybutton:SetHeight(22) local text = self:TextFromVar(var, helperText) mybutton:SetText(text) self.data[position] = { var = var, order = order, expanded = false, -- text = text } mybutton:SetID(position) if type(var) == "table" or type(var) == "userdata" then mybutton:SetScript("OnMouseUp", function(self, button, down) print("click") local isExpanded = VARREN_DEV_TOOLS.data[position].expanded if not isExpanded then VARREN_DEV_TOOLS:Expand(mybutton) end end) end end function VARREN_DEV_TOOLS:AddNode(var, helperText) self:AddNodeAtPosition(var, helperText, 0, 1) end function VARREN_DEV_TOOLS:TextFromVar(var, helperName) if type(var) ~= "table" and type(var) ~= "userdata" then return helperName .. ": " .. tostring(var) end return "table: " .. helperName .. " - " .. tostring(var) end function VARREN_DEV_TOOLS:Expand(node) local id = node:GetID() print(id) self:PrintTable(self.data) local info = self.data[id] info.expanded = true local nodeInfo = info.var local order = info.order + 1 local i = id + 1 for key, value in pairs(nodeInfo) do self:AddNodeAtPosition(value, key, order, i) i = i + 1 end end function VARREN_DEV_TOOLS:PrintTable(table, padding) if not padding then padding = "" end for key, value in pairs(table) do if type(value) ~= "table" and type(value) ~= "userdata" then print(padding .. key .. ": " .. tostring(value)) else print(padding .. key) self:PrintTable(value, padding.. "---") end end end local VARREN_DEV_TOOLS_INST = VARREN_DEV_TOOLS:new() VARREN_DEV_TOOLS_INST:Init()