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