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
|