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