Mercurial > wow > reaction
view modules/ReAction_PetAction/ReAction_PetAction.lua @ 28:21bcaf8215ff
- converted to Ace3
- rearranged file layout
- configGUI menus not working right now
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Mon, 17 Mar 2008 18:24:53 +0000 |
parents | |
children | 7e09c02ae620 |
line wrap: on
line source
--[[ ReAction Pet Action Bar module --]] -- local imports local ReAction = ReAction local L = ReAction.L local _G = _G -- module declaration local moduleID = "PetAction" local module = ReAction:NewModule( moduleID ) -- module methods function module:OnInitialize() self.db = ReAction.db:RegisterNamespace( moduleID, { profile = { buttons = { } } } ) self.buttons = { } end function module:OnEnable() end function module:OnDisable() end function module:GetGlobalBarOptions(opts) if self.globalBarOpts == nil then self.globalBarOpts = { newActionBar = { type = "execute", name = L["New Pet Action Bar"], desc = L["Create a new bar of pet action buttons"], func = function() ReAction:CreateBar() end, disabled = InCombatLockdown, } } end return self.globalBarOpts end -- use-count of action IDs local ActionIDList = setmetatable( {}, { __index = function(self, idx) if idx == nil then for i = 1, 10 do if rawget(self,i) == nil then rawset(self,i,1) return i end end else local c = rawget(self,idx) or 0 rawset(self,idx,c+1) return idx end end, __newindex = function(self,idx,value) if value == nil then value = rawget(self,idx) if value == 1 then value = nil elseif value then value = value - 1 end end rawset(self,idx,value) end }) -- button class methods local Button = { } local function Constructor( self, bar, idx, config ) self.bar, self.idx, self.config = bar, idx, config local barFrame = bar:GetFrame() self.name = config.name or "ReAction_"..bar:GetName().."_Pet_"..idx config.actionID = ActionIDList[config.actionID] -- gets a free one if none configured local f = CreateFrame("CheckButton", self.name, barFrame, "PetActionButtonTemplate") f:SetID(config.actionID) -- PetActionButtonTemplate isn't a proper SecureActionButton (question: is this protected? does it cause taint?) self.frame = f barFrame:SetAttribute("addchild",f) -- auto show/hide when pet exists -- this gets called once per button, which is inefficient but otherwise harmless barFrame:SetAttribute("unit","pet") RegisterUnitWatch(barFrame) self:Refresh(bar,idx) end function Button:Destroy() local f = self.frame f:UnregisterAllEvents() f:Hide() f:SetParent(UIParent) f:ClearAllPoints() if self.name then _G[self.name] = nil end ActionIDList[self.config.actionID] = nil self.frame = nil self.config = nil self.bar = nil end -- export as a class-factory to module module.BtnClass = { new = function(self, ...) local x = { } for k,v in pairs(Button) do x[k] = v end Constructor(x, ...) return x end }