Mercurial > wow > reaction
view lib/AceEvent-3.0/AceEvent-3.0.lua @ 28:21bcaf8215ff
- converted to Ace3
- rearranged file layout
- configGUI menus not working right now
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Mon, 17 Mar 2008 18:24:53 +0000 |
parents | |
children |
line wrap: on
line source
--[[ $Id: AceEvent-3.0.lua 60131 2008-02-03 13:03:56Z nevcairiel $ ]] local MAJOR, MINOR = "AceEvent-3.0", 3 local AceEvent = LibStub:NewLibrary(MAJOR, MINOR) if not AceEvent then return end local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0") AceEvent.frame = AceEvent.frame or CreateFrame("Frame", "AceEvent30Frame") -- our event frame AceEvent.embeds = AceEvent.embeds or {} -- what objects embed this lib -- APIs and registry for blizzard events, using CallbackHandler lib if not AceEvent.events then AceEvent.events = CallbackHandler:New(AceEvent, "RegisterEvent", "UnregisterEvent", "UnregisterAllEvents") end function AceEvent.events:OnUsed(target, eventname) AceEvent.frame:RegisterEvent(eventname) end function AceEvent.events:OnUnused(target, eventname) AceEvent.frame:UnregisterEvent(eventname) end -- APIs and registry for IPC messages, using CallbackHandler lib if not AceEvent.messages then AceEvent.messages = CallbackHandler:New(AceEvent, "RegisterMessage", "UnregisterMessage", "UnregisterAllMessages" ) AceEvent.SendMessage = AceEvent.messages.Fire end --- embedding and embed handling local mixins = { "RegisterEvent", "UnregisterEvent", "RegisterMessage", "UnregisterMessage", "SendMessage", "UnregisterAllEvents", "UnregisterAllMessages", } -- AceEvent:Embed( target ) -- target (object) - target object to embed AceEvent in -- -- Embeds AceEvent into the target object making the functions from the mixins list available on target:.. function AceEvent:Embed(target) for k, v in pairs(mixins) do target[v] = self[v] end self.embeds[target] = true return target end -- AceEvent:OnEmbedDisable( target ) -- target (object) - target object that is being disabled -- -- Unregister all events messages etc when the target disables. -- this method should be called by the target manually or by an addon framework function AceEvent:OnEmbedDisable(target) target:UnregisterAllEvents() target:UnregisterAllMessages() end -- Script to fire blizzard events into the event listeners local events = AceEvent.events AceEvent.frame:SetScript("OnEvent", function(this, event, ...) events:Fire(event, ...) end) --- Finally: upgrade our old embeds for target, v in pairs(AceEvent.embeds) do AceEvent:Embed(target) end