annotate modules/ReAction_ConfigUI/ReAction_ConfigUI.lua @ 51:c964fb84560c

added anchor controls
author Flick <flickerstreak@gmail.com>
date Tue, 22 Apr 2008 21:33:37 +0000
parents c3c64e2def50
children c9df7866ff31
rev   line source
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