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