You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.8 KiB
85 lines
1.8 KiB
--[[
|
|
|
|
This file is part of 'Masque', an add-on for World of Warcraft. For bug reports,
|
|
suggestions and license information, please visit https://github.com/SFX-WoW/Masque.
|
|
|
|
* File...: Core\Callback.lua
|
|
* Author.: StormFX, JJSheets
|
|
|
|
Callback API
|
|
|
|
]]
|
|
|
|
local _, Core = ...
|
|
|
|
----------------------------------------
|
|
-- Lua API
|
|
---
|
|
|
|
local error, pairs, type = error, pairs, type
|
|
|
|
----------------------------------------
|
|
-- Locals
|
|
---
|
|
|
|
local Cache = {}
|
|
|
|
----------------------------------------
|
|
-- Callback
|
|
---
|
|
|
|
local Callback = {
|
|
|
|
-- Notifies an add-on of skin changes.
|
|
-- @ Core\Group: Group, SkinID, Backdrop, Shadow, Gloss, Colors, Disabled
|
|
Fire = function(self, Addon, ...)
|
|
local args = Cache[Addon]
|
|
if args then
|
|
for arg, func in pairs(args) do
|
|
if arg then
|
|
func(arg, ...)
|
|
else
|
|
func(...)
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
|
|
-- Registers an add-on to be notified of skin changes.
|
|
Register = function(self, Addon, func, arg)
|
|
Cache[Addon] = Cache[Addon] or {}
|
|
Cache[Addon][arg] = func
|
|
end,
|
|
}
|
|
|
|
----------------------------------------
|
|
-- Core
|
|
---
|
|
|
|
Core.Callback = setmetatable(Callback, {__call = Callback.Fire})
|
|
|
|
----------------------------------------
|
|
-- API
|
|
---
|
|
|
|
-- Registers a callback at the add-on level.
|
|
function Core.API:Register(Addon, func, arg)
|
|
if type(Addon) ~= "string" then
|
|
if Core.Debug then
|
|
error("Bad argument to API method 'Register'. 'Addon' must be a string.", 2)
|
|
end
|
|
return
|
|
elseif type(func) ~= "function" then
|
|
if Core.Debug then
|
|
error("Bad argument to API method 'Register'. 'func' must be a function.", 2)
|
|
end
|
|
return
|
|
elseif arg and type(arg) ~= "table" then
|
|
if Core.Debug then
|
|
error("Bad argument to API method 'Register'. 'arg' must be a table or nil.", 2)
|
|
end
|
|
return
|
|
end
|
|
|
|
Callback:Register(Addon, func, arg or false)
|
|
end
|
|
|