comparison BindingsFrame.lua @ 78:d4c100b0fd01 v7.1.5-80-release

- Fixed an issue with talent bindings not loading between specialization changes. - Fixed action button text corruption that occurred after changing assignments on an inactive spell.
author Nenue
date Thu, 26 Jan 2017 20:25:04 -0500
parents 6623b7f2c1ca
children b9a53385462c
comparison
equal deleted inserted replaced
77:4ca4cc031e99 78:d4c100b0fd01
14 [[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]] 14 [[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]]
15 [[Interface\UI-TutorialFrame-QuestGiver\UI-TutorialFrame-QuestGray]] 15 [[Interface\UI-TutorialFrame-QuestGiver\UI-TutorialFrame-QuestGray]]
16 --]=] 16 --]=]
17 17
18 SkeletonKeyButtonMixin = {} 18 SkeletonKeyButtonMixin = {}
19 local skb = SkeletonKeyButtonMixin
19 local _, kb = ... 20 local _, kb = ...
20 local print = (DEVIAN_PNAME == 'SkeletonKey') and function(...) _G.print('SKUI', ...) end or nop 21 local print = (DEVIAN_PNAME == 'SkeletonKey') and function(...) _G.print('SKUI', ...) end or nop
21 local gprint = (DEVIAN_PNAME == 'SkeletonKey') and function(...) _G.print('SK', ...) end or nop 22 local gprint = (DEVIAN_PNAME == 'SkeletonKey') and function(...) _G.print('SK', ...) end or nop
22 local L = kb.L 23 local L = kb.L
23 local BINDS_PER_ROW = 2 24 local BINDS_PER_ROW = 2
421 button.isActive = nil 422 button.isActive = nil
422 kb.saveTarget = nil 423 kb.saveTarget = nil
423 return true 424 return true
424 end 425 end
425 426
427 function ActionListPanel:UnbindSlot (button)
428
429 local configTable = kb.currentProfile.buttons[button:GetID()]
430 local button = button or kb.saveTarget
431 if not button then
432 return
433 end
434
435 local command = button.command
436 local actionType = button.actionType
437 local actionID = button.actionID
438
439
440 local talentName = button.actionName
441 if actionType == 'macro' then
442 local spellName, _, spellID = GetMacroSpell(actionID)
443 talentName = spellName
444 end
445
446 local keys = {GetBindingKey(command) }
447 if configTable and configTable.assignedKeys then
448 for _, key in ipairs(configTable.assignedKeys) do
449 if not tContains(keys, key) then
450 tinsert(keys, key)
451 end
452 end
453 end
454
455 -- only manipulate bindings if its an available ability
456 if button.isAvailable then
457 --print('detected', #keys, 'bindings')
458
459 if #keys >= 1 then
460 kb.UpdateBindingsCache(actionType, actionID, {})
461 end
462
463 for i, key in pairs(keys) do
464 --print('clearing', key)
465 SetBinding(key, nil)
466 kb.bindings[tostring(actionType)..'_'..tostring(actionID)] = nil
467 end
468 SaveBindings(GetCurrentBindingSet())
469 end
470
471
472 if configTable and configTable.assignedKeys then
473 table.wipe(configTable.assignedKeys)
474 end
475
476 if kb.currentProfile.bound[command] then
477 kb.currentProfile.bound[command] = nil
478 --kb:print(BINDING_REMOVED:format(self.actionName, configHeaders[db.bindMode]))
479 end
480 kb.saveTarget = nil
481 button:UpdateSlot(true)
482 return true
483 end
484
426 function ActionListPanel:OnInput(key) 485 function ActionListPanel:OnInput(key)
427 486
428 if key == 'ESCAPE' then 487 if key == 'ESCAPE' then
429 return self:DeactivateSlot(kb.saveTarget) 488 return self:DeactivateSlot(kb.saveTarget)
430 end 489 end
446 505
447 function SystemBindingsPanel:Update(force) 506 function SystemBindingsPanel:Update(force)
448 end 507 end
449 508
450 --- Associate processed input with the given slot's metadata 509 --- Associate processed input with the given slot's metadata
451 function SkeletonKeyButtonMixin:SaveSlot (key) 510 function skb:SaveSlot (key)
452 511
453 if not self.command then 512 if not self.command then
454 return 513 return
455 end 514 end
456 if InCombatLockdown() then 515 if InCombatLockdown() then
503 if self.isAvailable then 562 if self.isAvailable then
504 print('Binding available spell', binding, self.command) 563 print('Binding available spell', binding, self.command)
505 SetBinding(binding, self.command) 564 SetBinding(binding, self.command)
506 SaveBindings(GetCurrentBindingSet()) 565 SaveBindings(GetCurrentBindingSet())
507 self.assignedKeys = {GetBindingKey(self.command) } 566 self.assignedKeys = {GetBindingKey(self.command) }
508 567 kb.UpdateBindingsCache(self.actionType, self.actionID, self.assignedKeys)
509 kb:print(L('BINDING_ASSIGNED', binding, self.actionName, kb.currentHeader)) 568 kb:print(L('BINDING_ASSIGNED', binding, self.actionName, kb.currentHeader))
510 else 569 else
511 kb:print(L('UNSELECTED_TALENT_ASSIGNED', binding, self.actionName, kb.currentHeader)) 570 kb:print(L('UNSELECTED_TALENT_ASSIGNED', binding, self.actionName, kb.currentHeader))
512 end 571 end
513 572
514 if not tContains(self.assignedKeys, binding) then 573 if not tContains(self.assignedKeys, binding) then
515 tinsert(self.assignedKeys, 1, binding) 574 tinsert(self.assignedKeys, 1, binding)
516 end 575 end
517
518 576
519 for _, key in ipairs(self.assignedKeys) do 577 for _, key in ipairs(self.assignedKeys) do
520 if not kb.currentProfile.bindings[key] then 578 if not kb.currentProfile.bindings[key] then
521 kb.currentProfile.bindings[key] = self.command 579 kb.currentProfile.bindings[key] = self.command
522 end 580 end
528 profile.commands[self.command] = nil 586 profile.commands[self.command] = nil
529 profile.bound[self.command] = nil 587 profile.bound[self.command] = nil
530 end 588 end
531 end 589 end
532 590
533 kb.UpdateBindingsCache(self.actionType, self.actionID, self.assignedKeys)
534
535 self.binding = binding 591 self.binding = binding
536
537 return true 592 return true
538 end 593 end
539 594
540 function SkeletonKeyMixin:OnKeyDown(key) 595 function SkeletonKeyMixin:OnKeyDown(key)
541 self:ProcessInput(key) 596 self:ProcessInput(key)
546 function SkeletonKeyMixin:OnDragStart() 601 function SkeletonKeyMixin:OnDragStart()
547 self:StartMoving() 602 self:StartMoving()
548 end 603 end
549 function SkeletonKeyMixin:OnDragStop() 604 function SkeletonKeyMixin:OnDragStop()
550 self:StopMovingOrSizing() 605 self:StopMovingOrSizing()
551 end
552
553 function ActionListPanel:UnbindSlot (button)
554
555 local configTable = kb.currentProfile.buttons[button:GetID()]
556 local button = button or kb.saveTarget
557 if not button then
558 return
559 end
560
561 local command = button.command
562 local actionType = button.actionType
563 local actionID = button.actionID
564
565
566 local talentName = button.actionName
567 if actionType == 'macro' then
568 local spellName, _, spellID = GetMacroSpell(actionID)
569 talentName = spellName
570 end
571
572 local keys = {GetBindingKey(command) }
573 if configTable and configTable.assignedKeys then
574 for _, key in ipairs(configTable.assignedKeys) do
575 if not tContains(keys, key) then
576 tinsert(keys, key)
577 end
578 end
579 end
580
581 -- only manipulate bindings if its an available ability
582 if button.isAvailable then
583 --print('detected', #keys, 'bindings')
584
585 if #keys >= 1 then
586 kb.UpdateBindingsCache(actionType, actionID, {})
587 end
588
589 for i, key in pairs(keys) do
590 --print('clearing', key)
591 SetBinding(key, nil)
592 kb.bindings[tostring(actionType)..'_'..tostring(actionID)] = nil
593 end
594 SaveBindings(GetCurrentBindingSet())
595 end
596
597
598 if configTable and configTable.assignedKeys then
599 table.wipe(configTable.assignedKeys)
600 end
601
602 if kb.currentProfile.bound[command] then
603 kb.currentProfile.bound[command] = nil
604 --kb:print(BINDING_REMOVED:format(self.actionName, configHeaders[db.bindMode]))
605 end
606 kb.saveTarget = nil
607 button:UpdateSlot(true)
608 return true
609 end 606 end
610 607
611 kb.AcceptAssignment = function(self, ...) 608 kb.AcceptAssignment = function(self, ...)
612 local popup = StaticPopupDialogs["SKELETONKEY_CONFIRM_ASSIGN_SLOT"] 609 local popup = StaticPopupDialogs["SKELETONKEY_CONFIRM_ASSIGN_SLOT"]
613 local source = kb. loadedProfiles[popup.oldProfile] 610 local source = kb. loadedProfiles[popup.oldProfile]