Mercurial > wow > reaction
diff modules/Totem.lua @ 161:d0a41fc7b0d7
Totem bar support
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Fri, 21 Aug 2009 04:15:09 +0000 |
parents | |
children | fc08372f0c7a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/Totem.lua Fri Aug 21 04:15:09 2009 +0000 @@ -0,0 +1,147 @@ +--[[ + ReAction Totem button module + +--]] + +-- local imports +local ReAction = ReAction +local L = ReAction.L +local _G = _G + +-- button +local Button = ReAction.Button.MultiCast + +-- module declaration +local moduleID = "Totem" +local module = ReAction:NewModule( moduleID, + "AceEvent-3.0" + -- mixins go here +) + +-- handlers +function module:OnInitialize() + self.db = ReAction.db:RegisterNamespace( moduleID, + { + profile = { + buttons = { } + } + } + ) + + self.buttons = { } + + ReAction:RegisterOptions(self, self:GetOptions()) + + ReAction.RegisterCallback(self, "OnCreateBar", "OnRefreshBar") + ReAction.RegisterCallback(self, "OnDestroyBar") + ReAction.RegisterCallback(self, "OnRefreshBar") + ReAction.RegisterCallback(self, "OnEraseBar") + ReAction.RegisterCallback(self, "OnRenameBar") + + -- TODO: register for learning new spells +end + +function module:OnEnable() + ReAction:RegisterBarType(L["Totem Bar"], + { + type = moduleID , + defaultButtonSize = 36, + defaultBarRows = 1, + defaultBarCols = 6, + defaultBarSpacing = 3 + }) + +end + +function module:OnDisable() + ReAction:UnregisterBarType(L["Totem Bar"]) +end + +function module:OnDestroyBar(event, bar, name) + local btns = self.buttons[bar] + if btns then + for _,b in pairs(btns) do + if b then + b:Destroy() + end + end + self.buttons[bar] = nil + end +end + +function module:OnRefreshBar(event, bar, name) + if bar.config.type == moduleID then + local btns = self.buttons[bar] + if btns == nil then + btns = { } + self.buttons[bar] = btns + end + local profile = self.db.profile + if profile.buttons[name] == nil then + profile.buttons[name] = {} + end + local btnCfg = profile.buttons[name] + + local r, c = bar:GetButtonGrid() + local n = r*c + n = min(n,Button.SetupBarHeader(bar)) + for i = 1, n do + if btnCfg[i] == nil then + btnCfg[i] = {} + end + if btns[i] == nil then + local success, r = pcall(Button.New,Button,i,btnCfg,bar) + if success and r then + btns[i] = r + bar:AddButton(i,r) + else + geterrorhandler()(r) + n = i - 1 + bar:ClipNButtons(n) + break + end + end + btns[i]:Refresh() + end + for i = n+1, #btns do + if btns[i] then + bar:RemoveButton(btns[i]) + btns[i] = btns[i]:Destroy() + if btnCfg[i] then + btnCfg[i] = nil + end + end + end + end + +end + +function module:OnEraseBar(event, bar, name) + self.db.profile.buttons[name] = nil +end + +function module:OnRenameBar(event, bar, oldName, newName) + local b = self.db.profile.buttons + b[newname], b[oldname] = b[oldname], nil +end + +function module:RefreshAll() + for bar in pairs(self.buttons) do + self:OnRefreshBar(nil,bar,bar:GetName()) + end +end + + +---- options ---- +function module:GetOptions() + return { + stance = + { + name = L["Totem Buttons"], + type = "group", + args = { + -- TODO + } + } + } +end