annotate StanceButton.lua @ 303:86f99ec6d3e5 1.1 beta 12

TOC update 5.04
author Flick
date Wed, 14 Nov 2012 16:46:10 -0800
parents 276165a0e860
children
rev   line source
Flick@276 1 local _, ns = ...
Flick@276 2 local ReAction = ns.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
Flick@292 9 -- local CooldownFrame_SetTimer = CooldownFrame_SetTimer -- don't stash this API, look it up every time to support some mods that hook it, e.g. Cooldowns
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@218 34 local buttonTypeID = "Stance"
flickerstreak@134 35 local Super = ReAction.Button
flickerstreak@218 36 local Stance = setmetatable(
flickerstreak@218 37 {
Flick@248 38 defaultBarConfig = {
flickerstreak@218 39 type = buttonTypeID,
flickerstreak@218 40 btnHeight = 36,
flickerstreak@218 41 btnWidth = 36,
flickerstreak@218 42 btnRows = 1,
flickerstreak@218 43 btnColumns = 6,
flickerstreak@218 44 spacing = 3
flickerstreak@218 45 },
flickerstreak@218 46
flickerstreak@218 47 barType = L["Stance Bar"],
Flick@231 48 buttonTypeID = buttonTypeID
flickerstreak@218 49 },
flickerstreak@218 50 { __index = Super } )
flickerstreak@223 51
flickerstreak@134 52 ReAction.Button.Stance = Stance
flickerstreak@223 53 ReAction:RegisterBarType(Stance)
flickerstreak@134 54
Flick@234 55 function Stance:New( config, bar, idx, idHint )
Flick@277 56 self = Super.New(self, config, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" )
flickerstreak@134 57
flickerstreak@134 58 local f = self:GetFrame()
flickerstreak@134 59 local barFrame = bar:GetFrame()
flickerstreak@134 60 local config = self:GetConfig()
flickerstreak@134 61
Flick@249 62 -- set up the stance ID
Flick@249 63 config.stanceID = config.stanceID or idx
flickerstreak@134 64
flickerstreak@134 65 -- attribute setup
flickerstreak@134 66 f:SetAttribute("type","spell")
flickerstreak@134 67
flickerstreak@134 68 -- non secure scripts
flickerstreak@134 69 f:SetScript("OnEvent", function(frame, ...) self:OnEvent(...) end)
flickerstreak@134 70 f:SetScript("OnEnter", function(frame) self:OnEnter() end)
flickerstreak@134 71 f:SetScript("OnLeave", function(frame) self:OnLeave() end)
flickerstreak@134 72 f:SetScript("PreClick", function(frame, ...) self:PreClick(...) end)
flickerstreak@134 73
flickerstreak@134 74 -- secure handlers
flickerstreak@134 75 -- (none)
flickerstreak@134 76
flickerstreak@134 77 -- event registration
flickerstreak@134 78 for _, evt in pairs(eventList) do
flickerstreak@134 79 f:RegisterEvent(evt)
flickerstreak@134 80 end
flickerstreak@134 81
flickerstreak@134 82 -- attach to skinner
flickerstreak@134 83 bar:SkinButton(self)
flickerstreak@134 84
flickerstreak@134 85 -- initial display
flickerstreak@134 86 if ReAction:GetConfigMode() then
flickerstreak@134 87 self:GetFrame():Show()
flickerstreak@134 88 end
flickerstreak@134 89
flickerstreak@134 90 self:Refresh()
flickerstreak@134 91
flickerstreak@134 92 return self
flickerstreak@134 93 end
flickerstreak@134 94
flickerstreak@134 95 function Stance:GetActionID()
flickerstreak@134 96 return self.config.stanceID
flickerstreak@134 97 end
flickerstreak@134 98
Flick@249 99 function Stance:AcquireActionID()
Flick@249 100 -- don't use pool
Flick@249 101 end
Flick@249 102
Flick@249 103 function Stance:ReleaseActionID()
Flick@249 104 -- don't use pool
Flick@249 105 end
Flick@249 106
flickerstreak@134 107 function Stance:UpdateAction()
flickerstreak@134 108 if InCombatLockdown() then
flickerstreak@134 109 self.updatePending = true
flickerstreak@134 110 else
flickerstreak@134 111 self.updatePending = false
flickerstreak@134 112 local idx = self:GetActionID()
flickerstreak@134 113 local f = self:GetFrame()
Flick@279 114 if idx > GetNumShapeshiftForms() and not ReAction:GetConfigMode() then
flickerstreak@134 115 f:Hide()
flickerstreak@134 116 else
flickerstreak@134 117 f:SetAttribute("spell", select(2,GetShapeshiftFormInfo(idx)))
flickerstreak@134 118 f:Show()
flickerstreak@134 119 self:Update()
flickerstreak@134 120 end
flickerstreak@134 121 end
flickerstreak@134 122 end
flickerstreak@134 123
flickerstreak@134 124 function Stance:Refresh()
flickerstreak@134 125 Super.Refresh(self)
flickerstreak@137 126 self:UpdateHotkey()
flickerstreak@136 127 self:UpdateAction()
flickerstreak@134 128 end
flickerstreak@134 129
flickerstreak@134 130 function Stance:Update()
flickerstreak@179 131 local texture, _, isActive, isCastable = GetShapeshiftFormInfo(self:GetActionID())
flickerstreak@134 132
flickerstreak@134 133 local icon = self.frames.icon
flickerstreak@134 134 icon:SetTexture(texture)
flickerstreak@134 135 self:GetFrame():SetChecked( isActive and 1 or 0 )
flickerstreak@134 136 if isCastable then
flickerstreak@137 137 self.frames.hotkey:Show()
flickerstreak@134 138 icon:SetVertexColor(1.0, 1.0, 1.0)
flickerstreak@134 139 else
flickerstreak@134 140 icon:SetVertexColor(0.4, 0.4, 0.4)
flickerstreak@134 141 end
flickerstreak@134 142
flickerstreak@134 143 self:UpdateCooldown()
flickerstreak@134 144 end
flickerstreak@134 145
flickerstreak@134 146 function Stance:UpdateCooldown()
flickerstreak@179 147 local start, duration, enabled = GetShapeshiftFormCooldown(self:GetActionID())
flickerstreak@134 148 if start then
flickerstreak@134 149 CooldownFrame_SetTimer(self.frames.cooldown, start, duration, enabled)
flickerstreak@134 150 end
flickerstreak@134 151 end
flickerstreak@134 152
flickerstreak@134 153 function Stance:SetTooltip()
flickerstreak@134 154 if GetCVar("UberTooltips") == "1" then
flickerstreak@134 155 GameTooltip_SetDefaultAnchor(GameTooltip, self:GetFrame())
flickerstreak@134 156 else
flickerstreak@134 157 GameTooltip:SetOwner(self:GetFrame(), "ANCHOR_RIGHT")
flickerstreak@134 158 end
flickerstreak@179 159 GameTooltip:SetShapeshift(self:GetActionID())
flickerstreak@134 160 end
flickerstreak@134 161
flickerstreak@134 162 function Stance:OnEnter()
flickerstreak@134 163 self:SetTooltip()
flickerstreak@134 164 end
flickerstreak@134 165
flickerstreak@134 166 function Stance:OnLeave()
flickerstreak@134 167 GameTooltip:Hide()
flickerstreak@134 168 end
flickerstreak@134 169
flickerstreak@134 170 function Stance:PreClick()
flickerstreak@134 171 local f = self:GetFrame()
flickerstreak@134 172 f:SetChecked( not f:GetChecked() )
flickerstreak@134 173 end
flickerstreak@134 174
flickerstreak@134 175 function Stance:OnEvent(event, arg)
flickerstreak@134 176 if event == "PLAYER_REGEN_ENABLED" then
flickerstreak@134 177 if self.updatePending then
flickerstreak@134 178 self:UpdateAction()
flickerstreak@134 179 end
flickerstreak@134 180 elseif event == "UPDATE_SHAPESHIFT_COOLDOWN" then
flickerstreak@134 181 self:UpdateCooldown()
flickerstreak@179 182 elseif event == "UPDATE_SHAPESHIFT_FORMS" then
flickerstreak@134 183 self:UpdateAction()
flickerstreak@134 184 elseif event == "UNIT_AURA" then
flickerstreak@134 185 if arg == "player" then
flickerstreak@134 186 self:Update()
flickerstreak@134 187 end
flickerstreak@137 188 elseif event == "UPDATE_BINDINGS" then
flickerstreak@137 189 self:UpdateHotkey()
flickerstreak@134 190 else
flickerstreak@134 191 self:Update()
flickerstreak@134 192 end
flickerstreak@134 193 end
flickerstreak@134 194
flickerstreak@134 195 function Stance:ShowGridTemp(show)
flickerstreak@134 196 if show then
flickerstreak@134 197 self:GetFrame():Show()
flickerstreak@134 198 else
flickerstreak@134 199 self:UpdateAction()
flickerstreak@134 200 end
flickerstreak@134 201 end