Mercurial > wow > reaction
comparison classes/BagButton.lua @ 234:0e20f65375d5
Reworked button creation to not use goofy event driven semantics.
author | Flick |
---|---|
date | Tue, 22 Mar 2011 17:05:51 -0700 |
parents | 158c9299185b |
children |
comparison
equal
deleted
inserted
replaced
233:9b9f5fc84d34 | 234:0e20f65375d5 |
---|---|
14 local PickupBagFromSlot = PickupBagFromSlot | 14 local PickupBagFromSlot = PickupBagFromSlot |
15 local CursorCanGoInSlot = CursorCanGoInSlot | 15 local CursorCanGoInSlot = CursorCanGoInSlot |
16 | 16 |
17 -- class declarations | 17 -- class declarations |
18 local buttonTypeID = "Bag" | 18 local buttonTypeID = "Bag" |
19 local weak = { __mode = "k" } | |
19 local Super = ReAction.Button | 20 local Super = ReAction.Button |
20 local BagBase = setmetatable( | 21 local BagBase = setmetatable( |
21 { | 22 { |
22 defaultBarConfig = { | 23 defaultBarConfig = { |
23 type = buttonTypeID, | 24 type = buttonTypeID, |
28 spacing = 4, | 29 spacing = 4, |
29 buttons = { } | 30 buttons = { } |
30 }, | 31 }, |
31 | 32 |
32 barType = L["Bag Bar"], | 33 barType = L["Bag Bar"], |
33 buttonTypeID = buttonTypeID | 34 buttonTypeID = buttonTypeID, |
35 | |
36 allButtons = setmetatable( { }, weak ) | |
34 }, | 37 }, |
35 { __index = Super } ) | 38 { __index = Super } ) |
36 | 39 |
37 local Bag = setmetatable( { }, { __index = BagBase } ) | 40 local Bag = setmetatable( { }, { __index = BagBase } ) |
38 local Backpack = setmetatable( { }, { __index = BagBase } ) | 41 local Backpack = setmetatable( { }, { __index = BagBase } ) |
43 | 46 |
44 -- | 47 -- |
45 -- Bag Button base class | 48 -- Bag Button base class |
46 -- | 49 -- |
47 | 50 |
48 function BagBase:New( idx, btnCfg, bar, idHint ) | 51 function BagBase:New( btnCfg, bar, idx, idHint ) |
49 local name = format("ReAction_%s_Bag_%d",bar:GetName(),idx) | 52 local name = format("ReAction_%s_Bag_%d",bar:GetName(),idx) |
50 | 53 |
51 -- use a variable private leaf implementation class | 54 -- use a variable private leaf implementation class |
52 -- unlike traditional OO programming, we can initialize the leaf | 55 -- unlike traditional OO programming, we can initialize the leaf |
53 -- class before initializing its parent | 56 -- class before initializing its parent |
123 self:GetFrame():Show() | 126 self:GetFrame():Show() |
124 end | 127 end |
125 | 128 |
126 self:Refresh() | 129 self:Refresh() |
127 | 130 |
131 BagBase.allButtons[self] = true | |
132 | |
128 return self | 133 return self |
129 end | 134 end |
135 | |
136 function BagBase:Destroy() | |
137 BagBase.allButtons[self] = nil | |
138 Super.Destroy(self) | |
139 end | |
140 | |
130 | 141 |
131 function BagBase:GetActionID() | 142 function BagBase:GetActionID() |
132 return self.config.bagID | 143 return self.config.bagID |
133 end | 144 end |
134 | 145 |
174 GameTooltip:Hide() | 185 GameTooltip:Hide() |
175 end | 186 end |
176 | 187 |
177 function BagBase:UPDATE_BINDINGS() | 188 function BagBase:UPDATE_BINDINGS() |
178 self:UpdateHotkey() | 189 self:UpdateHotkey() |
190 end | |
191 | |
192 function BagBase:IterateAllButtons() | |
193 return pairs(self.allButtons) | |
179 end | 194 end |
180 | 195 |
181 | 196 |
182 -- | 197 -- |
183 -- Bag Button class | 198 -- Bag Button class |
446 self:GetFrame():Hide() | 461 self:GetFrame():Hide() |
447 end | 462 end |
448 end | 463 end |
449 end | 464 end |
450 | 465 |
466 | |
467 | |
468 -- hook some functions to propagate to our bag buttons | |
469 hooksecurefunc("Disable_BagButtons", | |
470 function() | |
471 for b in BagBase:IterateAllButtons() do | |
472 local f = b:GetFrame() | |
473 f:Disable() | |
474 SetDesaturation(b.frames.icon,1) | |
475 end | |
476 end) | |
477 | |
478 hooksecurefunc("Enable_BagButtons", | |
479 function() | |
480 for b in BagBase:IterateAllButtons() do | |
481 local f = b:GetFrame() | |
482 f:Enable() | |
483 SetDesaturation(b.frames.icon,nil) | |
484 end | |
485 end) | |
486 | |
487 hooksecurefunc("ContainerFrame_OnHide", | |
488 function() | |
489 for b in BagBase:IterateAllButtons() do | |
490 b:Update() | |
491 end | |
492 end) | |
493 | |
494 hooksecurefunc("ContainerFrame_OnShow", | |
495 function() | |
496 for b in BagBase:IterateAllButtons() do | |
497 b:Update() | |
498 end | |
499 end) |