Mercurial > wow > reaction
comparison classes/ActionButton.lua @ 170:0030201b5fc2
use secure HasAction() (drycoded)
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Tue, 19 Oct 2010 20:07:55 +0000 |
parents | 8cc187143acd |
children | df68b5a40490 |
comparison
equal
deleted
inserted
replaced
169:8cc187143acd | 170:0030201b5fc2 |
---|---|
58 end | 58 end |
59 | 59 |
60 self:SetAttribute("action",action) | 60 self:SetAttribute("action",action) |
61 | 61 |
62 if not self:GetAttribute("showgrid") then | 62 if not self:GetAttribute("showgrid") then |
63 local hasaction = (action > 120) or self:GetAttribute("hasaction-"..action) | |
64 local tempShow = self:GetAttribute("showgrid-temp") | 63 local tempShow = self:GetAttribute("showgrid-temp") |
65 local evtShow = self:GetAttribute("showgrid-event") | 64 local evtShow = self:GetAttribute("showgrid-event") |
66 if tempShow then tempShow = (tempShow > 0) end | 65 if tempShow then tempShow = (tempShow > 0) end |
67 if evtShow then evtShow = (evtShow > 0) end | 66 if evtShow then evtShow = (evtShow > 0) end |
68 | 67 |
69 if tempShow or evtShow or hasaction then | 68 if tempShow or evtShow or HasAction(action) then |
70 self:Show() | 69 self:Show() |
71 else | 70 else |
72 self:Hide() | 71 self:Hide() |
73 end | 72 end |
74 end | 73 end |
91 self:SetAttribute("showgrid-event",message) | 90 self:SetAttribute("showgrid-event",message) |
92 if not self:GetAttribute("showgrid") then | 91 if not self:GetAttribute("showgrid") then |
93 local count = message + (self:GetAttribute("showgrid-temp") or 0) | 92 local count = message + (self:GetAttribute("showgrid-temp") or 0) |
94 if count <= 0 then | 93 if count <= 0 then |
95 local action = self:GetAttribute("action") | 94 local action = self:GetAttribute("action") |
96 local hasaction = (action > 120) or self:GetAttribute("hasaction-"..action) | 95 if HasAction(action) then |
97 if hasaction then | |
98 self:Show() | 96 self:Show() |
99 else | 97 else |
100 self:Hide() | 98 self:Hide() |
101 end | 99 end |
102 else | 100 else |
108 local _onDragStart = -- function(self, button, kind, value, ...) | 106 local _onDragStart = -- function(self, button, kind, value, ...) |
109 [[ | 107 [[ |
110 if lockButtons and (PlayerInCombat() or not lockButtonsCombat) and not IsModifiedClick("PICKUPACTION") then | 108 if lockButtons and (PlayerInCombat() or not lockButtonsCombat) and not IsModifiedClick("PICKUPACTION") then |
111 return kind, value, ... | 109 return kind, value, ... |
112 else | 110 else |
113 -- don't make any assumptions about hiding on grid show here, as we don't know if the | |
114 -- drag gets cancelled later. | |
115 return "action", self:GetAttribute("action") | 111 return "action", self:GetAttribute("action") |
116 end | 112 end |
117 ]] | 113 ]] |
118 | 114 |
119 local _onReceiveDrag = -- function(self, button, kind, value, ...) | 115 local _onReceiveDrag = -- function(self, button, kind, value, ...) |
120 [[ | 116 [[ |
121 if kind ~= "spell" and kind ~= "item" and kind ~= "macro" then | 117 if kind ~= "spell" and kind ~= "item" and kind ~= "macro" then |
122 return kind, value, ... | 118 return kind, value, ... |
123 end | 119 else |
124 self:SetAttribute("hasaction-"..self:GetAttribute("action"),true) | 120 return "action", self:GetAttribute("action") |
125 return "action", self:GetAttribute("action") | 121 end |
126 ]] | 122 ]] |
127 | 123 |
128 -- | 124 -- |
129 -- private | 125 -- private |
130 -- | 126 -- |
131 local eventList = { | 127 local eventList = { |
132 "PLAYER_REGEN_ENABLED", | |
133 "PLAYER_ENTERING_WORLD", | 128 "PLAYER_ENTERING_WORLD", |
134 "ACTIONBAR_PAGE_CHANGED", | 129 "ACTIONBAR_PAGE_CHANGED", |
135 "ACTIONBAR_SLOT_CHANGED", | 130 "ACTIONBAR_SLOT_CHANGED", |
136 "UPDATE_BINDINGS", | 131 "UPDATE_BINDINGS", |
137 "ACTIONBAR_UPDATE_STATE", | 132 "ACTIONBAR_UPDATE_STATE", |
247 return self.barConfig | 242 return self.barConfig |
248 end | 243 end |
249 | 244 |
250 function Action:Refresh() | 245 function Action:Refresh() |
251 Super.Refresh(self) | 246 Super.Refresh(self) |
252 self:RefreshHasActionAttributes() | |
253 self:RefreshPages() | 247 self:RefreshPages() |
254 self:InstallVehicle() | 248 self:InstallVehicle() |
255 self:ShowGrid(not self:GetBarConfig().hideEmpty) | 249 self:ShowGrid(not self:GetBarConfig().hideEmpty) |
256 self:UpdateAction() | 250 self:UpdateAction() |
257 end | 251 end |
323 self.actionID = action | 317 self.actionID = action |
324 self:UpdateAll() | 318 self:UpdateAll() |
325 end | 319 end |
326 end | 320 end |
327 | 321 |
328 function Action:RefreshHasActionAttributes() | |
329 -- check if each action has an action or not, and flag an attribute | |
330 -- so that the showgrid secure handler can make decisions accordingly | |
331 local f = self:GetFrame() | |
332 local attr = "hasaction-"..self.config.actionID | |
333 local hasAction = HasAction(self.config.actionID) | |
334 if f:GetAttribute(attr) ~= hasAction then | |
335 f:SetAttribute(attr,hasAction) -- avoid setting attribute and triggering script handler unnecessarily | |
336 end | |
337 if self.config.pageactions then | |
338 for i = 1, self.nPages do | |
339 attr = "hasaction-"..self.config.pageactions[i] | |
340 hasAction = HasAction(self.config.pageactions[i]) | |
341 if f:GetAttribute(attr) ~= hasAction then | |
342 f:SetAttribute(attr,hasAction) | |
343 end | |
344 end | |
345 end | |
346 end | |
347 | |
348 function Action:UpdateShowGrid() | 322 function Action:UpdateShowGrid() |
349 -- this is a little bit complicated because there's no | 323 if not InCombatLockdown() then |
350 -- secure access to HasAction. | |
351 if InCombatLockdown() then | |
352 self.showgridPending = true -- handle after combat | |
353 else | |
354 self.showgridPending = false | |
355 self:RefreshHasActionAttributes() | |
356 | |
357 -- the following is an out-of-combat show/hide to supplement the secure | |
358 -- handling and clean up after it when it guesses | |
359 local f = self:GetFrame() | 324 local f = self:GetFrame() |
360 local count = (f:GetAttribute("showgrid-event") or 0) + | 325 local count = (f:GetAttribute("showgrid-event") or 0) + |
361 (self.showGridTempCount or 0) + | 326 (self.showGridTempCount or 0) + |
362 (f:GetAttribute("showgrid") and 1 or 0) | 327 (f:GetAttribute("showgrid") and 1 or 0) |
363 | 328 |
783 if not IsAttackAction(self.actionID) then | 748 if not IsAttackAction(self.actionID) then |
784 self:SetFlash(false) | 749 self:SetFlash(false) |
785 end | 750 end |
786 end | 751 end |
787 | 752 |
788 function Action:PLAYER_REGEN_ENABLED() | |
789 if self.showgridPending then | |
790 self:UpdateShowGrid() | |
791 end | |
792 end | |
793 | |
794 function Action:UNIT_INVENTORY_CHANGED(unit) | 753 function Action:UNIT_INVENTORY_CHANGED(unit) |
795 if unit == "player" then | 754 if unit == "player" then |
796 self:UpdateTooltip() | 755 self:UpdateTooltip() |
797 end | 756 end |
798 end | 757 end |