Files
coa-tsm/TradeSkillMaster/Core/Events.lua
T
Andrew6810 f3e579cb57 init
2022-11-05 21:19:42 -07:00

63 lines
2.0 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- http://www.curse.com/addons/wow/tradeskill-master --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- TSM's event handler.
local TSM = select(2, ...)
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster")
local private = {}
TSMAPI:RegisterForTracing(private, "TradeSkillMaster.Events_private")
private.objects = {}
private.eventObjectCallbacks = {
SetCallbackAnyEvent = function(self, callback)
self._anyEventCallback = callback
end,
SetCallback = function(self, event, callback, matchAll)
self._callbacks[event] = {func = callback, matchAll = (matchAll and true or false)} -- need to convert matchAll to a boolean
end,
ClearAllCallbacks = function(self)
wipe(self._callbacks)
end
}
function TSMAPI:GetEventObject()
local obj = {}
obj._callbacks = {}
obj._anyEventCallback = nil
for name, func in pairs(private.eventObjectCallbacks) do
obj[name] = func
end
tinsert(private.objects, obj)
return obj
end
function private:OnEventFired(event, arg, fullEvent)
local isPartial = event ~= fullEvent and true or false
for _, obj in ipairs(private.objects) do
if not isPartial and obj._anyEventCallback then
obj._anyEventCallback(fullEvent, arg)
end
local callback = obj._callbacks[event]
if callback then
if isPartial == callback.matchAll then
callback.func(fullEvent, arg)
end
end
end
end
function TSMAPI:FireEvent(event, arg)
local parts = {(":"):split(event)}
for i=1, #parts do
local partialEvent = table.concat(parts, ":", 1, i)
private:OnEventFired(partialEvent, arg, event)
end
end