Mercurial > wow > reaction
comparison modules/ReAction_PetAction/ReAction_PetAction.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 | 7e09c02ae620 |
comparison
equal
deleted
inserted
replaced
27:f1e838841ce1 | 28:21bcaf8215ff |
---|---|
1 --[[ | |
2 ReAction Pet Action Bar module | |
3 | |
4 --]] | |
5 | |
6 -- local imports | |
7 local ReAction = ReAction | |
8 local L = ReAction.L | |
9 local _G = _G | |
10 | |
11 -- module declaration | |
12 local moduleID = "PetAction" | |
13 local module = ReAction:NewModule( moduleID ) | |
14 | |
15 | |
16 -- module methods | |
17 function module:OnInitialize() | |
18 self.db = ReAction.db:RegisterNamespace( moduleID, | |
19 { | |
20 profile = { | |
21 buttons = { } | |
22 } | |
23 } | |
24 ) | |
25 | |
26 self.buttons = { } | |
27 end | |
28 | |
29 function module:OnEnable() | |
30 end | |
31 | |
32 function module:OnDisable() | |
33 end | |
34 | |
35 function module:GetGlobalBarOptions(opts) | |
36 if self.globalBarOpts == nil then | |
37 self.globalBarOpts = { | |
38 newActionBar = { | |
39 type = "execute", | |
40 name = L["New Pet Action Bar"], | |
41 desc = L["Create a new bar of pet action buttons"], | |
42 func = function() | |
43 ReAction:CreateBar() | |
44 end, | |
45 disabled = InCombatLockdown, | |
46 } | |
47 } | |
48 end | |
49 return self.globalBarOpts | |
50 end | |
51 | |
52 | |
53 -- use-count of action IDs | |
54 local ActionIDList = setmetatable( {}, { | |
55 __index = function(self, idx) | |
56 if idx == nil then | |
57 for i = 1, 10 do | |
58 if rawget(self,i) == nil then | |
59 rawset(self,i,1) | |
60 return i | |
61 end | |
62 end | |
63 else | |
64 local c = rawget(self,idx) or 0 | |
65 rawset(self,idx,c+1) | |
66 return idx | |
67 end | |
68 end, | |
69 __newindex = function(self,idx,value) | |
70 if value == nil then | |
71 value = rawget(self,idx) | |
72 if value == 1 then | |
73 value = nil | |
74 elseif value then | |
75 value = value - 1 | |
76 end | |
77 end | |
78 rawset(self,idx,value) | |
79 end | |
80 }) | |
81 | |
82 | |
83 -- button class methods | |
84 local Button = { } | |
85 | |
86 local function Constructor( self, bar, idx, config ) | |
87 self.bar, self.idx, self.config = bar, idx, config | |
88 | |
89 local barFrame = bar:GetFrame() | |
90 | |
91 self.name = config.name or "ReAction_"..bar:GetName().."_Pet_"..idx | |
92 config.actionID = ActionIDList[config.actionID] -- gets a free one if none configured | |
93 | |
94 local f = CreateFrame("CheckButton", self.name, barFrame, "PetActionButtonTemplate") | |
95 f:SetID(config.actionID) -- PetActionButtonTemplate isn't a proper SecureActionButton (question: is this protected? does it cause taint?) | |
96 self.frame = f | |
97 barFrame:SetAttribute("addchild",f) | |
98 | |
99 -- auto show/hide when pet exists | |
100 -- this gets called once per button, which is inefficient but otherwise harmless | |
101 barFrame:SetAttribute("unit","pet") | |
102 RegisterUnitWatch(barFrame) | |
103 | |
104 self:Refresh(bar,idx) | |
105 end | |
106 | |
107 function Button:Destroy() | |
108 local f = self.frame | |
109 f:UnregisterAllEvents() | |
110 f:Hide() | |
111 f:SetParent(UIParent) | |
112 f:ClearAllPoints() | |
113 if self.name then | |
114 _G[self.name] = nil | |
115 end | |
116 ActionIDList[self.config.actionID] = nil | |
117 self.frame = nil | |
118 self.config = nil | |
119 self.bar = nil | |
120 end | |
121 | |
122 | |
123 -- export as a class-factory to module | |
124 module.BtnClass = { | |
125 new = function(self, ...) | |
126 local x = { } | |
127 for k,v in pairs(Button) do | |
128 x[k] = v | |
129 end | |
130 Constructor(x, ...) | |
131 return x | |
132 end | |
133 } |