Quantcast

Sorting update. Number names will sort like 1,2,10 instead of 1,10,2

Petr G [06-09-16 - 08:57]
Sorting update. Number names will sort like 1,2,10 instead of 1,10,2
Filename
ViragDevTool.lua
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