Mercurial > wow > reaction
comparison modules/ReAction_ConfigUI/ReAction_ConfigUI.lua @ 30:0d95ce7a9ec2
- added Ace3 externs
- converted ReAction_ConfigUI to use blizzard interface addons panel via AceConfigDialog-3.0
- partially converted FuBar module to LibRock, deprecated it (going to remove it entirely later)
- cleaned up a couple other tidbits
| author | Flick <flickerstreak@gmail.com> |
|---|---|
| date | Wed, 02 Apr 2008 23:31:13 +0000 |
| parents | 21bcaf8215ff |
| children | c54c481ad0ed |
comparison
equal
deleted
inserted
replaced
| 29:9c89042bc328 | 30:0d95ce7a9ec2 |
|---|---|
| 2 ReAction Configuration UI module | 2 ReAction Configuration UI module |
| 3 | 3 |
| 4 This modules creates and manages ReAction configuration | 4 This modules creates and manages ReAction configuration |
| 5 elements, including: | 5 elements, including: |
| 6 | 6 |
| 7 - waterfall config menu system | 7 - Interface Options panel |
| 8 - bar dragging and resizing control overlays | 8 - bar dragging and resizing control overlays |
| 9 - contextual menus | 9 - contextual menus |
| 10 | 10 |
| 11 Individual modules are responsible for populating these | 11 Individual modules are responsible for populating these |
| 12 configuration elements via the following functions: | 12 configuration elements via ReAction:RegisterOptions(). The |
| 13 | 13 valid values of 'context' are: |
| 14 module:GetGlobalOptions( configModule ) | 14 |
| 15 module:GetGlobalBarOptions( configModule ) | 15 - 'global' : added to the Global Settings tab |
| 16 module:GetModuleOptions( configModule ) | 16 - 'module' : added to the Module Settings tab |
| 17 module:GetBarConfigOptions( bar, configModule ) | 17 - 'bar' : added to the Bar Settings tab |
| 18 module:GetBarMenuOptions( bar, configModule ) | 18 - 'barMenu' : shown on the bar contextual menu |
| 19 | |
| 20 the ReAction_ConfigUI module is passed in as a parameter so that | |
| 21 option handlers can refresh the config UI. | |
| 22 | 19 |
| 23 --]] | 20 --]] |
| 24 | 21 |
| 25 -- local imports | 22 -- local imports |
| 26 local ReAction = ReAction | 23 local ReAction = ReAction |
| 27 local L = ReAction.L | 24 local L = ReAction.L |
| 28 local _G = _G | 25 local _G = _G |
| 29 local Waterfall = AceLibrary("Waterfall-1.0") | 26 local InCombatLockdown = InCombatLockdown |
| 27 | |
| 30 local Dewdrop = AceLibrary("Dewdrop-2.0") | 28 local Dewdrop = AceLibrary("Dewdrop-2.0") |
| 31 local print = ReAction.print | |
| 32 local InCombatLockdown = InCombatLockdown | |
| 33 | 29 |
| 34 -- module declaration | 30 -- module declaration |
| 35 local moduleID = "ConfigUI" | 31 local moduleID = "ConfigUI" |
| 36 local module = ReAction:NewModule( moduleID, | 32 local module = ReAction:NewModule( moduleID, |
| 37 "AceEvent-3.0" | 33 "AceEvent-3.0" |
| 38 -- mixins go here | |
| 39 ) | 34 ) |
| 40 | |
| 41 module.globalOptions = { | |
| 42 type = "group", | |
| 43 args = { | |
| 44 unlock = { | |
| 45 type = "toggle", | |
| 46 handler = module, | |
| 47 name = L["unlock"], | |
| 48 guiName = L["Unlock Bars"], | |
| 49 desc = L["Unlock bars for dragging and resizing with the mouse"], | |
| 50 get = function() return module.configMode end, | |
| 51 set = "SetConfigMode", | |
| 52 disabled = InCombatLockdown, | |
| 53 order = 1 | |
| 54 }, | |
| 55 config = { | |
| 56 type = "execute", | |
| 57 handler = module, | |
| 58 name = L["config"], | |
| 59 guiName = L["Configure..."], | |
| 60 desc = L["Open the configuration dialogue"], | |
| 61 func = "OpenConfig", | |
| 62 disabled = InCombatLockdown, | |
| 63 wfHidden = true, -- don't show this in the waterfall config | |
| 64 order = 2 | |
| 65 }, | |
| 66 } | |
| 67 } | |
| 68 | 35 |
| 69 module.configOptions = { | 36 module.configOptions = { |
| 70 type = "group", | 37 type = "group", |
| 38 childGroups = "tab", | |
| 71 args = { | 39 args = { |
| 40 desc = { | |
| 41 type = "description", | |
| 42 name = L["Customizable replacement for Blizzard's Action Bars"], | |
| 43 }, | |
| 72 global = { | 44 global = { |
| 73 type = "group", | 45 type = "group", |
| 74 name = L["Global Settings"], | 46 name = L["Global Settings"], |
| 75 desc = L["Global configuration settings"], | 47 desc = L["Global configuration settings"], |
| 76 args = { }, | 48 args = { |
| 49 unlock = { | |
| 50 type = "toggle", | |
| 51 handler = module, | |
| 52 name = L["Unlock Bars"], | |
| 53 desc = L["Unlock bars for dragging and resizing with the mouse"], | |
| 54 get = function() return module.configMode end, | |
| 55 set = function(info, value) module:SetConfigMode(value) end, | |
| 56 disabled = InCombatLockdown, | |
| 57 order = 1 | |
| 58 }, | |
| 59 }, | |
| 77 order = 1, | 60 order = 1, |
| 78 }, | 61 }, |
| 79 module = { | 62 module = { |
| 80 type = "group", | 63 type = "group", |
| 64 childGroups = "select", | |
| 81 name = L["Module Settings"], | 65 name = L["Module Settings"], |
| 82 desc = L["Configuration settings for each module"], | 66 desc = L["Configuration settings for each module"], |
| 83 args = { }, | 67 args = { |
| 84 order = 2, | 68 configUI = { |
| 69 type = "group", | |
| 70 name = "Config UI", | |
| 71 desc = "description", | |
| 72 args = { | |
| 73 foo = { | |
| 74 type = "toggle", | |
| 75 handler = module, | |
| 76 name = "foo", | |
| 77 desc = "description", | |
| 78 get = function() return true end, | |
| 79 set = function() end, | |
| 80 } | |
| 81 } | |
| 82 }, | |
| 83 }, | |
| 84 order = -1, | |
| 85 }, | 85 }, |
| 86 bar = { | 86 }, |
| 87 type = "group", | 87 plugins = { } |
| 88 name = L["Bars"], | |
| 89 desc = L["Configuration settings for bars"], | |
| 90 args = { }, | |
| 91 order = 3, | |
| 92 }, | |
| 93 } | |
| 94 } | 88 } |
| 95 | 89 |
| 96 -- module methods | 90 -- module methods |
| 97 function module:OnInitialize() | 91 function module:OnInitialize() |
| 98 self.db = ReAction.db:RegisterNamespace( moduleID, | 92 self.db = ReAction.db:RegisterNamespace( moduleID, |
| 99 { | 93 { |
| 100 profile = { } | 94 profile = { } |
| 101 } | 95 } |
| 102 ) | 96 ) |
| 103 end | 97 self:InitializeOptions() |
| 104 | 98 LibStub("AceConfig-3.0"):RegisterOptionsTable("ReAction",self.configOptions) |
| 105 function module:OnEnable() | 99 LibStub("AceConfigDialog-3.0"):AddToBlizOptions("ReAction", "ReAction") |
| 106 self:RegisterEvent("PLAYER_REGEN_DISABLED") | 100 self:RegisterEvent("PLAYER_REGEN_DISABLED") |
| 107 Waterfall:Register("ReAction", | 101 end |
| 108 "aceOptions", self.configOptions, | 102 |
| 109 "treeLevels", nil, -- infinite | 103 function module:InitializeOptions() |
| 110 "colorR", 0.8, | 104 for _, m in pairs(ReAction:GetOptions("global")) do |
| 111 "colorG", 0.65, | 105 for k, v in pairs(m) do |
| 112 "colorB", 0, | 106 self.configOptions.args.global.args[k] = v |
| 113 "defaultPane", "global" ) | 107 end |
| 114 end | 108 end |
| 115 | 109 ReAction.RegisterCallback(self,"OnOptionsRegistered") |
| 116 function module:OnDisable() | 110 end |
| 117 self:UnregisterEvent("PLAYER_REGEN_DISABLED") | 111 |
| 118 self:SetConfigMode(false) | 112 function module:OnOptionsRegistered(evt, context, module, opts) |
| 119 Waterfall:UnRegister("ReAction") | 113 if context == "global" then |
| 114 for k, v in pairs(opts) do | |
| 115 self.configOptions.args.global.args[k] = v | |
| 116 end | |
| 117 elseif context == "module" then | |
| 118 for k, v in pairs(opts) do | |
| 119 self.configOptions.args.module.args[k] = v | |
| 120 end | |
| 121 elseif context == "bar" then | |
| 122 | |
| 123 elseif context == "barMenu" then | |
| 124 | |
| 125 end | |
| 120 end | 126 end |
| 121 | 127 |
| 122 function module:PLAYER_REGEN_DISABLED() | 128 function module:PLAYER_REGEN_DISABLED() |
| 123 if self.configMode == true then | 129 if self.configMode == true then |
| 124 UIErrorsFrame:AddMessage(L["ReAction config mode disabled during combat."]) | 130 UIErrorsFrame:AddMessage(L["ReAction config mode disabled during combat."]) |
| 125 self:SetConfigMode(false) | 131 self:SetConfigMode(false) |
| 126 Waterfall:Close("ReAction") | |
| 127 end | 132 end |
| 128 end | 133 end |
| 129 | 134 |
| 130 function module:SetConfigMode( mode ) | 135 function module:SetConfigMode( mode ) |
| 131 ReAction:CallMethodOnAllBars("ShowControls",mode) | 136 ReAction:CallMethodOnAllBars("ShowControls",mode) |
| 147 end | 152 end |
| 148 end | 153 end |
| 149 end | 154 end |
| 150 end | 155 end |
| 151 | 156 |
| 152 local function refreshWaterfall() | 157 local function safecall(module, method, ...) |
| 153 module:RefreshConfig() | |
| 154 end | |
| 155 | |
| 156 local function SafeCall(module, method, ...) | |
| 157 if module and type(module[method]) == "function" then | 158 if module and type(module[method]) == "function" then |
| 158 return module[method](...) | 159 return module[method](method, ...) |
| 159 end | |
| 160 end | |
| 161 | |
| 162 function module:RefreshOptions() | |
| 163 local opts = self.configOptions.args | |
| 164 | |
| 165 for _, m in ReAction:IterateModules() do | |
| 166 local o = SafeCall(m,"GetGlobalOptions",self) | |
| 167 if o then | |
| 168 for k, v in pairs(o) do | |
| 169 opts.global.args[k] = v | |
| 170 end | |
| 171 end | |
| 172 end | |
| 173 | |
| 174 for _, m in ReAction:IterateModules() do | |
| 175 local o = SafeCall(m,"GetGlobalBarOptions",self) | |
| 176 if o then | |
| 177 for k, v in pairs(o) do | |
| 178 opts.bar.args[k] = v | |
| 179 end | |
| 180 end | |
| 181 end | |
| 182 | |
| 183 for _, m in ReAction:IterateModules() do | |
| 184 local o = SafeCall(m,"GetModuleOptions",self) | |
| 185 if o then | |
| 186 for k, v in pairs(o) do | |
| 187 opts.module.args[k] = v | |
| 188 end | |
| 189 end | |
| 190 end | |
| 191 | |
| 192 local barOpts = opts.bar.args | |
| 193 for name, bar in pairs(ReAction.bars) do | |
| 194 if bar then | |
| 195 if barOpts[name] == nil then | |
| 196 barOpts[name] = { | |
| 197 type = "group", | |
| 198 name = name, | |
| 199 desc = name, | |
| 200 handler = bar, | |
| 201 args = { | |
| 202 delete = { | |
| 203 type = "execute", | |
| 204 name = L["Delete Bar"], | |
| 205 desc = L["Remove the bar from the current profile"], | |
| 206 func = function() ReAction:EraseBar(bar); self:RefreshConfig() end | |
| 207 }, | |
| 208 rename = { | |
| 209 type = "text", | |
| 210 name = L["Rename Bar"], | |
| 211 desc = L["Set a name for the bar"], | |
| 212 get = "GetName", | |
| 213 set = function(name) ReAction:RenameBar(bar,name); self:RefreshConfig() end | |
| 214 } | |
| 215 } | |
| 216 } | |
| 217 end | |
| 218 if bar.modConfigOpts == nil then | |
| 219 bar.modConfigOpts = { } | |
| 220 end | |
| 221 for _, m in ReAction:IterateModules() do | |
| 222 local o = SafeCall(m,"GetBarConfigOptions",bar,self) | |
| 223 if o then | |
| 224 for k, v in pairs(o) do | |
| 225 barOpts[name].args[k] = v | |
| 226 end | |
| 227 end | |
| 228 end | |
| 229 end | |
| 230 end | |
| 231 -- remove obsolete bar tables | |
| 232 for name, opt in pairs(barOpts) do | |
| 233 if opt.type == "group" and ReAction.bars[name] == nil then | |
| 234 barOpts[name] = nil | |
| 235 end | |
| 236 end | 160 end |
| 237 end | 161 end |
| 238 | 162 |
| 239 function module:OpenConfig(bar) | 163 function module:OpenConfig(bar) |
| 240 self:RefreshOptions() | |
| 241 Dewdrop:Close() | 164 Dewdrop:Close() |
| 242 Waterfall:Open("ReAction",bar and "bar."..bar:GetName()) | 165 InterfaceOptionsFrame_OpenToFrame("ReAction") |
| 243 end | |
| 244 | |
| 245 function module:RefreshConfig() | |
| 246 self:RefreshOptions() | |
| 247 Waterfall:Refresh("ReAction") | |
| 248 end | 166 end |
| 249 | 167 |
| 250 function module:ApplyToBar(bar) | 168 function module:ApplyToBar(bar) |
| 251 if self.configMode then | 169 if self.configMode then |
| 252 bar:ShowControls(true) | 170 bar:ShowControls(self.configMode) |
| 253 end | 171 end |
| 254 end | 172 end |
| 255 | 173 |
| 256 function module:RemoveFromBar(bar) | 174 function module:RemoveFromBar(bar) |
| 257 if bar.controlFrame then | 175 if bar.controlFrame then |
| 258 bar.controlFrame:SetParent(UIParent) | 176 bar.controlFrame:SetParent(UIParent) |
| 259 bar.controlFrame:ClearAllPoints() | 177 bar.controlFrame:ClearAllPoints() |
| 260 bar.controlFrame:Hide() | 178 bar.controlFrame:Hide() |
| 261 bar.controlFrame = nil | 179 bar.controlFrame = nil |
| 262 end | 180 end |
| 263 end | |
| 264 | |
| 265 function module:GetGlobalOptions() | |
| 266 return self.globalOptions.args | |
| 267 end | 181 end |
| 268 | 182 |
| 269 | 183 |
| 270 | 184 |
| 271 | 185 |
| 545 control:SetScript("OnEnter", | 459 control:SetScript("OnEnter", |
| 546 function() | 460 function() |
| 547 -- add bar type and status information to name | 461 -- add bar type and status information to name |
| 548 local name = bar.name | 462 local name = bar.name |
| 549 for _, m in ReAction:IterateModules() do | 463 for _, m in ReAction:IterateModules() do |
| 550 local suffix = SafeCall(m,"GetBarNameModifier",bar) | 464 local suffix = safecall(m,"GetBarNameModifier",bar) |
| 551 if suffix then | 465 if suffix then |
| 552 name = format("%s %s",name,suffix) | 466 name = ("%s %s"):format(name,suffix) |
| 553 end | 467 end |
| 554 end | 468 end |
| 555 | 469 |
| 556 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") | 470 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") |
| 557 GameTooltip:AddLine(name) | 471 GameTooltip:AddLine(name) |
| 609 end | 523 end |
| 610 if self.modMenuOpts == nil then | 524 if self.modMenuOpts == nil then |
| 611 self.modMenuOpts = { } | 525 self.modMenuOpts = { } |
| 612 end | 526 end |
| 613 for _, m in ReAction:IterateModules() do | 527 for _, m in ReAction:IterateModules() do |
| 614 local opts = SafeCall(m,"GetBarMenuOptions",self,module) | 528 local opts = safecall(m,"GetBarMenuOptions",self,module) |
| 615 if opts then | 529 if opts then |
| 616 for k, v in pairs(opts) do | 530 for k, v in pairs(opts) do |
| 617 self.menuOpts.args[k] = v | 531 self.menuOpts.args[k] = v |
| 618 end | 532 end |
| 619 end | 533 end |
