Mercurial > wow > reaction
comparison main.lua @ 17:639282f3a0e0
More cleanup of main.lua, ReBound-1.0.lua
| author | Flick <flickerstreak@gmail.com> |
|---|---|
| date | Fri, 23 Mar 2007 19:28:30 +0000 |
| parents | 2735edcf9ab7 |
| children | 2f3e45fcb9e2 |
comparison
equal
deleted
inserted
replaced
| 16:832aab6fed49 | 17:639282f3a0e0 |
|---|---|
| 7 | 7 |
| 8 -- Ace Library local object initialization | 8 -- Ace Library local object initialization |
| 9 local L = AceLibrary("AceLocale-2.2"):new("ReAction") | 9 local L = AceLibrary("AceLocale-2.2"):new("ReAction") |
| 10 local dewdrop = AceLibrary("Dewdrop-2.0") | 10 local dewdrop = AceLibrary("Dewdrop-2.0") |
| 11 local tablet = AceLibrary("Tablet-2.0") | 11 local tablet = AceLibrary("Tablet-2.0") |
| 12 local ReBound = AceLibrary("ReBound-1.0"):new("REACTION") | 12 local ReBound = AceLibrary("ReBound-1.0"):new("ReAction") |
| 13 | 13 |
| 14 -- private functions | 14 -- private functions |
| 15 local function tcopy(t) | 15 local function tcopy(t) |
| 16 local r = { } | 16 local r = { } |
| 17 for k, v in pairs(t) do | 17 for k, v in pairs(t) do |
| 22 | 22 |
| 23 -- private constants | 23 -- private constants |
| 24 local EMPTY_BAR_SLOT = -1 | 24 local EMPTY_BAR_SLOT = -1 |
| 25 | 25 |
| 26 -- key binding label constants | 26 -- key binding label constants |
| 27 BINDING_HEADER_REACTION = L["ReAction"] | 27 BINDING_HEADER_REACTION = L["ReAction"] |
| 28 BINDING_NAME_REACTION_TOGGLELOCK = L["Toggle ReAction Bar Lock"] | 28 BINDING_NAME_REACTION_TOGGLELOCK = L["Toggle ReAction Bar Lock"] |
| 29 BINDING_NAME_REACTION_TOGGLEKEYBIND = L["ReAction Keybinding Mode"] | 29 BINDING_NAME_REACTION_TOGGLEKEYBIND = L["ReAction Keybinding Mode"] |
| 30 | 30 |
| 31 -- UI panel strings | 31 -- UI panel strings |
| 32 REACTION_KEYBIND_TITLE = L["ReAction Keybinding"] | 32 REACTION_KEYBIND_TITLE = L["ReAction Keybinding"] |
| 33 REACTION_KEYBIND_SUBTITLE = L["Click Buttons to Set Keybindings"] | 33 REACTION_KEYBIND_SUBTITLE = L["Click Buttons to Set Keybindings"] |
| 34 REACTION_KEYBIND_DONE = L["Save"] | 34 REACTION_KEYBIND_DONE = L["Save"] |
| 35 REACTION_KEYBIND_REVERT = L["Revert"] | 35 REACTION_KEYBIND_REVERT = L["Revert"] |
| 36 | 36 |
| 37 | 37 |
| 38 | 38 |
| 39 ------------------------------ | 39 ------------------------------ |
| 40 -- AceAddon setup | 40 -- AceAddon setup |
| 49 function main:OnInitialize() | 49 function main:OnInitialize() |
| 50 self:RegisterChatCommand( {L["/reaction"], L["/rxn"]}, ReActionConsoleOptions, "REACTION" ) | 50 self:RegisterChatCommand( {L["/reaction"], L["/rxn"]}, ReActionConsoleOptions, "REACTION" ) |
| 51 self:RegisterDB("ReActionDB","ReActionDBPC") | 51 self:RegisterDB("ReActionDB","ReActionDBPC") |
| 52 self:RegisterDefaults("profile", ReAction_DefaultProfile) | 52 self:RegisterDefaults("profile", ReAction_DefaultProfile) |
| 53 self:RegisterEvent("PLAYER_REGEN_DISABLED","CombatLockdown") | 53 self:RegisterEvent("PLAYER_REGEN_DISABLED","CombatLockdown") |
| 54 self:RegisterEvent("PLAYER_ENTERING_WORLD","HideDefaultBars") | |
| 55 self:DisableDefaultKeybindings() | 54 self:DisableDefaultKeybindings() |
| 56 | 55 |
| 57 -- create update function for keybinding frame | 56 -- create update function for keybinding frame |
| 58 ReActionKeybindDialog:SetScript("OnHide", function(frame) | 57 ReActionKeybindDialog:SetScript("OnHide", function(frame) main:HideKeybindDialog(frame) end) |
| 59 main:SetKeybindMode(false) | |
| 60 if frame.save then | |
| 61 ReBound:SaveBindings() | |
| 62 else | |
| 63 ReBound:RevertBindings() | |
| 64 end | |
| 65 frame.save = false | |
| 66 end ) | |
| 67 | 58 |
| 68 -- initial non-persistent state | 59 -- initial non-persistent state |
| 69 self.locked = true | 60 self.locked = true |
| 61 self.keybindMode = false | |
| 70 self.bars = { } | 62 self.bars = { } |
| 71 end | 63 end |
| 72 | 64 |
| 73 -- OnEnable is called at startup and when the profile is changed (via OnProfileEnable) | 65 -- OnEnable is called at PLAYER_LOGIN or when the addon is enabled. |
| 74 function main:OnEnable( ) | 66 function main:OnEnable( ) |
| 75 if self.db.profile.firstRunDone ~= true then | 67 self:HideDefaultBars() |
| 76 self.db.profile.bars = tcopy(ReAction_DefaultBlizzardBars) | 68 self:SetupProfile( ) |
| 77 end | |
| 78 self:DestroyAllBars() | |
| 79 self:SetupBars() | |
| 80 self:UpgradeProfile() | |
| 81 self:SetupKeybindings() | |
| 82 if self.db.profile.firstRunDone ~= true then | |
| 83 self:Unlock() | |
| 84 end | |
| 85 self.db.profile.firstRunDone = true | |
| 86 end | 69 end |
| 87 | 70 |
| 88 function main:OnDisable() | 71 function main:OnDisable() |
| 89 self:Lock() | 72 self:Lock() |
| 90 end | 73 end |
| 92 -- OnProfileEnable() is only called when switching profiles, NOT for the initial profile at load time. | 75 -- OnProfileEnable() is only called when switching profiles, NOT for the initial profile at load time. |
| 93 function main:OnProfileEnable( oldName, oldData ) | 76 function main:OnProfileEnable( oldName, oldData ) |
| 94 self:UnregisterEvent("REBOUND_BIND") | 77 self:UnregisterEvent("REBOUND_BIND") |
| 95 self:UnregisterEvent("REBOUND_UNBIND") | 78 self:UnregisterEvent("REBOUND_UNBIND") |
| 96 ReBound:ClearRegisteredBindings() | 79 ReBound:ClearRegisteredBindings() |
| 97 self:OnEnable() | 80 self:SetupProfile() |
| 98 end | 81 end |
| 99 | 82 |
| 100 function main:UpgradeProfile() | 83 function main:SetupProfile( ) |
| 101 if self.db.profile.firstRunDone ~= true and #self.db.profile.bindings == 0 then | 84 local profile = self.db.profile |
| 85 if profile.firstRunDone ~= true then | |
| 86 profile.bars = tcopy(ReAction_DefaultBlizzardBars) | |
| 87 end | |
| 88 self:DestroyAllBars() | |
| 89 self:UpgradeProfile() | |
| 90 self:HideArt() | |
| 91 self:SetupBars() | |
| 92 self:SetupKeybindings() | |
| 93 if profile.firstRunDone ~= true then | |
| 94 self:Unlock() | |
| 95 profile.firstRunDone = true | |
| 96 end | |
| 97 end | |
| 98 | |
| 99 -- Set a global variable for Bindings.xml (I use 'setglobal' for clarity, it's not strictly necessary) | |
| 100 setglobal("ReActionAddOn", main) | |
| 101 | |
| 102 | |
| 103 | |
| 104 | |
| 105 ------------------------------------------------------------ | |
| 106 -- Profile conversion functions (from old profiles) | |
| 107 -- | |
| 108 -- NOTE: these will be REMOVED when alpha testing is over. | |
| 109 ------------------------------------------------------------ | |
| 110 function main:UpgradeBindingConfig() | |
| 111 if #self.db.profile.bindings == 0 then | |
| 102 for _, bar in pairs(self.bars) do | 112 for _, bar in pairs(self.bars) do |
| 103 for _, button in pairs(bar.buttons) do | 113 for _, button in pairs(bar.buttons) do |
| 104 local key = ReBound:GetBinding(button:GetActionFrame(),"LeftButton") | 114 local key = ReBound:GetBinding(button:GetActionFrame(),"LeftButton") |
| 105 if key and #key > 0 and not self.db.profile.bindings[key] then | 115 if key and #key > 0 and not self.db.profile.bindings[key] then |
| 106 self:REBOUND_BIND(key,button:GetActionFrame():GetName(),"LeftButton") | 116 self:REBOUND_BIND(key,button:GetActionFrame():GetName(),"LeftButton") |
| 108 end | 118 end |
| 109 end | 119 end |
| 110 end | 120 end |
| 111 end | 121 end |
| 112 | 122 |
| 123 function main:UpgradeProfile() | |
| 124 end | |
| 113 | 125 |
| 114 | 126 |
| 115 | 127 |
| 116 -------------------------------------------- | 128 -------------------------------------------- |
| 117 -- FuBar plugin setup | 129 -- FuBar plugin setup |
| 153 | 165 |
| 154 ------------------------------ | 166 ------------------------------ |
| 155 -- Key binding functions | 167 -- Key binding functions |
| 156 ------------------------------ | 168 ------------------------------ |
| 157 function main:DisableDefaultKeybindings() | 169 function main:DisableDefaultKeybindings() |
| 158 -- change the labels on all actionbar keybindings in the default | 170 -- change the labels on all actionbar keybindings in the default interface. |
| 159 -- interface. | |
| 160 local label = "|cff999999("..L["Use ReAction"]..")|r" | 171 local label = "|cff999999("..L["Use ReAction"]..")|r" |
| 161 for i = 1, 12 do | 172 for i = 1, 12 do |
| 162 setglobal("BINDING_NAME_ACTIONBUTTON"..i,label) | 173 setglobal("BINDING_NAME_ACTIONBUTTON"..i,label) |
| 163 for j = 1, 4 do | 174 for j = 1, 4 do |
| 164 setglobal("BINDING_NAME_MULTIACTIONBAR"..j.."BUTTON"..i,label) | 175 setglobal("BINDING_NAME_MULTIACTIONBAR"..j.."BUTTON"..i,label) |
| 167 for i = 1, 6 do | 178 for i = 1, 6 do |
| 168 setglobal("BINDING_NAME_ACTIONPAGE"..i,label) | 179 setglobal("BINDING_NAME_ACTIONPAGE"..i,label) |
| 169 end | 180 end |
| 170 for i = 1, 10 do | 181 for i = 1, 10 do |
| 171 setglobal("BINDING_NAME_BONUSACTIONBUTTON"..i,label) | 182 setglobal("BINDING_NAME_BONUSACTIONBUTTON"..i,label) |
| 172 setglobal("BINDING_NAME_SHAPESHIFTBUTTON"..i,label) | 183 -- setglobal("BINDING_NAME_SHAPESHIFTBUTTON"..i,label) |
| 173 end | 184 end |
| 174 BINDING_HEADER_ACTIONBAR = "|cff999999"..L["Action Bar Functions Disabled"].."|r" | 185 BINDING_HEADER_ACTIONBAR = "|cff999999"..L["Action Bar Functions Disabled"].."|r" |
| 175 BINDING_HEADER_MULTIACTIONBAR = "|cff999999"..L["Multi-Action Bar Functions Disabled"].."|r" | 186 BINDING_HEADER_MULTIACTIONBAR = "|cff999999"..L["Multi-Action Bar Functions Disabled"].."|r" |
| 176 BINDING_NAME_NEXTACTIONPAGE = label | 187 BINDING_NAME_NEXTACTIONPAGE = label |
| 177 BINDING_NAME_PREVIOUSACTIONPAGE = label | 188 BINDING_NAME_PREVIOUSACTIONPAGE = label |
| 179 | 190 |
| 180 function main:SetupKeybindings() | 191 function main:SetupKeybindings() |
| 181 if self.db.profile.firstRunDone ~= true then | 192 if self.db.profile.firstRunDone ~= true then |
| 182 self:StealKeyBindings() | 193 self:StealKeyBindings() |
| 183 else | 194 else |
| 195 self:UpgradeBindingConfig() | |
| 196 local needsSave = false | |
| 184 for key, binding in pairs(self.db.profile.bindings) do | 197 for key, binding in pairs(self.db.profile.bindings) do |
| 185 local target = getglobal(binding.target) | 198 local target = getglobal(binding.target) |
| 186 if target then | 199 if target then |
| 187 ReBound:SetBinding(key, target, binding.button) | 200 if ReBound:GetBinding(target,binding.button) ~= key then |
| 188 end | 201 ReBound:SetBinding(key,target,binding.button,true) |
| 189 end | 202 needsSave = true |
| 190 end | 203 end |
| 191 ReBound:SaveBindings() | 204 end |
| 205 end | |
| 206 if needsSave then | |
| 207 ReBound:SaveBindings() | |
| 208 end | |
| 209 end | |
| 192 self:RegisterEvent("REBOUND_BIND") | 210 self:RegisterEvent("REBOUND_BIND") |
| 193 self:RegisterEvent("REBOUND_UNBIND") | 211 self:RegisterEvent("REBOUND_UNBIND") |
| 194 end | 212 end |
| 195 | 213 |
| 196 function main:StealKeyBindings() | 214 function main:StealKeyBindings() |
| 197 -- steal the keybindings of the main action bar and assign them to rebar 1, buttons 1-12 | 215 -- steal the keybindings of the main action bar and assign them to rebar 1, buttons 1-12 |
| 198 for i = 1, 12 do | 216 local bar = self.bars[1] |
| 199 local key = GetBindingKey("ACTIONBUTTON"..i) | 217 if bar and bar ~= EMPTY_BAR_SLOT then |
| 218 for i = 1, 12 do | |
| 219 local key = GetBindingKey("ACTIONBUTTON"..i) | |
| 220 if key and #key > 0 then | |
| 221 local button = bar.buttons[i] | |
| 222 if button then | |
| 223 ReBound:SetBinding(key, button:GetActionFrame(),nil,true) | |
| 224 end | |
| 225 end | |
| 226 end | |
| 227 local key = GetBindingKey("NEXTACTIONPAGE") | |
| 200 if key and #key > 0 then | 228 if key and #key > 0 then |
| 201 ReBound:ClearBinding(key,nil,nil,true) -- suppress notification printouts | 229 ReBound:SetBinding(key, bar.upArrow,nil,true) |
| 202 ReBound:SetBinding(key, self.bars[1].buttons[i]:GetActionFrame(), "LeftButton") | 230 end |
| 203 end | 231 key = GetBindingKey("PREVIOUSACTIONPAGE") |
| 204 end | 232 if key and #key > 0 then |
| 205 ReBound:SaveBindings() | 233 ReBound:SetBinding(key, bar.downArrow,nil,true) |
| 234 end | |
| 235 ReBound:SaveBindings() | |
| 236 end | |
| 206 end | 237 end |
| 207 | 238 |
| 208 function main:REBOUND_BIND(id, key, target, button) | 239 function main:REBOUND_BIND(id, key, target, button) |
| 209 if id == "REACTION" and key and target then | 240 if id == "ReAction" and key and target then |
| 210 self.db.profile.bindings[key] = { target = target, button = button } | 241 self.db.profile.bindings[key] = { target = target, button = button } |
| 211 end | 242 end |
| 212 end | 243 end |
| 213 | 244 |
| 214 function main:REBOUND_UNBIND(id, key) | 245 function main:REBOUND_UNBIND(id, key) |
| 215 if id == "REACTION" and key then | 246 if id == "ReAction" and key then |
| 216 self.db.profile.bindings[key] = nil | 247 self.db.profile.bindings[key] = nil |
| 217 end | 248 end |
| 218 end | 249 end |
| 219 | 250 |
| 220 function main:ToggleKeybindMode() | 251 function main:ToggleKeybindMode() |
| 224 function main:GetKeybindMode() | 255 function main:GetKeybindMode() |
| 225 return self.keybindMode | 256 return self.keybindMode |
| 226 end | 257 end |
| 227 | 258 |
| 228 function main:SetKeybindMode(enabled) | 259 function main:SetKeybindMode(enabled) |
| 229 if not InCombatLockdown() then | 260 if InCombatLockdown() then |
| 261 UIErrorsFrame:AddMessage(ERROR_NOT_IN_COMBAT) | |
| 262 else | |
| 230 self.keybindMode = enabled | 263 self.keybindMode = enabled |
| 231 for _, bar in pairs(self.bars) do | 264 for _, bar in pairs(self.bars) do |
| 232 for __, button in pairs(bar.buttons) do | 265 if bar and bar ~= EMPTY_BAR_SLOT then |
| 233 if button and button ~= EMPTY_BAR_SLOT then | 266 for __, button in pairs(bar.buttons) do |
| 234 button:TempShow(enabled) | 267 if button then |
| 268 button:TempShow(enabled) | |
| 269 end | |
| 235 end | 270 end |
| 236 end | 271 end |
| 237 end | 272 end |
| 238 if enabled then | 273 if enabled then |
| 239 ReBound:ShowFrames() | 274 ReBound:ShowRegisteredFrames() |
| 240 ReActionKeybindDialog:Show() | 275 ReActionKeybindDialog:Show() |
| 241 else | 276 else |
| 242 ReBound:HideFrames() | 277 ReBound:HideRegisteredFrames() |
| 243 if ReActionKeybindDialog:IsShown() then | 278 if ReActionKeybindDialog:IsShown() then |
| 244 ReActionKeybindDialog:Hide() | 279 ReActionKeybindDialog:Hide() |
| 245 end | 280 end |
| 246 end | 281 end |
| 247 else | 282 end |
| 248 UIErrorsFrame:AddMessage(ERROR_NOT_IN_COMBAT) | 283 end |
| 249 end | 284 |
| 250 end | 285 function main:HideKeybindDialog( frame ) |
| 251 | 286 self:SetKeybindMode(false) |
| 252 | 287 if frame.save then |
| 288 ReBound:SaveBindings() | |
| 289 else | |
| 290 ReBound:RevertBindings() | |
| 291 end | |
| 292 frame.save = false | |
| 293 end | |
| 253 | 294 |
| 254 | 295 |
| 255 ---------------------------- | 296 ---------------------------- |
| 256 -- Bar lock/unlock functions | 297 -- Bar lock/unlock functions |
| 257 ---------------------------- | 298 ---------------------------- |
| 297 function main:Unlock() | 338 function main:Unlock() |
| 298 self:SetLocked(false) | 339 self:SetLocked(false) |
| 299 end | 340 end |
| 300 | 341 |
| 301 function main:ToggleLocked() | 342 function main:ToggleLocked() |
| 302 main:SetLocked( not(self.locked) ) | 343 self:SetLocked( not(self.locked) ) |
| 303 end | 344 end |
| 304 | 345 |
| 305 | 346 |
| 306 | 347 |
| 307 -------------------------------------------------------- | 348 -------------------------------------------------------- |
| 308 -- Functions to hide the default Blizzard main bar parts | 349 -- Functions to hide the default Blizzard main bar parts |
| 309 -------------------------------------------------------- | 350 -------------------------------------------------------- |
| 310 function main:HideArt() | 351 function main:HideArt() |
| 311 if self.db.profile.hideArt then | 352 if self.db.profile.hideArt then |
| 312 -- the pet bar is a child of MainMenuBar, and can't be hidden. Need to reparent it | 353 -- the pet bar is a child of MainMenuBar, but can't be hidden because it will |
| 354 -- break automatic pet bar show/hide. Need to reparent it. | |
| 313 PetActionBarFrame:SetParent(UIParent) | 355 PetActionBarFrame:SetParent(UIParent) |
| 314 MainMenuBar:Hide() -- this also hides the bags, xp bar, lag meter, and micro menu buttons. | 356 |
| 315 -- these two are the pet bar background | 357 -- these two are the pet bar background |
| 316 -- unfortunately UIParent_ManageFramePositions() shows and hides these too | 358 -- unfortunately UIParent_ManageFramePositions() shows and hides these too |
| 317 -- so they get reparented to MainMenuBar | 359 -- so they get reparented to MainMenuBar |
| 318 SlidingActionBarTexture0:SetParent(MainMenuBar) | 360 SlidingActionBarTexture0:SetParent(MainMenuBar) |
| 319 SlidingActionBarTexture1:SetParent(MainMenuBar) | 361 SlidingActionBarTexture1:SetParent(MainMenuBar) |
| 362 | |
| 363 MainMenuBar:Hide() -- this also hides the bags, xp bar, lag meter, and micro menu buttons. | |
| 320 else | 364 else |
| 321 SlidingActionBarTexture0:SetParent(PetActionBarFrame) | 365 SlidingActionBarTexture0:SetParent(PetActionBarFrame) |
| 322 SlidingActionBarTexture1:SetParent(PetActionBarFrame) | 366 SlidingActionBarTexture1:SetParent(PetActionBarFrame) |
| 367 PetActionBarFrame:SetParent(MainMenuBar) | |
| 323 MainMenuBar:Show() | 368 MainMenuBar:Show() |
| 324 end | 369 end |
| 325 end | 370 end |
| 326 | 371 |
| 327 function main:IsArtHidden() | 372 function main:IsArtHidden() |
| 410 -- Reset bars to blizzard defaults | 455 -- Reset bars to blizzard defaults |
| 411 function main:ResetBars() | 456 function main:ResetBars() |
| 412 if InCombatLockdown() then | 457 if InCombatLockdown() then |
| 413 UIErrorsFrame:AddMessage(SPELL_FAILED_AFFECTING_COMBAT) | 458 UIErrorsFrame:AddMessage(SPELL_FAILED_AFFECTING_COMBAT) |
| 414 else | 459 else |
| 415 self:DestroyAllBars() | |
| 416 self.db.profile.bars = tcopy(ReAction_DefaultBlizzardBars) | 460 self.db.profile.bars = tcopy(ReAction_DefaultBlizzardBars) |
| 417 self:SetupBars() | 461 self:OnProfileEnable() -- treat it like a profile switch |
| 418 end | 462 end |
| 419 end | 463 end |
| 420 | 464 |
| 421 function main:DestroyAllBars() | 465 function main:DestroyAllBars() |
| 422 -- destroy any existing bars | 466 -- destroy any existing bars |
| 424 self:DestroyBar(id) | 468 self:DestroyBar(id) |
| 425 end | 469 end |
| 426 end | 470 end |
| 427 | 471 |
| 428 function main:SetupBars() | 472 function main:SetupBars() |
| 429 -- hide the default Blizzard art, if configued | |
| 430 self:HideArt() | |
| 431 | |
| 432 -- set up the bars from the profile | 473 -- set up the bars from the profile |
| 433 -- note the use of table.maxn rather than # or ipairs: | 474 -- note the use of table.maxn rather than # or ipairs: |
| 434 -- our array of bars can in fact contain holes | 475 -- our array of bars can in fact contain holes |
| 435 for id = 1, table.maxn(self.db.profile.bars) do | 476 for id = 1, table.maxn(self.db.profile.bars) do |
| 436 local config = self.db.profile.bars[id] | 477 local config = self.db.profile.bars[id] |
| 437 if config then | 478 if config then |
| 438 self:CreateBar(config, id) | 479 self.bars[id] = self:CreateBar(config, id) |
| 439 end | 480 end |
| 440 end | 481 end |
| 441 | 482 |
| 442 -- anchor the bars, have to do this in a second pass because | 483 -- anchor the bars, have to do this in a second pass because |
| 443 -- they might be anchored to each other in a non-ordered way | 484 -- they might be anchored to each other in a non-ordered way |
| 447 end | 488 end |
| 448 end | 489 end |
| 449 end | 490 end |
| 450 | 491 |
| 451 function main:CreateBar( config, id ) | 492 function main:CreateBar( config, id ) |
| 493 local buttonType = config.btnConfig and config.btnConfig.type and getglobal(config.btnConfig.type) | |
| 494 local subtype = buttonType and buttonType:GetButtonType(config.btnConfig.subtype) | |
| 495 | |
| 496 if not subtype then | |
| 497 self:Print(L["Tried to create a button of unknown type"]) | |
| 498 return | |
| 499 end | |
| 500 | |
| 452 local bar = ReBar:new(config, id) | 501 local bar = ReBar:new(config, id) |
| 453 local buttonType = ReAction:GetButtonType(config.btnConfig.subtype) | 502 |
| 454 | 503 -- initialize dewdrop menu |
| 455 if buttonType then | 504 dewdrop:Register(bar:GetControlFrame(), |
| 456 self.bars[id] = bar | 505 'children', |
| 457 self.db.profile.bars[id] = config | 506 function() |
| 458 | 507 dewdrop:FeedAceOptionsTable(ReActionGlobalMenuOptions) |
| 459 -- initialize dewdrop menu | 508 dewdrop:FeedAceOptionsTable(GenerateReActionBarOptions(bar,self)) |
| 460 local cf = bar:GetControlFrame() | 509 dewdrop:FeedAceOptionsTable(subtype:GenerateOptionsTable(config.btnConfig, function() return bar:GetButtonList() end)) |
| 461 dewdrop:Register(cf, | 510 end, |
| 462 'children', | 511 'cursorX', true, |
| 463 function() | 512 'cursorY', true |
| 464 dewdrop:FeedAceOptionsTable(ReActionGlobalMenuOptions) | 513 ) |
| 465 dewdrop:FeedAceOptionsTable(GenerateReActionBarOptions(bar,self)) | 514 |
| 466 dewdrop:FeedAceOptionsTable(buttonType:GenerateOptionsTable(config.btnConfig, function() return bar:GetButtonList() end)) | 515 -- register page up/down buttons with ReBound for keybinding |
| 467 end, | 516 ReBound:Register(bar.upArrow) |
| 468 'cursorX', true, | 517 ReBound:Register(bar.downArrow) |
| 469 'cursorY', true | 518 |
| 470 ) | 519 if not self.locked then |
| 471 | 520 bar:ShowControls() |
| 472 bar:GetControlFrame():SetScript("OnClick", | 521 end |
| 473 function(btn) | 522 |
| 474 if btn == "RightButton" then | 523 return bar |
| 475 dewdrop:Open(cf) | |
| 476 end | |
| 477 end | |
| 478 ) | |
| 479 | |
| 480 -- register page up/down buttons with ReBound for keybinding | |
| 481 ReBound:Register(bar.upArrow) | |
| 482 ReBound:Register(bar.downArrow) | |
| 483 | |
| 484 if not self.locked then | |
| 485 bar:ShowControls() | |
| 486 end | |
| 487 return bar | |
| 488 else | |
| 489 if bar then | |
| 490 bar:Destroy() | |
| 491 end | |
| 492 error(L["Tried to create a button of unknown type"]) | |
| 493 end | |
| 494 end | 524 end |
| 495 | 525 |
| 496 function main:DestroyBar( id ) | 526 function main:DestroyBar( id ) |
| 497 local bar = self.bars[id] | 527 local bar = self.bars[id] |
| 498 if bar and bar ~= EMPTY_BAR_SLOT then | 528 if bar and bar ~= EMPTY_BAR_SLOT then |
| 514 -- this function is a wrapper for CreateBar() which looks up the bar type | 544 -- this function is a wrapper for CreateBar() which looks up the bar type |
| 515 -- and constructs a new configuration object of the right type. | 545 -- and constructs a new configuration object of the right type. |
| 516 function main:NewBar( type ) | 546 function main:NewBar( type ) |
| 517 if InCombatLockdown() then | 547 if InCombatLockdown() then |
| 518 UIErrorsFrame:AddMessage(SPELL_FAILED_AFFECTING_COMBAT) | 548 UIErrorsFrame:AddMessage(SPELL_FAILED_AFFECTING_COMBAT) |
| 519 else | 549 return |
| 520 local t = ReAction:GetButtonType(type) | 550 end |
| 521 if t then | 551 |
| 522 local c = tcopy(ReAction_DefaultBarConfig["ReAction"][type]) | 552 local t = ReAction:GetButtonType(type) |
| 523 local id = nil | 553 if t then |
| 524 for i = 1, table.maxn(self.bars) + 1 do -- there may be holes, so #self.bars won't work | 554 local c = tcopy(ReAction_DefaultBarConfig["ReAction"][type]) |
| 525 if self.bars[i] == nil or self.bars[i] == EMPTY_BAR_SLOT then | 555 local id = nil |
| 526 id = i | 556 for i = 1, table.maxn(self.bars) + 1 do -- there may be holes, so #self.bars won't work |
| 527 break | 557 if self.bars[i] == nil or self.bars[i] == EMPTY_BAR_SLOT then |
| 528 end | 558 id = i |
| 529 end | 559 break |
| 530 local bar = self:CreateBar(c, id) | 560 end |
| 531 bar:ApplyAnchor() | 561 end |
| 532 self:Unlock() | 562 self.bars[id] = self:CreateBar(c, id) |
| 533 end | 563 self.db.profile.bars[id] = c |
| 564 self.bars[id]:ApplyAnchor() | |
| 565 self:Unlock() | |
| 534 end | 566 end |
| 535 end | 567 end |
| 536 | 568 |
| 537 -- | 569 -- |
| 538 -- This function is a wrapper for DestroyBar() which does in-combat | 570 -- This function is a wrapper for DestroyBar() which does in-combat |
| 548 end | 580 end |
| 549 end | 581 end |
| 550 | 582 |
| 551 | 583 |
| 552 | 584 |
| 553 | |
| 554 ----------------- | |
| 555 -- General utility | |
| 556 ----------------- | |
| 557 function main:ToggleIds() | |
| 558 if self.showIds then | |
| 559 ReAction:HideAllIds() | |
| 560 else | |
| 561 ReAction:ShowAllIds() | |
| 562 end | |
| 563 self.showIds = not self.showIds | |
| 564 end | |
| 565 | |
| 566 function main:AreIdsVisible() | |
| 567 return self.showIds | |
| 568 end | |
| 569 | |
| 570 -- set a global variable for Bindings.xml | |
| 571 ReActionAddOn = main | |
| 572 | |
| 573 |
