Mercurial > wow > reaction
comparison modules/Bag.lua @ 146:86564b5cbbff
Added bag button support
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Thu, 30 Apr 2009 16:51:43 +0000 |
parents | |
children | 901c91dc1bf2 |
comparison
equal
deleted
inserted
replaced
145:42cade25d40d | 146:86564b5cbbff |
---|---|
1 --[[ | |
2 ReAction Bag button module | |
3 | |
4 --]] | |
5 | |
6 -- local imports | |
7 local ReAction = ReAction | |
8 local L = ReAction.L | |
9 local _G = _G | |
10 | |
11 -- Bag button | |
12 local Button = ReAction.Button.Bag | |
13 | |
14 -- module declaration | |
15 local moduleID = "Bag" | |
16 local module = ReAction:NewModule( moduleID | |
17 -- mixins go here | |
18 ) | |
19 | |
20 -- libraries | |
21 local KB = LibStub("LibKeyBound-1.0") | |
22 | |
23 -- handlers | |
24 function module:OnInitialize() | |
25 self.db = ReAction.db:RegisterNamespace( moduleID, | |
26 { | |
27 profile = { | |
28 buttons = { } | |
29 } | |
30 } | |
31 ) | |
32 | |
33 self.buttons = { } | |
34 | |
35 ReAction.RegisterCallback(self, "OnCreateBar", "OnRefreshBar") | |
36 ReAction.RegisterCallback(self, "OnDestroyBar") | |
37 ReAction.RegisterCallback(self, "OnRefreshBar") | |
38 ReAction.RegisterCallback(self, "OnEraseBar") | |
39 ReAction.RegisterCallback(self, "OnRenameBar") | |
40 ReAction.RegisterCallback(self, "OnConfigModeChanged") | |
41 | |
42 KB.RegisterCallback(self, "LIBKEYBOUND_ENABLED") | |
43 KB.RegisterCallback(self, "LIBKEYBOUND_DISABLED") | |
44 KB.RegisterCallback(self, "LIBKEYBOUND_MODE_COLOR_CHANGED","LIBKEYBOUND_ENABLED") | |
45 end | |
46 | |
47 function module:OnEnable() | |
48 ReAction:RegisterBarType(L["Bag Bar"], | |
49 { | |
50 type = moduleID , | |
51 defaultButtonSize = 30, | |
52 defaultBarRows = 1, | |
53 defaultBarCols = 6, | |
54 defaultBarSpacing = 4 | |
55 }) | |
56 end | |
57 | |
58 function module:OnDisable() | |
59 ReAction:UnregisterBarType(L["Bag Bar"]) | |
60 end | |
61 | |
62 function module:OnDestroyBar(event, bar, name) | |
63 local btns = self.buttons[bar] | |
64 if btns then | |
65 for _,b in pairs(btns) do | |
66 if b then | |
67 b:Destroy() | |
68 end | |
69 end | |
70 self.buttons[bar] = nil | |
71 end | |
72 end | |
73 | |
74 function module:OnRefreshBar(event, bar, name) | |
75 if bar.config.type == moduleID then | |
76 local btns = self.buttons[bar] | |
77 if btns == nil then | |
78 btns = { } | |
79 self.buttons[bar] = btns | |
80 end | |
81 local profile = self.db.profile | |
82 if profile.buttons[name] == nil then | |
83 profile.buttons[name] = {} | |
84 end | |
85 local btnCfg = profile.buttons[name] | |
86 | |
87 local r, c = bar:GetButtonGrid() | |
88 local n = r*c | |
89 for i = 1, n do | |
90 if btnCfg[i] == nil then | |
91 btnCfg[i] = {} | |
92 end | |
93 if btns[i] == nil then | |
94 local success, r = pcall(Button.New,Button,i,profile,bar,i>1 and btnCfg[i-1].bagID) | |
95 if success and r then | |
96 btns[i] = r | |
97 bar:AddButton(i,r) | |
98 else | |
99 n = i - 1 | |
100 bar:ClipNButtons(n) | |
101 break | |
102 end | |
103 end | |
104 btns[i]:Refresh() | |
105 end | |
106 for i = n+1, #btns do | |
107 if btns[i] then | |
108 bar:RemoveButton(btns[i]) | |
109 btns[i] = btns[i]:Destroy() | |
110 if btnCfg[i] then | |
111 btnCfg[i] = nil | |
112 end | |
113 end | |
114 end | |
115 end | |
116 | |
117 end | |
118 | |
119 function module:OnEraseBar(event, bar, name) | |
120 self.db.profile.buttons[name] = nil | |
121 end | |
122 | |
123 function module:OnRenameBar(event, bar, oldName, newName) | |
124 local b = self.db.profile.buttons | |
125 b[newname], b[oldname] = b[oldname], nil | |
126 end | |
127 | |
128 function module:OnConfigModeChanged(event, mode) | |
129 for bar in pairs(self.buttons) do | |
130 for b in bar:IterateButtons() do | |
131 b:UpdateActionIDLabel(mode) | |
132 end | |
133 end | |
134 end | |
135 | |
136 function module:LIBKEYBOUND_ENABLED(evt) | |
137 for _, buttons in pairs(self.buttons) do | |
138 for _, b in pairs(buttons) do | |
139 b:SetKeybindMode(true) | |
140 end | |
141 end | |
142 end | |
143 | |
144 function module:LIBKEYBOUND_DISABLED(evt) | |
145 for _, buttons in pairs(self.buttons) do | |
146 for _, b in pairs(buttons) do | |
147 b:SetKeybindMode(false) | |
148 end | |
149 end | |
150 end | |
151 | |
152 function module:RefreshAll() | |
153 for bar in pairs(self.buttons) do | |
154 self:OnRefreshBar(nil,bar,bar:GetName()) | |
155 end | |
156 end | |
157 | |
158 | |
159 -- hook some functions to propagate to our bag buttons | |
160 hooksecurefunc("Disable_BagButtons", | |
161 function() | |
162 for _, buttons in pairs(module.buttons) do | |
163 for _, b in pairs(buttons) do | |
164 local f = b:GetFrame() | |
165 f:Disable() | |
166 SetDesaturation(b.frames.icon,1) | |
167 end | |
168 end | |
169 end) | |
170 | |
171 hooksecurefunc("Enable_BagButtons", | |
172 function() | |
173 for _, buttons in pairs(module.buttons) do | |
174 for _, b in pairs(buttons) do | |
175 local f = b:GetFrame() | |
176 f:Enable() | |
177 SetDesaturation(b.frames.icon,nil) | |
178 end | |
179 end | |
180 end) | |
181 | |
182 hooksecurefunc("ContainerFrame_OnHide", | |
183 function() | |
184 for _, buttons in pairs(module.buttons) do | |
185 for _, b in pairs(buttons) do | |
186 b:Update() | |
187 end | |
188 end | |
189 end) | |
190 | |
191 hooksecurefunc("ContainerFrame_OnShow", | |
192 function() | |
193 for _, buttons in pairs(module.buttons) do | |
194 for _, b in pairs(buttons) do | |
195 b:Update() | |
196 end | |
197 end | |
198 end) |