comparison modules/ReAction_ConfigUI/ReAction_ConfigUI.lua @ 59:7430a8dd4e90

Added modular per-bar options
author Flick <flickerstreak@gmail.com>
date Mon, 28 Apr 2008 23:34:17 +0000
parents 20003239af0b
children 44649a10378d
comparison
equal deleted inserted replaced
58:20003239af0b 59:7430a8dd4e90
48 ReAction.RegisterCallback(self,"OnRenameBar") 48 ReAction.RegisterCallback(self,"OnRenameBar")
49 self:InitializeOptions() 49 self:InitializeOptions()
50 self:RegisterEvent("PLAYER_REGEN_DISABLED") 50 self:RegisterEvent("PLAYER_REGEN_DISABLED")
51 end 51 end
52 52
53
54 -- Creates a dispatcher to act as a handler and translate method calls from
55 -- handler:method(info,value) to module:method(bar,value). If the opts table has
56 -- a handler set, that will be used instead of module.
57 -- Note: we replace the top level table if it's a group, giving it a new handler.
58 local function CreateModuleBarDispatcher(module,bar,opts)
59 local g = { }
60 if opts.type == "group" then
61 for k,v in pairs(opts) do
62 g[k] = v
63 end
64 else
65 g.type = "group"
66 g.name = module:GetName()
67 g.args = {
68 arg1 = opts
69 }
70 end
71 local handler = opts.handler or module
72 g.handler = setmetatable( {}, {
73 __index = function(self, idx)
74 local f = rawget(self,idx)
75 if not f then
76 f = function(_, info, ...)
77 return handler[idx](handler, bar, ...)
78 end
79 rawset(self,idx,f) -- cache for future use
80 end
81 return f
82 end
83 })
84 return g
85 end
86
87
53 function module:OnOptionsRegistered(evt, context, module, opts) 88 function module:OnOptionsRegistered(evt, context, module, opts)
54 local c = self.configOptions.args[context] 89 local c = self.configOptions.args[context]
55 if c then 90 if context == "bar" then
91 for name,bar in pairs(ReAction.bars) do
92 local key = self.barOptMap[name]
93 if key then
94 self.editorOpts.args[key].plugins[module:GetName()] = { [module:GetName()] = CreateModuleBarDispatcher(module,bar,opts) }
95 end
96 end
97 elseif c then
56 for k, v in pairs(opts) do 98 for k, v in pairs(opts) do
57 c.args[k] = v 99 c.args[k] = v
58 end 100 end
59 elseif c == "bar" then
60
61 end 101 end
62 end 102 end
63 103
64 function module:OnOptionsRefreshed(evt) 104 function module:OnOptionsRefreshed(evt)
65 AceConfigReg:NotifyChange("ReAction") 105 AceConfigReg:NotifyChange("ReAction")
68 108
69 function module:OnCreateBar(evt, bar) 109 function module:OnCreateBar(evt, bar)
70 local name = bar:GetName() 110 local name = bar:GetName()
71 -- AceConfig doesn't allow spaces, etc, in arg key names, and they must be 111 -- AceConfig doesn't allow spaces, etc, in arg key names, and they must be
72 -- unique strings. So generate a unique key (it can be whatever) for the bar 112 -- unique strings. So generate a unique key (it can be whatever) for the bar
113 local args = self.editorOpts.args
73 local key 114 local key
74 local i = 1 115 local i = 1
75 repeat 116 repeat
76 key = ("bar%s"):format(i) 117 key = ("bar%s"):format(i)
77 i = i+1 118 i = i+1
78 until self.editorOpts.args[key] == nil 119 until args[key] == nil
79 self.barOptMap[name] = key 120 self.barOptMap[name] = key
80 self.editorOpts.args[key] = { 121 args[key] = {
81 type = "group", 122 type = "group",
82 name = name, 123 name = name,
83 childGroups = "tab", 124 childGroups = "tab",
84 args = { 125 args = {
85 general = { 126 general = {
86 type = "group", 127 type = "group",
87 name = L["General"], 128 name = L["General"],
129 order = 1,
88 args = { 130 args = {
89 name = { 131 name = {
90 type = "input", 132 type = "input",
91 name = L["Rename Bar"], 133 name = L["Rename Bar"],
92 get = function() return bar:GetName() end, 134 get = function() return bar:GetName() end,
169 order = 3 211 order = 3
170 }, 212 },
171 }, 213 },
172 }, 214 },
173 }, 215 },
174 216 plugins = { },
175 } 217 }
218
219 -- Create a dispatcher for all the module options tables registered to ReAction under the 'bar' context
220 for module, opts in pairs(ReAction:GetOptions("bar")) do
221 args[key].plugins[module:GetName()] = { [module:GetName()] = CreateModuleBarDispatcher(module, bar, opts) }
222 end
176 end 223 end
177 224
178 function module:OnEraseBar(evt, name) 225 function module:OnEraseBar(evt, name)
179 local key = self.barOptMap[name] 226 local key = self.barOptMap[name]
180 self.barOptMap[name] = nil 227 self.barOptMap[name] = nil