annotate modules/PetAction.lua @ 173:49d49063cb79

remove print statements
author Flick <flickerstreak@gmail.com>
date Tue, 19 Oct 2010 22:07:21 +0000
parents 8cc187143acd
children df68b5a40490
rev   line source
flickerstreak@28 1 --[[
flickerstreak@53 2 ReAction Pet Action button module
flickerstreak@53 3
flickerstreak@53 4 The button module implements standard action button functionality by wrapping Blizzard's
flickerstreak@77 5 PetActionButton frame and associated functions.
flickerstreak@28 6
flickerstreak@28 7 --]]
flickerstreak@28 8
flickerstreak@28 9 -- local imports
flickerstreak@28 10 local ReAction = ReAction
flickerstreak@28 11 local L = ReAction.L
flickerstreak@28 12 local _G = _G
flickerstreak@53 13 local CreateFrame = CreateFrame
flickerstreak@95 14 local format = string.format
flickerstreak@28 15
flickerstreak@28 16 -- module declaration
flickerstreak@28 17 local moduleID = "PetAction"
flickerstreak@28 18 local module = ReAction:NewModule( moduleID )
flickerstreak@28 19
flickerstreak@130 20 -- Button class
flickerstreak@130 21 local Button = ReAction.Button.PetAction
flickerstreak@77 22
flickerstreak@102 23 -- private
flickerstreak@102 24 local function UpdateButtonLock(bar)
flickerstreak@102 25 local f = bar:GetFrame()
flickerstreak@102 26 f:SetAttribute("lockbuttons",bar.config.lockButtons)
flickerstreak@102 27 f:SetAttribute("lockbuttonscombat",bar.config.lockButtonsCombat)
flickerstreak@102 28 f:Execute(
flickerstreak@102 29 [[
flickerstreak@102 30 lockButtons = self:GetAttribute("lockbuttons")
flickerstreak@102 31 lockButtonsCombat = self:GetAttribute("lockbuttonscombat")
flickerstreak@102 32 ]])
flickerstreak@102 33 end
flickerstreak@102 34
flickerstreak@28 35 -- module methods
flickerstreak@28 36 function module:OnInitialize()
flickerstreak@53 37 self.db = ReAction.db:RegisterNamespace( moduleID,
flickerstreak@28 38 {
flickerstreak@28 39 profile = {
flickerstreak@28 40 buttons = { }
flickerstreak@28 41 }
flickerstreak@28 42 }
flickerstreak@28 43 )
flickerstreak@53 44 self.buttons = { }
flickerstreak@63 45
flickerstreak@63 46 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
flickerstreak@63 47
flickerstreak@63 48 ReAction.RegisterCallback(self, "OnCreateBar")
flickerstreak@63 49 ReAction.RegisterCallback(self, "OnDestroyBar")
flickerstreak@63 50 ReAction.RegisterCallback(self, "OnRefreshBar")
flickerstreak@63 51 ReAction.RegisterCallback(self, "OnEraseBar")
flickerstreak@63 52 ReAction.RegisterCallback(self, "OnRenameBar")
flickerstreak@28 53 end
flickerstreak@28 54
flickerstreak@28 55 function module:OnEnable()
flickerstreak@53 56 ReAction:RegisterBarType(L["Pet Action Bar"],
flickerstreak@53 57 {
flickerstreak@53 58 type = moduleID ,
flickerstreak@53 59 defaultButtonSize = 30,
flickerstreak@53 60 defaultBarRows = 1,
flickerstreak@53 61 defaultBarCols = 10,
flickerstreak@53 62 defaultBarSpacing = 8
flickerstreak@53 63 })
flickerstreak@28 64 end
flickerstreak@28 65
flickerstreak@28 66 function module:OnDisable()
flickerstreak@53 67 ReAction:UnregisterBarType(L["Pet Action Bar"])
flickerstreak@28 68 end
flickerstreak@28 69
flickerstreak@63 70 function module:OnCreateBar(event, bar, name)
flickerstreak@53 71 if bar.config.type == moduleID then
flickerstreak@53 72 -- auto show/hide when pet exists
flickerstreak@148 73 bar:RegisterUnitWatch("pet",true)
flickerstreak@63 74 self:OnRefreshBar(event, bar, name)
flickerstreak@28 75 end
flickerstreak@28 76 end
flickerstreak@28 77
flickerstreak@63 78 function module:OnRefreshBar(event, bar, name)
flickerstreak@53 79 if bar.config.type == moduleID then
flickerstreak@53 80 if self.buttons[bar] == nil then
flickerstreak@53 81 self.buttons[bar] = { }
flickerstreak@53 82 end
flickerstreak@53 83 local btns = self.buttons[bar]
flickerstreak@53 84 local profile = self.db.profile
flickerstreak@63 85 if profile.buttons[name] == nil then
flickerstreak@63 86 profile.buttons[name] = {}
flickerstreak@53 87 end
flickerstreak@63 88 local btnCfg = profile.buttons[name]
flickerstreak@53 89
flickerstreak@53 90 local r, c = bar:GetButtonGrid()
flickerstreak@53 91 local n = r*c
flickerstreak@53 92 for i = 1, n do
flickerstreak@53 93 if btnCfg[i] == nil then
flickerstreak@53 94 btnCfg[i] = {}
flickerstreak@53 95 end
flickerstreak@53 96 if btns[i] == nil then
flickerstreak@130 97 local success, r = pcall(Button.New,Button,i,btnCfg[i],bar,i>1 and btnCfg[i-1].actionID)
flickerstreak@94 98 if success and r then
flickerstreak@94 99 btns[i] = r
flickerstreak@94 100 bar:AddButton(i,r)
flickerstreak@94 101 else
flickerstreak@94 102 n = i - 1
flickerstreak@94 103 bar:ClipNButtons(n)
flickerstreak@94 104 break
flickerstreak@94 105 end
flickerstreak@53 106 end
flickerstreak@77 107 btns[i]:Refresh()
flickerstreak@53 108 end
flickerstreak@53 109 for i = n+1, #btns do
flickerstreak@53 110 if btns[i] then
flickerstreak@77 111 bar:RemoveButton(btns[i])
flickerstreak@53 112 btns[i] = btns[i]:Destroy()
flickerstreak@53 113 if btnCfg[i] then
flickerstreak@53 114 btnCfg[i] = nil
flickerstreak@53 115 end
flickerstreak@53 116 end
flickerstreak@53 117 end
flickerstreak@102 118 UpdateButtonLock(bar)
flickerstreak@53 119 end
flickerstreak@53 120 end
flickerstreak@53 121
flickerstreak@63 122 function module:OnDestroyBar(event, bar, name)
flickerstreak@53 123 if self.buttons[bar] then
flickerstreak@53 124 local btns = self.buttons[bar]
flickerstreak@53 125 for _,b in pairs(btns) do
flickerstreak@53 126 if b then
flickerstreak@53 127 b:Destroy()
flickerstreak@53 128 end
flickerstreak@53 129 end
flickerstreak@53 130 self.buttons[bar] = nil
flickerstreak@53 131 end
flickerstreak@53 132 end
flickerstreak@53 133
flickerstreak@63 134 function module:OnEraseBar(event, bar, name)
flickerstreak@63 135 self.db.profile.buttons[name] = nil
flickerstreak@53 136 end
flickerstreak@53 137
flickerstreak@63 138 function module:OnRenameBar(event, bar, oldname, newname)
flickerstreak@53 139 local b = self.db.profile.buttons
flickerstreak@53 140 b[newname], b[oldname] = b[oldname], nil
flickerstreak@53 141 end
flickerstreak@53 142
flickerstreak@53 143
flickerstreak@60 144 ---- Options ----
flickerstreak@102 145 local Handler = { }
flickerstreak@102 146 local meta = { __index = Handler }
flickerstreak@102 147
flickerstreak@102 148 function Handler:New(bar)
flickerstreak@102 149 return setmetatable(
flickerstreak@102 150 {
flickerstreak@102 151 bar = bar,
flickerstreak@102 152 config = bar.config
flickerstreak@102 153 }, meta)
flickerstreak@102 154 end
flickerstreak@102 155
flickerstreak@102 156 function Handler:GetLockButtons()
flickerstreak@130 157 return self.config.lockButtons
flickerstreak@102 158 end
flickerstreak@102 159
flickerstreak@102 160 function Handler:SetLockButtons(info, value)
flickerstreak@102 161 self.config.lockButtons = value
flickerstreak@102 162 UpdateButtonLock(self.bar)
flickerstreak@102 163 end
flickerstreak@102 164
flickerstreak@102 165 function Handler:GetLockButtonsCombat()
flickerstreak@102 166 return self.config.lockButtonsCombat
flickerstreak@102 167 end
flickerstreak@102 168
flickerstreak@102 169 function Handler:SetLockButtonsCombat(info, value)
flickerstreak@102 170 self.config.lockButtonsCombat = value
flickerstreak@102 171 UpdateButtonLock(self.bar)
flickerstreak@102 172 end
flickerstreak@102 173
flickerstreak@102 174 function Handler:LockButtonsCombatDisabled()
flickerstreak@130 175 return not self.config.lockButtons
flickerstreak@102 176 end
flickerstreak@102 177
flickerstreak@102 178
flickerstreak@60 179 function module:GetBarOptions(bar)
flickerstreak@91 180 if bar.config.type == moduleID then
flickerstreak@91 181 return {
flickerstreak@91 182 type = "group",
flickerstreak@91 183 name = L["Pet Buttons"],
flickerstreak@102 184 handler = Handler:New(bar),
flickerstreak@91 185 args = {
flickerstreak@102 186 lockButtons = {
flickerstreak@102 187 name = L["Lock Buttons"],
flickerstreak@147 188 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"],
flickerstreak@102 189 order = 2,
flickerstreak@102 190 type = "toggle",
flickerstreak@102 191 get = "GetLockButtons",
flickerstreak@102 192 set = "SetLockButtons",
flickerstreak@102 193 },
flickerstreak@102 194 lockOnlyCombat = {
flickerstreak@102 195 name = L["Only in Combat"],
flickerstreak@102 196 desc = L["Only lock the buttons when in combat"],
flickerstreak@102 197 order = 3,
flickerstreak@102 198 type = "toggle",
flickerstreak@102 199 disabled = "LockButtonsCombatDisabled",
flickerstreak@102 200 get = "GetLockButtonsCombat",
flickerstreak@102 201 set = "SetLockButtonsCombat",
flickerstreak@102 202 },
flickerstreak@91 203 }
flickerstreak@60 204 }
flickerstreak@91 205 end
flickerstreak@59 206 end
flickerstreak@59 207
flickerstreak@53 208