annotate 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
rev   line source
flickerstreak@28 1 --[[ $Id: AceEvent-3.0.lua 60131 2008-02-03 13:03:56Z nevcairiel $ ]]
flickerstreak@28 2 local MAJOR, MINOR = "AceEvent-3.0", 3
flickerstreak@28 3 local AceEvent = LibStub:NewLibrary(MAJOR, MINOR)
flickerstreak@28 4
flickerstreak@28 5 if not AceEvent then return end
flickerstreak@28 6
flickerstreak@28 7 local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
flickerstreak@28 8
flickerstreak@28 9
flickerstreak@28 10 AceEvent.frame = AceEvent.frame or CreateFrame("Frame", "AceEvent30Frame") -- our event frame
flickerstreak@28 11 AceEvent.embeds = AceEvent.embeds or {} -- what objects embed this lib
flickerstreak@28 12
flickerstreak@28 13
flickerstreak@28 14 -- APIs and registry for blizzard events, using CallbackHandler lib
flickerstreak@28 15 if not AceEvent.events then
flickerstreak@28 16 AceEvent.events = CallbackHandler:New(AceEvent,
flickerstreak@28 17 "RegisterEvent", "UnregisterEvent", "UnregisterAllEvents")
flickerstreak@28 18 end
flickerstreak@28 19
flickerstreak@28 20 function AceEvent.events:OnUsed(target, eventname)
flickerstreak@28 21 AceEvent.frame:RegisterEvent(eventname)
flickerstreak@28 22 end
flickerstreak@28 23
flickerstreak@28 24 function AceEvent.events:OnUnused(target, eventname)
flickerstreak@28 25 AceEvent.frame:UnregisterEvent(eventname)
flickerstreak@28 26 end
flickerstreak@28 27
flickerstreak@28 28
flickerstreak@28 29 -- APIs and registry for IPC messages, using CallbackHandler lib
flickerstreak@28 30 if not AceEvent.messages then
flickerstreak@28 31 AceEvent.messages = CallbackHandler:New(AceEvent,
flickerstreak@28 32 "RegisterMessage", "UnregisterMessage", "UnregisterAllMessages"
flickerstreak@28 33 )
flickerstreak@28 34 AceEvent.SendMessage = AceEvent.messages.Fire
flickerstreak@28 35 end
flickerstreak@28 36
flickerstreak@28 37 --- embedding and embed handling
flickerstreak@28 38 local mixins = {
flickerstreak@28 39 "RegisterEvent", "UnregisterEvent",
flickerstreak@28 40 "RegisterMessage", "UnregisterMessage",
flickerstreak@28 41 "SendMessage",
flickerstreak@28 42 "UnregisterAllEvents", "UnregisterAllMessages",
flickerstreak@28 43 }
flickerstreak@28 44
flickerstreak@28 45 -- AceEvent:Embed( target )
flickerstreak@28 46 -- target (object) - target object to embed AceEvent in
flickerstreak@28 47 --
flickerstreak@28 48 -- Embeds AceEvent into the target object making the functions from the mixins list available on target:..
flickerstreak@28 49 function AceEvent:Embed(target)
flickerstreak@28 50 for k, v in pairs(mixins) do
flickerstreak@28 51 target[v] = self[v]
flickerstreak@28 52 end
flickerstreak@28 53 self.embeds[target] = true
flickerstreak@28 54 return target
flickerstreak@28 55 end
flickerstreak@28 56
flickerstreak@28 57 -- AceEvent:OnEmbedDisable( target )
flickerstreak@28 58 -- target (object) - target object that is being disabled
flickerstreak@28 59 --
flickerstreak@28 60 -- Unregister all events messages etc when the target disables.
flickerstreak@28 61 -- this method should be called by the target manually or by an addon framework
flickerstreak@28 62 function AceEvent:OnEmbedDisable(target)
flickerstreak@28 63 target:UnregisterAllEvents()
flickerstreak@28 64 target:UnregisterAllMessages()
flickerstreak@28 65 end
flickerstreak@28 66
flickerstreak@28 67 -- Script to fire blizzard events into the event listeners
flickerstreak@28 68 local events = AceEvent.events
flickerstreak@28 69 AceEvent.frame:SetScript("OnEvent", function(this, event, ...)
flickerstreak@28 70 events:Fire(event, ...)
flickerstreak@28 71 end)
flickerstreak@28 72
flickerstreak@28 73 --- Finally: upgrade our old embeds
flickerstreak@28 74 for target, v in pairs(AceEvent.embeds) do
flickerstreak@28 75 AceEvent:Embed(target)
flickerstreak@28 76 end