From 44b250e2f7bf809e65630c6975bb415ae3c31618 Mon Sep 17 00:00:00 2001 From: Petr G Date: Thu, 9 Jun 2016 11:57:03 +0300 Subject: [PATCH] Sorting update. Number names will sort like 1,2,10 instead of 1,10,2 --- ViragDevTool.lua | 786 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 408 insertions(+), 378 deletions(-) diff --git a/ViragDevTool.lua b/ViragDevTool.lua index 3a25def..4e85fb1 100644 --- a/ViragDevTool.lua +++ b/ViragDevTool.lua @@ -118,6 +118,7 @@ ViragDevTool = { history = { -- examples "find LFR", + "find SLASH", "find Data ViragDevTool", "startswith Virag", "ViragDevTool.settings.history", @@ -430,12 +431,7 @@ function ViragDevTool:ExpandCell(info) couner = couner + 1 end - table.sort(nodeList, function(a, b) - if a.name == "__index" then return true - elseif b.name == "__index" then return false - else return a.name < b.name - end - end) + table.sort(nodeList, self:SortFnForCells(nodeList)) self.list:AddNodesAfter(nodeList, info) @@ -444,6 +440,39 @@ function ViragDevTool:ExpandCell(info) ViragDevTool:UpdateMainTableUI() end +function ViragDevTool:SortFnForCells(nodeList) + + local cmpFn = function(a, b) + if a.name == "__index" then return true + elseif b.name == "__index" then return false + else + return a.name < b.name + end + end + + if #nodeList > 20000 then -- just optimisation for _G + cmpFn = function(a, b) return a.name < b.name end + end + --lets try some better sorting if we have small number of records + --numbers will be sorted not like 1,10,2 but like 1,2,10 + if #nodeList < 100 then + cmpFn = function(a, b) + if a.name == "__index" then return true + elseif b.name == "__index" then return false + else + + if tonumber(a.name) ~= nil and tonumber(b.name) ~= nil then + return tonumber(a.name)< tonumber(b.name) + else + return a.name < b.name + end + end + end + end + + return cmpFn +end + function ViragDevTool:ColapseCell(info) self.list:RemoveChildNodes(info) info.expanded = nil @@ -534,498 +563,499 @@ function ViragDevTool:UIUpdateMainTableButton(node, info, id) local color = self.colors[valueType] if not color then color = self.colors.default end - if valueType == "table" then - if name ~= self.METATABLE_NAME then - local objectType = self:GetObjectTypeFromWoWAPI(value) - if objectType then - valueButton:SetText(objectType .. " " .. tostring(value)) - end - else - color = self.colors.default - end - - local resultStringName = tostring(name) - local MAX_STRING_SIZE = 60 - if #resultStringName >= MAX_STRING_SIZE then - resultStringName = string.sub(resultStringName, 0, MAX_STRING_SIZE) .. "..." + if valueType == "table" then + if name ~= self.METATABLE_NAME then + local objectType = self:GetObjectTypeFromWoWAPI(value) + if objectType then + valueButton:SetText(objectType .. " " .. tostring(value)) end - - nameButton:SetText(resultStringName .. " (" .. self:tablelength(value) .. ") "); - elseif valueType == "string" then - valueButton:SetText(string.gsub(string.gsub(tostring(value), "|n", ""), "\n", "")) + else + color = self.colors.default end - nameButton:GetFontString():SetTextColor(unpack(color)) - typeButton:GetFontString():SetTextColor(unpack(color)) - valueButton:GetFontString():SetTextColor(unpack(color)) - rowNumberButton:GetFontString():SetTextColor(unpack(color)) + local resultStringName = tostring(name) + local MAX_STRING_SIZE = 60 + if #resultStringName >= MAX_STRING_SIZE then + resultStringName = string.sub(resultStringName, 0, MAX_STRING_SIZE) .. "..." + end - self:SetMainTableButtonScript(nameButton, info) - self:SetMainTableButtonScript(valueButton, info) + nameButton:SetText(resultStringName .. " (" .. self:tablelength(value) .. ") "); + elseif valueType == "string" then + valueButton:SetText(string.gsub(string.gsub(tostring(value), "|n", ""), "\n", "")) end - ----------------------------------------------------------------------------------------------- - -- Sidebar UI - ----------------------------------------------------------------------------------------------- - function ViragDevTool:ToggleSidebar() - self:Toggle(self.wndRef.sideFrame) - self.settings.isSideBarOpen = self.wndRef.sideFrame:IsVisible() - self:UpdateSideBarUI() - end + nameButton:GetFontString():SetTextColor(unpack(color)) + typeButton:GetFontString():SetTextColor(unpack(color)) + valueButton:GetFontString():SetTextColor(unpack(color)) + rowNumberButton:GetFontString():SetTextColor(unpack(color)) - function ViragDevTool:SubmitEditBoxSidebar() - local edditBox = self.wndRef.sideFrame.editbox - local msg = edditBox:GetText() - local selectedTab = self.settings.sideBarTabSelected - if selectedTab == "history" then - self:AddDataFromString(msg, true) - elseif selectedTab == "favourites" then - self:AddDataFromString(msg, true) - elseif selectedTab == "events" then - self:AddDataFromString("eventadd " .. msg, true) - end - self:UpdateSideBarUI() + self:SetMainTableButtonScript(nameButton, info) + self:SetMainTableButtonScript(valueButton, info) +end + +----------------------------------------------------------------------------------------------- +-- Sidebar UI +----------------------------------------------------------------------------------------------- +function ViragDevTool:ToggleSidebar() + self:Toggle(self.wndRef.sideFrame) + self.settings.isSideBarOpen = self.wndRef.sideFrame:IsVisible() + self:UpdateSideBarUI() +end + +function ViragDevTool:SubmitEditBoxSidebar() + local edditBox = self.wndRef.sideFrame.editbox + local msg = edditBox:GetText() + local selectedTab = self.settings.sideBarTabSelected + if selectedTab == "history" then + self:AddDataFromString(msg, true) + elseif selectedTab == "favourites" then + self:AddDataFromString(msg, true) + elseif selectedTab == "events" then + self:AddDataFromString("eventadd " .. msg, true) end + self:UpdateSideBarUI() +end - function ViragDevTool:EnableSideBarTab(tabStrName) - --Update ui - local sidebar = self.wndRef.sideFrame - sidebar.history:SetChecked(false) - sidebar.events:SetChecked(false) - sidebar.favourites:SetChecked(false) - sidebar[tabStrName]:SetChecked(true) +function ViragDevTool:EnableSideBarTab(tabStrName) + --Update ui + local sidebar = self.wndRef.sideFrame + sidebar.history:SetChecked(false) + sidebar.events:SetChecked(false) + sidebar.favourites:SetChecked(false) + sidebar[tabStrName]:SetChecked(true) - -- update selected tab and function to update cell items - self.settings.sideBarTabSelected = tabStrName + -- update selected tab and function to update cell items + self.settings.sideBarTabSelected = tabStrName - -- refresh ui - self:UpdateSideBarUI() - end + -- refresh ui + self:UpdateSideBarUI() +end - function ViragDevTool:UpdateSideBarUI() - local scrollFrame = self.wndRef.sideFrame.sideScrollFrame +function ViragDevTool:UpdateSideBarUI() + local scrollFrame = self.wndRef.sideFrame.sideScrollFrame - local buttons = scrollFrame.buttons; + local buttons = scrollFrame.buttons; - local data = self.settings[self.settings.sideBarTabSelected] - local selectedTab = self.settings.sideBarTabSelected + local data = self.settings[self.settings.sideBarTabSelected] + local selectedTab = self.settings.sideBarTabSelected - data = data and data or {} + data = data and data or {} - if not buttons then - HybridScrollFrame_CreateButtons(scrollFrame, "ViragDevToolSideBarRowTemplate", 0, -2) - end + if not buttons then + HybridScrollFrame_CreateButtons(scrollFrame, "ViragDevToolSideBarRowTemplate", 0, -2) + end + + buttons = scrollFrame.buttons; + local offset = HybridScrollFrame_GetOffset(scrollFrame) + local totalRowsCount = self:tablelength(data) + + for k, frame in pairs(buttons) do + local view = frame.mainButton + local sideButton = frame.actionButton + local lineplusoffset = k + offset; + if lineplusoffset <= totalRowsCount then + local currItem = data[lineplusoffset] + --history update + if selectedTab == "history" then + + local name = tostring(currItem) + + view:SetText(name) + view:SetScript("OnMouseUp", function() + ViragDevTool:AddDataFromString(name) - buttons = scrollFrame.buttons; - local offset = HybridScrollFrame_GetOffset(scrollFrame) - local totalRowsCount = self:tablelength(data) - - for k, frame in pairs(buttons) do - local view = frame.mainButton - local sideButton = frame.actionButton - local lineplusoffset = k + offset; - if lineplusoffset <= totalRowsCount then - local currItem = data[lineplusoffset] - --history update - if selectedTab == "history" then - - local name = tostring(currItem) - - view:SetText(name) - view:SetScript("OnMouseUp", function() - ViragDevTool:AddDataFromString(name) - - --move to top - table.remove(data, lineplusoffset) - table.insert(data, 1, currItem) - - ViragDevTool:UpdateSideBarUI() - end) - --favourites update - elseif selectedTab == "favourites" then - view:SetText("") - view:SetScript("OnMouseUp", nil) - --events update - elseif selectedTab == "events" and type(currItem) == "table" and currItem.event then - local color = currItem.active and ViragDevTool.colors.white or ViragDevTool.colors.gray - view:SetText(color .. currItem.event) - view:SetScript("OnMouseUp", function() - --move to top - ViragDevTool:ToggleMonitorEvent(currItem) - local color = currItem.active and ViragDevTool.colors.white or ViragDevTool.colors.gray - view:SetText(color .. currItem.event) - end) - end - sideButton:SetScript("OnMouseUp", function() --move to top table.remove(data, lineplusoffset) - self:UpdateSideBarUI() + table.insert(data, 1, currItem) + + ViragDevTool:UpdateSideBarUI() + end) + --favourites update + elseif selectedTab == "favourites" then + view:SetText("") + view:SetScript("OnMouseUp", nil) + --events update + elseif selectedTab == "events" and type(currItem) == "table" and currItem.event then + local color = currItem.active and ViragDevTool.colors.white or ViragDevTool.colors.gray + view:SetText(color .. currItem.event) + view:SetScript("OnMouseUp", function() + --move to top + ViragDevTool:ToggleMonitorEvent(currItem) + local color = currItem.active and ViragDevTool.colors.white or ViragDevTool.colors.gray + view:SetText(color .. currItem.event) end) - frame:Show(); - else - frame:Hide(); end - end - - HybridScrollFrame_Update(scrollFrame, totalRowsCount * buttons[1]:GetHeight(), scrollFrame:GetHeight()); - end - - ----------------------------------------------------------------------------------------------- - -- Main table row button clicks setup - ----------------------------------------------------------------------------------------------- - function ViragDevTool:SetMainTableButtonScript(button, info) - local valueType = type(info.value) - if valueType == "table" then - button:SetScript("OnMouseUp", function(this, button, down) - if info.expanded then - self:ColapseCell(info) - else - self:ExpandCell(info) - end - end) - elseif valueType == "function" then - button:SetScript("OnMouseUp", function(this, button, down) - self:TryCallFunction(info) + sideButton:SetScript("OnMouseUp", function() + --move to top + table.remove(data, lineplusoffset) + self:UpdateSideBarUI() end) + frame:Show(); else - button:SetScript("OnMouseUp", nil) + frame:Hide(); end end - function ViragDevTool:TryCallFunction(info) - -- info.value is just our function to call - local parent, ok - local fn = info.value - local args = self:shallowcopyargs(self.tArgs) - local results = {} + HybridScrollFrame_Update(scrollFrame, totalRowsCount * buttons[1]:GetHeight(), scrollFrame:GetHeight()); +end - -- lets try safe call first - ok, results[1], results[2], results[3], results[4], results[5] = pcall(fn, unpack(args, 1, 10)) +----------------------------------------------------------------------------------------------- +-- Main table row button clicks setup +----------------------------------------------------------------------------------------------- +function ViragDevTool:SetMainTableButtonScript(button, info) + local valueType = type(info.value) + if valueType == "table" then + button:SetScript("OnMouseUp", function(this, button, down) + if info.expanded then + self:ColapseCell(info) + else + self:ExpandCell(info) + end + end) + elseif valueType == "function" then + button:SetScript("OnMouseUp", function(this, button, down) + self:TryCallFunction(info) + end) + else + button:SetScript("OnMouseUp", nil) + end +end - if not ok then - -- if safe call failed we probably could try to find self and call self:fn() - parent = info.parent +function ViragDevTool:TryCallFunction(info) + -- info.value is just our function to call + local parent, ok + local fn = info.value + local args = self:shallowcopyargs(self.tArgs) + local results = {} + -- lets try safe call first + ok, results[1], results[2], results[3], results[4], results[5] = pcall(fn, unpack(args, 1, 10)) - if parent and parent.value == _G then - -- this fn is in global namespace so no parent - parent = nil - end + if not ok then + -- if safe call failed we probably could try to find self and call self:fn() + parent = info.parent - if parent then - if parent.name == self.METATABLE_NAME then - -- metatable has real object 1 level higher - parent = parent.parent - end - fn = parent.value[info.name] - table.insert(args, 1, parent.value) - ok, results[1], results[2], results[3], results[4], results[5] = pcall(fn, unpack(args, 1, 10)) - end + if parent and parent.value == _G then + -- this fn is in global namespace so no parent + parent = nil end - self:ProcessCallFunctionData(ok, info, parent, args, results) + if parent then + + if parent.name == self.METATABLE_NAME then + -- metatable has real object 1 level higher + parent = parent.parent + end + fn = parent.value[info.name] + table.insert(args, 1, parent.value) + ok, results[1], results[2], results[3], results[4], results[5] = pcall(fn, unpack(args, 1, 10)) + end end - -- this function is kinda hard to read but it just adds new items to list and prints log in chat. - -- will add 1 row for call result(ok or error) and 1 row for each return value - function ViragDevTool:ProcessCallFunctionData(ok, info, parent, args, results) - local nodes = {} + self:ProcessCallFunctionData(ok, info, parent, args, results) +end - self:ColapseCell(info) -- if we already called this fn remove old results +-- this function is kinda hard to read but it just adds new items to list and prints log in chat. +-- will add 1 row for call result(ok or error) and 1 row for each return value +function ViragDevTool:ProcessCallFunctionData(ok, info, parent, args, results) + local nodes = {} - local C = self.colors - local list = self.list - local padding = info.padding + 1 + self:ColapseCell(info) -- if we already called this fn remove old results - --constract full function call name - local fnNameWitArgs = C:functionStr(parent, info.name, args) - local returnFormatedStr = "" + local C = self.colors + local list = self.list + local padding = info.padding + 1 - -- itterate backwords because we want to include every meaningfull nil result - -- and with default itteration like pairs() we will just skip them so - -- for example 1, 2, nil, 4 should return only this 4 values nothing more, nothing less. - local found = false - for i = 10, 1, -1 do - if results[i] ~= nil then found = true - end + --constract full function call name + local fnNameWitArgs = C:functionStr(parent, info.name, args) + local returnFormatedStr = "" - if found or i == 1 then -- if found some return or if return is nil - nodes[i] = list:NewNode(results[i], string.format(" return: %d", i), padding) + -- itterate backwords because we want to include every meaningfull nil result + -- and with default itteration like pairs() we will just skip them so + -- for example 1, 2, nil, 4 should return only this 4 values nothing more, nothing less. + local found = false + for i = 10, 1, -1 do + if results[i] ~= nil then found = true + end - returnFormatedStr = string.format(" %s%s %s(%s)%s", C.white, tostring(results[i]), - C.lightblue, type(results[i]), returnFormatedStr) - end + if found or i == 1 then -- if found some return or if return is nil + nodes[i] = list:NewNode(results[i], string.format(" return: %d", i), padding) + + returnFormatedStr = string.format(" %s%s %s(%s)%s", C.white, tostring(results[i]), + C.lightblue, type(results[i]), returnFormatedStr) end + end - -- create fist node of result info no need for now. will use debug - table.insert(nodes, 1, list:NewNode(string.format("%s - %s", C:stateStr(ok), fnNameWitArgs), -- node value - C.white .. date("%X") .. " function call results:", padding)) + -- create fist node of result info no need for now. will use debug + table.insert(nodes, 1, list:NewNode(string.format("%s - %s", C:stateStr(ok), fnNameWitArgs), -- node value + C.white .. date("%X") .. " function call results:", padding)) - -- adds call result to our UI list - list:AddNodesAfter(nodes, info) - self:UpdateMainTableUI() + -- adds call result to our UI list + list:AddNodesAfter(nodes, info) + self:UpdateMainTableUI() - --print info to chat - self:print(C:stateStr(ok) .. " " .. fnNameWitArgs .. C.gray .. " returns:" .. returnFormatedStr) - end + --print info to chat + self:print(C:stateStr(ok) .. " " .. fnNameWitArgs .. C.gray .. " returns:" .. returnFormatedStr) +end - ----------------------------------------------------------------------------------------------- - -- HISTORY - ----------------------------------------------------------------------------------------------- - function ViragDevTool:AddToHistory(strValue) - if self.settings and self.settings.history then - local hist = self.settings.history - - -- if already contains value then just move it to top - for k, v in pairs(hist or {}) do - if v == strValue then - table.remove(hist, k) - table.insert(hist, 1, strValue) - self:UpdateSideBarUI() - return - end +----------------------------------------------------------------------------------------------- +-- HISTORY +----------------------------------------------------------------------------------------------- +function ViragDevTool:AddToHistory(strValue) + if self.settings and self.settings.history then + local hist = self.settings.history + + -- if already contains value then just move it to top + for k, v in pairs(hist or {}) do + if v == strValue then + table.remove(hist, k) + table.insert(hist, 1, strValue) + self:UpdateSideBarUI() + return end + end - table.insert(hist, 1, strValue) + table.insert(hist, 1, strValue) - local maxSize = self.default_settings.MAX_HISTORY_SIZE - if self.settings and self.settings.MAX_HISTORY_SIZE then - maxSize = self.settings.MAX_HISTORY_SIZE - end - - while #hist > maxSize do -- can have only 10 values in history - table.remove(hist, maxSize) - end + local maxSize = self.default_settings.MAX_HISTORY_SIZE + if self.settings and self.settings.MAX_HISTORY_SIZE then + maxSize = self.settings.MAX_HISTORY_SIZE + end - self:UpdateSideBarUI() + while #hist > maxSize do -- can have only 10 values in history + table.remove(hist, maxSize) end + + self:UpdateSideBarUI() end +end - ----------------------------------------------------------------------------------------------- - -- EVENTS - ----------------------------------------------------------------------------------------------- - function ViragDevTool:OnEvent(this, event, ...) - local arg = { ... } - if event == "ADDON_LOADED" and arg[1] == self.ADDON_NAME then - ViragDevTool_Settings = self:SetupForSettings(ViragDevTool_Settings) - end +----------------------------------------------------------------------------------------------- +-- EVENTS +----------------------------------------------------------------------------------------------- +function ViragDevTool:OnEvent(this, event, ...) + local arg = { ... } + if event == "ADDON_LOADED" and arg[1] == self.ADDON_NAME then + ViragDevTool_Settings = self:SetupForSettings(ViragDevTool_Settings) end +end - function ViragDevTool:StartMonitorEvent(event, unit) - local tEvent = self:GetMonitoredEvent(event, unit) +function ViragDevTool:StartMonitorEvent(event, unit) + local tEvent = self:GetMonitoredEvent(event, unit) - if not tEvent then - tEvent = { event = event, unit = unit, active = true } - table.insert(self.settings.events, tEvent) - end + if not tEvent then + tEvent = { event = event, unit = unit, active = true } + table.insert(self.settings.events, tEvent) + end - local f = self.wndRef.listenerFrame + local f = self.wndRef.listenerFrame - if type(unit) == "string" then - f:RegisterUnitEvent(event, unit) - else - f:RegisterEvent(event) - end + if type(unit) == "string" then + f:RegisterUnitEvent(event, unit) + else + f:RegisterEvent(event) + end - tEvent.active = true + tEvent.active = true - local eventName = event - if unit then eventName = eventName .. " " .. tostring(unit) end - self:print("Start event monitoring: " .. eventName) - end + local eventName = event + if unit then eventName = eventName .. " " .. tostring(unit) end + self:print("Start event monitoring: " .. eventName) +end - function ViragDevTool:StopMonitorEvent(event, unit) - local tEvent = self:GetMonitoredEvent(event, unit) +function ViragDevTool:StopMonitorEvent(event, unit) + local tEvent = self:GetMonitoredEvent(event, unit) - if tEvent and tEvent.active then - local f = self.wndRef.listenerFrame - f:UnregisterEvent(event) - tEvent.active = false + if tEvent and tEvent.active then + local f = self.wndRef.listenerFrame + f:UnregisterEvent(event) + tEvent.active = false - local eventName = event - if unit then eventName = eventName .. " " .. tostring(unit) end - self:print("Stop event monitoring: " .. eventName) - end + local eventName = event + if unit then eventName = eventName .. " " .. tostring(unit) end + self:print("Stop event monitoring: " .. eventName) end +end - function ViragDevTool:ToggleMonitorEvent(tEvent) - if tEvent then - if tEvent.active then - self:StopMonitorEvent(tEvent.event, tEvent.unit) - else - self:StartMonitorEvent(tEvent.event, tEvent.unit) - end +function ViragDevTool:ToggleMonitorEvent(tEvent) + if tEvent then + if tEvent.active then + self:StopMonitorEvent(tEvent.event, tEvent.unit) + else + self:StartMonitorEvent(tEvent.event, tEvent.unit) end end +end - function ViragDevTool:SetMonitorEventScript() - local f = self.wndRef.listenerFrame +function ViragDevTool:SetMonitorEventScript() + local f = self.wndRef.listenerFrame - f:SetScript("OnEvent", function(this, ...) - local args = { ... } - local event = args[1] - if ViragDevTool:GetMonitoredEvent(event) then - if #args == 1 then args = args[1] end - ViragDevTool:Add(args, event) - end - end); - end + f:SetScript("OnEvent", function(this, ...) + local args = { ... } + local event = args[1] + if ViragDevTool:GetMonitoredEvent(event) then + if #args == 1 then args = args[1] end + ViragDevTool:Add(args, event) + end + end); +end - function ViragDevTool:GetMonitoredEvent(event, args) +function ViragDevTool:GetMonitoredEvent(event, args) - if self.settings == nil or self.settings.events == nil then return end + if self.settings == nil or self.settings.events == nil then return end - local found + local found - for _, tEvent in pairs(self.settings.events) do - if tEvent.event == event then - found = tEvent - break - end + for _, tEvent in pairs(self.settings.events) do + if tEvent.event == event then + found = tEvent + break end + end - if found then - return found - end + if found then + return found end +end - function ViragDevTool:SetupForSettings(s) +function ViragDevTool:SetupForSettings(s) - if s == nil then - s = self.default_settings - else - -- validating current settings and updating if version changed + if s == nil then + s = self.default_settings + else + -- validating current settings and updating if version changed - for k, defaultValue in pairs(self.default_settings) do - local savedValue = s[k] -- saved value from "newSettings" + for k, defaultValue in pairs(self.default_settings) do + local savedValue = s[k] -- saved value from "newSettings" - -- if setting is a table of size 0 or if value is nil set it to default - -- for now we have only arrays in settings so its fine to use #table - if (type(savedValue) == "table" and #savedValue == 0) - or savedValue == nil then + -- if setting is a table of size 0 or if value is nil set it to default + -- for now we have only arrays in settings so its fine to use #table + if (type(savedValue) == "table" and #savedValue == 0) + or savedValue == nil then - s[k] = defaultValue - end + s[k] = defaultValue end end + end - --save to local var, so it is easy to use - self.settings = s + --save to local var, so it is easy to use + self.settings = s - -- refresh gui + -- refresh gui - -- setup open o closed main wnd - self:SetVisible(self.wndRef, s.isWndOpen) + -- setup open o closed main wnd + self:SetVisible(self.wndRef, s.isWndOpen) - -- setup open o closed sidebar - self:SetVisible(self.wndRef.sideFrame, s.isSideBarOpen) + -- setup open o closed sidebar + self:SetVisible(self.wndRef.sideFrame, s.isSideBarOpen) - -- setup selected sidebar tab history/events/ favourites - self:EnableSideBarTab(s.sideBarTabSelected) + -- setup selected sidebar tab history/events/ favourites + self:EnableSideBarTab(s.sideBarTabSelected) - --setup events part 1 register listeners - for _, tEvent in pairs(self.settings.events) do - if tEvent.active then - self:StartMonitorEvent(tEvent.event, tEvent.unit) - end + --setup events part 1 register listeners + for _, tEvent in pairs(self.settings.events) do + if tEvent.active then + self:StartMonitorEvent(tEvent.event, tEvent.unit) end + end - -- setup events part 2 set scripts on frame to listen registered events - self:SetMonitorEventScript() + -- setup events part 2 set scripts on frame to listen registered events + self:SetMonitorEventScript() - return s - end + return s +end - ----------------------------------------------------------------------------------------------- - -- LIFECICLE - ----------------------------------------------------------------------------------------------- - function ViragDevTool:OnLoad(mainFrame) - self.wndRef = mainFrame +----------------------------------------------------------------------------------------------- +-- LIFECICLE +----------------------------------------------------------------------------------------------- +function ViragDevTool:OnLoad(mainFrame) + self.wndRef = mainFrame - self.wndRef:RegisterEvent("ADDON_LOADED") - self.wndRef:SetScript("OnEvent", function(this, event, ...) - ViragDevTool:OnEvent(this, event, ...); -- call one of the functions above - end); + self.wndRef:RegisterEvent("ADDON_LOADED") + self.wndRef:SetScript("OnEvent", function(this, event, ...) + ViragDevTool:OnEvent(this, event, ...); -- call one of the functions above + end); - --register update scrollFrame - self.wndRef.scrollFrame.update = function() - self:UpdateMainTableUI() - end + --register update scrollFrame + self.wndRef.scrollFrame.update = function() self:UpdateMainTableUI() + end + self:UpdateMainTableUI() - self.wndRef.sideFrame.sideScrollFrame.update = function() - self:UpdateSideBarUI() - end + self.wndRef.sideFrame.sideScrollFrame.update = function() + self:UpdateSideBarUI() + end - -- register slash cmd - SLASH_VIRAGDEVTOOLS1 = '/vdt'; - function SlashCmdList.VIRAGDEVTOOLS(msg, editbox) - if msg == "" or msg == nil then - self:ToggleUI() - else - self:AddDataFromString(msg, true) - end + -- register slash cmd + SLASH_VIRAGDEVTOOLS1 = '/vdt'; + function SlashCmdList.VIRAGDEVTOOLS(msg, editbox) + if msg == "" or msg == nil then + self:ToggleUI() + else + self:AddDataFromString(msg, true) end end +end - ----------------------------------------------------------------------------------------------- - -- UTILS - ----------------------------------------------------------------------------------------------- - function ViragDevTool:print(strText) - print(self.colors.darkred .. "[Virag's DT]: " .. self.colors.white .. strText) - end +----------------------------------------------------------------------------------------------- +-- UTILS +----------------------------------------------------------------------------------------------- +function ViragDevTool:print(strText) + print(self.colors.darkred .. "[Virag's DT]: " .. self.colors.white .. strText) +end - function ViragDevTool:shallowcopyargs(orig) - local copy = {} - for k, v in pairs(orig) do copy[k] = orig[v] - end - return copy +function ViragDevTool:shallowcopyargs(orig) + local copy = {} + for k, v in pairs(orig) do copy[k] = orig[v] end + return copy +end - function ViragDevTool:split(sep) - local sep, fields = sep or ".", {} - local pattern = string.format("([^%s]+)", sep) - self:gsub(pattern, function(c) fields[#fields + 1] = c - end) - return fields - end +function ViragDevTool:split(sep) + local sep, fields = sep or ".", {} + local pattern = string.format("([^%s]+)", sep) + self:gsub(pattern, function(c) fields[#fields + 1] = c + end) + return fields +end - function ViragDevTool:tablelength(T) - local count = 0 - for _ in pairs(T) do count = count + 1 - end - return count +function ViragDevTool:tablelength(T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count +end - function ViragDevTool:printtable(T) - print(tostring(T)) - if type(T) ~= "table" then return end - for k, v in pairs(T) do - print(tostring(k) .. " => " .. tostring(v)) - end +function ViragDevTool:printtable(T) + print(tostring(T)) + if type(T) ~= "table" then return end + for k, v in pairs(T) do + print(tostring(k) .. " => " .. tostring(v)) end +end - function ViragDevTool:GetObjectTypeFromWoWAPI(value) - if ACP and value == ACP.L then return end --todo fix this later throws exception - if type(value) == "table" and value.GetObjectType and value.IsForbidden then +function ViragDevTool:GetObjectTypeFromWoWAPI(value) + if ACP and value == ACP.L then return end --todo fix this later throws exception - local ok, forbidden = pcall(value.IsForbidden, value) - if ok and not forbidden then + if type(value) == "table" and value.GetObjectType and value.IsForbidden then - local ok, result = pcall(value.GetObjectType, value) + local ok, forbidden = pcall(value.IsForbidden, value) + if ok and not forbidden then - if ok then - return result - end + local ok, result = pcall(value.GetObjectType, value) + + if ok then + return result end end - end \ No newline at end of file + end +end \ No newline at end of file -- 1.7.9.5