/Tukui/modules/unitframes/core/oUF/events.lua
http://github.com/Asphyxia/Tukui · Lua · 81 lines · 73 code · 7 blank · 1 comment · 21 complexity · 1e393e906ed77044877beae1a0986456 MD5 · raw file
- local parent, ns = ...
- local oUF = ns.oUF
- local Private = oUF.Private
- local argcheck = Private.argcheck
- local error = Private.error
- local frame_metatable = Private.frame_metatable
- -- Events
- Private.OnEvent = function(self, event, ...)
- if(not self:IsShown()) then return end
- return self[event](self, event, ...)
- end
- local event_metatable = {
- __call = function(funcs, self, ...)
- for _, func in next, funcs do
- func(self, ...)
- end
- end,
- }
- local RegisterEvent = frame_metatable.__index.RegisterEvent
- function frame_metatable.__index:RegisterEvent(event, func)
- argcheck(event, 2, 'string')
- if(type(func) == 'string' and type(self[func]) == 'function') then
- func = self[func]
- end
- local curev = self[event]
- local kind = type(curev)
- if(curev and func) then
- if(kind == 'function' and curev ~= func) then
- self[event] = setmetatable({curev, func}, event_metatable)
- elseif(kind == 'table') then
- for _, infunc in next, curev do
- if(infunc == func) then return end
- end
- table.insert(curev, func)
- end
- elseif(self:IsEventRegistered(event)) then
- return
- else
- if(type(func) == 'function') then
- self[event] = func
- elseif(not self[event]) then
- return error("Style [%s] attempted to register event [%s] on unit [%s] with a handler that doesn't exist.", self.style, event, self.unit or 'unknown')
- end
- RegisterEvent(self, event)
- end
- end
- local UnregisterEvent = frame_metatable.__index.UnregisterEvent
- function frame_metatable.__index:UnregisterEvent(event, func)
- argcheck(event, 2, 'string')
- local curev = self[event]
- if(type(curev) == 'table' and func) then
- for k, infunc in next, curev do
- if(infunc == func) then
- table.remove(curev, k)
- local n = #curev
- if(n == 1) then
- local _, handler = next(curev)
- self[event] = handler
- elseif(n == 0) then
- UnregisterEvent(self, event)
- end
- break
- end
- end
- elseif(curev == func) then
- self[event] = nil
- UnregisterEvent(self, event)
- end
- end