Mercurial > wow > devian
view Devent.lua @ 111:5c591d9b4029 tip
Added tag v8.0.1-20181807-1 for changeset 930922e1ec5b
author | Nenue |
---|---|
date | Wed, 18 Jul 2018 15:02:50 -0400 |
parents | 7a36f5a92f0a |
children |
line wrap: on
line source
--- Devian - Devent.lua -- @file-author@ -- @project-revision@ @project-hash@ -- @file-revision@ @file-hash@ -- Created: 4/12/2017 5:07 PM -- Event tracer -- local tooltip = GameTooltip local traces = {} -- frames local eventLog = {} -- events received local selectedEvents = {} -- events selected local print = function(...) print('Devent', ...) end --print('Devent script') --print('Devent:OnLoad()') SLASH_DTRACE1 = "/dtrace" SlashCmdList.DTRACE = function(args) if #traces == 0 then local trace = CreateFrame('Frame', 'DevianTraceLog'.. (#traces+1), UIParent, 'DevianEventTraceTemplate') tinsert(traces, trace) trace:Setup() end traces[1]:Show() end DevianEventTraceMixin = { events = {}, selected = {}, } local tracer = DevianEventTraceMixin function tracer:OnLoad() self:SetMaxResize(GetScreenWidth(), GetScreenHeight()) self:SetMinResize(100, 24) self:EnableMouse(true) self:RegisterForDrag('LeftButton') self:SetMovable(true) self:SetResizable(true) self:SetClampedToScreen(true) self:SetFont("Interface\\Addons\\Devian\\font\\SourceCodePro-Regular.ttf", 13, 'NORMAL') self:SetJustifyH('LEFT') self:SetHyperlinksEnabled(true) self:SetPoint('CENTER') self:SetSize(400,400) end function tracer:Setup(info) if not info then self:RegisterAllEvents() return end for _, event in ipairs(self.events) do self:UnregisterEvent(event) end for _, event in ipairs(info.events) do self:RegisterEvent(event) end end function tracer:OnHyperlinkEnter(linkdata, link) local messageID = tonumber(linkdata:match('%d+')) if messageID and self.events[messageID] then local data = self.events[messageID] tooltip:SetOwner(self, 'ANCHOR_RIGHT') tooltip:AddLine(data.event) for i, arg in ipairs(data.args) do local argtype = data.argtypes[i] tooltip:AddLine('|cFFAAAAAA'..tostring(argtype)..'|r ' .. tostring(arg)) end tooltip:Show() end end function tracer:OnHyperlinkLeave(linkdata, link) end function tracer:OnHyperlinkClick(linkdata, link) local messageID = tonumber(linkdata:match('%d+')) if messageID and self.events[messageID] then local data = self.events[messageID] if self.selected[data.event] then self.selected[data.event] = nil else self.selected[data.event] = true end end self:Update() end function tracer:OnLeave() if tooltip:IsOwned(self) then tooltip:Hide() end end function tracer:OnEvent(event, ...) local entry = { index = #self.events + 1, ts = time(), event = event, args = {}, argtypes = {} } for i = 1, select('#', ...) do local arg = select(i,...) entry.argtypes[i] = type(arg) entry.args[i] = tostring(arg) end self.events[entry.index] = entry self:Update() end function tracer:Update() local startingLine = self.CurrentLine or #self.events local prevLine for i = 0, 20 do local index = startingLine - i local line = self.lines[i] if not line then line = self:CreateFontString('EventLine'..i) line:SetFont([[Fonts\ARIALN__.TTF]], 14, 'THIN') line:SetTextColor(1,1,1) self.lines[i] = line end local entry = self.events[index] if entry then line:SetText('|Hdevent:'..entry.index..'|h'..entry.event..'|h') line:ClearAllPoints() if prevLine then line:SetPoint('BOTTOMLEFT', prevLine, 'TOPLEFT', 0, 0) else line:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT') end line:Show() prevLine = line else line:Hide() end end end