Mercurial > wow > reaction
comparison modules/State.lua @ 155:806a61b331a0
Pushed the state implementation into Bar
| author | Flick <flickerstreak@gmail.com> |
|---|---|
| date | Fri, 15 May 2009 22:38:19 +0000 |
| parents | 42cade25d40d |
| children | e77f716af1b7 |
comparison
equal
deleted
inserted
replaced
| 154:df67685b340e | 155:806a61b331a0 |
|---|---|
| 51 return olhs < orhs | 51 return olhs < orhs |
| 52 end) | 52 end) |
| 53 return r | 53 return r |
| 54 end | 54 end |
| 55 | 55 |
| 56 -- set a frame-ref, if the frame is valid, or set nil to the | 56 |
| 57 -- corresponding attribute | 57 local InitRules, ApplyStates, CleanupStates, SetProperty, GetProperty, RegisterProperty |
| 58 local function SetFrameRef(frame, name, refFrame) | |
| 59 if refFrame then | |
| 60 local _, explicit = refFrame:IsProtected() | |
| 61 if not explicit then | |
| 62 refFrame = nil | |
| 63 end | |
| 64 end | |
| 65 if refFrame then | |
| 66 frame:SetFrameRef(name,refFrame) | |
| 67 else | |
| 68 frame:SetAttribute("frameref-"..name,nil) | |
| 69 end | |
| 70 end | |
| 71 | |
| 72 | |
| 73 local InitRules, ApplyStates, CleanupStates, SetProperty, GetProperty, RegisterProperty, ShowAll | |
| 74 | 58 |
| 75 -- PRIVATE -- | 59 -- PRIVATE -- |
| 76 do | 60 do |
| 77 | 61 |
| 78 -- the field names must match the field names of the options table, below | 62 -- the field names must match the field names of the options table, below |
| 79 -- the field values are secure snippets or 'true' to skip the snippet for that property. | 63 -- the field values are secure snippets or 'true' to skip the snippet for that property. |
| 80 local properties = { | 64 local properties = { |
| 81 hide = | 65 hide = true, |
| 82 [[ | 66 --keybindState = true, TODO: broken |
| 83 local h = hide and hide[state] and not showAll | 67 anchorEnable = true, |
| 84 if h ~= hidden then | |
| 85 if h then | |
| 86 self:Hide() | |
| 87 else | |
| 88 self:Show() | |
| 89 end | |
| 90 hidden = h | |
| 91 end | |
| 92 if showAll then | |
| 93 control:CallMethod("UpdateHiddenLabel", hide and hide[state]) | |
| 94 end | |
| 95 ]], | |
| 96 | |
| 97 --keybindState TODO: broken | |
| 98 | |
| 99 anchorEnable = | |
| 100 [[ | |
| 101 local old_anchor = anchorstate | |
| 102 anchorstate = (anchorEnable and anchorEnable[state]) and state | |
| 103 if old_anchor ~= anchorstate or not set_state then | |
| 104 if anchorstate and anchorPoint then | |
| 105 if anchorPoint[state] then | |
| 106 self:ClearAllPoints() | |
| 107 local f = self:GetAttribute("frameref-anchor-"..anchorstate) | |
| 108 if f then | |
| 109 self:SetPoint(anchorPoint[state], f, anchorRelPoint[state], anchorX[state], anchorY[state]) | |
| 110 end | |
| 111 end | |
| 112 elseif defaultAnchor and defaultAnchor.point then | |
| 113 self:ClearAllPoints() | |
| 114 self:SetPoint(defaultAnchor.point, defaultAnchor.frame, | |
| 115 defaultAnchor.relPoint, defaultAnchor.x, defaultAnchor.y) | |
| 116 end | |
| 117 end | |
| 118 ]], | |
| 119 -- anchorEnable handles all the other bits | |
| 120 anchorFrame = true, | 68 anchorFrame = true, |
| 121 anchorPoint = true, | 69 anchorPoint = true, |
| 122 anchorRelPoint = true, | 70 anchorRelPoint = true, |
| 123 anchorX = true, | 71 anchorX = true, |
| 124 anchorY = true, | 72 anchorY = true, |
| 125 | 73 enableScale = true, |
| 126 | |
| 127 enableScale = | |
| 128 [[ | |
| 129 local old_scale = scalestate | |
| 130 scalestate = (enableScale and enableScale[state]) and state | |
| 131 if old_scale ~= scalestate or not set_state then | |
| 132 if scalestate and scale then | |
| 133 if scale[state] then | |
| 134 self:SetScale(scale[state]) | |
| 135 end | |
| 136 else | |
| 137 self:SetScale(1.0) | |
| 138 end | |
| 139 end | |
| 140 ]], | |
| 141 -- enableScale handles scale | |
| 142 scale = true, | 74 scale = true, |
| 143 | 75 enableAlpha = true, |
| 144 enableAlpha = | |
| 145 [[ | |
| 146 local old_alpha = alphastate | |
| 147 alphastate = (enableAlpha and enableAlpha[state]) and state | |
| 148 if old_alpha ~= alphastate or not set_state then | |
| 149 control:CallMethod("UpdateAlpha", alphastate and alpha[state] or defaultAlpha) | |
| 150 end | |
| 151 ]], | |
| 152 -- enableAlpha handles alpha | |
| 153 alpha = true, | 76 alpha = true, |
| 154 } | 77 } |
| 155 | |
| 156 local weak = { __mode = "k" } | |
| 157 local statedrivers = setmetatable( { }, weak ) | |
| 158 local keybinds = setmetatable( { }, weak ) | |
| 159 | |
| 160 -- | |
| 161 -- Secure Handler Snippets | |
| 162 -- | |
| 163 local SetHandlerData, SetStateDriver, SetStateKeybind, RefreshState | |
| 164 do | |
| 165 local stateHandler_propInit = | |
| 166 [[ | |
| 167 propfuncs = table.new() | |
| 168 local proplist = self:GetAttribute("prop-func-list") | |
| 169 for s in string.gmatch(proplist, "(%w+)") do | |
| 170 table.insert(propfuncs, s) | |
| 171 end | |
| 172 ]] | |
| 173 | |
| 174 local onStateHandler = | |
| 175 -- function _onstate-reaction( self, stateid, newstate ) | |
| 176 [[ | |
| 177 set_state = newstate | |
| 178 | |
| 179 local oldState = state | |
| 180 state = state_override or set_state or state | |
| 181 for i = 1, #propfuncs do | |
| 182 control:RunAttribute("func-"..propfuncs[i]) | |
| 183 end | |
| 184 | |
| 185 control:ChildUpdate() | |
| 186 | |
| 187 if oldState ~= state then | |
| 188 control:CallMethod("StateRefresh", state) | |
| 189 end | |
| 190 ]] | |
| 191 | |
| 192 local onClickHandler = | |
| 193 -- function OnClick( self, button, down ) | |
| 194 [[ | |
| 195 if state_override == button then | |
| 196 state_override = nil -- toggle | |
| 197 else | |
| 198 state_override = button | |
| 199 end | |
| 200 ]] .. onStateHandler | |
| 201 | |
| 202 local function UpdateAlpha( frame, alpha ) | |
| 203 if alpha then | |
| 204 frame:SetAlpha(alpha) | |
| 205 end | |
| 206 end | |
| 207 | |
| 208 -- Construct a lua assignment as a code string and execute it within the header | |
| 209 -- frame's sandbox. 'value' must be a string, boolean, number, or nil. If called | |
| 210 -- with four arguments, then it treats 'varname' as an existing global table and | |
| 211 -- sets a key-value pair. For a slight efficiency boost, pass the values in as | |
| 212 -- attributes and fetch them as attributes from the snippet code, to leverage snippet | |
| 213 -- caching. | |
| 214 function SetHandlerData( bar, varname, value, key ) | |
| 215 local f = bar:GetFrame() | |
| 216 f:SetAttribute("data-varname",varname) | |
| 217 f:SetAttribute("data-value", value) | |
| 218 f:SetAttribute("data-key", key) | |
| 219 f:Execute( | |
| 220 [[ | |
| 221 local name = self:GetAttribute("data-varname") | |
| 222 local value = self:GetAttribute("data-value") | |
| 223 local key = self:GetAttribute("data-key") | |
| 224 if name then | |
| 225 if key then | |
| 226 if not _G[name] then | |
| 227 _G[name] = table.new() | |
| 228 end | |
| 229 _G[name][key] = value | |
| 230 else | |
| 231 _G[name] = value | |
| 232 end | |
| 233 end | |
| 234 ]]) | |
| 235 end | |
| 236 | |
| 237 function SetDefaultAnchor( bar ) | |
| 238 local point, frame, relPoint, x, y = bar:GetAnchor() | |
| 239 SetHandlerData(bar, "defaultAnchor", point, "point") | |
| 240 SetHandlerData(bar, "defaultAnchor", relPoint, "relPoint") | |
| 241 SetHandlerData(bar, "defaultAnchor", x, "x") | |
| 242 SetHandlerData(bar, "defaultAnchor", y, "y") | |
| 243 SetHandlerData(bar, "defaultAlpha", bar:GetAlpha()) | |
| 244 | |
| 245 local f = bar:GetFrame() | |
| 246 f.UpdateAlpha = UpdateAlpha | |
| 247 SetFrameRef(f, "defaultAnchor", _G[frame or "UIParent"]) | |
| 248 f:Execute( | |
| 249 [[ | |
| 250 defaultAnchor.frame = self:GetAttribute("frameref-defaultAnchor") | |
| 251 ]]) | |
| 252 end | |
| 253 | |
| 254 function RefreshState( bar ) | |
| 255 SetDefaultAnchor(bar) | |
| 256 bar:GetFrame():Execute( | |
| 257 [[ | |
| 258 if self:GetAttribute("reaction-refresh") then | |
| 259 control:RunAttribute("reaction-refresh") | |
| 260 end | |
| 261 ]]) | |
| 262 end | |
| 263 | |
| 264 function SetStateDriver( bar, rule ) | |
| 265 local f = bar:GetFrame() | |
| 266 | |
| 267 if not f.UpdateHiddenLabel then | |
| 268 function f:UpdateHiddenLabel(hide) | |
| 269 bar:SetLabelSubtext( hide and L["Hidden"] ) | |
| 270 end | |
| 271 end | |
| 272 | |
| 273 function f:StateRefresh( state ) | |
| 274 bar:RefreshControls() | |
| 275 end | |
| 276 | |
| 277 local props = { } | |
| 278 for p, h in pairs(properties) do | |
| 279 if type(h) == "string" then | |
| 280 table.insert(props,p) | |
| 281 f:SetAttribute("func-"..p, h) | |
| 282 end | |
| 283 end | |
| 284 f:SetAttribute("prop-func-list", table.concat(props," ")) | |
| 285 f:Execute(stateHandler_propInit) | |
| 286 f:SetAttribute("reaction-refresh", onStateHandler) | |
| 287 | |
| 288 if rule and #rule > 0 then | |
| 289 f:SetAttribute( "_onstate-reaction", onStateHandler ) | |
| 290 RegisterStateDriver(f, "reaction", rule) | |
| 291 statedrivers[bar] = rule | |
| 292 elseif statedrivers[bar] then | |
| 293 UnregisterStateDriver(f, "reaction") | |
| 294 f:SetAttribute( "_onstate-reaction", nil ) | |
| 295 statedrivers[bar] = nil | |
| 296 end | |
| 297 end | |
| 298 | |
| 299 function SetStateKeybind( bar, key, state ) | |
| 300 local f = bar:GetFrame() | |
| 301 | |
| 302 local kb = keybinds[bar] | |
| 303 if kb == nil then | |
| 304 if key == nil then | |
| 305 -- nothing to do | |
| 306 return | |
| 307 end | |
| 308 kb = { } | |
| 309 keybinds[bar] = kb | |
| 310 end | |
| 311 | |
| 312 -- clear the old binding, if any | |
| 313 if kb[state] then | |
| 314 SetOverrideBinding(f, false, kb[state], nil) | |
| 315 end | |
| 316 kb[state] = key | |
| 317 | |
| 318 if key then | |
| 319 f:SetAttribute("_onclick", onClickHandler) | |
| 320 SetOverrideBindingClick(f, false, key, state, nil) -- state name is the virtual mouse button | |
| 321 end | |
| 322 end | |
| 323 end | |
| 324 | 78 |
| 325 local playerClass = select(2, UnitClass("player")) | 79 local playerClass = select(2, UnitClass("player")) |
| 326 local function ClassFilter(...) | 80 local function ClassFilter(...) |
| 327 for i = 1, select('#',...) do | 81 for i = 1, select('#',...) do |
| 328 if playerClass == select(i,...) then | 82 if playerClass == select(i,...) then |
| 343 battle = { format = "stance:1", filter = ClassFilter("WARRIOR") }, | 97 battle = { format = "stance:1", filter = ClassFilter("WARRIOR") }, |
| 344 defensive = { format = "stance:2", filter = ClassFilter("WARRIOR") }, | 98 defensive = { format = "stance:2", filter = ClassFilter("WARRIOR") }, |
| 345 berserker = { format = "stance:3", filter = ClassFilter("WARRIOR") }, | 99 berserker = { format = "stance:3", filter = ClassFilter("WARRIOR") }, |
| 346 caster = { format = "form:0/2/4/5/6", filter = ClassFilter("DRUID") }, | 100 caster = { format = "form:0/2/4/5/6", filter = ClassFilter("DRUID") }, |
| 347 bear = { format = "form:1", filter = ClassFilter("DRUID") }, | 101 bear = { format = "form:1", filter = ClassFilter("DRUID") }, |
| 348 cat = { format = "form:1", filter = ClassFilter("DRUID") }, | 102 cat = { format = "form:3", filter = ClassFilter("DRUID") }, |
| 349 tree = { format = "form:5", filter = ClassFilter("DRUID") }, | 103 tree = { format = "form:5", filter = ClassFilter("DRUID") }, |
| 350 moonkin = { format = "form:5", filter = ClassFilter("DRUID") }, | 104 moonkin = { format = "form:5", filter = ClassFilter("DRUID") }, |
| 351 pet = { format = "pet" }, | 105 pet = { format = "pet" }, |
| 352 nopet = { format = "nopet" }, | 106 nopet = { format = "nopet" }, |
| 353 harm = { format = "target=target,harm" }, | 107 harm = { format = "target=target,harm" }, |
| 363 nocombat = { format = "nocombat" }, | 117 nocombat = { format = "nocombat" }, |
| 364 possess = { format = "bonusbar:5" }, | 118 possess = { format = "bonusbar:5" }, |
| 365 vehicle = { format = "target=vehicle,exists,bonusbar:5" }, | 119 vehicle = { format = "target=vehicle,exists,bonusbar:5" }, |
| 366 } | 120 } |
| 367 | 121 |
| 368 -- Have to do these shenanigans instead of hardcoding the stances/forms because the | 122 -- Determine the stance #'s programmatically: they can vary if for some reason the |
| 369 -- ordering varies if the character is missing a form. For warriors this is rarely | 123 -- player is missing a stance/form (due to not training it). Also moonkin/flight/tree form |
| 370 -- a problem (c'mon, who actually skips the level 10 def stance quest?) but for druids | 124 -- can be stance 5 or 6, depending. |
| 371 -- it can be. Some people never bother to do the aquatic form quest until well past | |
| 372 -- when they get cat form, and stance 5/6 can be flight, tree, or moonkin depending | |
| 373 -- on talents. | |
| 374 function InitRules() | 125 function InitRules() |
| 375 local forms = { } | 126 local forms = { } |
| 376 -- sort by icon since it's locale-independent | |
| 377 for i = 1, GetNumShapeshiftForms() do | 127 for i = 1, GetNumShapeshiftForms() do |
| 378 local icon, name, active = GetShapeshiftFormInfo(i) | 128 local _, name = GetShapeshiftFormInfo(i) |
| 379 -- if it's the current form, the icon is wrong (Spell_Nature_WispSplode) | 129 forms[name] = i; |
| 380 -- so capture it from the spell info directly | |
| 381 if active then | |
| 382 local _1, _2 | |
| 383 _1, _2, icon = GetSpellInfo(name) | |
| 384 end | |
| 385 forms[icon] = i; | |
| 386 end | 130 end |
| 387 -- use 9 if not found since 9 is never a valid stance/form | 131 -- use 9 if not found since 9 is never a valid stance/form |
| 388 local defensive = forms["Interface\\Icons\\Ability_Warrior_DefensiveStance"] or 9 | 132 local defensive = forms[GetSpellInfo(71)] or 9 |
| 389 local berserker = forms["Interface\\Icons\\Ability_Racial_Avatar"] or 9 | 133 local berserker = forms[GetSpellInfo(2458)] or 9 |
| 390 local bear = forms["Interface\\Icons\\Ability_Racial_BearForm"] or 9 -- bear and dire bear share the same icon | 134 local bear = forms[GetSpellInfo(9634)] or forms[GetSpellInfo(5487)] or 9 |
| 391 local aquatic = forms["Interface\\Icons\\Ability_Druid_AquaticForm"] or 9 | 135 local aquatic = forms[GetSpellInfo(1066)] or 9 |
| 392 local cat = forms["Interface\\Icons\\Ability_Druid_CatForm"] or 9 | 136 local cat = forms[GetSpellInfo(768)] or 9 |
| 393 local travel = forms["Interface\\Icons\\Ability_Druid_TravelForm"] or 9 | 137 local travel = forms[GetSpellInfo(783)] or 9 |
| 394 local tree = forms["Interface\\Icons\\Ability_Druid_TreeofLife"] or 9 | 138 local tree = forms[GetSpellInfo(33891)] or 9 |
| 395 local moonkin = forms["Interface\\Icons\\Spell_Nature_ForceOfNature"] or 9 | 139 local moonkin = forms[GetSpellInfo(24858)] or 9 |
| 396 local flight = forms["Interface\\Icons\\Ability_Druid_FlightForm"] or 9 -- flight and swift flight share the same icon | 140 local flight = forms[GetSpellInfo(40120)] or forms[GetSpellInfo(33943)] or 9 |
| 397 | 141 |
| 398 ruleformats.defensive.format = format("stance:%d",defensive) | 142 ruleformats.defensive.format = format("stance:%d",defensive) |
| 399 ruleformats.berserker.format = format("stance:%d",berserker) | 143 ruleformats.berserker.format = format("stance:%d",berserker) |
| 400 ruleformats.caster.format = format("form:0/%d/%d/%d", aquatic, travel, flight) | 144 ruleformats.caster.format = format("form:0/%d/%d/%d", aquatic, travel, flight) |
| 401 ruleformats.bear.format = format("form:%d",bear) | 145 ruleformats.bear.format = format("form:%d",bear) |
| 443 local function BuildKeybinds( bar, states ) | 187 local function BuildKeybinds( bar, states ) |
| 444 for name, state in pairs(states) do | 188 for name, state in pairs(states) do |
| 445 local type = tfetch(state, "rule", "type") | 189 local type = tfetch(state, "rule", "type") |
| 446 if type == "keybind" then | 190 if type == "keybind" then |
| 447 local key = tfetch(state, "rule", "keybind") | 191 local key = tfetch(state, "rule", "keybind") |
| 448 SetStateKeybind(bar, key, name) | 192 bar:SetStateKeybind(key, name) |
| 449 else | 193 else |
| 450 SetStateKeybind(bar, nil, name) -- this clears an existing keybind | 194 bar:SetStateKeybind(nil, name) -- this clears an existing keybind |
| 451 end | 195 end |
| 452 end | 196 end |
| 453 end | 197 end |
| 454 | 198 |
| 455 function GetProperty( bar, state, propname ) | 199 function GetProperty( bar, state, propname ) |
| 457 end | 201 end |
| 458 | 202 |
| 459 function SetProperty( bar, state, propname, value ) | 203 function SetProperty( bar, state, propname, value ) |
| 460 local s = tbuild(module.db.profile.bars, bar:GetName(), "states", state) | 204 local s = tbuild(module.db.profile.bars, bar:GetName(), "states", state) |
| 461 s[propname] = value | 205 s[propname] = value |
| 462 SetHandlerData(bar, propname, value, state) | 206 bar:SetSecureStateData(state, propname, value) |
| 463 RefreshState(bar) | |
| 464 end | 207 end |
| 465 | 208 |
| 466 function RegisterProperty( propname, snippet ) | 209 function RegisterProperty( propname, snippet ) |
| 467 properties[propname] = snippet or true | 210 properties[propname] = true |
| 468 for _, bar in ReAction:IterateBars() do | 211 for _, bar in ReAction:IterateBars() do |
| 469 local states = tfetch(module.db.profile.bars, bar:GetName(), "states") | 212 local states = tfetch(module.db.profile.bars, bar:GetName(), "states") |
| 470 if states then | 213 if states then |
| 471 for name, s in pairs(states) do | 214 for name, s in pairs(states) do |
| 472 SetHandlerData(bar, propname, s[propname], name) | 215 bar:SetSecureStateData(name, propname, s[propname]) |
| 473 end | 216 end |
| 474 SetStateDriver(bar, BuildRule(states)) | 217 bar:SetStateDriver(BuildRule(states)) |
| 475 RefreshState(bar) | 218 end |
| 219 if type(snippet) == "string" then | |
| 220 bar:SetSecureStateExtension(propname,snippet) | |
| 476 end | 221 end |
| 477 end | 222 end |
| 478 end | 223 end |
| 479 | 224 |
| 480 function UnregisterProperty( propname ) | 225 function UnregisterProperty( propname ) |
| 481 properties[propname] = nil | 226 properties[propname] = nil |
| 482 for _, bar in ReAction:IterateBars() do | 227 for _, bar in ReAction:IterateBars() do |
| 483 SetHandlerData(bar, propname, nil) | 228 local states = tfetch(module.db.profile.bars, bar:GetName(), "states") |
| 484 SetStateDriver(bar, BuildRule(states)) | 229 if states then |
| 485 RefreshState(bar) | 230 for name, s in pairs(states) do |
| 231 bar:SetSecureStateData(name, propname, nil) | |
| 232 end | |
| 233 end | |
| 234 bar:SetStateDriver(BuildRule(states)) | |
| 235 bar:SetSecureStateExtension(propname,nil) | |
| 486 end | 236 end |
| 487 end | 237 end |
| 488 | 238 |
| 489 function ApplyStates( bar ) | 239 function ApplyStates( bar ) |
| 490 local states = tfetch(module.db.profile.bars, bar:GetName(), "states") | 240 local states = tfetch(module.db.profile.bars, bar:GetName(), "states") |
| 491 if states then | 241 if states then |
| 492 for propname in pairs(properties) do | 242 for propname in pairs(properties) do |
| 493 for name, s in pairs(states) do | 243 for name, s in pairs(states) do |
| 494 if propname == "anchorFrame" then | 244 if propname == "anchorFrame" then |
| 495 SetFrameRef(bar:GetFrame(), "anchor-"..name, _G[s.anchorFrame]) | 245 bar:SetFrameRef("anchor-"..name, _G[s.anchorFrame]) |
| 496 else | 246 else |
| 497 SetHandlerData(bar, propname, s[propname], name) | 247 bar:SetSecureStateData(name, propname, s[propname]) |
| 498 end | 248 end |
| 499 end | 249 end |
| 500 end | 250 end |
| 501 BuildKeybinds(bar, states) | 251 BuildKeybinds(bar, states) |
| 502 SetHandlerData(bar, "showAll", ReAction:GetConfigMode()) | 252 bar:SetStateDriver(BuildRule(states)) |
| 503 SetStateDriver(bar, BuildRule(states)) | |
| 504 RefreshState(bar) | |
| 505 end | 253 end |
| 506 end | 254 end |
| 507 | 255 |
| 508 function CleanupStates( bar ) | 256 function CleanupStates( bar ) |
| 509 SetStateDriver(bar, nil) | 257 bar:SetStateDriver(nil) |
| 510 end | |
| 511 | |
| 512 function ShowAll( bar, show ) | |
| 513 if statedrivers[bar] then | |
| 514 SetHandlerData(bar, "showAll", show) | |
| 515 RefreshState(bar) | |
| 516 end | |
| 517 end | 258 end |
| 518 end | 259 end |
| 519 | 260 |
| 520 | 261 |
| 521 | 262 |
| 537 ReAction.RegisterCallback(self, "OnCreateBar","OnRefreshBar") | 278 ReAction.RegisterCallback(self, "OnCreateBar","OnRefreshBar") |
| 538 ReAction.RegisterCallback(self, "OnDestroyBar") | 279 ReAction.RegisterCallback(self, "OnDestroyBar") |
| 539 ReAction.RegisterCallback(self, "OnRefreshBar") | 280 ReAction.RegisterCallback(self, "OnRefreshBar") |
| 540 ReAction.RegisterCallback(self, "OnEraseBar") | 281 ReAction.RegisterCallback(self, "OnEraseBar") |
| 541 ReAction.RegisterCallback(self, "OnRenameBar") | 282 ReAction.RegisterCallback(self, "OnRenameBar") |
| 542 ReAction.RegisterCallback(self, "OnConfigModeChanged") | |
| 543 end | 283 end |
| 544 | 284 |
| 545 function module:OnEnable() | 285 function module:OnEnable() |
| 546 self:UPDATE_SHAPESHIFT_FORMS() -- it doesn't fire on a /reloadui | 286 self:UPDATE_SHAPESHIFT_FORMS() -- it doesn't fire on a /reloadui |
| 547 end | 287 end |
| 549 function module:UPDATE_SHAPESHIFT_FORMS() | 289 function module:UPDATE_SHAPESHIFT_FORMS() |
| 550 -- Re-parse the rules table according to the new form list. | 290 -- Re-parse the rules table according to the new form list. |
| 551 -- This happens both at initial login (after PLAYER_ENTERING_WORLD) | 291 -- This happens both at initial login (after PLAYER_ENTERING_WORLD) |
| 552 -- as well as when gaining new abilities. | 292 -- as well as when gaining new abilities. |
| 553 InitRules() | 293 InitRules() |
| 554 for name, bar in ReAction:IterateBars() do | 294 for _, bar in ReAction:IterateBars() do |
| 555 self:OnRefreshBar(nil,bar,name) | 295 ApplyStates(bar) |
| 556 end | 296 end |
| 557 end | 297 end |
| 558 | 298 |
| 559 function module:OnRefreshBar(event, bar, name) | 299 function module:OnRefreshBar(event, bar, name) |
| 560 local c = self.db.profile.bars[name] | 300 local c = self.db.profile.bars[name] |
| 572 end | 312 end |
| 573 | 313 |
| 574 function module:OnRenameBar(event, bar, oldname, newname) | 314 function module:OnRenameBar(event, bar, oldname, newname) |
| 575 local bars = self.db.profile.bars | 315 local bars = self.db.profile.bars |
| 576 bars[newname], bars[oldname] = bars[oldname], nil | 316 bars[newname], bars[oldname] = bars[oldname], nil |
| 577 end | |
| 578 | |
| 579 function module:OnConfigModeChanged(event, mode) | |
| 580 for name, bar in ReAction:IterateBars() do | |
| 581 if self.db.profile.bars[name] then | |
| 582 ShowAll(bar, mode) | |
| 583 end | |
| 584 end | |
| 585 end | 317 end |
| 586 | 318 |
| 587 | 319 |
| 588 | 320 |
| 589 -- Options -- | 321 -- Options -- |
| 1121 end | 853 end |
| 1122 | 854 |
| 1123 function StateHandler:SetAnchorFrame(info, value) | 855 function StateHandler:SetAnchorFrame(info, value) |
| 1124 local f = _G[self._anchorframes[value]] | 856 local f = _G[self._anchorframes[value]] |
| 1125 if f then | 857 if f then |
| 1126 SetFrameRef(self.bar:GetFrame(), "anchor-"..self:GetName(), f) | 858 bar:SetFrameRef("anchor-"..self:GetName(), f) |
| 1127 self:SetProp(info, f:GetName()) | 859 self:SetProp(info, f:GetName()) |
| 1128 end | 860 end |
| 1129 end | 861 end |
| 1130 | 862 |
| 1131 function StateHandler:SetAnchorPointProp(info, value) | 863 function StateHandler:SetAnchorPointProp(info, value) |
| 1339 end | 1071 end |
| 1340 | 1072 |
| 1341 | 1073 |
| 1342 -- Export methods to Bar class -- | 1074 -- Export methods to Bar class -- |
| 1343 | 1075 |
| 1344 function ReAction.Bar:GetState() | |
| 1345 local env = GetManagedEnvironment(self:GetFrame()) | |
| 1346 return env and env.state | |
| 1347 end | |
| 1348 | |
| 1349 ReAction.Bar.GetStateProperty = GetProperty | 1076 ReAction.Bar.GetStateProperty = GetProperty |
| 1350 ReAction.Bar.SetStateProperty = SetProperty | 1077 ReAction.Bar.SetStateProperty = SetProperty |
