annotate classes/StanceButton.lua @ 193:576c50e51fc5

LibShowGrid-1.0 external library --> LibShowActionGrid-1.0 internal library
author Flick <flickerstreak@gmail.com>
date Mon, 15 Nov 2010 10:22:45 -0800
parents bf64e71701e2
children e63aefb8a555
rev   line source
flickerstreak@175 1 local addonName, addonTable = ...
flickerstreak@175 2 local ReAction = addonTable.ReAction
flickerstreak@134 3 local L = ReAction.L
flickerstreak@134 4 local _G = _G
flickerstreak@134 5 local CreateFrame = CreateFrame
flickerstreak@134 6 local format = string.format
flickerstreak@134 7 local GetCVar = GetCVar
flickerstreak@134 8 local GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor
flickerstreak@134 9 local CooldownFrame_SetTimer = CooldownFrame_SetTimer
flickerstreak@134 10 local InCombatLockdown = InCombatLockdown
flickerstreak@134 11 local GetNumShapeshiftForms = GetNumShapeshiftForms
flickerstreak@134 12 local GetShapeshiftFormInfo = GetShapeshiftFormInfo
flickerstreak@134 13 local IsUsableSpell = IsUsableSpell
flickerstreak@134 14 local GetSpellInfo = GetSpellInfo
flickerstreak@134 15
flickerstreak@134 16 --
flickerstreak@134 17 -- private
flickerstreak@134 18 --
flickerstreak@134 19 local playerClass = select(2,UnitClass("player"))
flickerstreak@134 20
flickerstreak@134 21 local eventList = {
flickerstreak@134 22 "PLAYER_REGEN_ENABLED",
flickerstreak@134 23 "PLAYER_ENTERING_WORLD",
flickerstreak@134 24 "UPDATE_SHAPESHIFT_FORM",
flickerstreak@134 25 "UPDATE_SHAPESHIFT_FORMS",
flickerstreak@134 26 "UPDATE_SHAPESHIFT_USABLE",
flickerstreak@134 27 "UPDATE_SHAPESHIFT_COOLDOWN",
flickerstreak@137 28 "UPDATE_BINDINGS",
flickerstreak@134 29 }
flickerstreak@134 30
flickerstreak@134 31 --
flickerstreak@134 32 -- Stance Button class
flickerstreak@134 33 --
flickerstreak@134 34 local Super = ReAction.Button
flickerstreak@134 35 local Stance = setmetatable( { }, { __index = Super } )
flickerstreak@134 36 ReAction.Button.Stance = Stance
flickerstreak@134 37
flickerstreak@134 38 function Stance:New( idx, moduleConfig, bar, idHint )
flickerstreak@134 39 local name = format("ReAction_%s_Stance_%d",bar:GetName(),idx)
flickerstreak@134 40
flickerstreak@134 41 self = Super.New(self, name, moduleConfig.buttons[bar:GetName()][idx], bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" )
flickerstreak@134 42 self.moduleConfig = moduleConfig
flickerstreak@134 43
flickerstreak@134 44 local f = self:GetFrame()
flickerstreak@134 45 local barFrame = bar:GetFrame()
flickerstreak@134 46 local config = self:GetConfig()
flickerstreak@134 47
flickerstreak@134 48 -- set up the base stance ID
flickerstreak@134 49 self:SetActionIDPool("stance",8)
flickerstreak@134 50 config.stanceID = self:AcquireActionID(config.stanceID, idHint, true)
flickerstreak@134 51
flickerstreak@134 52 -- attribute setup
flickerstreak@134 53 f:SetAttribute("type","spell")
flickerstreak@134 54
flickerstreak@134 55 -- non secure scripts
flickerstreak@134 56 f:SetScript("OnEvent", function(frame, ...) self:OnEvent(...) end)
flickerstreak@134 57 f:SetScript("OnEnter", function(frame) self:OnEnter() end)
flickerstreak@134 58 f:SetScript("OnLeave", function(frame) self:OnLeave() end)
flickerstreak@134 59 f:SetScript("PreClick", function(frame, ...) self:PreClick(...) end)
flickerstreak@134 60
flickerstreak@134 61 -- secure handlers
flickerstreak@134 62 -- (none)
flickerstreak@134 63
flickerstreak@134 64 -- event registration
flickerstreak@134 65 f:EnableMouse(true)
flickerstreak@134 66 f:RegisterForClicks("AnyUp")
flickerstreak@134 67 for _, evt in pairs(eventList) do
flickerstreak@134 68 f:RegisterEvent(evt)
flickerstreak@134 69 end
flickerstreak@134 70
flickerstreak@134 71 -- attach to skinner
flickerstreak@134 72 bar:SkinButton(self)
flickerstreak@134 73
flickerstreak@134 74 -- initial display
flickerstreak@134 75 if ReAction:GetConfigMode() then
flickerstreak@134 76 self:GetFrame():Show()
flickerstreak@134 77 end
flickerstreak@134 78
flickerstreak@134 79 self:Refresh()
flickerstreak@134 80
flickerstreak@134 81 return self
flickerstreak@134 82 end
flickerstreak@134 83
flickerstreak@134 84 function Stance:GetActionID()
flickerstreak@134 85 return self.config.stanceID
flickerstreak@134 86 end
flickerstreak@134 87
flickerstreak@134 88 function Stance:UpdateAction()
flickerstreak@134 89 if InCombatLockdown() then
flickerstreak@134 90 self.updatePending = true
flickerstreak@134 91 else
flickerstreak@134 92 self.updatePending = false
flickerstreak@134 93 local idx = self:GetActionID()
flickerstreak@134 94 local f = self:GetFrame()
flickerstreak@179 95 if idx > GetNumShapeshiftForms() then
flickerstreak@134 96 f:Hide()
flickerstreak@134 97 else
flickerstreak@134 98 f:SetAttribute("spell", select(2,GetShapeshiftFormInfo(idx)))
flickerstreak@134 99 f:Show()
flickerstreak@134 100 self:Update()
flickerstreak@134 101 end
flickerstreak@134 102 end
flickerstreak@134 103 end
flickerstreak@134 104
flickerstreak@134 105 function Stance:Refresh()
flickerstreak@134 106 Super.Refresh(self)
flickerstreak@137 107 self:UpdateHotkey()
flickerstreak@136 108 self:UpdateAction()
flickerstreak@134 109 end
flickerstreak@134 110
flickerstreak@134 111 function Stance:Update()
flickerstreak@179 112 local texture, _, isActive, isCastable = GetShapeshiftFormInfo(self:GetActionID())
flickerstreak@134 113
flickerstreak@134 114 local icon = self.frames.icon
flickerstreak@134 115 icon:SetTexture(texture)
flickerstreak@134 116 self:GetFrame():SetChecked( isActive and 1 or 0 )
flickerstreak@134 117 if isCastable then
flickerstreak@137 118 self.frames.hotkey:Show()
flickerstreak@134 119 icon:SetVertexColor(1.0, 1.0, 1.0)
flickerstreak@134 120 else
flickerstreak@134 121 icon:SetVertexColor(0.4, 0.4, 0.4)
flickerstreak@134 122 end
flickerstreak@134 123
flickerstreak@134 124 self:UpdateCooldown()
flickerstreak@134 125 end
flickerstreak@134 126
flickerstreak@134 127 function Stance:UpdateCooldown()
flickerstreak@179 128 local start, duration, enabled = GetShapeshiftFormCooldown(self:GetActionID())
flickerstreak@134 129 if start then
flickerstreak@134 130 CooldownFrame_SetTimer(self.frames.cooldown, start, duration, enabled)
flickerstreak@134 131 end
flickerstreak@134 132 end
flickerstreak@134 133
flickerstreak@134 134 function Stance:SetTooltip()
flickerstreak@134 135 if GetCVar("UberTooltips") == "1" then
flickerstreak@134 136 GameTooltip_SetDefaultAnchor(GameTooltip, self:GetFrame())
flickerstreak@134 137 else
flickerstreak@134 138 GameTooltip:SetOwner(self:GetFrame(), "ANCHOR_RIGHT")
flickerstreak@134 139 end
flickerstreak@179 140 GameTooltip:SetShapeshift(self:GetActionID())
flickerstreak@134 141 end
flickerstreak@134 142
flickerstreak@134 143 function Stance:OnEnter()
flickerstreak@134 144 self:SetTooltip()
flickerstreak@134 145 end
flickerstreak@134 146
flickerstreak@134 147 function Stance:OnLeave()
flickerstreak@134 148 GameTooltip:Hide()
flickerstreak@134 149 end
flickerstreak@134 150
flickerstreak@134 151 function Stance:PreClick()
flickerstreak@134 152 local f = self:GetFrame()
flickerstreak@134 153 f:SetChecked( not f:GetChecked() )
flickerstreak@134 154 end
flickerstreak@134 155
flickerstreak@134 156 function Stance:OnEvent(event, arg)
flickerstreak@134 157 if event == "PLAYER_REGEN_ENABLED" then
flickerstreak@134 158 if self.updatePending then
flickerstreak@134 159 self:UpdateAction()
flickerstreak@134 160 end
flickerstreak@134 161 elseif event == "UPDATE_SHAPESHIFT_COOLDOWN" then
flickerstreak@134 162 self:UpdateCooldown()
flickerstreak@179 163 elseif event == "UPDATE_SHAPESHIFT_FORMS" then
flickerstreak@134 164 self:UpdateAction()
flickerstreak@134 165 elseif event == "UNIT_AURA" then
flickerstreak@134 166 if arg == "player" then
flickerstreak@134 167 self:Update()
flickerstreak@134 168 end
flickerstreak@137 169 elseif event == "UPDATE_BINDINGS" then
flickerstreak@137 170 self:UpdateHotkey()
flickerstreak@134 171 else
flickerstreak@134 172 self:Update()
flickerstreak@134 173 end
flickerstreak@134 174 end
flickerstreak@134 175
flickerstreak@134 176 function Stance:ShowGridTemp(show)
flickerstreak@134 177 if show then
flickerstreak@134 178 self:GetFrame():Show()
flickerstreak@134 179 else
flickerstreak@134 180 self:UpdateAction()
flickerstreak@134 181 end
flickerstreak@134 182 end