annotate modules/ReAction_ConfigUI/ReAction_ConfigUI.lua @ 58:20003239af0b

changed "layout editor" to "bar editor"
author Flick <flickerstreak@gmail.com>
date Mon, 28 Apr 2008 21:08:35 +0000
parents 7e09c02ae620
children 7430a8dd4e90
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@58 66 AceConfigReg:NotifyChange("ReAction-Editor")
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@58 78 until self.editorOpts.args[key] == nil
flickerstreak@47 79 self.barOptMap[name] = key
flickerstreak@58 80 self.editorOpts.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@52 156 get = function() local p,f,r,x = bar:GetAnchor(); return ("%d"):format(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@52 164 get = function() local p,f,r,x,y = bar:GetAnchor(); return ("%d"):format(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@58 182 self.editorOpts.args[key] = nil
flickerstreak@58 183 self:RefreshBarEditor()
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@58 191 self.editorOpts.args[key].name = newname
flickerstreak@58 192 self:RefreshBarEditor()
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@58 211 function module:LaunchBarEditor(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@58 217 -- both the bar 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@58 240 AceConfigDialog:SetDefaultSize("ReAction-Editor", 640, 420)
flickerstreak@47 241 end
flickerstreak@47 242
flickerstreak@58 243 AceConfigDialog:Open("ReAction-Editor", self.editor)
flickerstreak@47 244 ReAction:SetConfigMode(true)
flickerstreak@47 245 end
flickerstreak@47 246 end
flickerstreak@47 247
flickerstreak@58 248 function module:RefreshBarEditor()
flickerstreak@58 249 AceConfigReg:NotifyChange("ReAction-Editor")
flickerstreak@47 250 if self.editor and self.editor.frame:IsShown() then
flickerstreak@58 251 AceConfigDialog:Open("ReAction-Editor", 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@58 286 _launchEditor = {
flickerstreak@47 287 type = "execute",
flickerstreak@47 288 handler = self,
flickerstreak@58 289 name = L["Edit Bars..."],
flickerstreak@58 290 desc = L["Show the ReAction Bar Editor dialogue"],
flickerstreak@47 291 func = function()
flickerstreak@58 292 self:LaunchBarEditor()
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@58 305 desc = L["Close the Interface Options window when launching the ReAction Bar 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@58 366 -- bar editor options
flickerstreak@58 367 local editorOpts = {
flickerstreak@47 368 type = "group",
flickerstreak@58 369 name = ("ReAction - %s"):format(L["Bar Editor"]),
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@58 396 desc = L["Close the Bar 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@53 423 set = function(info, val)
flickerstreak@53 424 local c = ReAction.defaultBarConfig[val]
flickerstreak@53 425 self.tmpBarType = val
flickerstreak@53 426 self.tmpBarSize = c.defaultButtonSize or self.tmpBarSize
flickerstreak@53 427 self.tmpBarRows = c.defaultBarRows or self.tmpBarRows
flickerstreak@53 428 self.tmpBarCols = c.defaultBarCols or self.tmpBarCols
flickerstreak@53 429 self.tmpBarSpacing = c.defaultBarSpacing or self.tmpBarSpacing
flickerstreak@53 430 end,
flickerstreak@47 431 values = "GetBarTypes",
flickerstreak@47 432 order = 3,
flickerstreak@47 433 },
flickerstreak@47 434 grid = {
flickerstreak@47 435 type = "group",
flickerstreak@47 436 name = L["Button Grid"],
flickerstreak@47 437 inline = true,
flickerstreak@47 438 args = {
flickerstreak@47 439 hdr = {
flickerstreak@47 440 type = "header",
flickerstreak@47 441 name = L["Button Grid"],
flickerstreak@47 442 order = 1,
flickerstreak@47 443 },
flickerstreak@47 444 rows = {
flickerstreak@47 445 type = "range",
flickerstreak@47 446 name = L["Rows"],
flickerstreak@47 447 get = function() return self.tmpBarRows or 1 end,
flickerstreak@47 448 set = function(info, val) self.tmpBarRows = val end,
flickerstreak@47 449 width = "half",
flickerstreak@47 450 min = 1,
flickerstreak@47 451 max = 32,
flickerstreak@47 452 step = 1,
flickerstreak@47 453 order = 2,
flickerstreak@47 454 },
flickerstreak@47 455 cols = {
flickerstreak@47 456 type = "range",
flickerstreak@47 457 name = L["Columns"],
flickerstreak@47 458 get = function() return self.tmpBarCols or 12 end,
flickerstreak@47 459 set = function(info, val) self.tmpBarCols = val end,
flickerstreak@47 460 width = "half",
flickerstreak@47 461 min = 1,
flickerstreak@47 462 max = 32,
flickerstreak@47 463 step = 1,
flickerstreak@47 464 order = 3,
flickerstreak@47 465 },
flickerstreak@47 466 sz = {
flickerstreak@47 467 type = "range",
flickerstreak@47 468 name = L["Size"],
flickerstreak@47 469 get = function() return self.tmpBarSize or 36 end,
flickerstreak@47 470 set = function(info, val) self.tmpBarSize = val end,
flickerstreak@47 471 width = "half",
flickerstreak@47 472 min = 10,
flickerstreak@47 473 max = 72,
flickerstreak@47 474 step = 1,
flickerstreak@47 475 order = 4,
flickerstreak@47 476 },
flickerstreak@47 477 spacing = {
flickerstreak@47 478 type = "range",
flickerstreak@47 479 name = L["Spacing"],
flickerstreak@47 480 get = function() return self.tmpBarSpacing or 3 end,
flickerstreak@47 481 set = function(info, val) self.tmpBarSpacing = val end,
flickerstreak@47 482 width = "half",
flickerstreak@47 483 min = 0,
flickerstreak@47 484 max = 24,
flickerstreak@47 485 step = 1,
flickerstreak@47 486 order = 5,
flickerstreak@47 487 }
flickerstreak@47 488 },
flickerstreak@47 489 order = 4
flickerstreak@47 490 },
flickerstreak@47 491 spacer = {
flickerstreak@47 492 type = "header",
flickerstreak@47 493 name = "",
flickerstreak@47 494 width = "full",
flickerstreak@47 495 order = -2
flickerstreak@47 496 },
flickerstreak@47 497 go = {
flickerstreak@47 498 type = "execute",
flickerstreak@47 499 name = L["Create Bar"],
flickerstreak@47 500 func = "CreateBar",
flickerstreak@47 501 order = -1,
flickerstreak@47 502 }
flickerstreak@47 503 }
flickerstreak@47 504 }
flickerstreak@47 505 }
flickerstreak@47 506 }
flickerstreak@58 507 self.editorOpts = editorOpts
flickerstreak@47 508 self.barOptMap = { }
flickerstreak@58 509 AceConfigReg:RegisterOptionsTable("ReAction-Editor",editorOpts)
flickerstreak@44 510 end
flickerstreak@44 511