flickerstreak@25
|
1 --[[
|
flickerstreak@25
|
2 ReAction Configuration UI module
|
flickerstreak@25
|
3
|
flickerstreak@33
|
4 Hooks into Blizzard Interface Options AddOns panel
|
flickerstreak@25
|
5 --]]
|
flickerstreak@25
|
6
|
flickerstreak@25
|
7 -- local imports
|
flickerstreak@25
|
8 local ReAction = ReAction
|
flickerstreak@25
|
9 local L = ReAction.L
|
flickerstreak@51
|
10 local _G = _G
|
flickerstreak@47
|
11 local AceConfigReg = LibStub("AceConfigRegistry-3.0")
|
flickerstreak@47
|
12 local AceConfigDialog = LibStub("AceConfigDialog-3.0")
|
flickerstreak@25
|
13
|
flickerstreak@51
|
14 -- some constants
|
flickerstreak@51
|
15 local pointTable = {
|
flickerstreak@51
|
16 CENTER = L["Center"],
|
flickerstreak@51
|
17 LEFT = L["Left"],
|
flickerstreak@51
|
18 RIGHT = L["Right"],
|
flickerstreak@51
|
19 TOP = L["Top"],
|
flickerstreak@51
|
20 BOTTOM = L["Bottom"],
|
flickerstreak@51
|
21 TOPLEFT = L["Top Left"],
|
flickerstreak@51
|
22 TOPRIGHT = L["Top Right"],
|
flickerstreak@51
|
23 BOTTOMLEFT = L["Bottom Left"],
|
flickerstreak@51
|
24 BOTTOMRIGHT = L["Bottom Right"],
|
flickerstreak@51
|
25 }
|
flickerstreak@51
|
26
|
flickerstreak@25
|
27 -- module declaration
|
flickerstreak@25
|
28 local moduleID = "ConfigUI"
|
flickerstreak@47
|
29 local module = ReAction:NewModule( moduleID,
|
flickerstreak@47
|
30 "AceEvent-3.0"
|
flickerstreak@47
|
31 )
|
flickerstreak@25
|
32
|
flickerstreak@25
|
33 -- module methods
|
flickerstreak@25
|
34 function module:OnInitialize()
|
flickerstreak@47
|
35 self.db = ReAction.db:RegisterNamespace( moduleID,
|
flickerstreak@47
|
36 {
|
flickerstreak@47
|
37 profile = {
|
flickerstreak@47
|
38 closeOnLaunch = true,
|
flickerstreak@47
|
39 editorCloseOnLaunch = true,
|
flickerstreak@47
|
40 }
|
flickerstreak@47
|
41 }
|
flickerstreak@47
|
42 )
|
flickerstreak@47
|
43
|
flickerstreak@30
|
44 ReAction.RegisterCallback(self,"OnOptionsRegistered")
|
flickerstreak@33
|
45 ReAction.RegisterCallback(self,"OnOptionsRefreshed")
|
flickerstreak@47
|
46 ReAction.RegisterCallback(self,"OnCreateBar")
|
flickerstreak@47
|
47 ReAction.RegisterCallback(self,"OnEraseBar")
|
flickerstreak@47
|
48 ReAction.RegisterCallback(self,"OnRenameBar")
|
flickerstreak@46
|
49 self:InitializeOptions()
|
flickerstreak@47
|
50 self:RegisterEvent("PLAYER_REGEN_DISABLED")
|
flickerstreak@25
|
51 end
|
flickerstreak@25
|
52
|
flickerstreak@30
|
53 function module:OnOptionsRegistered(evt, context, module, opts)
|
flickerstreak@46
|
54 local c = self.configOptions.args[context]
|
flickerstreak@46
|
55 if c then
|
flickerstreak@30
|
56 for k, v in pairs(opts) do
|
flickerstreak@46
|
57 c.args[k] = v
|
flickerstreak@30
|
58 end
|
flickerstreak@47
|
59 elseif c == "bar" then
|
flickerstreak@47
|
60
|
flickerstreak@30
|
61 end
|
flickerstreak@25
|
62 end
|
flickerstreak@25
|
63
|
flickerstreak@33
|
64 function module:OnOptionsRefreshed(evt)
|
flickerstreak@48
|
65 AceConfigReg:NotifyChange("ReAction")
|
flickerstreak@48
|
66 AceConfigReg:NotifyChange("ReAction-Layout")
|
flickerstreak@25
|
67 end
|
flickerstreak@25
|
68
|
flickerstreak@47
|
69 function module:OnCreateBar(evt, bar)
|
flickerstreak@47
|
70 local name = bar:GetName()
|
flickerstreak@47
|
71 -- AceConfig doesn't allow spaces, etc, in arg key names, and they must be
|
flickerstreak@47
|
72 -- unique strings. So generate a unique key (it can be whatever) for the bar
|
flickerstreak@47
|
73 local key
|
flickerstreak@47
|
74 local i = 1
|
flickerstreak@47
|
75 repeat
|
flickerstreak@47
|
76 key = ("bar%s"):format(i)
|
flickerstreak@47
|
77 i = i+1
|
flickerstreak@47
|
78 until self.layoutOpts.args[key] == nil
|
flickerstreak@47
|
79 self.barOptMap[name] = key
|
flickerstreak@47
|
80 self.layoutOpts.args[key] = {
|
flickerstreak@47
|
81 type = "group",
|
flickerstreak@47
|
82 name = name,
|
flickerstreak@47
|
83 childGroups = "tab",
|
flickerstreak@47
|
84 args = {
|
flickerstreak@47
|
85 general = {
|
flickerstreak@47
|
86 type = "group",
|
flickerstreak@47
|
87 name = L["General"],
|
flickerstreak@47
|
88 args = {
|
flickerstreak@47
|
89 name = {
|
flickerstreak@47
|
90 type = "input",
|
flickerstreak@47
|
91 name = L["Rename Bar"],
|
flickerstreak@47
|
92 get = function() return bar:GetName() end,
|
flickerstreak@47
|
93 set = function(info, value) return ReAction:RenameBar(bar, value) end,
|
flickerstreak@47
|
94 order = 1,
|
flickerstreak@47
|
95 },
|
flickerstreak@47
|
96 delete = {
|
flickerstreak@47
|
97 type = "execute",
|
flickerstreak@47
|
98 name = L["Delete Bar"],
|
flickerstreak@47
|
99 desc = function() return bar:GetName() end,
|
flickerstreak@47
|
100 confirm = true,
|
flickerstreak@47
|
101 func = function() ReAction:EraseBar(bar) end,
|
flickerstreak@51
|
102 order = 2
|
flickerstreak@47
|
103 },
|
flickerstreak@51
|
104 anchor = {
|
flickerstreak@51
|
105 type = "group",
|
flickerstreak@51
|
106 name = L["Anchor"],
|
flickerstreak@51
|
107 inline = true,
|
flickerstreak@51
|
108 args = {
|
flickerstreak@51
|
109 frame = {
|
flickerstreak@51
|
110 type = "input",
|
flickerstreak@51
|
111 name = L["Frame"],
|
flickerstreak@51
|
112 desc = L["The frame that the bar is anchored to"],
|
flickerstreak@51
|
113 get = function() local _, f = bar:GetAnchor(); return f end,
|
flickerstreak@51
|
114 set = function(info, val) bar:SetAnchor(nil,val) end,
|
flickerstreak@51
|
115 validate = function(info, name)
|
flickerstreak@51
|
116 if name then
|
flickerstreak@51
|
117 local f = ReAction:GetBar(name)
|
flickerstreak@51
|
118 if f then
|
flickerstreak@51
|
119 return true
|
flickerstreak@51
|
120 else
|
flickerstreak@51
|
121 f = _G[name]
|
flickerstreak@51
|
122 if f and type(f) == "table" and f.IsObjectType and f:IsObjectType("Frame") then
|
flickerstreak@51
|
123 return true
|
flickerstreak@51
|
124 end
|
flickerstreak@51
|
125 end
|
flickerstreak@51
|
126 end
|
flickerstreak@51
|
127 return false
|
flickerstreak@51
|
128 end,
|
flickerstreak@51
|
129 width = "double",
|
flickerstreak@51
|
130 order = 1
|
flickerstreak@51
|
131 },
|
flickerstreak@51
|
132 point = {
|
flickerstreak@51
|
133 type = "select",
|
flickerstreak@51
|
134 name = L["Point"],
|
flickerstreak@51
|
135 desc = L["Anchor point on the bar frame"],
|
flickerstreak@51
|
136 style = "dropdown",
|
flickerstreak@51
|
137 get = function() return bar:GetAnchor() end,
|
flickerstreak@51
|
138 set = function(info, val) bar:SetAnchor(val) end,
|
flickerstreak@51
|
139 values = pointTable,
|
flickerstreak@51
|
140 order = 2,
|
flickerstreak@51
|
141 },
|
flickerstreak@51
|
142 relativePoint = {
|
flickerstreak@51
|
143 type = "select",
|
flickerstreak@51
|
144 name = L["Relative Point"],
|
flickerstreak@51
|
145 desc = L["Anchor point on the target frame"],
|
flickerstreak@51
|
146 style = "dropdown",
|
flickerstreak@51
|
147 get = function() local p,f,r = bar:GetAnchor(); return r end,
|
flickerstreak@51
|
148 set = function(info, val) bar:SetAnchor(nil,nil,val) end,
|
flickerstreak@51
|
149 values = pointTable,
|
flickerstreak@51
|
150 order = 3,
|
flickerstreak@51
|
151 },
|
flickerstreak@51
|
152 x = {
|
flickerstreak@51
|
153 type = "input",
|
flickerstreak@51
|
154 pattern = "\-?%d+",
|
flickerstreak@51
|
155 name = L["X offset"],
|
flickerstreak@51
|
156 get = function() local p,f,r,x = bar:GetAnchor(); return x end,
|
flickerstreak@51
|
157 set = function(info,val) bar:SetAnchor(nil,nil,nil,val) end,
|
flickerstreak@51
|
158 order = 4
|
flickerstreak@51
|
159 },
|
flickerstreak@51
|
160 y = {
|
flickerstreak@51
|
161 type = "input",
|
flickerstreak@51
|
162 pattern = "\-?%d+",
|
flickerstreak@51
|
163 name = L["Y offset"],
|
flickerstreak@51
|
164 get = function() local p,f,r,x,y = bar:GetAnchor(); return y end,
|
flickerstreak@51
|
165 set = function(info,val) bar:SetAnchor(nil,nil,nil,nil,val) end,
|
flickerstreak@51
|
166 order = 5
|
flickerstreak@51
|
167 },
|
flickerstreak@51
|
168 },
|
flickerstreak@51
|
169 order = 3
|
flickerstreak@51
|
170 },
|
flickerstreak@51
|
171 },
|
flickerstreak@47
|
172 },
|
flickerstreak@47
|
173 },
|
flickerstreak@47
|
174
|
flickerstreak@47
|
175 }
|
flickerstreak@47
|
176 end
|
flickerstreak@47
|
177
|
flickerstreak@47
|
178 function module:OnEraseBar(evt, name)
|
flickerstreak@47
|
179 local key = self.barOptMap[name]
|
flickerstreak@47
|
180 self.barOptMap[name] = nil
|
flickerstreak@47
|
181 if key then
|
flickerstreak@47
|
182 self.layoutOpts.args[key] = nil
|
flickerstreak@47
|
183 self:RefreshLayoutEditor()
|
flickerstreak@25
|
184 end
|
flickerstreak@25
|
185 end
|
flickerstreak@44
|
186
|
flickerstreak@47
|
187 function module:OnRenameBar(evt, oldname, newname)
|
flickerstreak@47
|
188 local key = self.barOptMap[oldname]
|
flickerstreak@47
|
189 self.barOptMap[oldname], self.barOptMap[newname] = nil, key
|
flickerstreak@47
|
190 if key then
|
flickerstreak@47
|
191 self.layoutOpts.args[key].name = newname
|
flickerstreak@47
|
192 self:RefreshLayoutEditor()
|
flickerstreak@47
|
193 end
|
flickerstreak@47
|
194 end
|
flickerstreak@47
|
195
|
flickerstreak@47
|
196 function module:PLAYER_REGEN_DISABLED()
|
flickerstreak@47
|
197 if self.editor then
|
flickerstreak@47
|
198 self.editor:Hide()
|
flickerstreak@47
|
199 end
|
flickerstreak@47
|
200 end
|
flickerstreak@47
|
201
|
flickerstreak@47
|
202 function module:UserError(msg)
|
flickerstreak@47
|
203 -- any user errors should be flashed to the UIErrorsFrame
|
flickerstreak@47
|
204 UIErrorsFrame:AddMessage(msg)
|
flickerstreak@47
|
205 end
|
flickerstreak@47
|
206
|
flickerstreak@47
|
207 function module:OpenConfig()
|
flickerstreak@47
|
208 InterfaceOptionsFrame_OpenToFrame("ReAction")
|
flickerstreak@47
|
209 end
|
flickerstreak@47
|
210
|
flickerstreak@47
|
211 function module:LaunchLayoutEditor(bar)
|
flickerstreak@47
|
212 if InCombatLockdown() then
|
flickerstreak@47
|
213 self:UserError(L["ReAction config mode disabled during combat."])
|
flickerstreak@47
|
214 else
|
flickerstreak@47
|
215 if not self.editor then
|
flickerstreak@47
|
216 -- use a local container to work around AceConfigDialog closing
|
flickerstreak@47
|
217 -- both the layout editor and the global options when interface options is closed
|
flickerstreak@47
|
218 local ed = LibStub("AceGUI-3.0"):Create("Frame")
|
flickerstreak@47
|
219 ed.frame:SetClampedToScreen(true)
|
flickerstreak@47
|
220 local old_OnUpdate = ed.frame:GetScript("OnUpdate")
|
flickerstreak@47
|
221 ed.frame:SetScript("OnUpdate", function(dt)
|
flickerstreak@47
|
222 if old_OnUpdate then
|
flickerstreak@47
|
223 old_OnUpdate(dt)
|
flickerstreak@47
|
224 end
|
flickerstreak@47
|
225 if ed.closePending then
|
flickerstreak@47
|
226 InterfaceOptionsFrame:Hide()
|
flickerstreak@47
|
227 ed.closePending = false
|
flickerstreak@47
|
228 end
|
flickerstreak@47
|
229 if ed.selfClosePending then
|
flickerstreak@47
|
230 ed:Hide()
|
flickerstreak@47
|
231 AceConfigReg:NotifyChange("ReAction")
|
flickerstreak@47
|
232 ed.selfClosePending = false
|
flickerstreak@47
|
233 end
|
flickerstreak@47
|
234 end )
|
flickerstreak@47
|
235 ed:SetCallback("OnClose",
|
flickerstreak@47
|
236 function()
|
flickerstreak@47
|
237 ReAction:SetConfigMode(false)
|
flickerstreak@47
|
238 end )
|
flickerstreak@47
|
239 self.editor = ed
|
flickerstreak@48
|
240 AceConfigDialog:SetDefaultSize("ReAction-Layout", 640, 420)
|
flickerstreak@47
|
241 end
|
flickerstreak@47
|
242
|
flickerstreak@47
|
243 AceConfigDialog:Open("ReAction-Layout", self.editor)
|
flickerstreak@47
|
244 ReAction:SetConfigMode(true)
|
flickerstreak@47
|
245 end
|
flickerstreak@47
|
246 end
|
flickerstreak@47
|
247
|
flickerstreak@47
|
248 function module:RefreshLayoutEditor()
|
flickerstreak@47
|
249 AceConfigReg:NotifyChange("ReAction-Layout")
|
flickerstreak@47
|
250 if self.editor and self.editor.frame:IsShown() then
|
flickerstreak@47
|
251 AceConfigDialog:Open("ReAction-Layout", self.editor)
|
flickerstreak@47
|
252 end
|
flickerstreak@47
|
253 end
|
flickerstreak@47
|
254
|
flickerstreak@47
|
255 function module:GetBarTypes()
|
flickerstreak@47
|
256 local opts = self.optBarTypes or { }
|
flickerstreak@48
|
257 self.optBarTypes = { }
|
flickerstreak@48
|
258 for k,v in pairs(opts) do
|
flickerstreak@48
|
259 opts[k] = nil
|
flickerstreak@48
|
260 end
|
flickerstreak@48
|
261 for k in pairs(ReAction.defaultBarConfig) do
|
flickerstreak@48
|
262 opts[k] = k
|
flickerstreak@48
|
263 end
|
flickerstreak@47
|
264 return opts
|
flickerstreak@47
|
265 end
|
flickerstreak@47
|
266
|
flickerstreak@47
|
267 function module:CreateBar()
|
flickerstreak@50
|
268 if self.tmpBarName and self.tmpBarName ~= "" then
|
flickerstreak@50
|
269 ReAction:CreateBar(self.tmpBarName, self.tmpBarType or ReAction.defaultBarConfigChoice, self.tmpBarRows, self.tmpBarCols, self.tmpBarSize, self.tmpBarSpacing)
|
flickerstreak@48
|
270 self.tmpBarName = nil
|
flickerstreak@48
|
271 end
|
flickerstreak@47
|
272 end
|
flickerstreak@47
|
273
|
flickerstreak@46
|
274 function module:InitializeOptions()
|
flickerstreak@47
|
275 -- general config options
|
flickerstreak@47
|
276 local opts = {
|
flickerstreak@46
|
277 type = "group",
|
flickerstreak@47
|
278 name = "ReAction",
|
flickerstreak@46
|
279 childGroups = "tab",
|
flickerstreak@46
|
280 args = {
|
flickerstreak@47
|
281 _desc = {
|
flickerstreak@47
|
282 type = "description",
|
flickerstreak@47
|
283 name = L["Customizable replacement for Blizzard's Action Bars"],
|
flickerstreak@47
|
284 order = 1,
|
flickerstreak@47
|
285 },
|
flickerstreak@47
|
286 _launchLayout = {
|
flickerstreak@47
|
287 type = "execute",
|
flickerstreak@47
|
288 handler = self,
|
flickerstreak@47
|
289 name = L["Layout Editor..."],
|
flickerstreak@47
|
290 desc = L["Show the ReAction Layout Editor to edit your bars"],
|
flickerstreak@47
|
291 func = function()
|
flickerstreak@47
|
292 self:LaunchLayoutEditor()
|
flickerstreak@47
|
293 -- you can't close a dialog in response to an options click, because the end of the
|
flickerstreak@47
|
294 -- handler for all the button events calls lib:Open()
|
flickerstreak@47
|
295 -- So, schedule a close on the next OnUpdate
|
flickerstreak@47
|
296 if self.db.profile.closeOnLaunch then
|
flickerstreak@47
|
297 self.editor.closePending = true
|
flickerstreak@47
|
298 end
|
flickerstreak@47
|
299 end,
|
flickerstreak@47
|
300 order = 2,
|
flickerstreak@47
|
301 },
|
flickerstreak@47
|
302 _closeThis = {
|
flickerstreak@47
|
303 type = "toggle",
|
flickerstreak@47
|
304 name = L["Close on Launch"],
|
flickerstreak@47
|
305 desc = L["Close the Interface Options window when launching the ReAction Layout Editor"],
|
flickerstreak@47
|
306 get = function() return self.db.profile.closeOnLaunch end,
|
flickerstreak@47
|
307 set = function(info, val) self.db.profile.closeOnLaunch = val end,
|
flickerstreak@47
|
308 order = 3,
|
flickerstreak@47
|
309 },
|
flickerstreak@46
|
310 global = {
|
flickerstreak@46
|
311 type = "group",
|
flickerstreak@46
|
312 name = L["Global Settings"],
|
flickerstreak@46
|
313 desc = L["Global configuration settings"],
|
flickerstreak@46
|
314 args = { },
|
flickerstreak@47
|
315 order = 3,
|
flickerstreak@46
|
316 },
|
flickerstreak@47
|
317 _profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(ReAction.db),
|
flickerstreak@46
|
318 module = {
|
flickerstreak@46
|
319 type = "group",
|
flickerstreak@46
|
320 childGroups = "select",
|
flickerstreak@46
|
321 name = L["Module Settings"],
|
flickerstreak@46
|
322 desc = L["Configuration settings for each module"],
|
flickerstreak@46
|
323 args = { },
|
flickerstreak@46
|
324 order = -1,
|
flickerstreak@46
|
325 },
|
flickerstreak@46
|
326 },
|
flickerstreak@46
|
327 plugins = { }
|
flickerstreak@46
|
328 }
|
flickerstreak@47
|
329 self.configOptions = opts
|
flickerstreak@47
|
330 opts.args._profile.order = -2
|
flickerstreak@47
|
331 AceConfigReg:RegisterOptionsTable("ReAction",opts)
|
flickerstreak@47
|
332 self.frame = AceConfigDialog:AddToBlizOptions("ReAction", "ReAction")
|
flickerstreak@47
|
333 self.frame.obj:SetCallback("default",
|
flickerstreak@47
|
334 function()
|
flickerstreak@47
|
335 ReAction.db:ResetProfile()
|
flickerstreak@47
|
336 module:OpenConfig()
|
flickerstreak@47
|
337 end )
|
flickerstreak@46
|
338
|
flickerstreak@47
|
339 -- import options from registered modules
|
flickerstreak@47
|
340 for c, tbl in pairs(opts.args) do
|
flickerstreak@46
|
341 for _, m in pairs(ReAction:GetOptions(c)) do
|
flickerstreak@46
|
342 for k, v in pairs(m) do
|
flickerstreak@46
|
343 tbl.args[k] = v
|
flickerstreak@46
|
344 end
|
flickerstreak@46
|
345 end
|
flickerstreak@46
|
346 end
|
flickerstreak@46
|
347
|
flickerstreak@46
|
348 ReAction:RegisterOptions("module",self, {
|
flickerstreak@46
|
349 configUI = {
|
flickerstreak@46
|
350 type = "group",
|
flickerstreak@46
|
351 name = "Config UI",
|
flickerstreak@46
|
352 desc = "description",
|
flickerstreak@46
|
353 args = {
|
flickerstreak@46
|
354 foo = {
|
flickerstreak@46
|
355 type = "toggle",
|
flickerstreak@46
|
356 handler = self,
|
flickerstreak@46
|
357 name = "foo",
|
flickerstreak@46
|
358 desc = "description",
|
flickerstreak@46
|
359 get = function() return true end,
|
flickerstreak@46
|
360 set = function() end,
|
flickerstreak@46
|
361 }
|
flickerstreak@46
|
362 }
|
flickerstreak@46
|
363 },
|
flickerstreak@46
|
364 })
|
flickerstreak@46
|
365
|
flickerstreak@47
|
366 -- layout editor options
|
flickerstreak@47
|
367 local layoutOpts = {
|
flickerstreak@47
|
368 type = "group",
|
flickerstreak@47
|
369 name = ("ReAction - %s"):format(L["Layout"]),
|
flickerstreak@47
|
370 handler = self,
|
flickerstreak@47
|
371 childGroups = "tree",
|
flickerstreak@47
|
372 args = {
|
flickerstreak@47
|
373 desc = {
|
flickerstreak@47
|
374 type = "description",
|
flickerstreak@47
|
375 name = L["Use the mouse to arrange and resize the bars on screen. Tooltips on bars indicate additional functionality."],
|
flickerstreak@47
|
376 order = 1
|
flickerstreak@47
|
377 },
|
flickerstreak@47
|
378 launchConfig = {
|
flickerstreak@47
|
379 type = "execute",
|
flickerstreak@47
|
380 name = L["Global Config"],
|
flickerstreak@47
|
381 desc = L["Opens ReAction global configuration settings panel"],
|
flickerstreak@47
|
382 func = function()
|
flickerstreak@47
|
383 self:OpenConfig()
|
flickerstreak@47
|
384 -- you can't close a dialog in response to an options click, because the end of the
|
flickerstreak@47
|
385 -- handler for all the button events calls lib:Open()
|
flickerstreak@48
|
386 -- So, schedule a close on the next OnUpdate
|
flickerstreak@47
|
387 if self.db.profile.editorCloseOnLaunch then
|
flickerstreak@47
|
388 self.editor.selfClosePending = true
|
flickerstreak@47
|
389 end
|
flickerstreak@47
|
390 end,
|
flickerstreak@47
|
391 order = 2
|
flickerstreak@47
|
392 },
|
flickerstreak@48
|
393 closeThis = {
|
flickerstreak@47
|
394 type = "toggle",
|
flickerstreak@47
|
395 name = L["Close on Launch"],
|
flickerstreak@47
|
396 desc = L["Close the Layout Editor when opening the ReAction global Interface Options"],
|
flickerstreak@47
|
397 get = function() return self.db.profile.editorCloseOnLaunch end,
|
flickerstreak@47
|
398 set = function(info, val) self.db.profile.editorCloseOnLaunch = val end,
|
flickerstreak@47
|
399 order = 3,
|
flickerstreak@47
|
400 },
|
flickerstreak@47
|
401 new = {
|
flickerstreak@47
|
402 type = "group",
|
flickerstreak@47
|
403 name = L["New Bar..."],
|
flickerstreak@47
|
404 order = 4,
|
flickerstreak@47
|
405 args = {
|
flickerstreak@47
|
406 desc = {
|
flickerstreak@47
|
407 type = "description",
|
flickerstreak@47
|
408 name = L["Choose a name, type, and initial grid for your new action bar:"],
|
flickerstreak@47
|
409 order = 1,
|
flickerstreak@47
|
410 },
|
flickerstreak@47
|
411 name = {
|
flickerstreak@47
|
412 type = "input",
|
flickerstreak@47
|
413 name = L["Bar Name"],
|
flickerstreak@47
|
414 desc = L["Enter a name for your new action bar"],
|
flickerstreak@47
|
415 get = function() return self.tmpBarName or "" end,
|
flickerstreak@47
|
416 set = function(info, val) self.tmpBarName = val end,
|
flickerstreak@47
|
417 order = 2,
|
flickerstreak@47
|
418 },
|
flickerstreak@47
|
419 type = {
|
flickerstreak@47
|
420 type = "select",
|
flickerstreak@47
|
421 name = L["Button Type"],
|
flickerstreak@48
|
422 get = function() return self.tmpBarType or ReAction.defaultBarConfigChoice or "" end,
|
flickerstreak@47
|
423 set = function(info, val) self.tmpBarType = val end,
|
flickerstreak@47
|
424 values = "GetBarTypes",
|
flickerstreak@47
|
425 order = 3,
|
flickerstreak@47
|
426 },
|
flickerstreak@47
|
427 grid = {
|
flickerstreak@47
|
428 type = "group",
|
flickerstreak@47
|
429 name = L["Button Grid"],
|
flickerstreak@47
|
430 inline = true,
|
flickerstreak@47
|
431 args = {
|
flickerstreak@47
|
432 hdr = {
|
flickerstreak@47
|
433 type = "header",
|
flickerstreak@47
|
434 name = L["Button Grid"],
|
flickerstreak@47
|
435 order = 1,
|
flickerstreak@47
|
436 },
|
flickerstreak@47
|
437 rows = {
|
flickerstreak@47
|
438 type = "range",
|
flickerstreak@47
|
439 name = L["Rows"],
|
flickerstreak@47
|
440 get = function() return self.tmpBarRows or 1 end,
|
flickerstreak@47
|
441 set = function(info, val) self.tmpBarRows = val end,
|
flickerstreak@47
|
442 width = "half",
|
flickerstreak@47
|
443 min = 1,
|
flickerstreak@47
|
444 max = 32,
|
flickerstreak@47
|
445 step = 1,
|
flickerstreak@47
|
446 order = 2,
|
flickerstreak@47
|
447 },
|
flickerstreak@47
|
448 cols = {
|
flickerstreak@47
|
449 type = "range",
|
flickerstreak@47
|
450 name = L["Columns"],
|
flickerstreak@47
|
451 get = function() return self.tmpBarCols or 12 end,
|
flickerstreak@47
|
452 set = function(info, val) self.tmpBarCols = val end,
|
flickerstreak@47
|
453 width = "half",
|
flickerstreak@47
|
454 min = 1,
|
flickerstreak@47
|
455 max = 32,
|
flickerstreak@47
|
456 step = 1,
|
flickerstreak@47
|
457 order = 3,
|
flickerstreak@47
|
458 },
|
flickerstreak@47
|
459 sz = {
|
flickerstreak@47
|
460 type = "range",
|
flickerstreak@47
|
461 name = L["Size"],
|
flickerstreak@47
|
462 get = function() return self.tmpBarSize or 36 end,
|
flickerstreak@47
|
463 set = function(info, val) self.tmpBarSize = val end,
|
flickerstreak@47
|
464 width = "half",
|
flickerstreak@47
|
465 min = 10,
|
flickerstreak@47
|
466 max = 72,
|
flickerstreak@47
|
467 step = 1,
|
flickerstreak@47
|
468 order = 4,
|
flickerstreak@47
|
469 },
|
flickerstreak@47
|
470 spacing = {
|
flickerstreak@47
|
471 type = "range",
|
flickerstreak@47
|
472 name = L["Spacing"],
|
flickerstreak@47
|
473 get = function() return self.tmpBarSpacing or 3 end,
|
flickerstreak@47
|
474 set = function(info, val) self.tmpBarSpacing = val end,
|
flickerstreak@47
|
475 width = "half",
|
flickerstreak@47
|
476 min = 0,
|
flickerstreak@47
|
477 max = 24,
|
flickerstreak@47
|
478 step = 1,
|
flickerstreak@47
|
479 order = 5,
|
flickerstreak@47
|
480 }
|
flickerstreak@47
|
481 },
|
flickerstreak@47
|
482 order = 4
|
flickerstreak@47
|
483 },
|
flickerstreak@47
|
484 spacer = {
|
flickerstreak@47
|
485 type = "header",
|
flickerstreak@47
|
486 name = "",
|
flickerstreak@47
|
487 width = "full",
|
flickerstreak@47
|
488 order = -2
|
flickerstreak@47
|
489 },
|
flickerstreak@47
|
490 go = {
|
flickerstreak@47
|
491 type = "execute",
|
flickerstreak@47
|
492 name = L["Create Bar"],
|
flickerstreak@47
|
493 func = "CreateBar",
|
flickerstreak@47
|
494 order = -1,
|
flickerstreak@47
|
495 }
|
flickerstreak@47
|
496 }
|
flickerstreak@47
|
497 }
|
flickerstreak@47
|
498 }
|
flickerstreak@47
|
499 }
|
flickerstreak@47
|
500 self.layoutOpts = layoutOpts
|
flickerstreak@47
|
501 self.barOptMap = { }
|
flickerstreak@47
|
502 AceConfigReg:RegisterOptionsTable("ReAction-Layout",layoutOpts)
|
flickerstreak@44
|
503 end
|
flickerstreak@44
|
504
|