Mercurial > wow > reaction
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 |