Mercurial > wow > skeletonkey
comparison SkeletonKey/KeySlot.lua @ 16:cdd387d39137
filename refactor
| author | Nenue |
|---|---|
| date | Fri, 29 Jul 2016 21:18:15 -0400 |
| parents | 32d64e42ec9b |
| children | 500f9b2bd9ac |
comparison
equal
deleted
inserted
replaced
| 15:32d64e42ec9b | 16:cdd387d39137 |
|---|---|
| 1 -- SkeletonKey | 1 -- SkeletonKey |
| 2 -- KeySlot.lua | 2 -- KeySlot.lua |
| 3 -- Created: 7/28/2016 11:26 PM | 3 -- Created: 7/28/2016 11:26 PM |
| 4 -- %file-revision% | 4 -- %file-revision% |
| 5 -- All the internal slot logic is kept here | 5 -- Code dealing with the slot button innards; they are invoked by frame script and should only chain to Set/Release |
| 6 | 6 |
| 7 local kb, print = LibStub('LibKraken').register(KeyBinder, 'Slot') | 7 local kb, print = LibStub('LibKraken').register(KeyBinder, 'Slot') |
| 8 local CURSOR_SPELLSLOT, CURSOR_BOOKTYPE, CURSOR_PETACTION | 8 local CURSOR_SPELLSLOT, CURSOR_BOOKTYPE, CURSOR_PETACTION |
| 9 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 | 9 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 |
| 10 local BORDER_UNASSIGNED = {0.2,0.2,0.2,1} | 10 local BORDER_UNASSIGNED = {0.2,0.2,0.2,1} |
| 11 local BORDER_ASSIGNED = {1,1,1,1} | 11 local BORDER_ASSIGNED = {1,1,1,1} |
| 12 local BORDER_DYNAMIC = {1,1,0,1} | 12 local BORDER_DYNAMIC = {1,1,0,1} |
| 13 local BORDER_PENDING = {1,0.5,0,1 } | 13 local BORDER_PENDING = {1,0.5,0,1 } |
| 14 | |
| 15 local BUTTON_HEADERS = { | 14 local BUTTON_HEADERS = { |
| 16 ['spell'] = SPELLS, | 15 ['spell'] = SPELLS, |
| 17 ['macro'] = MACRO, | 16 ['macro'] = MACRO, |
| 18 ['petaction'] = PET, | 17 ['petaction'] = PET, |
| 19 ['mount'] = MOUNT, | 18 ['mount'] = MOUNT, |
| 442 self.profile = kb.db.bindMode | 441 self.profile = kb.db.bindMode |
| 443 self:RegisterForDrag('LeftButton') | 442 self:RegisterForDrag('LeftButton') |
| 444 end | 443 end |
| 445 | 444 |
| 446 | 445 |
| 446 --- Updates the current KeyBinding for the button's command | |
| 447 kb.SaveSlot = function(self, key) | |
| 448 | |
| 449 if not self.command then | |
| 450 return | |
| 451 end | |
| 452 | |
| 453 if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then | |
| 454 return | |
| 455 end | |
| 456 print('|cFFFFFF00received|cFFFFFF00', self:GetID(), '|cFF00FFFF', key) | |
| 457 | |
| 458 local modifier = '' | |
| 459 if IsAltKeyDown() then | |
| 460 modifier = 'ALT-' | |
| 461 end | |
| 462 if IsControlKeyDown() then | |
| 463 modifier = modifier.. 'CTRL-' | |
| 464 end | |
| 465 if IsShiftKeyDown() then | |
| 466 modifier = modifier..'SHIFT-' | |
| 467 end | |
| 468 local binding = modifier..key | |
| 469 | |
| 470 if key == 'ESCAPE' then | |
| 471 local keys = {GetBindingKey(self.command) } | |
| 472 --print('detected', #keys, 'bindings') | |
| 473 for i, key in pairs(keys) do | |
| 474 --print('clearing', key) | |
| 475 SetBinding(key, nil) | |
| 476 SaveBindings(GetCurrentBindingSet()) | |
| 477 if kb.currentProfile.bindings[key] then | |
| 478 kb:print(L('BINDING_REMOVED', self.actionName, kb.configHeaders[db.bindMode])) | |
| 479 kb.currentProfile.bindings[key] = nil | |
| 480 end | |
| 481 if kb.currentProfile.talents[self.actionName] then | |
| 482 kb.currentProfile.talents[self.actionName] = nil | |
| 483 end | |
| 484 bindings[self.actionType][self.actionID] = nil | |
| 485 end | |
| 486 if kb.currentProfile.bound[self.command] then | |
| 487 kb.currentProfile.bound[self.command] = nil | |
| 488 --kb:print(BINDING_REMOVED:format(self.actionName, configHeaders[db.bindMode])) | |
| 489 end | |
| 490 | |
| 491 self.active = false | |
| 492 else | |
| 493 if kb.SystemBinds[binding] then | |
| 494 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', key, kb.SystemBinds[binding])) | |
| 495 return | |
| 496 end | |
| 497 | |
| 498 | |
| 499 if self.command then | |
| 500 | |
| 501 local previousKeys | |
| 502 local previousAction = GetBindingAction(binding) | |
| 503 local binding1, binding2, new1, new2 | |
| 504 print(type(previousAction), previousAction) | |
| 505 if previousAction ~= "" and previousAction ~= self.command then | |
| 506 if protected[previousAction] then | |
| 507 -- bounce out if trying to use a protected key | |
| 508 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', key, GetBindingAction(binding))) | |
| 509 kb.bindingstext:SetText(nil) | |
| 510 return | |
| 511 else | |
| 512 kb:print('Discarding keybind for', previousAction) | |
| 513 -- todo: sort out retcon'd talent spells | |
| 514 end | |
| 515 end | |
| 516 | |
| 517 self.binding = binding | |
| 518 | |
| 519 SetBinding(self.binding, self.command) | |
| 520 SaveBindings(GetCurrentBindingSet()) | |
| 521 | |
| 522 local talentInfo | |
| 523 if self.actionType == 'spell' and kb.TalentCache[self.actionID] then | |
| 524 print('conditional binding (talent = "'..self.actionName..'")') | |
| 525 talentInfo = {self.macroName, self.actionName, self.actionType, self.actionID} | |
| 526 local bindings = {GetBindingKey(self.command) } | |
| 527 for i, key in ipairs(bindings) do | |
| 528 tinsert(talentInfo, key) | |
| 529 end | |
| 530 end | |
| 531 | |
| 532 for level, profile in ipairs(kb.orderedProfiles) do | |
| 533 if (level == db.bindMode) then | |
| 534 profile.bound[self.command] = true | |
| 535 if talentInfo then | |
| 536 profile.bindings[self.binding] = nil | |
| 537 else | |
| 538 profile.bindings[self.binding] = self.command | |
| 539 end | |
| 540 profile.talents[self.actionName] = talentInfo | |
| 541 else | |
| 542 profile.bindings[self.binding] = nil | |
| 543 profile.bound[self.command] = nil | |
| 544 kb.currentProfile.talents[self.actionName] = nil | |
| 545 end | |
| 546 if kb.currentProfile.talents[self.actionID] then | |
| 547 kb.currentProfile.talents[self.actionID] = nil | |
| 548 end | |
| 549 end | |
| 550 | |
| 551 kb:print(L('BINDING_ASSIGNED', self.binding, self.actionName, kb.configHeaders[db.bindMode])) | |
| 552 end | |
| 553 end | |
| 554 kb.UpdateSlot(self, true) | |
| 555 KeyBinderSaveButton:Enable() | |
| 556 end | |
| 557 | |
| 558 | |
| 447 | 559 |
| 448 --- Add to blizzard interfaces | 560 --- Add to blizzard interfaces |
| 449 StaticPopupDialogs["SKELETONKEY_CONFIRM_ASSIGN_SLOT"] = { | 561 StaticPopupDialogs["SKELETONKEY_CONFIRM_ASSIGN_SLOT"] = { |
| 450 text = "Confirm moving an assigned command.", | 562 text = "Confirm moving an assigned command.", |
| 451 button1 = OKAY, | 563 button1 = OKAY, |
