Mercurial > wow > reaction
view modules/Bag.lua @ 147:901c91dc1bf2
Some refactoring of configmode/keybind handlers
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Thu, 07 May 2009 23:55:00 +0000 |
parents | 86564b5cbbff |
children | df68b5a40490 |
line wrap: on
line source
--[[ ReAction Bag button module --]] -- local imports local ReAction = ReAction local L = ReAction.L local _G = _G -- Bag button local Button = ReAction.Button.Bag -- module declaration local moduleID = "Bag" local module = ReAction:NewModule( moduleID -- mixins go here ) -- handlers function module:OnInitialize() self.db = ReAction.db:RegisterNamespace( moduleID, { profile = { buttons = { } } } ) self.buttons = { } ReAction.RegisterCallback(self, "OnCreateBar", "OnRefreshBar") ReAction.RegisterCallback(self, "OnDestroyBar") ReAction.RegisterCallback(self, "OnRefreshBar") ReAction.RegisterCallback(self, "OnEraseBar") ReAction.RegisterCallback(self, "OnRenameBar") end function module:OnEnable() ReAction:RegisterBarType(L["Bag Bar"], { type = moduleID , defaultButtonSize = 30, defaultBarRows = 1, defaultBarCols = 6, defaultBarSpacing = 4 }) end function module:OnDisable() ReAction:UnregisterBarType(L["Bag 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].bagID) 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 -- hook some functions to propagate to our bag buttons hooksecurefunc("Disable_BagButtons", function() for _, buttons in pairs(module.buttons) do for _, b in pairs(buttons) do local f = b:GetFrame() f:Disable() SetDesaturation(b.frames.icon,1) end end end) hooksecurefunc("Enable_BagButtons", function() for _, buttons in pairs(module.buttons) do for _, b in pairs(buttons) do local f = b:GetFrame() f:Enable() SetDesaturation(b.frames.icon,nil) end end end) hooksecurefunc("ContainerFrame_OnHide", function() for _, buttons in pairs(module.buttons) do for _, b in pairs(buttons) do b:Update() end end end) hooksecurefunc("ContainerFrame_OnShow", function() for _, buttons in pairs(module.buttons) do for _, b in pairs(buttons) do b:Update() end end end)