comparison 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
comparison
equal deleted inserted replaced
160:caec78119a17 161:d0a41fc7b0d7
1 --[[
2 ReAction Totem button module
3
4 --]]
5
6 -- local imports
7 local ReAction = ReAction
8 local L = ReAction.L
9 local _G = _G
10
11 -- button
12 local Button = ReAction.Button.MultiCast
13
14 -- module declaration
15 local moduleID = "Totem"
16 local module = ReAction:NewModule( moduleID,
17 "AceEvent-3.0"
18 -- mixins go here
19 )
20
21 -- handlers
22 function module:OnInitialize()
23 self.db = ReAction.db:RegisterNamespace( moduleID,
24 {
25 profile = {
26 buttons = { }
27 }
28 }
29 )
30
31 self.buttons = { }
32
33 ReAction:RegisterOptions(self, self:GetOptions())
34
35 ReAction.RegisterCallback(self, "OnCreateBar", "OnRefreshBar")
36 ReAction.RegisterCallback(self, "OnDestroyBar")
37 ReAction.RegisterCallback(self, "OnRefreshBar")
38 ReAction.RegisterCallback(self, "OnEraseBar")
39 ReAction.RegisterCallback(self, "OnRenameBar")
40
41 -- TODO: register for learning new spells
42 end
43
44 function module:OnEnable()
45 ReAction:RegisterBarType(L["Totem Bar"],
46 {
47 type = moduleID ,
48 defaultButtonSize = 36,
49 defaultBarRows = 1,
50 defaultBarCols = 6,
51 defaultBarSpacing = 3
52 })
53
54 end
55
56 function module:OnDisable()
57 ReAction:UnregisterBarType(L["Totem Bar"])
58 end
59
60 function module:OnDestroyBar(event, bar, name)
61 local btns = self.buttons[bar]
62 if btns then
63 for _,b in pairs(btns) do
64 if b then
65 b:Destroy()
66 end
67 end
68 self.buttons[bar] = nil
69 end
70 end
71
72 function module:OnRefreshBar(event, bar, name)
73 if bar.config.type == moduleID then
74 local btns = self.buttons[bar]
75 if btns == nil then
76 btns = { }
77 self.buttons[bar] = btns
78 end
79 local profile = self.db.profile
80 if profile.buttons[name] == nil then
81 profile.buttons[name] = {}
82 end
83 local btnCfg = profile.buttons[name]
84
85 local r, c = bar:GetButtonGrid()
86 local n = r*c
87 n = min(n,Button.SetupBarHeader(bar))
88 for i = 1, n do
89 if btnCfg[i] == nil then
90 btnCfg[i] = {}
91 end
92 if btns[i] == nil then
93 local success, r = pcall(Button.New,Button,i,btnCfg,bar)
94 if success and r then
95 btns[i] = r
96 bar:AddButton(i,r)
97 else
98 geterrorhandler()(r)
99 n = i - 1
100 bar:ClipNButtons(n)
101 break
102 end
103 end
104 btns[i]:Refresh()
105 end
106 for i = n+1, #btns do
107 if btns[i] then
108 bar:RemoveButton(btns[i])
109 btns[i] = btns[i]:Destroy()
110 if btnCfg[i] then
111 btnCfg[i] = nil
112 end
113 end
114 end
115 end
116
117 end
118
119 function module:OnEraseBar(event, bar, name)
120 self.db.profile.buttons[name] = nil
121 end
122
123 function module:OnRenameBar(event, bar, oldName, newName)
124 local b = self.db.profile.buttons
125 b[newname], b[oldname] = b[oldname], nil
126 end
127
128 function module:RefreshAll()
129 for bar in pairs(self.buttons) do
130 self:OnRefreshBar(nil,bar,bar:GetName())
131 end
132 end
133
134
135 ---- options ----
136 function module:GetOptions()
137 return {
138 stance =
139 {
140 name = L["Totem Buttons"],
141 type = "group",
142 args = {
143 -- TODO
144 }
145 }
146 }
147 end