Mercurial > wow > reaction
diff modules/Stance.lua @ 134:d186e041ca14
Added stance bar support
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Tue, 17 Mar 2009 23:38:38 +0000 |
parents | |
children | 901c91dc1bf2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/Stance.lua Tue Mar 17 23:38:38 2009 +0000 @@ -0,0 +1,210 @@ +--[[ + ReAction Stance button module + +--]] + +-- local imports +local ReAction = ReAction +local L = ReAction.L +local _G = _G + +-- Stance button +local Button = ReAction.Button.Stance + +-- module declaration +local moduleID = "Stance" +local module = ReAction:NewModule( moduleID + -- mixins go here +) + +-- libraries +local KB = LibStub("LibKeyBound-1.0") + +-- 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") + ReAction.RegisterCallback(self, "OnConfigModeChanged") + + KB.RegisterCallback(self, "LIBKEYBOUND_ENABLED") + KB.RegisterCallback(self, "LIBKEYBOUND_DISABLED") + KB.RegisterCallback(self, "LIBKEYBOUND_MODE_COLOR_CHANGED","LIBKEYBOUND_ENABLED") +end + +function module:OnEnable() + ReAction:RegisterBarType(L["Stance Bar"], + { + type = moduleID , + defaultButtonSize = 36, + defaultBarRows = 1, + defaultBarCols = 8, + defaultBarSpacing = 3 + }) + +end + +function module:OnDisable() + ReAction:UnregisterBarType(L["Stance 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 + 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,profile,bar,i>1 and btnCfg[i-1].stanceID) + if success and r then + btns[i] = r + bar:AddButton(i,r) + else + 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:OnConfigModeChanged(event, mode) + for bar in pairs(self.buttons) do + for b in bar:IterateButtons() do + b:UpdateActionIDLabel(mode) + end + end +end + +function module:LIBKEYBOUND_ENABLED(evt) + for _, buttons in pairs(self.buttons) do + for _, b in pairs(buttons) do + b:SetKeybindMode(true) + end + end +end + +function module:LIBKEYBOUND_DISABLED(evt) + for _, buttons in pairs(self.buttons) do + for _, b in pairs(buttons) do + b:SetKeybindMode(false) + end + end +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["Stance Buttons"], + type = "group", + args = { + showAspects = { + name = L["Show Aspects"], + desc = L["Show Hunter aspects as stances"], + order = 1, + width = "double", + type = "toggle", + set = function(info,value) self.db.profile.showHunterAspects = value; self:RefreshAll() end, + get = function() return self.db.profile.showHunterAspects end, + }, + hideMonkeyHawk = { + name = L["Auto-hide Monkey/Hawk"], + desc = L["Hide Aspect of the Monkey and Aspect of the Hawk, only when the hunter knows Aspect of the Dragonhawk"], + order = 2, + width = "double", + type = "toggle", + set = function(info,value) self.db.profile.hideMonkeyHawk = value; self:RefreshAll() end, + get = function() return self.db.profile.hideMonkeyHawk end, + disabled = function() return self.db.profile.showHunterAspects == false end, + }, + hidePresences = { + name = L["Hide Presences"], + desc = L["Do not show Death Knight Presences as stances"], + order = 3, + width = "double", + type = "toggle", + set = function(info,value) self.db.profile.hideDKPresences = value; self:RefreshAll() end, + get = function() return self.db.profile.hideDKPresences end, + }, + hideAuras = { + name = L["Hide Auras"], + desc = L["Do not show Paladin Auras as stances"], + order = 4, + width = "double", + type = "toggle", + set = function(info,value) self.db.profile.hidePaladinAuras = value; self:RefreshAll() end, + get = function() return self.db.profile.hidePaladinAuras end, + }, + } + } + } +end