comparison ActionButton.lua @ 297:f7a5676c9517

5.04 updates: - refresh button checked state and cooldown in C-code - display count for actions with charges - update action button events - pet action buttons - filter UNIT_AURA events by 'pet' type
author Flick
date Wed, 14 Nov 2012 16:34:14 -0800
parents 0cb6a9944497
children e337b39dc491
comparison
equal deleted inserted replaced
296:08a1fbc9ee9b 297:f7a5676c9517
145 -- 145 --
146 -- private 146 -- private
147 -- 147 --
148 local eventList = { 148 local eventList = {
149 "PLAYER_ENTERING_WORLD", 149 "PLAYER_ENTERING_WORLD",
150 "ACTIONBAR_PAGE_CHANGED",
151 "ACTIONBAR_SLOT_CHANGED", 150 "ACTIONBAR_SLOT_CHANGED",
152 "UPDATE_BINDINGS", 151 "UPDATE_BINDINGS",
153 "ACTIONBAR_UPDATE_STATE",
154 "ACTIONBAR_UPDATE_USABLE", 152 "ACTIONBAR_UPDATE_USABLE",
155 "ACTIONBAR_UPDATE_COOLDOWN",
156 "UNIT_INVENTORY_CHANGED", 153 "UNIT_INVENTORY_CHANGED",
157 "LEARNED_SPELL_IN_TAB", 154 "LEARNED_SPELL_IN_TAB",
158 "UPDATE_INVENTORY_ALERTS", 155 "UPDATE_INVENTORY_ALERTS",
159 "PLAYER_TARGET_CHANGED", 156 "PLAYER_TARGET_CHANGED",
160 "TRADE_SKILL_SHOW", 157 "TRADE_SKILL_SHOW",
165 "START_AUTOREPEAT_SPELL", 162 "START_AUTOREPEAT_SPELL",
166 "STOP_AUTOREPEAT_SPELL", 163 "STOP_AUTOREPEAT_SPELL",
167 "UNIT_ENTERED_VEHICLE", 164 "UNIT_ENTERED_VEHICLE",
168 "UNIT_EXITED_VEHICLE", 165 "UNIT_EXITED_VEHICLE",
169 "COMPANION_UPDATE", 166 "COMPANION_UPDATE",
167 "UPDATE_SHAPESHIFT_FORM",
168 "SPELL_UPDATE_CHARGES",
169 "UPDATE_SUMMONPETS_ACTION",
170 } 170 }
171 171
172 -- 172 --
173 -- Action Button class 173 -- Action Button class
174 -- 174 --
343 self:UpdateMacroText() 343 self:UpdateMacroText()
344 self:UpdateCount() 344 self:UpdateCount()
345 self:UpdateTooltip() 345 self:UpdateTooltip()
346 self:UpdateCheckedState() 346 self:UpdateCheckedState()
347 self:UpdateUsable() 347 self:UpdateUsable()
348 self:UpdateCooldown()
349 self:UpdateFlash() 348 self:UpdateFlash()
350 end 349 end
351 350
352 function Action:UpdateAction() 351 function Action:UpdateAction()
353 local action = self:GetActionID() 352 local action = self:GetActionID()
354 if action ~= self.actionID then 353 if action ~= self.actionID then
355 self.actionID = action 354 self.actionID = action
355
356 -- update checked state and cooldown in C-code
357 local f = self:GetFrame()
358 SetActionUIButton(f, action, f.cooldown)
359
356 self:UpdateAll() 360 self:UpdateAll()
357 end 361 end
358 end 362 end
359 363
360 function Action:UpdateShowGrid() 364 function Action:UpdateShowGrid()
393 if tLeft then 397 if tLeft then
394 icon:SetTexCoord(tLeft,tRight,tTop,tBottom) 398 icon:SetTexCoord(tLeft,tRight,tTop,tBottom)
395 end 399 end
396 icon:Show() 400 icon:Show()
397 self.rangeTimer = -1 401 self.rangeTimer = -1
398 f:SetNormalTexture("Interface\\Buttons\\UI-Quickslot2")
399 else 402 else
400 icon:Hide() 403 icon:Hide()
401 self.frames.cooldown:Hide() 404 self.frames.cooldown:Hide()
402 self.rangeTimer = nil 405 self.rangeTimer = nil
403 f:SetNormalTexture("Interface\\Buttons\\UI-Quickslot")
404 end 406 end
405 end 407 end
406 408
407 function Action:GetIconTexture() 409 function Action:GetIconTexture()
408 return GetActionTexture(self.actionID) 410 return GetActionTexture(self.actionID)
420 end 422 end
421 end 423 end
422 424
423 function Action:UpdateMacroText() 425 function Action:UpdateMacroText()
424 local action = self.actionID 426 local action = self.actionID
425 if not IsConsumableAction(action) and not IsStackableAction(action) then 427 if not IsConsumableAction(action) and
428 not IsStackableAction(action) and
429 (IsItemAction(action) or GetActionCount(action) == 0) then
426 self.frames.name:SetText(GetActionText(action)) 430 self.frames.name:SetText(GetActionText(action))
427 else 431 else
428 self.frames.name:SetText("") 432 self.frames.name:SetText("")
429 end 433 end
430 end 434 end
431 435
432 function Action:UpdateCount() 436 function Action:UpdateCount()
433 local action = self.actionID 437 local action = self.actionID
434 if IsConsumableAction(action) or IsStackableAction(action) then 438 local count = GetActionCount(action) or 0
435 self.frames.count:SetText(GetActionCount(action)) 439 if IsConsumableAction(action) or IsStackableAction(action) or (not IsItemAction(action) and count > 0) then
436 else 440 if count > 9999 then
437 self.frames.count:SetText("") 441 self.frames.count:SetText("*")
442 else
443 self.frames.count:SetText(count)
444 end
445 else
446 local charges, maxCharges, chargeStart, chargeDuration = GetActionCharges(action)
447 charges = tonumber(charges) or 0
448 maxCharges = tonumber(maxCharges) or 0
449 if maxCharges > 1 then
450 self.frames.count:SetText(charges)
451 else
452 self.frames.count:SetText("")
453 end
438 end 454 end
439 end 455 end
440 456
441 function Action:UpdateTooltip() 457 function Action:UpdateTooltip()
442 local f = self:GetFrame() 458 local f = self:GetFrame()
501 return IsUsableAction(self.actionID) 517 return IsUsableAction(self.actionID)
502 end 518 end
503 519
504 function Action:GetInRange() 520 function Action:GetInRange()
505 return IsActionInRange(self.actionID) == 0 521 return IsActionInRange(self.actionID) == 0
506 end
507
508 function Action:UpdateCooldown()
509 CooldownFrame_SetTimer(self.frames.cooldown, self:GetCooldown())
510 end 522 end
511 523
512 function Action:GetCooldown() 524 function Action:GetCooldown()
513 return GetActionCooldown(self.actionID) 525 return GetActionCooldown(self.actionID)
514 end 526 end
721 733
722 function Action:PLAYER_ENTERING_WORLD() 734 function Action:PLAYER_ENTERING_WORLD()
723 self:UpdateAction() 735 self:UpdateAction()
724 end 736 end
725 737
726 function Action:ACTIONBAR_PAGE_CHANGED()
727 self:UpdateAction()
728 end
729
730 function Action:UPDATE_BONUS_ACTIONBAR()
731 self:UpdateAction()
732 end
733
734 function Action:UPDATE_BINDINGS() 738 function Action:UPDATE_BINDINGS()
735 self:UpdateHotkey() 739 self:UpdateHotkey()
736 end 740 end
737 741
738 function Action:PLAYER_TARGET_CHANGED() 742 function Action:PLAYER_TARGET_CHANGED()
739 self.rangeTimer = -1 743 self.rangeTimer = -1
740 end
741
742 function Action:ACTIONBAR_UPDATE_STATE()
743 self:UpdateCheckedState()
744 end 744 end
745 745
746 function Action:TRADE_SKILL_SHOW() 746 function Action:TRADE_SKILL_SHOW()
747 self:UpdateCheckedState() 747 self:UpdateCheckedState()
748 end 748 end
764 764
765 function Action:ACTIONBAR_UPDATE_USABLE() 765 function Action:ACTIONBAR_UPDATE_USABLE()
766 self:UpdateUsable() 766 self:UpdateUsable()
767 end 767 end
768 768
769 function Action:ACTIONBAR_UPDATE_COOLDOWN() 769 function Action:SPELL_UPDATE_CHARGES()
770 self:UpdateCooldown() 770 self:UpdateCount()
771 end 771 end
772 772
773 function Action:PLAYER_ENTER_COMBAT() 773 function Action:PLAYER_ENTER_COMBAT()
774 if IsAttackAction(self.actionID) then 774 if IsAttackAction(self.actionID) then
775 self:SetFlash(true) 775 self:SetFlash(true)
792 if not IsAttackAction(self.actionID) then 792 if not IsAttackAction(self.actionID) then
793 self:SetFlash(false) 793 self:SetFlash(false)
794 end 794 end
795 end 795 end
796 796
797 function Action:UPDATE_SHAPESHIFT_FORM()
798 self:UpdateIcon()
799 end
800
797 function Action:UNIT_INVENTORY_CHANGED(unit) 801 function Action:UNIT_INVENTORY_CHANGED(unit)
798 if unit == "player" then 802 if unit == "player" then
799 self:UpdateTooltip() 803 self:UpdateTooltip()
800 end 804 end
801 end 805 end
802 806
803 function Action:LEARNED_SPELL_IN_TAB() 807 function Action:LEARNED_SPELL_IN_TAB()
804 self:UpdateTooltip() 808 self:UpdateTooltip()
805 end 809 end
810
811 function Action:UPDATE_SUMMONPETS_ACTION()
812 self:UpdateIcon()
813 end