flickerstreak@108: -- local imports flickerstreak@108: local ReAction = ReAction flickerstreak@108: local L = ReAction.L flickerstreak@108: local _G = _G flickerstreak@108: flickerstreak@108: -- module declaration flickerstreak@108: local moduleID = "ButtonFacade" flickerstreak@108: local module = ReAction:NewModule( moduleID ) flickerstreak@108: flickerstreak@108: -- handlers flickerstreak@108: function module:OnInitialize() flickerstreak@108: self.db = ReAction.db:RegisterNamespace( moduleID, flickerstreak@108: { flickerstreak@108: profile = { flickerstreak@108: -- default profile goes here flickerstreak@108: } flickerstreak@108: } flickerstreak@108: ) flickerstreak@108: flickerstreak@108: local LBF = LibStub("LibButtonFacade",true) flickerstreak@108: flickerstreak@108: if not LBF then -- no more initialization flickerstreak@108: return flickerstreak@108: end flickerstreak@108: flickerstreak@108: self.LBF = LBF flickerstreak@108: self.groups = { } flickerstreak@108: flickerstreak@108: -- override a method of ReAction.Bar flickerstreak@108: -- note that 'self' in this context refers to the bar flickerstreak@108: function ReAction.Bar:SkinButton( button, data ) flickerstreak@108: module:GetGroup(self:GetName()):AddButton(button:GetFrame(), data) flickerstreak@108: end flickerstreak@108: flickerstreak@108: -- register some common events flickerstreak@108: ReAction.RegisterCallback(self, "OnCreateBar") flickerstreak@108: ReAction.RegisterCallback(self, "OnDestroyBar") flickerstreak@108: ReAction.RegisterCallback(self, "OnRefreshBar") flickerstreak@108: ReAction.RegisterCallback(self, "OnEraseBar") flickerstreak@108: ReAction.RegisterCallback(self, "OnRenameBar") flickerstreak@108: flickerstreak@108: self.LBF:RegisterSkinCallback("ReAction", self.OnSkinChanged, self) flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnEnable() flickerstreak@108: flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnDisable() flickerstreak@108: flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnCreateBar(event, bar, name) flickerstreak@108: local c = self.db.profile[name] flickerstreak@108: if not c then flickerstreak@108: c = { flickerstreak@108: skinID = "Blizzard", flickerstreak@108: backdrop = true, flickerstreak@108: gloss = 0, flickerstreak@108: colors = {}, flickerstreak@108: } flickerstreak@108: self.db.profile[name] = c flickerstreak@108: end flickerstreak@108: flickerstreak@108: local g = self:GetGroup(name) flickerstreak@108: g.SkinID = c.skinID or "Blizzard" flickerstreak@108: g.Backdrop = c.backdrop flickerstreak@108: g.Gloss = c.gloss flickerstreak@108: g.Colors = c.colors flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnDestroyBar(event, bar, name) flickerstreak@108: if self.groups[name] then flickerstreak@108: self.groups[name]:Delete() flickerstreak@108: self.groups[name] = nil flickerstreak@108: end flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnRefreshBar(event, bar, name) flickerstreak@108: local c = self.db.profile[name] flickerstreak@108: local g = self.groups[name] flickerstreak@108: if c and g then flickerstreak@108: g:Skin(c.skinID, c.gloss, c.backdrop, c.colors) flickerstreak@108: end flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnEraseBar(event, bar, name) flickerstreak@108: self:OnDestroyBar(event, bar, name) flickerstreak@108: self.db.profile[name] = nil flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnRenameBar(event, bar, oldName, newName) flickerstreak@108: if self.groups[name] then flickerstreak@108: self.groups[name]:Delete(true) flickerstreak@108: self.db.profile[oldName], self.db.profile[newName] = nil, self.db.profile[oldName] flickerstreak@108: self:OnCreateBar(event, bar, newName) flickerstreak@108: end flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:OnSkinChanged( skinID, gloss, backdrop, group, button, colors ) flickerstreak@108: local c = self.db.profile[group] flickerstreak@108: if c then flickerstreak@108: c.skinID = skinID flickerstreak@108: c.gloss = gloss flickerstreak@108: c.backdrop = backdrop flickerstreak@108: c.colors = colors flickerstreak@108: end flickerstreak@108: end flickerstreak@108: flickerstreak@108: function module:GetGroup( name ) flickerstreak@108: if not self.groups[name] then flickerstreak@108: self.groups[name] = self.LBF:Group("ReAction", name) flickerstreak@108: end flickerstreak@108: return self.groups[name] flickerstreak@108: end