remove temp folder structure

This commit is contained in:
Crum
2018-02-19 21:03:21 -06:00
parent 85a2a5bcf7
commit 611f11aff9
408 changed files with 0 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
## Interface: 11200
## Title: !DebugTools
## Notes: Tools for developing addons (Blizzard UI Debug Tools)
## Author: Blizzard Entertainment
## Special Thanks: Iriel, Kirov, Esamynn
## Version: 1.0
## Dependencies: !Compatibility
## LoadOnDemand: 1
Compatibility.lua
Dump.lua
Blizzard_DebugTools.lua
Blizzard_DebugTools.xml
+735
View File
@@ -0,0 +1,735 @@
local mod = math.mod
local getn = table.getn
EVENT_TRACE_EVENT_HEIGHT = 16;
EVENT_TRACE_MAX_ENTRIES = 1000;
DEBUGLOCALS_LEVEL = 4;
local _normalFontColor = {1, .82, 0, 1};
EVENT_TRACE_SYSTEM_TIMES = {};
EVENT_TRACE_SYSTEM_TIMES["System"] = true;
EVENT_TRACE_SYSTEM_TIMES["Elapsed"] = true;
EVENT_TRACE_EVENT_COLORS = {};
EVENT_TRACE_EVENT_COLORS["System"] = _normalFontColor;
EVENT_TRACE_EVENT_COLORS["Elapsed"] = {.6, .6, .6, 1};
local _EventTraceFrame;
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()
_G[frameName.."Scroll"].thumb = _G[frameName.."ScrollThumb"]
_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.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(tris, 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");
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;
for k, v in next, self.args do
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));
else
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;
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;
hours = mod(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();
local numArgs = select("#", unpack(arg));
for i=1, numArgs do
if (not self.args[i]) then
self.args[i] = {};
end
self.args[i][nextIndex] = arg[i];
end
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();
end
end
end
function EventTraceFrame_OnShow(self)
wipe(self.ignoredEvents);
local scrollBar = _G["EventTraceFrameScroll"];
local minValue, maxValue = scrollBar:GetMinMaxValues();
scrollBar:SetValue(maxValue);
end
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);
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);
end
for i = self.visibleButtons + 1, numButtonsToDisplay do
self.buttons[i]:Show();
end
self.visibleButtons = numButtonsToDisplay;
EventTraceFrame_Update();
elseif (self.visibleButtons < numButtonsToDisplay) then
for i = self.visibleButtons + 1, numButtonsToDisplay do
self.buttons[i]:Show();
end
self.visibleButtons = numButtonsToDisplay;
EventTraceFrame_Update();
elseif (numButtonsToDisplay < self.visibleButtons) then
for i = numButtonsToDisplay + 1, self.visibleButtons do
self.buttons[i]:Hide();
end
self.visibleButtons = numButtonsToDisplay;
end
end
function EventTraceFrame_Update ()
local offset = 0;
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;
if (firstID >= lastID) then
scrollBar:SetMinMaxValues(firstID-1, lastID);
else
scrollBar:SetMinMaxValues(firstID, lastID);
end
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);
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 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;
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));
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);
else
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();
end
else
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);
else
button.HideButton:Hide();
end
else
button.index = index;
button:Hide();
end
end
end
EventTraceFrame_UpdateKeyboardStatus();
end
function EventTraceFrame_StartEventCapture()
if (_EventTraceFrame.started) then
return;
end
EventHandler_Enable()
_EventTraceFrame.started = true;
_framesSinceLast = 0;
_timeSinceLast = 0;
_EventTraceFrame:RegisterAllEvents();
EventTraceFrame_OnEvent(_EventTraceFrame, "Begin Capture");
end
function EventTraceFrame_StopEventCapture()
if (not _EventTraceFrame.started) then
return;
end
EventHandler_Disable()
_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();
end
elseif (msg == "") then
if (not _EventTraceFrame:IsShown()) then
_EventTraceFrame:Show();
if (_EventTraceFrame.started == nil) then
EventTraceFrame_StartEventCapture();
end
else
_EventTraceFrame:Hide();
end
end
end
function EventTraceFrame_OnMouseWheel(self, delta)
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);
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;
end
end
_EventTraceFrame:EnableKeyboard(false);
end
function EventTraceFrame_OnKeyUp(self, key)
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);
for k, v in next, EventTraceFrame.args do
for j = i, EventTraceFrame.lastIndex do
EventTraceFrame.args[k][j] = EventTraceFrame.args[k][j+1];
end
end
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 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;
end
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);
else
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);
end
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);
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);
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);
end
end
end
tooltip:Show();
end
function EventTraceFrameEvent_OnEnter (self)
if (not EVENT_TRACE_SYSTEM_TIMES[EventTraceFrame.times[self.index]]) then
self.HideButton:Show();
else
self.HideButton:Hide();
end
if (_EventTraceFrame.selectedEvent) then
return;
else
EventTraceFrameEvent_DisplayTooltip(self);
end
end
function EventTraceFrameEvent_OnLeave (self)
if (not self.HideButton == GetMouseFocus()) then
self.HideButton:Hide();
end
if (not _EventTraceFrame.selectedEvent) then
EventTraceTooltip:Hide();
end
end
function EventTraceFrameEvent_OnClick (self)
if (_EventTraceFrame.selectedEvent == self.index) then
_EventTraceFrame.selectedEvent = nil;
else
_EventTraceFrame.selectedEvent = self.index;
end
EventTraceFrame_Update();
end
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);
end
end
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);
end
lastWasElapsed = true;
else
lastWasElapsed = false;
end
end
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]];
local WARNING_AS_ERROR_FORMAT = [[|cffffd200Message:|r|cffffffff %s|r
|cffffd200Time:|r|cffffffff %s|r
|cffffd200Count:|r|cffffffff %s|r]];
local WARNING_FORMAT = "Lua Warning:\n"..WARNING_AS_ERROR_FORMAT;
local INDEX_ORDER_FORMAT = "%d / %d"
local _ScriptErrorsFrame;
function ScriptErrorsFrame_OnLoad (self)
local frameName = self:GetName()
self.title = _G[frameName.."Title"]
self.indexLabel = _G[frameName.."IndexLabel"]
self.reload = _G[frameName.."Reload"]
self.previous = _G[frameName.."Previous"]
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;
end
function ScriptErrorsFrame_OnShow (self)
ScriptErrorsFrame_Update();
end
function ScriptErrorsFrame_OnError (message, keepHidden)
local stack = debugstack(DEBUGLOCALS_LEVEL);
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();
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;
end
if (not _ScriptErrorsFrame:IsShown() and not keepHidden) then
_ScriptErrorsFrame.index = index;
_ScriptErrorsFrame:Show();
else
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;
end
if (index == 0) then
editBox:SetText("");
ScriptErrorsFrame_UpdateButtons();
return;
end
local text = string.format(
ERROR_FORMAT,
_ScriptErrorsFrame.messages[index],
_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);
-- editBox:SetCursorPosition(0);
else
ScriptErrorsFrameScrollFrame:UpdateScrollChildRect();
end
parent:SetVerticalScroll(0);
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();
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();
else
_ScriptErrorsFrame.next:Enable();
_ScriptErrorsFrame.previous:Enable();
end
end
_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);
end
end
function ScriptErrorsFrameButton_OnClick (self)
local id = self:GetID();
if (id == 1) then
_ScriptErrorsFrame.index = _ScriptErrorsFrame.index + 1;
else
_ScriptErrorsFrame.index = _ScriptErrorsFrame.index - 1;
end
ScriptErrorsFrame_Update();
end
function DebugTooltip_OnLoad(self)
self:SetFrameLevel(self:GetFrameLevel() + 2)
self:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b)
self:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b)
self.statusBar2 = getglobal(self:GetName().."StatusBar2")
self.statusBar2Text = getglobal(self:GetName().."StatusBar2Text")
end
function FrameStackTooltip_OnDisplaySizeChanged(self)
local height = GetScreenHeight()
if (height > 768) then
self:SetScale(768 / height)
else
self:SetScale(1)
end
end
function FrameStackTooltip_OnLoad(self)
DebugTooltip_OnLoad(self)
FrameStackTooltip_OnDisplaySizeChanged(self)
self:RegisterEvent("DISPLAY_SIZE_CHANGED")
end
function FrameStackTooltip_OnEvent(self, event, ...)
if (event == "DISPLAY_SIZE_CHANGED") then
FrameStackTooltip_OnDisplaySizeChanged(self)
end
end
function FrameStackTooltip_Toggle(showHidden)
local tooltip = _G["FrameStackTooltip"]
if (tooltip:IsVisible()) then
tooltip:Hide()
FrameStackHighlight:Hide()
else
tooltip:SetOwner(UIParent, "ANCHOR_NONE")
tooltip:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -CONTAINER_OFFSET_X - 13, CONTAINER_OFFSET_Y)
tooltip.default = 1
tooltip.showHidden = showHidden
UpdateFrameStack(tooltip, showHidden)
end
end
FRAMESTACK_UPDATE_TIME = .1
local _timeSinceLast = 0
function FrameStackTooltip_OnUpdate(self, elapsed)
_timeSinceLast = _timeSinceLast - elapsed
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();
else
FrameStackHighlight:Hide();
end
end
end
function FrameStackTooltip_OnShow(self)
local parent = self:GetParent() or UIParent
local ps = parent:GetEffectiveScale()
local px, py = parent:GetCenter()
px, py = px * ps, py * ps
local x, y = GetCursorPosition()
self:ClearAllPoints()
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
self:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", -20, 20)
else
self:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -20, -20)
end
end
end
FrameStackTooltip_OnEnter = FrameStackTooltip_OnShow
+568
View File
@@ -0,0 +1,568 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/">
<Font name="GameFontHighlightSmall" inherits="GameFontNormalSmall" virtual="true">
<Color r="1.0" g="1.0" b="1.0"/>
</Font>
<Font name="GameFontHighlightSmallLeft" inherits="GameFontHighlightSmall" justifyH="LEFT" virtual="true"/>
<Font name="GameFontNormalCenter" inherits="GameFontNormal" justifyH="CENTER" virtual="true"/>
<FontString name="EventTraceTimeFont" font="fonts\arialn.ttf" justifyH="RIGHT" virtual="true">
<FontHeight val="10"/>
<Color r="1" g="1" b="1" a="1"/>
</FontString>
<Button name="EventTraceEventTemplate" virtual="true">
<Size x="0" y="16"/>
<Layers>
<Layer level="ARTWORK">
<FontString name="$parentTime" inherits="EventTraceTimeFont">
<Anchors>
<Anchor point="TOPLEFT"/>
<Anchor point="TOPRIGHT" relativePoint="TOPLEFT">
<Offset x="72" y="0"/>
</Anchor>
<Anchor point="BOTTOM"/>
</Anchors>
</FontString>
<FontString name="$parentEvent" inherits="GameFontHighlightSmallLeft">
<Anchors>
<Anchor point="TOPRIGHT"/>
<Anchor point="TOPLEFT">
<Offset x="80" y="0"/>
</Anchor>
<Anchor point="BOTTOM"/>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentHideButton" hidden="true">
<Size x="16" y="8"/>
<Anchors>
<Anchor point="LEFT"/>
</Anchors>
<Scripts>
<OnClick>
EventTraceFrameEventHideButton_OnClick(this);
</OnClick>
<OnLeave>
EventTraceFrameEvent_OnLeave(this:GetParent());
</OnLeave>
</Scripts>
<ButtonText text="X" inherits="GameFontRedSmall">
<Anchors>
<Anchor point="LEFT"/>
</Anchors>
</ButtonText>
</Button>
</Frames>
<Scripts>
<OnLoad>
local frameName = this:GetName();
this.time = _G[frameName.."Time"];
this.event = _G[frameName.."Event"];
this.HideButton = _G[frameName.."HideButton"];
this:GetHighlightTexture():SetAlpha(.15);
</OnLoad>
<OnEnter>
EventTraceFrameEvent_OnEnter(this);
</OnEnter>
<OnLeave>
EventTraceFrameEvent_OnLeave(this);
</OnLeave>
<OnClick>
EventTraceFrameEvent_OnClick(this);
</OnClick>
</Scripts>
<HighlightTexture setAllPoints="true" alphaMode="ADD">
<Color r=".8" g=".8" b="1" a="1"/>
</HighlightTexture>
</Button>
<Frame name="UIPanelDialogTemplate" virtual="true">
<Layers>
<Layer level="OVERLAY">
<Texture name="$parentTopLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
<TexCoords left="0.501953125" right="0.625" top="0" bottom="1"/>
</Texture>
<Texture name="$parentTopRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.625" right="0.75" top="0" bottom="1"/>
</Texture>
<Texture name="$parentTop" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="0" y="64"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="TOPRIGHT"/>
<Anchor point="TOPRIGHT" relativeTo="$parentTopRight" relativePoint="TOPLEFT"/>
</Anchors>
<TexCoords left="0.25" right="0.369140625" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="BOTTOMLEFT"/>
</Anchors>
<TexCoords left="0.751953125" right="0.875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="BOTTOMRIGHT"/>
</Anchors>
<TexCoords left="0.875" right="1" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottom" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="0" y="64"/>
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBottomLeft" relativePoint="BOTTOMRIGHT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="BOTTOMLEFT"/>
</Anchors>
<TexCoords left="0.376953125" right="0.498046875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="0"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="BOTTOMLEFT"/>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBottomLeft" relativePoint="TOPLEFT"/>
</Anchors>
<TexCoords left="0.001953125" right="0.125" top="0" bottom="1"/>
</Texture>
<Texture name="$parentRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="0"/>
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="$parentTopRight" relativePoint="BOTTOMRIGHT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.1171875" right="0.2421875" top="0" bottom="1"/>
</Texture>
</Layer>
<Layer level="BACKGROUND">
<Texture name="$parentTitleBG" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Title-Background">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="8" y="-7"/>
</Anchor>
<Anchor point="BOTTOMRIGHT" relativePoint="TOPRIGHT">
<Offset x="-8" y="-24"/>
</Anchor>
</Anchors>
</Texture>
<Texture name="$parentDialogBG" file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-L1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="8" y="-24"/>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset x="-6" y="8"/>
</Anchor>
</Anchors>
<TexCoords left="0.255" right="1" top="0.29" bottom="1"/>
</Texture>
</Layer>
<Layer level="OVERLAY">
<FontString name="$parentTitle" inherits="GameFontNormal">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="12" y="-8"/>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset x="-32" y="-24"/>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentClose" inherits="UIPanelCloseButton">
<Anchors>
<Anchor point="TOPRIGHT">
<Offset x="2" y="1"/>
</Anchor>
</Anchors>
</Button>
</Frames>
</Frame>
<Frame name="EventTraceFrame" parent="UIParent" movable="true" enableMouse="true" clampedToScreen="true" hidden="true" frameStrata="MEDIUM" toplevel="true">
<Size x="326" y="505"/>
<Anchors>
<Anchor point="LEFT">
<Offset x="64" y="0"/>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentTitleBG" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Title-Background">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="9" y="-6"/>
</Anchor>
<Anchor point="BOTTOMRIGHT" relativePoint="TOPRIGHT">
<Offset x="-28" y="-24"/>
</Anchor>
</Anchors>
</Texture>
<Texture name="$parentDialogBG" file="Interface\Tooltips\UI-Tooltip-Background">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="8" y="-24"/>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset x="-6" y="8"/>
</Anchor>
</Anchors>
<Color r="0" g="0" b="0" a=".75"/>
</Texture>
</Layer>
<Layer level="BORDER">
<Texture name="$parentTopLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
<TexCoords left="0.501953125" right="0.625" top="0" bottom="1"/>
</Texture>
<Texture name="$parentTopRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.625" right="0.75" top="0" bottom="1"/>
</Texture>
<Texture name="$parentTop" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="0" y="64"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="TOPRIGHT"/>
<Anchor point="TOPRIGHT" relativeTo="$parentTopRight" relativePoint="TOPLEFT"/>
</Anchors>
<TexCoords left="0.25" right="0.369140625" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="BOTTOMLEFT"/>
</Anchors>
<TexCoords left="0.751953125" right="0.875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottomRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="BOTTOMRIGHT"/>
</Anchors>
<TexCoords left="0.875" right="1" top="0" bottom="1"/>
</Texture>
<Texture name="$parentBottom" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="0" y="64"/>
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBottomLeft" relativePoint="BOTTOMRIGHT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="BOTTOMLEFT"/>
</Anchors>
<TexCoords left="0.376953125" right="0.498046875" top="0" bottom="1"/>
</Texture>
<Texture name="$parentLeft" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="0"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTopLeft" relativePoint="BOTTOMLEFT"/>
<Anchor point="BOTTOMLEFT" relativeTo="$parentBottomLeft" relativePoint="TOPLEFT"/>
</Anchors>
<TexCoords left="0.001953125" right="0.125" top="0" bottom="1"/>
</Texture>
<Texture name="$parentRight" file="Interface\AddOns\!DebugTools\media\UI-GearManager-Border">
<Size x="64" y="0"/>
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="$parentTopRight" relativePoint="BOTTOMRIGHT"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentBottomRight" relativePoint="TOPRIGHT"/>
</Anchors>
<TexCoords left="0.1171875" right="0.2421875" top="0" bottom="1"/>
</Texture>
</Layer>
<Layer level="OVERLAY">
<FontString name="$parentTitle" inherits="GameFontNormal" text="EVENTS_LABEL">
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="12" y="-8"/>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset x="-32" y="-8"/>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button name="$parentCloseButton" inherits="UIPanelCloseButton">
<Size>
<AbsDimension x="32" y="32"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
<Offset x="2" y="1"/>
</Anchor>
</Anchors>
</Button>
<Frame name="$parentTitleButton">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTitleBG"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentTitleBG"/>
</Anchors>
<Frames>
<Frame name="$parentHighlight" setAllPoints="true" hidden="true">
<Layers>
<Layer level="OVERLAY">
<Texture file="Interface\Buttons\UI-ListBox-Highlight" setAllPoints="true">
<Color r="1" g="1" b="1" a="0.4"/>
</Texture>
</Layer>
</Layers>
</Frame>
</Frames>
<Scripts>
<OnLoad>
this:RegisterForDrag("LeftButton");
</OnLoad>
<OnDragStart>
local eventTraceFrame = _G["EventTraceFrame"];
eventTraceFrame.moving = true;
eventTraceFrame:StartMoving();
</OnDragStart>
<OnDragStop>
local eventTraceFrame = _G["EventTraceFrame"];
eventTraceFrame.moving = nil;
eventTraceFrame:StopMovingOrSizing();
</OnDragStop>
</Scripts>
</Frame>
<Slider name="$parentScroll">
<Size x="16" y="0"/>
<Anchors>
<Anchor point="TOPRIGHT">
<Offset x="-7" y="-28"/>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset x="-7" y="10"/>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentBG" setAllPoints="true">
<Color r=".8" g=".8" b="1" a="0.1"/>
</Texture>
</Layer>
</Layers>
<Scripts>
<OnLoad>
this:SetFrameLevel(self:GetFrameLevel() + 1);
this:SetValue(0);
this:SetValueStep(1);
</OnLoad>
</Scripts>
<ThumbTexture name="$parentThumb" file="Interface\Buttons\UI-ScrollBar-Knob">
<Size x="16" y="16"/>
<TexCoords left="0.25" right="0.75" top="0.25" bottom="0.75"/>
</ThumbTexture>
</Slider>
</Frames>
<Scripts>
<OnLoad>
EventTraceFrame_OnLoad(this);
</OnLoad>
<OnShow>
EventTraceFrame_OnShow(this);
</OnShow>
<OnEvent>
EventTraceFrame_OnEvent(this, event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
</OnEvent>
<OnUpdate>
EventTraceFrame_OnUpdate(this, arg1);
</OnUpdate>
<OnKeyUp>
EventTraceFrame_OnKeyUp(this, arg1);
</OnKeyUp>
</Scripts>
</Frame>
<Frame name="ScriptErrorsFrame" inherits="UIPanelDialogTemplate" frameStrata="TOOLTIP" movable="true" enableMouse="true" clampedToScreen="true" hidden="true" toplevel="true">
<Size x="384" y="260"/>
<Anchors>
<Anchor point="CENTER"/>
</Anchors>
<Layers>
<Layer level="ARTWORK">
<FontString name="$parentIndexLabel" font="GameFontNormalCenter">
<Size x="70" y="16"/>
<Anchors>
<Anchor point="BOTTOM">
<Offset x="0" y="16"/>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Frame name="$parentTitleButton">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentTitleBG"/>
<Anchor point="BOTTOMRIGHT" relativeTo="$parentTitleBG"/>
</Anchors>
<Scripts>
<OnLoad>
this:RegisterForDrag("LeftButton");
</OnLoad>
<OnDragStart>
local frame = _G["ScriptErrorsFrame"];
frame.moving = true;
frame:StartMoving();
</OnDragStart>
<OnDragStop>
local frame = _G["ScriptErrorsFrame"];
frame.moving = nil;
frame:StopMovingOrSizing();
</OnDragStop>
</Scripts>
</Frame>
<ScrollFrame name="$parentScrollFrame" inherits="UIPanelScrollFrameTemplate">
<Size x="343" y="194"/>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="12" y="-30"/>
</Anchor>
</Anchors>
<ScrollChild>
<EditBox name="$parentText" multiLine="true" letters="4000" autoFocus="false">
<Size x="343" y="194"/>
<Scripts>
<OnCursorChanged>
ScrollingEdit_OnCursorChanged(this);
</OnCursorChanged>
<OnUpdate>
ScrollingEdit_OnUpdate(this, arg1, this:GetParent());
</OnUpdate>
<OnEditFocusGained>
this:HighlightText(0);
</OnEditFocusGained>
<OnEscapePressed>
this:ClearFocus();
</OnEscapePressed>
</Scripts>
<FontString inherits="GameFontHighlightSmall"/>
</EditBox>
</ScrollChild>
</ScrollFrame>
<Button name="$parentReload" inherits="UIPanelButtonTemplate" text="RELOADUI">
<Size x="96" y="24"/>
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent">
<Offset x="10" y="12" />
</Anchor>
</Anchors>
<Scripts>
<OnClick>
ReloadUI();
</OnClick>
</Scripts>
</Button>
<Button name="$parentPrevious" id="2">
<Size x="32" y="32"/>
<Anchors>
<Anchor point="BOTTOM">
<Offset x="-50" y="8"/>
</Anchor>
</Anchors>
<NormalTexture file="Interface\Buttons\UI-SpellbookIcon-PrevPage-Up"/>
<PushedTexture file="Interface\Buttons\UI-SpellbookIcon-PrevPage-Down"/>
<DisabledTexture file="Interface\Buttons\UI-SpellbookIcon-PrevPage-Disabled"/>
<HighlightTexture file="Interface\Buttons\UI-Common-MouseHilight" alphaMode="ADD"/>
<Scripts>
<OnClick>
ScriptErrorsFrameButton_OnClick(this);
</OnClick>
</Scripts>
</Button>
<Button name="$parentNext" id="1">
<Size x="32" y="32" />
<Anchors>
<Anchor point="BOTTOM">
<Offset x="50" y="8"/>
</Anchor>
</Anchors>
<NormalTexture file="Interface\Buttons\UI-SpellbookIcon-NextPage-Up"/>
<PushedTexture file="Interface\Buttons\UI-SpellbookIcon-NextPage-Down"/>
<DisabledTexture file="Interface\Buttons\UI-SpellbookIcon-NextPage-Disabled"/>
<HighlightTexture file="Interface\Buttons\UI-Common-MouseHilight" alphaMode="ADD"/>
<Scripts>
<OnClick>
ScriptErrorsFrameButton_OnClick(this);
</OnClick>
</Scripts>
</Button>
<Button name="$parentCloseButton" inherits="UIPanelButtonTemplate" text="CLOSE">
<Size x="96" y="24"/>
<Anchors>
<Anchor point="BOTTOMRIGHT">
<Offset x="-8" y="12"/>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HideUIPanel(this:GetParent());
</OnClick>
</Scripts>
</Button>
</Frames>
<Scripts>
<OnLoad>
ScriptErrorsFrame_OnLoad(this);
</OnLoad>
<OnShow>
ScriptErrorsFrame_OnShow(this);
</OnShow>
</Scripts>
</Frame>
<GameTooltip name="FrameStackTooltip" frameStrata="TOOLTIP" hidden="true" inherits="GameTooltipTemplate">
<Scripts>
<OnLoad>
FrameStackTooltip_OnLoad(this);
</OnLoad>
<OnShow>
FrameStackTooltip_OnShow(this);
</OnShow>
<OnEnter>
FrameStackTooltip_OnEnter(this);
</OnEnter>
<OnUpdate>
FrameStackTooltip_OnUpdate(this, arg1);
</OnUpdate>
<OnEvent>
FrameStackTooltip_OnEvent(this, arg);
</OnEvent>
</Scripts>
</GameTooltip>
<GameTooltip name="EventTraceTooltip" frameStrata="TOOLTIP" hidden="true" parent="EventTraceFrame" inherits="GameTooltipTemplate">
<Scripts>
<OnLoad>
DebugTooltip_OnLoad(this)
</OnLoad>
</Scripts>
</GameTooltip>
<Frame name="FrameStackHighlight" frameStrata="TOOLTIP">
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentTexture">
<Color r="0.0" g="0.8" b="0.0" a=".4"/>
</Texture>
</Layer>
</Layers>
</Frame>
</Ui>
+197
View File
@@ -0,0 +1,197 @@
-- Cache global variables
local mod = math.mod
local pairs = pairs
local tostring = tostring
local format, match = string.format, string.match
local getn, setn, tinsert, tsort, twipe = table.getn, table.setn, table.insert, table.sort, table.wipe
-- WoW API
local GetTime = GetTime
DEBUG_FRAMESTACK = "Frame Stack"
EVENTS_LABEL = "Events"
RELOADUI = "Reload UI"
local eventList = {}
local function EventHandler_OnEvent()
tinsert(eventList, GetTime())
end
local eventHandler = CreateFrame("Frame", "EventHandler", UIParent)
eventHandler:SetScript("OnEvent", EventHandler_OnEvent)
function GetCurrentEventID()
return getn(eventList)
end
function GetEventTime(eventID)
return eventList[eventID]
end
function EventHandler_Enable()
eventHandler:RegisterAllEvents()
end
function EventHandler_Disable()
eventHandler:UnregisterAllEvents()
twipe(eventList)
end
local strataLevels = {
["UNKNOWN"] = 1,
["BACKGROUND"] = 2,
["LOW"] = 3,
["MEDIUM"] = 4,
["HIGH"] = 5,
["DIALOG"] = 6,
["FULLSCREEN"] = 7,
["FULLSCREEN_DIALOG"] = 8,
["TOOLTIP"] = 9,
}
local colorSpecs = {
"|cff6699ff",
"|cff88dddd"
}
local activeColorSpecs = {
"|cffff9966",
"|cffdddd88"
}
local hiddenColorSpecs = {
"|cff666666",
"|cff888888"
}
local frameStackStrata = {}
local frameStackLevels = {}
local frameStackActive = {}
local frameStackList = {}
local function FrameStackSort(b, a)
local sa = strataLevels[frameStackStrata[a]] or -1
local sb = strataLevels[frameStackStrata[b]] or -1
if sa < sb then
return true
elseif sa > sb then
return
end
local sa = frameStackLevels[a] or -1
local sb = frameStackLevels[b] or -1
if sa < sb then
return true
elseif sa > sb then
return
end
return a < b
end
function UpdateFrameStack(tooltip, showHidden)
local x, y = GetCursorPosition()
for i = 1, getn(frameStackList) do
frameStackList[i] = nil
end
setn(frameStackList, 0)
for k in pairs(frameStackLevels) do
frameStackLevels[k] = nil
frameStackStrata[k] = nil
frameStackActive[k] = nil
end
local f
local nf = EnumerateFrames()
while nf do
f, nf = nf, EnumerateFrames(nf)
local es = f:GetEffectiveScale() or 1
local Fl, Fb, Fr, Ft = f:GetLeft(), f:GetBottom(), f:GetRight(), f:GetTop()
Fl = Fl or -1
Fb = Fb or -1
Fr = Fl + (Fr or -1)
Ft = Fb + (Ft or -1)
if (x >= Fl * es) and (x <= Fr * es) and (y >= Fb * es) and (y <= Ft * es) then
local n = f:GetName()
if n and _G[n] == f then
-- Name is ok
elseif n then
n = tostring(f) .. " (" .. n .. ")"
else
n = tostring(f)
end
local s = f:GetFrameStrata() or "nil"
local l = f:GetFrameLevel() or -1
local a
if f:IsVisible() then
if f:IsMouseEnabled() then
a = activeColorSpecs
else
a = colorSpecs
end
elseif showHidden then
a = hiddenColorSpecs
else
a = nil
end
if a then
frameStackLevels[n] = l
frameStackStrata[n] = s
frameStackActive[n] = a
tinsert(frameStackList, n)
end
end
end
frameStackList[getn(frameStackList) + 1] = nil
tsort(frameStackList, FrameStackSort)
tooltip:ClearLines()
tooltip:AddDoubleLine(DEBUG_FRAMESTACK, format("(%.2f,%.2f)", x, y), 1, 1, 1, 1, .82, 0)
local cs, os, ol = 1, nil, nil
local cn = getn(colorSpecs)
local highlighted
local highlightFrame = GetMouseFocus()
for _, n in ipairs(frameStackList) do
local s, l, a = frameStackStrata[n], frameStackLevels[n], frameStackActive[n]
if os ~= s then
tooltip:AddLine(s, 1, 1, 1)
os = s
ol = nil
cs = 1
end
if l ~= ol then
cs = mod(cs, cn) + 1
ol = l
end
if not highlighted then
local frameName = _G[n] or match(n, "%((.+)%)$") or n
if frameName and frameName == highlightFrame then
tooltip:AddLine("-->" .. (a[cs] or "|cff444444") .. "<" .. l .. "> " .. n .. "|r")
highlighted = true
else
tooltip:AddLine(" " .. (a[cs] or "|cff444444") .. "<" .. l .. "> " .. n .. "|r")
end
else
tooltip:AddLine(" " .. (a[cs] or "|cff444444") .. "<" .. l .. "> " .. n .. "|r")
end
end
tooltip:Show()
return highlightFrame
end
+387
View File
@@ -0,0 +1,387 @@
------------------------------------------------------------------------------
-- Dump.lua
--
-- Contributed by Iriel, Esamynn and Kirov from DevTools v1.11
-- /dump Implementation
--
-- Globals: DevTools, SLASH_DEVTOOLSDUMP1, DevTools_Dump, DevTools_RunDump
-- Globals: DEVTOOLS_MAX_ENTRY_CUTOFF, DEVTOOLS_LONG_STRING_CUTOFF
-- Globals: DEVTOOLS_DEPTH_CUTOFF, DEVTOOLS_INDENT
-- Globals: DEVTOOLS_USE_TABLE_CACHE, DEVTOOLS_USE_FUNCTION_CACHE
-- Globals: DEVTOOLS_USE_USERDATA_CACHE
---------------------------------------------------------------------------
local DT = {};
DEVTOOLS_MAX_ENTRY_CUTOFF = 30; -- Maximum table entries shown
DEVTOOLS_LONG_STRING_CUTOFF = 200; -- Maximum string size shown
DEVTOOLS_DEPTH_CUTOFF = 10; -- Maximum table depth
DEVTOOLS_USE_TABLE_CACHE = true; -- Look up table names
DEVTOOLS_USE_FUNCTION_CACHE = true; -- Look up function names
DEVTOOLS_USE_USERDATA_CACHE = true; -- Look up userdata names
DEVTOOLS_INDENT=' '; -- Indentation string
local DEVTOOLS_TYPE_COLOR="|cff88ff88";
local DEVTOOLS_TABLEREF_COLOR="|cffffcc00";
local DEVTOOLS_CUTOFF_COLOR="|cffff0000";
local DEVTOOLS_TABLEKEY_COLOR="|cff88ccff";
local FORMATS = {};
-- prefix type suffix
FORMATS["opaqueTypeVal"] = "%s" .. DEVTOOLS_TYPE_COLOR .. "<%s>|r%s";
-- prefix type name suffix
FORMATS["opaqueTypeValName"] = "%s" .. DEVTOOLS_TYPE_COLOR .. "<%s %s>|r%s";
-- type
FORMATS["opaqueTypeKey"] = "<%s>";
-- type name
FORMATS["opaqueTypeKeyName"] = "<%s %s>";
-- value
FORMATS["bracketTableKey"] = "[%s]";
-- prefix value
FORMATS["tableKeyAssignPrefix"] = DEVTOOLS_TABLEKEY_COLOR .. "%s%s|r=";
-- prefix cutoff
FORMATS["tableEntriesSkipped"] = "%s" .. DEVTOOLS_CUTOFF_COLOR .. "<skipped %s>|r";
-- prefix suffix
FORMATS["tableTooDeep"] = "%s" .. DEVTOOLS_CUTOFF_COLOR .. "<table (too deep)>|r%s";
-- prefix value suffix
FORMATS["simpleValue"] = "%s%s%s";
-- prefix tablename suffix
FORMATS["tableReference"] = "%s" .. DEVTOOLS_TABLEREF_COLOR .. "%s|r%s";
-- Grab a copy various oft-used functions
local rawget = rawget;
local type = type;
local string_len = string.len;
local string_sub = string.sub;
local string_gsub = string.gsub;
local string_format = string.format;
local string_match = string.match;
local function WriteMessage(msg)
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
local function prepSimple(val, context)
local valType = type(val);
if (valType == "nil") then
return "nil";
elseif (valType == "number") then
return val;
elseif (valType == "boolean") then
if (val) then
return "true";
else
return "false";
end
elseif (valType == "string") then
local l = string_len(val);
if ((l > DEVTOOLS_LONG_STRING_CUTOFF) and
(DEVTOOLS_LONG_STRING_CUTOFF > 0)) then
local more = l - DEVTOOLS_LONG_STRING_CUTOFF;
val = string_sub(val, 1, DEVTOOLS_LONG_STRING_CUTOFF);
return string_gsub(string_format("%q...+%s",val,more),"[|]", "||");
else
return string_gsub(string_format("%q",val),"[|]", "||");
end
elseif (valType == "function") then
local fName = context:GetFunctionName(val);
if (fName) then
return string_format(FORMATS.opaqueTypeKeyName, valType, fName);
else
return string_format(FORMATS.opaqueTypeKey, valType);
end
return string_format(FORMATS.opaqueTypeKey, valType);
elseif (valType == "userdata") then
local uName = context:GetUserdataName(val);
if (uName) then
return string_format(FORMATS.opaqueTypeKeyName, valType, uName);
else
return string_format(FORMATS.opaqueTypeKey, valType);
end
elseif (valType == 'table') then
local tName = context:GetTableName(val);
if (tName) then
return string_format(FORMATS.opaqueTypeKeyName, valType, tName);
else
return string_format(FORMATS.opaqueTypeKey, valType);
end
end
error("Bad type '" .. valType .. "' to prepSimple");
end
local function prepSimpleKey(val, context)
local valType = type(val);
if (valType == "string") then
local l = string_len(val);
if ((l <= DEVTOOLS_LONG_STRING_CUTOFF) or
(DEVTOOLS_LONG_STRING_CUTOFF <= 0)) then
if (string_match(val, "^[a-zA-Z_][a-zA-Z0-9_]*$")) then
return val;
end
end
end
return string_format(FORMATS.bracketTableKey, prepSimple(val, context));
end
local function DevTools_InitFunctionCache(context)
local ret = {};
for _,k in ipairs(DT.functionSymbols) do
local v = getglobal(k);
if (type(v) == 'function') then
ret[v] = '[' .. k .. ']';
end
end
for k,v in pairs(getfenv(0)) do
if (type(v) == 'function') then
if (not ret[v]) then
ret[v] = '[' .. k .. ']';
end
end
end
return ret;
end
local function DevTools_InitUserdataCache(context)
local ret = {};
for _,k in ipairs(DT.userdataSymbols) do
local v = getglobal(k);
if (type(v) == 'table') then
local u = rawget(v,0);
if (type(u) == 'userdata') then
ret[u] = k .. '[0]';
end
end
end
for k,v in pairs(getfenv(0)) do
if (type(v) == 'table') then
local u = rawget(v, 0);
if (type(u) == 'userdata') then
if (not ret[u]) then
ret[u] = k .. '[0]';
end
end
end
end
return ret;
end
local function DevTools_Cache_Nil(self, value, newName)
return nil;
end
local function DevTools_Cache_Function(self, value, newName)
if (not self.fCache) then
self.fCache = DevTools_InitFunctionCache(self);
end
local name = self.fCache[value];
if ((not name) and newName) then
self.fCache[value] = newName;
end
return name;
end
local function DevTools_Cache_Userdata(self, value, newName)
if (not self.uCache) then
self.uCache = DevTools_InitUserdataCache(self);
end
local name = self.uCache[value];
if ((not name) and newName) then
self.uCache[value] = newName;
end
return name;
end
local function DevTools_Cache_Table(self, value, newName)
if (not self.tCache) then
self.tCache = {};
end
local name = self.tCache[value];
if ((not name) and newName) then
self.tCache[value] = newName;
end
return name;
end
local function DevTools_Write(self, msg)
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
local DevTools_DumpValue;
local function DevTools_DumpTableContents(val, prefix, firstPrefix, context)
local showCount = 0;
local oldDepth = context.depth;
local oldKey = context.key;
-- Use this to set the cache name
context:GetTableName(val, oldKey or 'value');
local iter = pairs(val);
local nextK, nextV = iter(val, nil);
while (nextK) do
local k,v = nextK, nextV;
nextK, nextV = iter(val, k);
showCount = showCount + 1;
if ((showCount <= DEVTOOLS_MAX_ENTRY_CUTOFF) or (DEVTOOLS_MAX_ENTRY_CUTOFF <= 0)) then
local prepKey = prepSimpleKey(k, context);
if (oldKey == nil) then
context.key = prepKey;
elseif (string_sub(prepKey, 1, 1) == "[") then
context.key = oldKey .. prepKey
else
context.key = oldKey .. "." .. prepKey
end
context.depth = oldDepth + 1;
local rp = string_format(FORMATS.tableKeyAssignPrefix, firstPrefix, prepKey);
firstPrefix = prefix;
DevTools_DumpValue(v, prefix, rp, (nextK and ",") or '', context);
end
end
local cutoff = showCount - DEVTOOLS_MAX_ENTRY_CUTOFF;
if ((cutoff > 0) and (DEVTOOLS_MAX_ENTRY_CUTOFF > 0)) then
context:Write(string_format(FORMATS.tableEntriesSkipped,firstPrefix, cutoff));
end
context.key = oldKey;
context.depth = oldDepth;
return (showCount > 0)
end
-- Return the specified value
function DevTools_DumpValue(val, prefix, firstPrefix, suffix, context)
local valType = type(val);
if (valType == "userdata") then
local uName = context:GetUserdataName(val, 'value');
if (uName) then
context:Write(string_format(FORMATS.opaqueTypeValName, firstPrefix, valType, uName, suffix));
else
context:Write(string_format(FORMATS.opaqueTypeVal, firstPrefix, valType, suffix));
end
return;
elseif (valType == "function") then
local fName = context:GetFunctionName(val, 'value');
if (fName) then
context:Write(string_format(FORMATS.opaqueTypeValName, firstPrefix, valType, fName, suffix));
else
context:Write(string_format(FORMATS.opaqueTypeVal, firstPrefix, valType, suffix));
end
return;
elseif (valType ~= "table") then
context:Write(string_format(FORMATS.simpleValue, firstPrefix,prepSimple(val, context), suffix));
return;
end
local cacheName = context:GetTableName(val);
if (cacheName) then
context:Write(string_format(FORMATS.tableReference, firstPrefix, cacheName, suffix));
return;
end
if ((context.depth >= DEVTOOLS_DEPTH_CUTOFF) and (DEVTOOLS_DEPTH_CUTOFF > 0)) then
context:Write(string_format(FORMATS.tableTooDeep, firstPrefix, suffix));
return;
end
firstPrefix = firstPrefix .. "{";
local oldPrefix = prefix;
prefix = prefix .. DEVTOOLS_INDENT;
context:Write(firstPrefix);
firstPrefix = prefix;
local anyContents = DevTools_DumpTableContents(val, prefix, firstPrefix, context);
context:Write(oldPrefix .. "}" .. suffix);
end
local function Pick_Cache_Function(func, setting)
if (setting) then
return func;
else
return DevTools_Cache_Nil;
end
end
function DevTools_RunDump(value, context)
local prefix = "";
local firstPrefix = prefix;
local valType = type(value);
if (type(value) == 'table') then
local any =
DevTools_DumpTableContents(value, prefix, firstPrefix, context);
if (context.Result) then
return context:Result();
end
if (not any) then
context:Write("empty result");
end
return;
end
DevTools_DumpValue(value, '', '', '', context);
if (context.Result) then
return context:Result();
end
end
-- Dump the specified list of value
function DevTools_Dump(value, startKey)
local context = {
depth = 0,
key = startKey,
};
context.GetTableName = Pick_Cache_Function(DevTools_Cache_Table, DEVTOOLS_USE_TABLE_CACHE);
context.GetFunctionName = Pick_Cache_Function(DevTools_Cache_Function, DEVTOOLS_USE_FUNCTION_CACHE);
context.GetUserdataName = Pick_Cache_Function(DevTools_Cache_Userdata, DEVTOOLS_USE_USERDATA_CACHE);
context.Write = DevTools_Write;
DevTools_RunDump(value, context);
end
function DevTools_DumpCommand(msg, editBox)
if (string_match(msg,"^[A-Za-z_][A-Za-z0-9_]*$")) then
WriteMessage("Dump: " .. msg);
local val = _G[msg];
local tmp = {};
if (val == nil) then
local key = string_format(FORMATS.tableKeyAssignPrefix, '', prepSimpleKey(msg, {}));
WriteMessage(key .. "nil,");
else
tmp[msg] = val;
end
DevTools_Dump(tmp);
return;
end
WriteMessage("Dump: value=" .. msg);
local func,err = loadstring("return " .. msg);
if (not func) then
WriteMessage("Dump: ERROR: " .. err);
else
DevTools_Dump({func()}, "value");
end
end
DT.functionSymbols = {};
DT.userdataSymbols = {};
local funcSyms = DT.functionSymbols;
local userSyms = DT.userdataSymbols;
for k,v in pairs(getfenv(0)) do
if (type(v) == 'function') then
table.insert(funcSyms, k);
elseif (type(v) == 'table') then
if (type(rawget(v,0)) == 'userdata') then
table.insert(userSyms, k);
end
end
end
Binary file not shown.