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