diff --git a/!Compatibility/api/luaAPI.lua b/!Compatibility/api/luaAPI.lua
index 3dfbde2..0d9e6d3 100644
--- a/!Compatibility/api/luaAPI.lua
+++ b/!Compatibility/api/luaAPI.lua
@@ -2,6 +2,7 @@
local error = error
local geterrorhandler = geterrorhandler
local loadstring = loadstring
+local next = next
local pairs = pairs
local pcall = pcall
local tonumber = tonumber
@@ -10,21 +11,12 @@ local type = type
local unpack = unpack
local abs, ceil, exp, floor = math.abs, math.ceil, math.exp, math.floor
local find, format, gfind, gsub, len, sub = string.find, string.format, string.gfind, string.gsub, string.len, string.sub
-local concat, tinsert, getn, setn = table.concat, table.insert, table.getn, table.setn
+local concat, getn, setn, tremove = table.concat, table.getn, table.setn, table.remove
math.fmod = math.mod
math.huge = 1/0
string.gmatch = string.gfind
-
-function difftime(time2, time1)
- if type(time2) ~= "number" then
- error(format("bad argument #1 to 'difftime' (number expected, got %s)", time2 and type(time2) or "no value"), 2)
- elseif time1 and type(time1) ~= "number" then
- error(format("bad argument #2 to 'difftime' (number expected, got %s)", time1 and type(time1) or "no value"), 2)
- end
-
- return time1 and time2 - time1 or time2
-end
+gmatch = string.gfind
function select(n, ...)
if not (type(n) == "number" or (type(n) == "string" and n == "#")) then
@@ -231,6 +223,7 @@ function string.reverse(str)
return str
end
+strrev = string.reverse
function string.split(delimiter, str)
if type(delimiter) ~= "string" and type(delimiter) ~= "number" then
@@ -240,7 +233,7 @@ function string.split(delimiter, str)
end
local fields = {}
- gsub(str, format("([^%s]+)", delimiter), function(c) tinsert(fields, c) end)
+ gsub(str, format("([^%s]+)", delimiter), function(c) fields[getn(fields) + 1] = c end)
return unpack(fields)
end
@@ -303,10 +296,15 @@ function string.trim(str, chars)
local patternStart = loadstring("return \"^["..pattern.."](.-)$\"")()
local patternEnd = loadstring("return \"^(.-)["..pattern.."]$\"")()
- local trimed, x, y = 1
+ local trimed, x, y = 1, 1, 1
while trimed > 0 do
- str, x = gsub(str, patternStart, "%1")
- str, y = gsub(str, patternEnd, "%1")
+ if x > 0 then
+ str, x = gsub(str, patternStart, "%1")
+ end
+ if y > 0 then
+ str, y = gsub(str, patternEnd, "%1")
+ end
+
trimed = x + y
end
@@ -320,6 +318,40 @@ function string.trim(str, chars)
end
strtrim = string.trim
+function strconcat(...)
+ if arg.n == 0 then
+ return ""
+ elseif arg.n == 1 then
+ return tostring(arg[1])
+ else
+ for i = 1, arg.n do
+ if type(arg[i]) ~= "string" then
+ error(format("attempt to concatenate a %s value", type(arg[i])), 2)
+ end
+ end
+ end
+
+ return concat(arg)
+end
+
+function table.maxn(t)
+ if type(t) ~= "table" then
+ error(format("bad argument #1 to 'maxn' (table expected, got %s)", t and type(t) or "no value"), 2)
+ end
+
+ local maxn = 0
+ local i = next(t, nil)
+
+ while i do
+ if type(i) == "number" and i > maxn then
+ maxn = i
+ end
+ i = next(t, i)
+ end
+
+ return maxn
+end
+
function table.wipe(t)
if type(t) ~= "table" then
error(format("bad argument #1 to 'wipe' (table expected, got %s)", t and type(t) or "no value"), 2)
diff --git a/!Compatibility/api/wowAPI.lua b/!Compatibility/api/wowAPI.lua
index eced802..874215a 100644
--- a/!Compatibility/api/wowAPI.lua
+++ b/!Compatibility/api/wowAPI.lua
@@ -7,9 +7,13 @@ local select = select
local tonumber = tonumber
local type = type
local unpack = unpack
-local find, format, gsub, lower, match, upper = string.find, string.format, string.gsub, string.lower, string.match, string.upper
+local find, format, gmatch, gsub, lower, match, upper = string.find, string.format, string.gmatch, string.gsub, string.lower, string.match, string.upper
local getn = table.getn
--WoW API
+local debugstack = debugstack
+local GetContainerItemInfo = GetContainerItemInfo
+local GetContainerItemLink = GetContainerItemLink
+local GetContainerNumSlots = GetContainerNumSlots
local GetInventoryItemTexture = GetInventoryItemTexture
local GetItemInfo = GetItemInfo
local GetQuestGreenRange = GetQuestGreenRange
@@ -20,12 +24,14 @@ local IsInInstance = IsInInstance
local UnitLevel = UnitLevel
--WoW Variables
local DUNGEON_DIFFICULTY1 = DUNGEON_DIFFICULTY1
+local DURABILITY_TEMPLATE = gsub(DURABILITY_TEMPLATE, "%%d / %%d", "(%%d+) / (%%d+)")
+local NUM_BAG_FRAMES = NUM_BAG_FRAMES
local TIMEMANAGER_AM = gsub(TIME_TWELVEHOURAM, "^.-(%w+)$", "%1")
local TIMEMANAGER_PM = gsub(TIME_TWELVEHOURPM, "^.-(%w+)$", "%1")
-local DURABILITY_TEMPLATE = gsub(DURABILITY_TEMPLATE, "%%d / %%d", "(%%d+) / (%%d+)")
--Libs
local LBC = LibStub("LibBabble-Class-3.0"):GetLookupTable()
local LBZ = LibStub("LibBabble-Zone-3.0"):GetLookupTable()
+local IFDB = LibStub("ItemFamilyDB")
CLASS_SORT_ORDER = {
"WARRIOR",
@@ -114,6 +120,31 @@ function hooksecurefunc(a1, a2, a3)
end
end
+local secureFuncs = {
+ CameraOrSelectOrMoveStop = true,
+ MoveBackwardStop = true,
+ MoveForwardStop = true,
+ PitchDownStop = true,
+ PitchUpStop = true,
+ StrafeLeftStart = true,
+ StrafeRightStart = true,
+ ToggleMouseMove = true,
+ TurnLeftStart = true,
+ TurnOrActionStop = true,
+ TurnRightStart = true,
+ CameraOrSelectOrMoveStart = true,
+ Jump = true,
+ MoveBackwardStart = true,
+ MoveForwardStart = true,
+ PitchDownStart = true,
+ PitchUpStart = true,
+ StrafeLeftStop = true,
+ StrafeRightStop = true,
+ ToggleRun = true,
+ TurnLeftStop = true,
+ TurnOrActionStart = true,
+ TurnRightStop = true
+}
--[[ issecurevariable([table], variable)
Returns 1, nil for undefined variables. This is because an undefined variable is secure since you have not tainted it.
Returns 1, nil for all untainted variables (i.e. Blizzard variables).
@@ -125,7 +156,18 @@ function issecurevariable(t, var)
-- if type(var) ~= "table" or type(var) ~= "string" then
-- error("Usage: issecurevariable([table,] \"variable\")", 2)
-- end
- return
+
+ local isSecure = secureFuncs[t] and 1 or nil
+ if not isSecure then
+ return
+ end
+
+ local taint
+ for x in gmatch(debugstack(), "\\AddOns\\(.-)\\") do
+ taint = x
+ end
+
+ return isSecure, taint
end
function tContains(table, item)
@@ -155,6 +197,16 @@ function UnitAura(unit, i, filter)
end
end
+function difftime(time2, time1)
+ if type(time2) ~= "number" then
+ error(format("bad argument #1 to 'difftime' (number expected, got %s)", time2 and type(time2) or "no value"), 2)
+ elseif time1 and type(time1) ~= "number" then
+ error(format("bad argument #2 to 'difftime' (number expected, got %s)", time1 and type(time1) or "no value"), 2)
+ end
+
+ return time1 and time2 - time1 or time2
+end
+
function BetterDate(formatString, timeVal)
local dateTable = date("*t", timeVal)
local amString = (dateTable.hour >= 12) and "PM" or "AM"
@@ -265,29 +317,6 @@ function GetMapNameByID(id)
return mapByID[tonumber(id)]
end
-local LBIBF = LibStub("LibBabble-ItemBagFamily-3.0")
-function GetItemFamily(id)
- if not id then return end
- if type(id) == "table" or type(id) == "function" then return end
-
- if type(id) == "string" then
- id = tonumber(match(id, "item:(%d+)"))
- end
-
- return LBIBF.ItemFamily[id] or 0
-end
-
-function GetBagFamily(id)
- if not id then return end
- if type(id) == "table" or type(id) == "function" then return end
-
- if type(id) == "string" then
- id = tonumber(match(id, "item:(%d+)"))
- end
-
- return LBIBF.ItemBagFamily[id] or 0
-end
-
local arrow
function GetPlayerFacing()
if not arrow then
@@ -417,6 +446,7 @@ function GetItemInfoByName(itemName)
end
if find(itemName, " of ") then
+ -- random enchantments
itemName = gsub(itemName, " of Spirit", "")
itemName = gsub(itemName, " of Intellect", "")
itemName = gsub(itemName, " of Strength", "")
@@ -461,7 +491,7 @@ function GetItemInfoByName(itemName)
for itemID = 1, LAST_ITEM_ID do
name = GetItemInfo(itemID)
- if name ~= "" and name ~= nil then
+ if name ~= nil and name ~= "" then
itemInfoDB[name] = itemID
if name == itemName then
@@ -476,19 +506,36 @@ function GetItemInfoByName(itemName)
return GetItemInfo(itemInfoDB[itemName])
end
+function GetItemFamily(item, isBag)
+ if not item or type(item) ~= "number" or type(item) ~= "string" then return end
+
+ if type(item) == "string" then
+ local _, _, itemID = find(itemLink, "(%d+):")
+ if not itemID then return end
+ item = tonumber(itemID)
+ end
+
+ if item > LAST_ITEM_ID then return end
+
+ return (isBag and IFDB.ItemBagFamily[item] or IFDB.ItemFamily[item]) or 0
+end
+
function GetItemCount(itemName)
+ if type(itemName) ~= "string" then return 0 end
+
local count = 0
+
for bag = NUM_BAG_FRAMES, 0, -1 do
for slot = 1, GetContainerNumSlots(bag) do
local _, itemCount = GetContainerItemInfo(bag, slot)
+
if itemCount then
local itemLink = GetContainerItemLink(bag, slot)
- local _, _, itemParse = find(itemLink, "(%d+):")
- local queryName, _, _, _, _, _ = GetItemInfo(itemParse)
- if queryName and queryName ~= "" then
- if queryName == itemName then
- count = count + itemCount
- end
+ local _, _, itemID = find(itemLink, "(%d+):")
+ local queryName = GetItemInfo(itemID)
+
+ if queryName and queryName == itemName then
+ count = count + itemCount
end
end
end
@@ -497,22 +544,22 @@ function GetItemCount(itemName)
return count
end
-local scan
+local scanTooltip
function GetInventoryItemDurability(slot)
- if not GetInventoryItemTexture("player", slot) then return nil, nil end
+ if not GetInventoryItemTexture("player", slot) then return end
- if not scan then
- scan = CreateFrame("GameTooltip", "DurabilityScan", nil, "ShoppingTooltipTemplate")
- scan:SetOwner(UIParent, "ANCHOR_NONE")
+ if not scanTooltip then
+ scanTooltip = CreateFrame("GameTooltip", "Compatibility_ScanTooltip", nil, "ShoppingTooltipTemplate")
+ scanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
end
- scan:ClearLines()
- scan:SetInventoryItem("player", slot)
+ scanTooltip:ClearLines()
+ scanTooltip:SetInventoryItem("player", slot)
- for i = 4, scan:NumLines() do
- local text = _G[scan:GetName().."TextLeft"..i]:GetText()
- for durability, max in string.gfind(text, DURABILITY_TEMPLATE) do
- return tonumber(durability), tonumber(max)
+ for i = 4, scanTooltip:NumLines() do
+ local text = _G["Compatibility_ScanTooltipTextLeft"..i]:GetText()
+ for current, maximum in gmatch(text, DURABILITY_TEMPLATE) do
+ return tonumber(current), tonumber(maximum)
end
end
-end
\ No newline at end of file
+end
diff --git a/!Compatibility/libs/LibBabble-ItemBagFamily-3.0.lua b/!Compatibility/libs/ItemFamilyDB.lua
similarity index 93%
rename from !Compatibility/libs/LibBabble-ItemBagFamily-3.0.lua
rename to !Compatibility/libs/ItemFamilyDB.lua
index 0c1810d..1965d20 100644
--- a/!Compatibility/libs/LibBabble-ItemBagFamily-3.0.lua
+++ b/!Compatibility/libs/ItemFamilyDB.lua
@@ -1,30 +1,29 @@
-local MAJOR_VERSION = "LibBabble-ItemBagFamily-3.0"
-local MINOR_VERSION = 90000 + tonumber(string.match("$Revision: 50 $", "%d+"))
+local MAJOR_VERSION = "ItemFamilyDB"
+local MINOR_VERSION = 90000 + tonumber(string.match("$Revision: 1 $", "%d+"))
-if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
-local lib = LibStub("LibBabble-3.0"):New(MAJOR_VERSION, MINOR_VERSION)
+local lib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
if not lib then return end
-lib.ItemBagFamily = {
- [8217] = 1,
- [7371] = 1,
- [7278] = 1,
- [5439] = 1,
- [3605] = 1,
- [3573] = 1,
- [2662] = 1,
+lib.BagFamily = {
[2101] = 1,
- [19319] = 1,
- [18714] = 1,
+ [2662] = 1,
+ [3573] = 1,
+ [3605] = 1,
+ [5439] = 1,
+ [7278] = 1,
+ [7371] = 1,
+ [8217] = 1,
[11362] = 1,
- [8218] = 2,
- [7372] = 2,
- [7279] = 2,
- [5441] = 2,
- [3604] = 2,
- [3574] = 2,
- [2663] = 2,
+ [18714] = 1,
+ [19319] = 1,
[2102] = 2,
+ [2663] = 2,
+ [3574] = 2,
+ [3604] = 2,
+ [5441] = 2,
+ [7279] = 2,
+ [7372] = 2,
+ [8218] = 2,
[19320] = 2,
[21340] = 4,
[21341] = 4,
diff --git a/!Compatibility/libs/LibBabble-Zone-3.0.lua b/!Compatibility/libs/LibBabble-Zone-3.0.lua
index f2657b3..dca540f 100644
--- a/!Compatibility/libs/LibBabble-Zone-3.0.lua
+++ b/!Compatibility/libs/LibBabble-Zone-3.0.lua
@@ -7,10 +7,8 @@ Dependencies: None
License: MIT
]]
-local match = string.match
-
local MAJOR_VERSION = "LibBabble-Zone-3.0"
-local MINOR_VERSION = 90000 + tonumber(match("$Revision: 107 $", "%d+"))
+local MINOR_VERSION = 90000 + tonumber(string.match("$Revision: 107 $", "%d+"))
if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
local lib = LibStub("LibBabble-3.0"):New(MAJOR_VERSION, MINOR_VERSION)
diff --git a/!Compatibility/libs/libs.xml b/!Compatibility/libs/libs.xml
index c30f819..4f566ec 100644
--- a/!Compatibility/libs/libs.xml
+++ b/!Compatibility/libs/libs.xml
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/!DebugTools/Blizzard_DebugTools.lua b/!DebugTools/Blizzard_DebugTools.lua
index ebb77dc..3b0c15d 100644
--- a/!DebugTools/Blizzard_DebugTools.lua
+++ b/!DebugTools/Blizzard_DebugTools.lua
@@ -1,27 +1,29 @@
local modulo = math.modulo
local getn = table.getn
-EVENT_TRACE_EVENT_HEIGHT = 16
-EVENT_TRACE_MAX_ENTRIES = 1000
+local LUA_ERROR = "Lua Error"
-DEBUGLOCALS_LEVEL = 4
-local _normalFontColor = {1, .82, 0, 1}
+EVENT_TRACE_EVENT_HEIGHT = 16;
+EVENT_TRACE_MAX_ENTRIES = 1000;
-EVENT_TRACE_SYSTEM_TIMES = {}
-EVENT_TRACE_SYSTEM_TIMES["System"] = true
-EVENT_TRACE_SYSTEM_TIMES["Elapsed"] = true
+DEBUGLOCALS_LEVEL = 4;
+local _normalFontColor = {1, .82, 0, 1};
-EVENT_TRACE_EVENT_COLORS = {}
-EVENT_TRACE_EVENT_COLORS["System"] = _normalFontColor
-EVENT_TRACE_EVENT_COLORS["Elapsed"] = {.6, .6, .6, 1}
+EVENT_TRACE_SYSTEM_TIMES = {};
+EVENT_TRACE_SYSTEM_TIMES["System"] = true;
+EVENT_TRACE_SYSTEM_TIMES["Elapsed"] = true;
-local _EventTraceFrame
+EVENT_TRACE_EVENT_COLORS = {};
+EVENT_TRACE_EVENT_COLORS["System"] = _normalFontColor;
+EVENT_TRACE_EVENT_COLORS["Elapsed"] = {.6, .6, .6, 1};
-local _framesSinceLast = 0
-local _timeSinceLast = 0
+local _EventTraceFrame;
-local _timer = CreateFrame("FRAME")
-_timer:SetScript("OnUpdate", function () _framesSinceLast = _framesSinceLast + 1 _timeSinceLast = _timeSinceLast + arg1 end)
+local _framesSinceLast = 0;
+local _timeSinceLast = 0;
+
+local _timer = CreateFrame("FRAME");
+_timer:SetScript("OnUpdate", function () _framesSinceLast = _framesSinceLast + 1; _timeSinceLast = _timeSinceLast + arg1; end);
function EventTraceFrame_OnLoad(self)
local frameName = self:GetName()
@@ -29,487 +31,487 @@ function EventTraceFrame_OnLoad(self)
_G[frameName.."DialogBG"]:SetVertexColor(0, 0, 0)
_G[frameName.."DialogBG"]:SetAlpha(0.75)
- self.buttons = {}
- self.events = {}
- self.times = {}
- self.rawtimes = {}
- self.eventids = {}
- self.eventtimes = {}
- self.numhandlers = {}
- self.slowesthandlers = {}
+ self.buttons = {};
+ self.events = {};
+ self.times = {};
+ self.rawtimes = {};
+ self.eventids = {};
+ self.eventtimes = {};
+ self.numhandlers = {};
+ self.slowesthandlers = {};
self.slowesthandlertimes = {}
- self.timeSinceLast = {}
- self.framesSinceLast = {}
- self.args = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
- self.ignoredEvents = {}
- self.lastIndex = 0
- self.visibleButtons = 0
- _EventTraceFrame = self
- self:SetScript("OnSizeChanged", function() EventTraceFrame_OnSizeChanged(this, this:GetWidth(), this:GetHeight()) end)
- EventTraceFrame_OnSizeChanged(self, self:GetWidth(), self:GetHeight())
- self:EnableMouse(true)
- self:EnableMouseWheel(true)
- self:SetScript("OnMouseWheel", function() EventTraceFrame_OnMouseWheel(this, arg1) end)
+ self.timeSinceLast = {};
+ self.framesSinceLast = {};
+ self.args = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}};
+ self.ignoredEvents = {};
+ self.lastIndex = 0;
+ self.visibleButtons = 0;
+ _EventTraceFrame = self;
+ self:SetScript("OnSizeChanged", function() EventTraceFrame_OnSizeChanged(this, this:GetWidth(), this:GetHeight()) end);
+ EventTraceFrame_OnSizeChanged(self, self:GetWidth(), self:GetHeight());
+ self:EnableMouse(true);
+ self:EnableMouseWheel(true);
+ self:SetScript("OnMouseWheel", function() EventTraceFrame_OnMouseWheel(this, arg1) end);
end
-local _workTable = {}
-function EventTraceFrame_OnEvent(self, event, ...)
- if not self.ignoredEvents[event] then
- if _framesSinceLast ~= 0 and event ~= "On Update" then
- EventTraceFrame_OnEvent(self, "On Update")
+local _workTable = {};
+function EventTraceFrame_OnEvent (self, event, ...)
+ if (not self.ignoredEvents[event]) then
+ if (_framesSinceLast ~= 0 and event ~= "On Update") then
+ EventTraceFrame_OnEvent(self, "On Update");
end
- local nextIndex = self.lastIndex + 1
- if nextIndex > EVENT_TRACE_MAX_ENTRIES then
- local staleIndex = nextIndex - EVENT_TRACE_MAX_ENTRIES
- self.events[staleIndex] = nil
- self.times[staleIndex] = nil
- self.rawtimes[staleIndex] = nil
- self.timeSinceLast[staleIndex] = nil
- self.framesSinceLast[staleIndex] = nil
- self.eventids[staleIndex] = nil
- self.eventtimes[staleIndex] = nil
- self.numhandlers[staleIndex] = nil
- self.slowesthandlers[staleIndex] = nil
- self.slowesthandlertimes[staleIndex] = nil
+ local nextIndex = self.lastIndex + 1;
+ if (nextIndex > EVENT_TRACE_MAX_ENTRIES) then
+ local staleIndex = nextIndex - EVENT_TRACE_MAX_ENTRIES;
+ self.events[staleIndex] = nil;
+ self.times[staleIndex] = nil;
+ self.rawtimes[staleIndex] = nil;
+ self.timeSinceLast[staleIndex] = nil;
+ self.framesSinceLast[staleIndex] = nil;
+ self.eventids[staleIndex] = nil;
+ self.eventtimes[staleIndex] = nil;
+ self.numhandlers[staleIndex] = nil;
+ self.slowesthandlers[staleIndex] = nil;
+ self.slowesthandlertimes[staleIndex] = nil;
for k, v in next, self.args do
- self.args[k][staleIndex] = nil
+ self.args[k][staleIndex] = nil;
end
end
- if event == "Begin Capture" or event == "End Capture" then
- self.times[nextIndex] = "System"
- if self.eventsToCapture then
- self.events[nextIndex] = string.format("%s (%s events)", event, tostring(self.eventsToCapture))
+ if (event == "Begin Capture" or event == "End Capture") then
+ self.times[nextIndex] = "System";
+ if (self.eventsToCapture) then
+ self.events[nextIndex] = string.format("%s (%s events)", event, tostring(self.eventsToCapture));
else
- self.events[nextIndex] = event
+ self.events[nextIndex] = event;
end
- self.timeSinceLast[nextIndex] = 0
- self.framesSinceLast[nextIndex] = 0
- elseif event == "On Update" then
- self.times[nextIndex] = "Elapsed"
- self.events[nextIndex] = string.format("%.3f sec - %d frame(s)", _timeSinceLast, _framesSinceLast)
- self.timeSinceLast[nextIndex] = _timeSinceLast
- self.framesSinceLast[nextIndex] = _framesSinceLast
- _timeSinceLast = 0
- _framesSinceLast = 0
+ self.timeSinceLast[nextIndex] = 0;
+ self.framesSinceLast[nextIndex] = 0;
+ elseif (event == "On Update") then
+ self.times[nextIndex] = "Elapsed";
+ self.events[nextIndex] = string.format("%.3f sec - %d frame(s)", _timeSinceLast, _framesSinceLast);
+ self.timeSinceLast[nextIndex] = _timeSinceLast;
+ self.framesSinceLast[nextIndex] = _framesSinceLast;
+ _timeSinceLast = 0;
+ _framesSinceLast = 0;
else
- self.events[nextIndex] = event
- local seconds = GetTime()
- local minutes = math.floor(math.floor(seconds) / 60)
- local hours = math.floor(minutes / 60)
- seconds = seconds - 60 * minutes
- minutes = minutes - 60 * hours
+ self.events[nextIndex] = event;
+ local seconds = GetTime();
+ local minutes = math.floor(math.floor(seconds) / 60);
+ local hours = math.floor(minutes / 60);
+ seconds = seconds - 60 * minutes;
+ minutes = minutes - 60 * hours;
hours = modulo(hours, 1000)
- self.times[nextIndex] = string.format("%.2d:%.2d:%06.3f", hours, minutes, seconds)
- self.timeSinceLast[nextIndex] = 0
- self.framesSinceLast[nextIndex] = 0
- self.eventids[nextIndex] = GetCurrentEventID()
+ self.times[nextIndex] = string.format("%.2d:%.2d:%06.3f", hours, minutes, seconds);
+ self.timeSinceLast[nextIndex] = 0;
+ self.framesSinceLast[nextIndex] = 0;
+ self.eventids[nextIndex] = GetCurrentEventID();
- local numArgs = getn(arg)
+ local numArgs = getn(arg);
for i = 1, numArgs do
- if not self.args[i] then
- self.args[i] = {}
+ if (not self.args[i]) then
+ self.args[i] = {};
end
- self.args[i][nextIndex] = arg[i]
+ self.args[i][nextIndex] = arg[i];
end
- if self.eventsToCapture then
- self.eventsToCapture = self.eventsToCapture - 1
+ if (self.eventsToCapture) then
+ self.eventsToCapture = self.eventsToCapture - 1;
end
end
- self.rawtimes[nextIndex] = GetTime()
- self.lastIndex = nextIndex
- if self.eventsToCapture and self.eventsToCapture <= 0 then
- self.eventsToCapture = nil
- EventTraceFrame_StopEventCapture()
+ self.rawtimes[nextIndex] = GetTime();
+ self.lastIndex = nextIndex;
+ if (self.eventsToCapture and self.eventsToCapture <= 0) then
+ self.eventsToCapture = nil;
+ EventTraceFrame_StopEventCapture();
end
end
end
function EventTraceFrame_OnShow(self)
- wipe(self.ignoredEvents)
- local scrollBar = _G["EventTraceFrameScroll"]
- local minValue, maxValue = scrollBar:GetMinMaxValues()
- scrollBar:SetValue(maxValue)
+ wipe(self.ignoredEvents);
+ local scrollBar = _G["EventTraceFrameScroll"];
+ local minValue, maxValue = scrollBar:GetMinMaxValues();
+ scrollBar:SetValue(maxValue);
end
-function EventTraceFrame_OnUpdate(self, elapsed)
- EventTraceFrame_Update()
+function EventTraceFrame_OnUpdate (self, elapsed)
+ EventTraceFrame_Update();
end
-function EventTraceFrame_OnSizeChanged(self, width, height)
- local numButtonsToDisplay = math.floor((height - 36)/EVENT_TRACE_EVENT_HEIGHT)
- local numButtonsCreated = getn(self.buttons)
+function EventTraceFrame_OnSizeChanged (self, width, height)
+ local numButtonsToDisplay = math.floor((height - 36)/EVENT_TRACE_EVENT_HEIGHT);
+ local numButtonsCreated = getn(self.buttons);
- if numButtonsCreated < numButtonsToDisplay then
+ if (numButtonsCreated < numButtonsToDisplay) then
for i = numButtonsCreated + 1, numButtonsToDisplay do
- local button = CreateFrame("BUTTON", "EventTraceFrameButton" .. i, self, "EventTraceEventTemplate")
- button:SetPoint("BOTTOMLEFT", 12, (16 * (i - 1)) + 12)
- button:SetPoint("RIGHT", -28, 0)
- tinsert(self.buttons, button)
+ local button = CreateFrame("BUTTON", "EventTraceFrameButton" .. i, self, "EventTraceEventTemplate");
+ button:SetPoint("BOTTOMLEFT", 12, (16 * (i - 1)) + 12);
+ button:SetPoint("RIGHT", -28, 0);
+ tinsert(self.buttons, button);
end
for i = self.visibleButtons + 1, numButtonsToDisplay do
- self.buttons[i]:Show()
+ self.buttons[i]:Show();
end
- self.visibleButtons = numButtonsToDisplay
- EventTraceFrame_Update()
- elseif self.visibleButtons < numButtonsToDisplay then
+ self.visibleButtons = numButtonsToDisplay;
+ EventTraceFrame_Update();
+ elseif (self.visibleButtons < numButtonsToDisplay) then
for i = self.visibleButtons + 1, numButtonsToDisplay do
- self.buttons[i]:Show()
+ self.buttons[i]:Show();
end
- self.visibleButtons = numButtonsToDisplay
- EventTraceFrame_Update()
- elseif numButtonsToDisplay < self.visibleButtons then
+ self.visibleButtons = numButtonsToDisplay;
+ EventTraceFrame_Update();
+ elseif (numButtonsToDisplay < self.visibleButtons) then
for i = numButtonsToDisplay + 1, self.visibleButtons do
- self.buttons[i]:Hide()
+ self.buttons[i]:Hide();
end
- self.visibleButtons = numButtonsToDisplay
+ self.visibleButtons = numButtonsToDisplay;
end
end
function EventTraceFrame_Update ()
- local offset = 0
+ local offset = 0;
- local scrollBar = _G["EventTraceFrameScroll"]
- local scrollBarValue = scrollBar:GetValue()
- local minValue, maxValue = scrollBar:GetMinMaxValues()
+ local scrollBar = _G["EventTraceFrameScroll"];
+ local scrollBarValue = scrollBar:GetValue();
+ local minValue, maxValue = scrollBar:GetMinMaxValues();
- local firstID = max(1, _EventTraceFrame.lastIndex - EVENT_TRACE_MAX_ENTRIES + 1)
- local lastID = _EventTraceFrame.lastIndex or 1
+ local firstID = max(1, _EventTraceFrame.lastIndex - EVENT_TRACE_MAX_ENTRIES + 1);
+ local lastID = _EventTraceFrame.lastIndex or 1;
- if firstID >= lastID then
- scrollBar:SetMinMaxValues(firstID-1, lastID)
+ if (firstID >= lastID) then
+ scrollBar:SetMinMaxValues(firstID-1, lastID);
else
- scrollBar:SetMinMaxValues(firstID, lastID)
+ scrollBar:SetMinMaxValues(firstID, lastID);
end
- if scrollBarValue < firstID then
- scrollBar:SetValue(firstID)
- scrollBarValue = firstID
+ if (scrollBarValue < firstID) then
+ scrollBar:SetValue(firstID);
+ scrollBarValue = firstID;
end
- if scrollBarValue < 1 then
- scrollBarValue = 1
- elseif not _EventTraceFrame.selectedEvent then
- if scrollBarValue == maxValue then
- scrollBar:SetValue(_EventTraceFrame.lastIndex)
+ if (scrollBarValue < 1) then
+ scrollBarValue = 1;
+ elseif (not _EventTraceFrame.selectedEvent) then
+ if (scrollBarValue == maxValue) then
+ scrollBar:SetValue(_EventTraceFrame.lastIndex);
end
end
for i = 1, _EventTraceFrame.visibleButtons do
- local button = _EventTraceFrame.buttons[i]
- if button then
- local index = scrollBarValue - (i - 1)
- local event = _EventTraceFrame.events[index]
- if event then
+ local button = _EventTraceFrame.buttons[i];
+ if (button) then
+ local index = scrollBarValue - (i - 1);
+ local event = _EventTraceFrame.events[index];
+ if (event) then
local timeString = _EventTraceFrame.times[index]
- button.index = index
- button.time:SetText(timeString)
- button.event:SetText(event)
- if _EventTraceFrame.eventids[index] and not _EventTraceFrame.eventtimes[index] then
- local eventTime, numHandlers, slowestHandler, slowestHandlerTime = GetEventTime(_EventTraceFrame.eventids[index])
- _EventTraceFrame.eventtimes[index] = eventTime
- _EventTraceFrame.numhandlers[index] = numHandlers
- _EventTraceFrame.slowesthandlers[index] = slowestHandler
- _EventTraceFrame.slowesthandlertimes[index] = slowestHandlerTime
+ button.index = index;
+ button.time:SetText(timeString);
+ button.event:SetText(event);
+ if (_EventTraceFrame.eventids[index] and not _EventTraceFrame.eventtimes[index]) then
+ local eventTime, numHandlers, slowestHandler, slowestHandlerTime = GetEventTime(_EventTraceFrame.eventids[index]);
+ _EventTraceFrame.eventtimes[index] = eventTime;
+ _EventTraceFrame.numhandlers[index] = numHandlers;
+ _EventTraceFrame.slowesthandlers[index] = slowestHandler;
+ _EventTraceFrame.slowesthandlertimes[index] = slowestHandlerTime;
end
- local color = EVENT_TRACE_EVENT_COLORS[event] or EVENT_TRACE_EVENT_COLORS[timeString]
- if color then
- button.time:SetTextColor(unpack(color))
- button.event:SetTextColor(unpack(color))
+ local color = EVENT_TRACE_EVENT_COLORS[event] or EVENT_TRACE_EVENT_COLORS[timeString];
+ if (color) then
+ button.time:SetTextColor(unpack(color));
+ button.event:SetTextColor(unpack(color));
else
- local eventTime = _EventTraceFrame.eventtimes[index]
- if eventTime and eventTime > 50.0 then
- button.time:SetTextColor(1, 0, 0, 1)
- button.event:SetTextColor(1, 0, 0, 1)
- elseif eventTime and eventTime > 20.0 then
- button.time:SetTextColor(1, .5, 0, 1)
- button.event:SetTextColor(1, .5, 0, 1)
- elseif eventTime and eventTime > 10.0 then
- button.time:SetTextColor(1, .8, 0, 1)
- button.event:SetTextColor(1, .8, 0, 1)
- elseif eventTime and eventTime > 5.0 then
- button.time:SetTextColor(1, 1, .6, 1)
- button.event:SetTextColor(1, 1, .6, 1)
+ local eventTime = _EventTraceFrame.eventtimes[index];
+ if (eventTime and eventTime > 50.0) then
+ button.time:SetTextColor(1, 0, 0, 1);
+ button.event:SetTextColor(1, 0, 0, 1);
+ elseif (eventTime and eventTime > 20.0) then
+ button.time:SetTextColor(1, .5, 0, 1);
+ button.event:SetTextColor(1, .5, 0, 1);
+ elseif (eventTime and eventTime > 10.0) then
+ button.time:SetTextColor(1, .8, 0, 1);
+ button.event:SetTextColor(1, .8, 0, 1);
+ elseif (eventTime and eventTime > 5.0) then
+ button.time:SetTextColor(1, 1, .6, 1);
+ button.event:SetTextColor(1, 1, .6, 1);
else
- button.time:SetTextColor(1, 1, 1, 1)
- button.event:SetTextColor(1, 1, 1, 1)
+ button.time:SetTextColor(1, 1, 1, 1);
+ button.event:SetTextColor(1, 1, 1, 1);
end
end
- button:Show()
- if _EventTraceFrame.selectedEvent then
- if index == _EventTraceFrame.selectedEvent then
- EventTraceFrameEvent_DisplayTooltip(button)
- button:GetHighlightTexture():SetVertexColor(.15, .25, 1, .35)
- button:LockHighlight(true)
- button.wasSelected = true
- elseif button.wasSelected then
- button.wasSelected = nil
- button:GetHighlightTexture():SetVertexColor(.8, .8, 1, .15)
- button:UnlockHighlight()
+ button:Show();
+ if (_EventTraceFrame.selectedEvent) then
+ if (index == _EventTraceFrame.selectedEvent) then
+ EventTraceFrameEvent_DisplayTooltip(button);
+ button:GetHighlightTexture():SetVertexColor(.15, .25, 1, .35);
+ button:LockHighlight(true);
+ button.wasSelected = true;
+ elseif (button.wasSelected) then
+ button.wasSelected = nil;
+ button:GetHighlightTexture():SetVertexColor(.8, .8, 1, .15);
+ button:UnlockHighlight();
end
else
- if button.wasSelected then
- button.wasSelected = nil
- button:GetHighlightTexture():SetVertexColor(.8, .8, 1, .15)
- button:UnlockHighlight()
+ if (button.wasSelected) then
+ button.wasSelected = nil;
+ button:GetHighlightTexture():SetVertexColor(.8, .8, 1, .15);
+ button:UnlockHighlight();
end
end
- if button == GetMouseFocus() then
- EventTraceFrameEvent_OnEnter(button)
+ if (button == GetMouseFocus()) then
+ EventTraceFrameEvent_OnEnter(button);
else
- button.HideButton:Hide()
+ button.HideButton:Hide();
end
else
- button.index = index
- button:Hide()
+ button.index = index;
+ button:Hide();
end
end
end
- EventTraceFrame_UpdateKeyboardStatus()
+ EventTraceFrame_UpdateKeyboardStatus();
end
function EventTraceFrame_StartEventCapture()
- if _EventTraceFrame.started then
- return
+ if (_EventTraceFrame.started) then
+ return;
end
EventHandler_Enable()
- _EventTraceFrame.started = true
- _framesSinceLast = 0
- _timeSinceLast = 0
- _EventTraceFrame:RegisterAllEvents()
- EventTraceFrame_OnEvent(_EventTraceFrame, "Begin Capture")
+ _EventTraceFrame.started = true;
+ _framesSinceLast = 0;
+ _timeSinceLast = 0;
+ _EventTraceFrame:RegisterAllEvents();
+ EventTraceFrame_OnEvent(_EventTraceFrame, "Begin Capture");
end
function EventTraceFrame_StopEventCapture()
- if not _EventTraceFrame.started then
- return
+ if (not _EventTraceFrame.started) then
+ return;
end
EventHandler_Disable()
- _EventTraceFrame.started = false
- _framesSinceLast = 0
- _timeSinceLast = 0
- _EventTraceFrame:UnregisterAllEvents()
- EventTraceFrame_OnEvent(_EventTraceFrame, "End Capture")
+ _EventTraceFrame.started = false;
+ _framesSinceLast = 0;
+ _timeSinceLast = 0;
+ _EventTraceFrame:UnregisterAllEvents();
+ EventTraceFrame_OnEvent(_EventTraceFrame, "End Capture");
end
function EventTraceFrame_HandleSlashCmd(msg)
- msg = strlower(msg)
- if msg == "start" then
- EventTraceFrame_StartEventCapture()
- elseif msg == "stop" then
- EventTraceFrame_StopEventCapture()
- elseif tonumber(msg) and tonumber(msg) > 0 then
- if not _EventTraceFrame.started then
- _EventTraceFrame.eventsToCapture = tonumber(msg)
- EventTraceFrame_StartEventCapture()
+ msg = strlower(msg);
+ if (msg == "start") then
+ EventTraceFrame_StartEventCapture();
+ elseif (msg == "stop") then
+ EventTraceFrame_StopEventCapture();
+ elseif (tonumber(msg) and tonumber(msg) > 0) then
+ if (not _EventTraceFrame.started) then
+ _EventTraceFrame.eventsToCapture = tonumber(msg);
+ EventTraceFrame_StartEventCapture();
end
- elseif msg == "" then
- if not _EventTraceFrame:IsShown() then
- _EventTraceFrame:Show()
- if _EventTraceFrame.started == nil then
- EventTraceFrame_StartEventCapture()
+ elseif (msg == "") then
+ if (not _EventTraceFrame:IsShown()) then
+ _EventTraceFrame:Show();
+ if (_EventTraceFrame.started == nil) then
+ EventTraceFrame_StartEventCapture();
end
else
- _EventTraceFrame:Hide()
+ _EventTraceFrame:Hide();
end
end
end
function EventTraceFrame_OnMouseWheel(self, delta)
- local scrollBar = _G["EventTraceFrameScroll"]
- local minVal, maxVal = scrollBar:GetMinMaxValues()
- local currentValue = scrollBar:GetValue()
+ local scrollBar = _G["EventTraceFrameScroll"];
+ local minVal, maxVal = scrollBar:GetMinMaxValues();
+ local currentValue = scrollBar:GetValue();
- local newValue = currentValue - (delta * 3)
- newValue = max(newValue, minVal)
- newValue = min(newValue, maxVal)
- if newValue ~= currentValue then
- scrollBar:SetValue(newValue)
+ local newValue = currentValue - (delta * 3);
+ newValue = max(newValue, minVal);
+ newValue = min(newValue, maxVal);
+ if (newValue ~= currentValue) then
+ scrollBar:SetValue(newValue);
end
end
function EventTraceFrame_UpdateKeyboardStatus()
- if _EventTraceFrame.selectedEvent then
- local focus = GetMouseFocus()
- if focus == _EventTraceFrame or (focus and focus:GetParent() == _EventTraceFrame) then
- _EventTraceFrame:EnableKeyboard(true)
- return
+ if (_EventTraceFrame.selectedEvent) then
+ local focus = GetMouseFocus();
+ if (focus == _EventTraceFrame or (focus and focus:GetParent() == _EventTraceFrame)) then
+ _EventTraceFrame:EnableKeyboard(true);
+ return;
end
end
- _EventTraceFrame:EnableKeyboard(false)
+ _EventTraceFrame:EnableKeyboard(false);
end
function EventTraceFrame_OnKeyUp(self, key)
- if key == "ESCAPE" then
- self.selectedEvent = nil
- EventTraceTooltip:Hide()
- EventTraceFrame_Update()
+ if (key == "ESCAPE") then
+ self.selectedEvent = nil;
+ EventTraceTooltip:Hide();
+ EventTraceFrame_Update();
end
end
function EventTraceFrame_RemoveEvent(i)
- if i >= 1 and i <= EventTraceFrame.lastIndex then
- tremove(EventTraceFrame.events, i)
- tremove(EventTraceFrame.times, i)
- tremove(EventTraceFrame.rawtimes, i)
- tremove(EventTraceFrame.timeSinceLast, i)
- tremove(EventTraceFrame.framesSinceLast, i)
- tremove(EventTraceFrame.eventtimes, i)
- tremove(EventTraceFrame.eventids, i)
- tremove(EventTraceFrame.numhandlers, i)
- tremove(EventTraceFrame.slowesthandlers, i)
- tremove(EventTraceFrame.slowesthandlertimes, i)
+ if (i >= 1 and i <= EventTraceFrame.lastIndex) then
+ tremove(EventTraceFrame.events, i);
+ tremove(EventTraceFrame.times, i);
+ tremove(EventTraceFrame.rawtimes, i);
+ tremove(EventTraceFrame.timeSinceLast, i);
+ tremove(EventTraceFrame.framesSinceLast, i);
+ tremove(EventTraceFrame.eventtimes, i);
+ tremove(EventTraceFrame.eventids, i);
+ tremove(EventTraceFrame.numhandlers, i);
+ tremove(EventTraceFrame.slowesthandlers, i);
+ tremove(EventTraceFrame.slowesthandlertimes, i);
for k, v in next, EventTraceFrame.args do
for j = i, EventTraceFrame.lastIndex do
- EventTraceFrame.args[k][j] = EventTraceFrame.args[k][j+1]
+ EventTraceFrame.args[k][j] = EventTraceFrame.args[k][j+1];
end
end
- EventTraceFrame.lastIndex = EventTraceFrame.lastIndex-1
+ EventTraceFrame.lastIndex = EventTraceFrame.lastIndex-1;
end
end
-local TIME_LABEL = "Time:"
-local DETAILS_LABEL = "Details:"
-local SLOWEST_LABEL = "Slowest:"
-local ARGUMENT_LABEL_FORMAT = "arg %d:"
-local NUM_HANDLERS_FORMAT = "(%d handlers)"
-local EVENT_TIME_FORMAT = "%.2fms"
+local TIME_LABEL = "Time:";
+local DETAILS_LABEL = "Details:";
+local SLOWEST_LABEL = "Slowest:";
+local ARGUMENT_LABEL_FORMAT = "arg %d:";
+local NUM_HANDLERS_FORMAT = "(%d handlers)";
+local EVENT_TIME_FORMAT = "%.2fms";
-local function EventTrace_FormatArgValue(val)
- if type(val) == "string" then
- return string.format('"%s"', val)
- elseif type(val) == "number" then
- return tostring(val)
- elseif type(val) == "boolean" then
- return string.format('|cffaaaaff%s|r', tostring(val))
- elseif type(val) == "table" or type(val) == "bool" then
- return string.format('|cffffaaaa%s|r', tostring(val))
+local function EventTrace_FormatArgValue (val)
+ if (type(val) == "string") then
+ return string.format('"%s"', val);
+ elseif (type(val) == "number") then
+ return tostring(val);
+ elseif (type(val) == "boolean") then
+ return string.format('|cffaaaaff%s|r', tostring(val));
+ elseif (type(val) == "table" or type(val) == "bool") then
+ return string.format('|cffffaaaa%s|r', tostring(val));
end
end
-function EventTraceFrameEvent_DisplayTooltip(eventButton)
- local index = eventButton.index
- if not index then
- return
+function EventTraceFrameEvent_DisplayTooltip (eventButton)
+ local index = eventButton.index;
+ if (not index) then
+ return;
end
- local tooltip = _G["EventTraceTooltip"]
- tooltip:SetOwner(eventButton, "ANCHOR_NONE")
- tooltip:SetPoint("TOPLEFT", eventButton, "TOPRIGHT", 24, 2)
+ local tooltip = _G["EventTraceTooltip"];
+ tooltip:SetOwner(eventButton, "ANCHOR_NONE");
+ tooltip:SetPoint("TOPLEFT", eventButton, "TOPRIGHT", 24, 2);
local timeString = _EventTraceFrame.times[index]
- if EVENT_TRACE_SYSTEM_TIMES[timeString] then
- tooltip:AddLine(timeString, 1, 1, 1)
- tooltip:AddDoubleLine(TIME_LABEL, _EventTraceFrame.rawtimes[index], 1, .82, 0, 1, 1, 1)
- tooltip:AddDoubleLine(DETAILS_LABEL, _EventTraceFrame.events[index], 1, .82, 0, 1, 1, 1)
+ if (EVENT_TRACE_SYSTEM_TIMES[timeString]) then
+ tooltip:AddLine(timeString, 1, 1, 1);
+ tooltip:AddDoubleLine(TIME_LABEL, _EventTraceFrame.rawtimes[index], 1, .82, 0, 1, 1, 1);
+ tooltip:AddDoubleLine(DETAILS_LABEL, _EventTraceFrame.events[index], 1, .82, 0, 1, 1, 1);
else
- tooltip:AddLine(_EventTraceFrame.events[index], 1, 1, 1)
- local eventTime = _EventTraceFrame.eventtimes[index]
- if eventTime then
- if eventTime < 0 then
- eventTime = "?"
+ tooltip:AddLine(_EventTraceFrame.events[index], 1, 1, 1);
+ local eventTime = _EventTraceFrame.eventtimes[index];
+ if (eventTime) then
+ if (eventTime < 0) then
+ eventTime = "?";
else
- eventTime = format(EVENT_TIME_FORMAT, eventTime)
+ eventTime = format(EVENT_TIME_FORMAT, eventTime);
end
- tooltip:AddDoubleLine(TIME_LABEL, eventTime .. " " .. format(NUM_HANDLERS_FORMAT, _EventTraceFrame.numhandlers[index] or 0), 1, .82, 0, 1, 1, 1)
+ tooltip:AddDoubleLine(TIME_LABEL, eventTime .. " " .. format(NUM_HANDLERS_FORMAT, _EventTraceFrame.numhandlers[index] or 0), 1, .82, 0, 1, 1, 1);
else
- tooltip:AddDoubleLine(TIME_LABEL, _EventTraceFrame.rawtimes[index], 1, .82, 0, 1, 1, 1)
+ tooltip:AddDoubleLine(TIME_LABEL, _EventTraceFrame.rawtimes[index], 1, .82, 0, 1, 1, 1);
end
- if _EventTraceFrame.slowesthandlers[index] then
- tooltip:AddDoubleLine(SLOWEST_LABEL, format("%s (%.2fms)", _EventTraceFrame.slowesthandlers[index], _EventTraceFrame.slowesthandlertimes[index]), 1, .82, 0, 1, 1, 1)
+ if (_EventTraceFrame.slowesthandlers[index]) then
+ tooltip:AddDoubleLine(SLOWEST_LABEL, format("%s (%.2fms)", _EventTraceFrame.slowesthandlers[index], _EventTraceFrame.slowesthandlertimes[index]), 1, .82, 0, 1, 1, 1);
end
for k, v in ipairs(EventTraceFrame.args) do
- if v[index] then
- tooltip:AddDoubleLine(format(ARGUMENT_LABEL_FORMAT, k), EventTrace_FormatArgValue(v[index]), 1, .82, 0, 1, 1, 1)
+ if (v[index]) then
+ tooltip:AddDoubleLine(format(ARGUMENT_LABEL_FORMAT, k), EventTrace_FormatArgValue(v[index]), 1, .82, 0, 1, 1, 1);
end
end
end
- tooltip:Show()
+ tooltip:Show();
end
-function EventTraceFrameEvent_OnEnter(self)
- if not EVENT_TRACE_SYSTEM_TIMES[EventTraceFrame.times[self.index]] then
- self.HideButton:Show()
+function EventTraceFrameEvent_OnEnter (self)
+ if (not EVENT_TRACE_SYSTEM_TIMES[EventTraceFrame.times[self.index]]) then
+ self.HideButton:Show();
else
- self.HideButton:Hide()
+ self.HideButton:Hide();
end
- if _EventTraceFrame.selectedEvent then
- return
+ if (_EventTraceFrame.selectedEvent) then
+ return;
else
- EventTraceFrameEvent_DisplayTooltip(self)
+ EventTraceFrameEvent_DisplayTooltip(self);
end
end
-function EventTraceFrameEvent_OnLeave(self)
- if not self.HideButton == GetMouseFocus() then
- self.HideButton:Hide()
+function EventTraceFrameEvent_OnLeave (self)
+ if (not self.HideButton == GetMouseFocus()) then
+ self.HideButton:Hide();
end
- if not _EventTraceFrame.selectedEvent then
- EventTraceTooltip:Hide()
+ if (not _EventTraceFrame.selectedEvent) then
+ EventTraceTooltip:Hide();
end
end
-function EventTraceFrameEvent_OnClick(self)
- if _EventTraceFrame.selectedEvent == self.index then
- _EventTraceFrame.selectedEvent = nil
+function EventTraceFrameEvent_OnClick (self)
+ if (_EventTraceFrame.selectedEvent == self.index) then
+ _EventTraceFrame.selectedEvent = nil;
else
- _EventTraceFrame.selectedEvent = self.index
+ _EventTraceFrame.selectedEvent = self.index;
end
- EventTraceFrame_Update()
+ EventTraceFrame_Update();
end
-function EventTraceFrameEventHideButton_OnClick(button)
- local eventName = button:GetParent().event:GetText()
- EventTraceFrame.ignoredEvents[eventName] = 1
- EventTraceFrame.selectedEvent = nil
+function EventTraceFrameEventHideButton_OnClick (button)
+ local eventName = button:GetParent().event:GetText();
+ EventTraceFrame.ignoredEvents[eventName] = 1;
+ EventTraceFrame.selectedEvent = nil;
for i = EventTraceFrame.lastIndex, 1, -1 do
- if EventTraceFrame.events[i] == eventName then
- EventTraceFrame_RemoveEvent(i)
+ if (EventTraceFrame.events[i] == eventName) then
+ EventTraceFrame_RemoveEvent(i);
end
end
- local lastWasElapsed = false
+ local lastWasElapsed = false;
for i = EventTraceFrame.lastIndex, 1, -1 do
- if EventTraceFrame.times[i] == "Elapsed" then
- if lastWasElapsed then
- EventTraceFrame.timeSinceLast[i] = EventTraceFrame.timeSinceLast[i] + EventTraceFrame.timeSinceLast[i+1]
- EventTraceFrame.framesSinceLast[i] = EventTraceFrame.framesSinceLast[i] + EventTraceFrame.framesSinceLast[i+1]
- EventTraceFrame.events[i] = string.format(string.format("%.3f sec", EventTraceFrame.timeSinceLast[i]) .. " - %d frame(s)", EventTraceFrame.framesSinceLast[i])
- EventTraceFrame_RemoveEvent(i+1)
+ if (EventTraceFrame.times[i] == "Elapsed") then
+ if (lastWasElapsed) then
+ EventTraceFrame.timeSinceLast[i] = EventTraceFrame.timeSinceLast[i] + EventTraceFrame.timeSinceLast[i+1];
+ EventTraceFrame.framesSinceLast[i] = EventTraceFrame.framesSinceLast[i] + EventTraceFrame.framesSinceLast[i+1];
+ EventTraceFrame.events[i] = string.format(string.format("%.3f sec", EventTraceFrame.timeSinceLast[i]) .. " - %d frame(s)", EventTraceFrame.framesSinceLast[i]);
+ EventTraceFrame_RemoveEvent(i+1);
end
- lastWasElapsed = true
+ lastWasElapsed = true;
else
- lastWasElapsed = false
+ lastWasElapsed = false;
end
end
- EventTraceFrame_Update()
+ EventTraceFrame_Update();
end
local ERROR_FORMAT = [[|cffffd200Message:|r|cffffffff %s|r
|cffffd200Time:|r|cffffffff %s|r
|cffffd200Count:|r|cffffffff %s|r
-|cffffd200Stack:|r|cffffffff %s|r]]
+|cffffd200Stack:|r|cffffffff %s|r]];
local WARNING_AS_ERROR_FORMAT = [[|cffffd200Message:|r|cffffffff %s|r
|cffffd200Time:|r|cffffffff %s|r
-|cffffd200Count:|r|cffffffff %s|r]]
+|cffffd200Count:|r|cffffffff %s|r]];
-local WARNING_FORMAT = "Lua Warning:\n"..WARNING_AS_ERROR_FORMAT
+local WARNING_FORMAT = "Lua Warning:\n"..WARNING_AS_ERROR_FORMAT;
local INDEX_ORDER_FORMAT = "%d / %d"
-local _ScriptErrorsFrame
+local _ScriptErrorsFrame;
-function ScriptErrorsFrame_OnLoad(self)
+function ScriptErrorsFrame_OnLoad (self)
local frameName = self:GetName()
self.title = _G[frameName.."Title"]
self.indexLabel = _G[frameName.."IndexLabel"]
@@ -518,61 +520,61 @@ function ScriptErrorsFrame_OnLoad(self)
self.next = _G[frameName.."Next"]
self.close = _G[frameName.."CloseButton"]
- self.title:SetText(LUA_ERROR)
- self:RegisterForDrag("LeftButton")
- self.seen = {}
- self.order = {}
- self.count = {}
- self.messages = {}
- self.times = {}
- _ScriptErrorsFrame = self
+ self.title:SetText(LUA_ERROR);
+ self:RegisterForDrag("LeftButton");
+ self.seen = {};
+ self.order = {};
+ self.count = {};
+ self.messages = {};
+ self.times = {};
+ _ScriptErrorsFrame = self;
end
-function ScriptErrorsFrame_OnShow(self)
- ScriptErrorsFrame_Update()
+function ScriptErrorsFrame_OnShow (self)
+ ScriptErrorsFrame_Update();
end
-function ScriptErrorsFrame_OnError(message, keepHidden)
- local stack = debugstack(DEBUGLOCALS_LEVEL)
+function ScriptErrorsFrame_OnError (message, keepHidden)
+ local stack = debugstack(DEBUGLOCALS_LEVEL);
- local messageStack = message..stack
+ local messageStack = message..stack;
- if _ScriptErrorsFrame then
- local index = _ScriptErrorsFrame.seen[messageStack]
- if index then
- _ScriptErrorsFrame.count[index] = _ScriptErrorsFrame.count[index] + 1
- _ScriptErrorsFrame.messages[index] = message
- _ScriptErrorsFrame.times[index] = date()
+ if (_ScriptErrorsFrame) then
+ local index = _ScriptErrorsFrame.seen[messageStack];
+ if (index) then
+ _ScriptErrorsFrame.count[index] = _ScriptErrorsFrame.count[index] + 1;
+ _ScriptErrorsFrame.messages[index] = message;
+ _ScriptErrorsFrame.times[index] = date();
else
- tinsert(_ScriptErrorsFrame.order, stack)
- index = getn(_ScriptErrorsFrame.order)
- _ScriptErrorsFrame.count[index] = 1
- _ScriptErrorsFrame.messages[index] = message
- _ScriptErrorsFrame.times[index] = date()
- _ScriptErrorsFrame.seen[messageStack] = index
+ tinsert(_ScriptErrorsFrame.order, stack);
+ index = getn(_ScriptErrorsFrame.order);
+ _ScriptErrorsFrame.count[index] = 1;
+ _ScriptErrorsFrame.messages[index] = message;
+ _ScriptErrorsFrame.times[index] = date();
+ _ScriptErrorsFrame.seen[messageStack] = index;
end
- if not _ScriptErrorsFrame:IsShown() and not keepHidden then
- _ScriptErrorsFrame.index = index
- _ScriptErrorsFrame:Show()
+ if (not _ScriptErrorsFrame:IsShown() and not keepHidden) then
+ _ScriptErrorsFrame.index = index;
+ _ScriptErrorsFrame:Show();
else
- ScriptErrorsFrame_Update()
+ ScriptErrorsFrame_Update();
end
end
end
-function ScriptErrorsFrame_Update()
- local editBox = ScriptErrorsFrameScrollFrameText
- local index = _ScriptErrorsFrame.index
- if not index or not _ScriptErrorsFrame.order[index] then
- index = getn(_ScriptErrorsFrame.order)
- _ScriptErrorsFrame.index = index
+function ScriptErrorsFrame_Update ()
+ local editBox = ScriptErrorsFrameScrollFrameText;
+ local index = _ScriptErrorsFrame.index;
+ if (not index or not _ScriptErrorsFrame.order[index]) then
+ index = getn(_ScriptErrorsFrame.order);
+ _ScriptErrorsFrame.index = index;
end
- if index == 0 then
- editBox:SetText("")
- ScriptErrorsFrame_UpdateButtons()
- return
+ if (index == 0) then
+ editBox:SetText("");
+ ScriptErrorsFrame_UpdateButtons();
+ return;
end
local text = string.format(
@@ -581,67 +583,68 @@ function ScriptErrorsFrame_Update()
_ScriptErrorsFrame.times[index],
_ScriptErrorsFrame.count[index],
_ScriptErrorsFrame.order[index]
- )
+ );
- local parent = editBox:GetParent()
- local prevText = editBox.text
- editBox.text = text
- if prevText ~= text then
- editBox:SetText(text)
- editBox:HighlightText(0)
+ local parent = editBox:GetParent();
+ local prevText = editBox.text;
+ editBox.text = text;
+ if (prevText ~= text) then
+ editBox:SetText(text);
+ editBox:HighlightText(0);
+-- editBox:SetCursorPosition(0);
else
- ScriptErrorsFrameScrollFrame:UpdateScrollChildRect()
+ ScriptErrorsFrameScrollFrame:UpdateScrollChildRect();
end
- parent:SetVerticalScroll(0)
+ parent:SetVerticalScroll(0);
- ScriptErrorsFrame_UpdateButtons()
+ ScriptErrorsFrame_UpdateButtons();
end
-function ScriptErrorsFrame_UpdateButtons()
- local index = _ScriptErrorsFrame.index
- local numErrors = getn(_ScriptErrorsFrame.order)
- if index == 0 then
- _ScriptErrorsFrame.next:Disable()
- _ScriptErrorsFrame.previous:Disable()
+function ScriptErrorsFrame_UpdateButtons ()
+ local index = _ScriptErrorsFrame.index;
+ local numErrors = getn(_ScriptErrorsFrame.order);
+ if (index == 0) then
+ _ScriptErrorsFrame.next:Disable();
+ _ScriptErrorsFrame.previous:Disable();
else
- if numErrors == 1 then
- _ScriptErrorsFrame.next:Disable()
- _ScriptErrorsFrame.previous:Disable()
- elseif index == 1 then
- _ScriptErrorsFrame.next:Enable()
- _ScriptErrorsFrame.previous:Disable()
- elseif index == numErrors then
- _ScriptErrorsFrame.next:Disable()
- _ScriptErrorsFrame.previous:Enable()
+ if (numErrors == 1) then
+ _ScriptErrorsFrame.next:Disable();
+ _ScriptErrorsFrame.previous:Disable();
+ elseif (index == 1) then
+ _ScriptErrorsFrame.next:Enable();
+ _ScriptErrorsFrame.previous:Disable();
+ elseif (index == numErrors) then
+ _ScriptErrorsFrame.next:Disable();
+ _ScriptErrorsFrame.previous:Enable();
else
- _ScriptErrorsFrame.next:Enable()
- _ScriptErrorsFrame.previous:Enable()
+ _ScriptErrorsFrame.next:Enable();
+ _ScriptErrorsFrame.previous:Enable();
end
end
- _ScriptErrorsFrame.indexLabel:SetText(string.format(INDEX_ORDER_FORMAT, index, numErrors))
+ _ScriptErrorsFrame.indexLabel:SetText(string.format(INDEX_ORDER_FORMAT, index, numErrors));
end
-function ScriptErrorsFrame_DeleteError(index)
- if _ScriptErrorsFrame.order[index] then
- _ScriptErrorsFrame.seen[_ScriptErrorsFrame.messages[index] .. _ScriptErrorsFrame.order[index]] = nil
- tremove(_ScriptErrorsFrame.order, index)
- tremove(_ScriptErrorsFrame.messages, index)
- tremove(_ScriptErrorsFrame.times, index)
- tremove(_ScriptErrorsFrame.count, index)
+function ScriptErrorsFrame_DeleteError (index)
+ if (_ScriptErrorsFrame.order[index]) then
+ _ScriptErrorsFrame.seen[_ScriptErrorsFrame.messages[index] .. _ScriptErrorsFrame.order[index]] = nil;
+ tremove(_ScriptErrorsFrame.order, index);
+ tremove(_ScriptErrorsFrame.messages, index);
+ tremove(_ScriptErrorsFrame.times, index);
+ tremove(_ScriptErrorsFrame.count, index);
end
end
-function ScriptErrorsFrameButton_OnClick(self)
- local id = self:GetID()
+function ScriptErrorsFrameButton_OnClick (self)
+ local id = self:GetID();
- if id == 1 then
- _ScriptErrorsFrame.index = _ScriptErrorsFrame.index + 1
+ if (id == 1) then
+ _ScriptErrorsFrame.index = _ScriptErrorsFrame.index + 1;
else
- _ScriptErrorsFrame.index = _ScriptErrorsFrame.index - 1
+ _ScriptErrorsFrame.index = _ScriptErrorsFrame.index - 1;
end
- ScriptErrorsFrame_Update()
+ ScriptErrorsFrame_Update();
end
function DebugTooltip_OnLoad(self)
@@ -654,7 +657,7 @@ end
function FrameStackTooltip_OnDisplaySizeChanged(self)
local height = GetScreenHeight()
- if height > 768 then
+ if (height > 768) then
self:SetScale(768 / height)
else
self:SetScale(1)
@@ -669,14 +672,14 @@ function FrameStackTooltip_OnLoad(self)
end
function FrameStackTooltip_OnEvent(self, event, ...)
- if event == "DISPLAY_SIZE_CHANGED" then
+ if (event == "DISPLAY_SIZE_CHANGED") then
FrameStackTooltip_OnDisplaySizeChanged(self)
end
end
function FrameStackTooltip_Toggle(showHidden)
local tooltip = _G["FrameStackTooltip"]
- if tooltip:IsVisible() then
+ if (tooltip:IsVisible()) then
tooltip:Hide()
FrameStackHighlight:Hide()
else
@@ -692,17 +695,17 @@ FRAMESTACK_UPDATE_TIME = .1
local _timeSinceLast = 0
function FrameStackTooltip_OnUpdate(self, elapsed)
_timeSinceLast = _timeSinceLast - elapsed
- if _timeSinceLast <= 0 then
+ if (_timeSinceLast <= 0) then
_timeSinceLast = FRAMESTACK_UPDATE_TIME
local highlightFrame = UpdateFrameStack(self, self.showHidden)
- FrameStackHighlight:ClearAllPoints()
- if highlightFrame then
- FrameStackHighlight:SetPoint("BOTTOMLEFT", highlightFrame)
- FrameStackHighlight:SetPoint("TOPRIGHT", highlightFrame)
- FrameStackHighlight:Show()
+ FrameStackHighlight:ClearAllPoints();
+ if (highlightFrame) then
+ FrameStackHighlight:SetPoint("BOTTOMLEFT", highlightFrame);
+ FrameStackHighlight:SetPoint("TOPRIGHT", highlightFrame);
+ FrameStackHighlight:Show();
else
- FrameStackHighlight:Hide()
+ FrameStackHighlight:Hide();
end
end
end
@@ -716,14 +719,14 @@ function FrameStackTooltip_OnShow(self)
local x, y = GetCursorPosition()
self:ClearAllPoints()
- if x > px then
- if y > py then
+ if (x > px) then
+ if (y > py) then
self:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 20, 20)
else
self:SetPoint("TOPLEFT", parent, "TOPLEFT", 20, -20)
end
else
- if y > py then
+ if (y > py) then
self:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", -20, 20)
else
self:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -20, -20)
diff --git a/!DebugTools/Blizzard_DebugTools.xml b/!DebugTools/Blizzard_DebugTools.xml
index 54b6907..1c09ac3 100644
--- a/!DebugTools/Blizzard_DebugTools.xml
+++ b/!DebugTools/Blizzard_DebugTools.xml
@@ -436,11 +436,14 @@
+
+ ScrollingEdit_OnTextChanged(this:GetParent());
+
- ScrollingEdit_OnCursorChanged(this);
+ ScrollingEdit_OnCursorChanged(arg1, arg2, arg3, arg4);
- ScrollingEdit_OnUpdate(this, arg1, this:GetParent());
+ ScrollingEdit_OnUpdate(this:GetParent());
this:HighlightText(0);
diff --git a/ElvUI/Core/Cooldowns.lua b/ElvUI/Core/Cooldowns.lua
index e60abfe..4acbb92 100644
--- a/ElvUI/Core/Cooldowns.lua
+++ b/ElvUI/Core/Cooldowns.lua
@@ -7,7 +7,6 @@ local format = string.format
local GetTime = GetTime
--WoW API / Variables
local CreateFrame = CreateFrame
-local hooksecurefunc = hooksecurefunc
local ICON_SIZE = 36 --the normal size for an icon (don't change this)
local FONT_SIZE = 20 --the base font size to use at a scale of 1
diff --git a/ElvUI/Modules/ActionBars/Bind.lua b/ElvUI/Modules/ActionBars/Bind.lua
index 16fb280..1062cc9 100644
--- a/ElvUI/Modules/ActionBars/Bind.lua
+++ b/ElvUI/Modules/ActionBars/Bind.lua
@@ -14,7 +14,6 @@ local GameTooltip_Hide = GameTooltip_Hide
local GetBindingKey = GetBindingKey
local GetCurrentBindingSet = GetCurrentBindingSet
local GetMacroInfo = GetMacroInfo
-local hooksecurefunc = hooksecurefunc
local IsAddOnLoaded = IsAddOnLoaded
local IsAltKeyDown = IsAltKeyDown
local IsControlKeyDown = IsControlKeyDown
diff --git a/ElvUI/Modules/Bags/Bags.lua b/ElvUI/Modules/Bags/Bags.lua
index 830bdda..e3d7a31 100644
--- a/ElvUI/Modules/Bags/Bags.lua
+++ b/ElvUI/Modules/Bags/Bags.lua
@@ -454,7 +454,7 @@ function B:Layout(isBank)
end
f.Bags[bagID].numSlots = numSlots
- f.Bags[bagID].type = GetBagFamily(GetInventoryItemLink("player", ContainerIDToInventoryID(bagID)))
+ f.Bags[bagID].type = GetItemFamily(GetInventoryItemLink("player", ContainerIDToInventoryID(bagID)), true)
--Hide unused slots
for i = 1, MAX_CONTAINER_ITEMS do
diff --git a/ElvUI/Modules/Bags/Sort.lua b/ElvUI/Modules/Bags/Sort.lua
index 87eb7de..be2abf7 100644
--- a/ElvUI/Modules/Bags/Sort.lua
+++ b/ElvUI/Modules/Bags/Sort.lua
@@ -378,7 +378,7 @@ function B:IsSpecialtyBag(bagID)
local bag = GetInventoryItemLink("player", inventorySlot)
if not bag then return false end
- local family = GetBagFamily(bag)
+ local family = GetItemFamily(bag, true)
if family == 0 or family == nil then return false end
return family
@@ -393,7 +393,7 @@ function B:CanItemGoInBag(bag, slot, targetBag)
itemFamily = 1
end
end
- local bagFamily = GetBagFamily(GetInventoryItemLink("player", ContainerIDToInventoryID(targetBag)))
+ local bagFamily = GetItemFamily(GetInventoryItemLink("player", ContainerIDToInventoryID(targetBag)), true)
if itemFamily then
return (bagFamily == 0) or band(itemFamily, bagFamily) > 0
else
diff --git a/ElvUI/Modules/UnitFrames/Groups/Party.lua b/ElvUI/Modules/UnitFrames/Groups/Party.lua
index e864042..a03166b 100644
--- a/ElvUI/Modules/UnitFrames/Groups/Party.lua
+++ b/ElvUI/Modules/UnitFrames/Groups/Party.lua
@@ -42,16 +42,32 @@ function UF:Construct_PartyFrames()
return self;
end
+function UF:PartySmartVisibility()
+ if not self then self = this end
+
+ if GetNumRaidMembers() < 1 then
+ self:Show()
+ else
+ self:Hide()
+ end
+end
+
function UF:Update_PartyHeader(header)
if not header.positioned then
header:ClearAllPoints()
header:SetPoint("BOTTOMLEFT", E.UIParent, "BOTTOMLEFT", 4, 195)
E:CreateMover(header, header:GetName().."Mover", L["Party Frames"], nil, nil, nil, "ALL,PARTY")
+
+ header:RegisterEvent("PARTY_MEMBERS_CHANGED")
+ header:RegisterEvent("RAID_ROSTER_UPDATE")
+ header:SetScript("OnEvent", UF["PartySmartVisibility"])
+
header.positioned = true
end
-end
+ UF.PartySmartVisibility(header)
+end
function UF:Update_PartyFrames(frame, db)
frame.db = db
diff --git a/ElvUI/Modules/UnitFrames/Groups/Raid.lua b/ElvUI/Modules/UnitFrames/Groups/Raid.lua
index a7b1d53..cbfd7f7 100644
--- a/ElvUI/Modules/UnitFrames/Groups/Raid.lua
+++ b/ElvUI/Modules/UnitFrames/Groups/Raid.lua
@@ -42,14 +42,31 @@ function UF:Construct_RaidFrames()
return self
end
+function UF:RaidSmartVisibility()
+ if not self then self = this end
+
+ if GetNumRaidMembers() > 1 then
+ self:Show()
+ else
+ self:Hide()
+ end
+end
+
function UF:Update_RaidHeader(header)
if not header.positioned then
header:ClearAllPoints()
header:SetPoint("BOTTOMLEFT", E.UIParent, "BOTTOMLEFT", 4, 195)
E:CreateMover(header, header:GetName().."Mover", L["Raid Frames"], nil, nil, nil, "ALL,RAID")
+
+ header:RegisterEvent("PARTY_MEMBERS_CHANGED")
+ header:RegisterEvent("RAID_ROSTER_UPDATE")
+ header:SetScript("OnEvent", UF["RaidSmartVisibility"])
+
header.positioned = true
end
+
+ UF.RaidSmartVisibility(header)
end
function UF:Update_RaidFrames(frame, db)