Mercurial > wow > skeletonkey
diff SkeletonKey/BindingsUI.lua @ 19:67db6b712bf3
- option checkbutton literals are stored by enclosure
- detect and save any old keybindings when a slot is assigned (anything that begins with 'CLICK KeyBinder*' is ours)
- mouseover mode key input will stay active after leaving a button
- button border flashes when a non-modifier key is pressed
author | Nenue |
---|---|
date | Sat, 30 Jul 2016 19:08:11 -0400 |
parents | 91398d284a99 |
children |
line wrap: on
line diff
--- a/SkeletonKey/BindingsUI.lua Sat Jul 30 03:33:09 2016 -0400 +++ b/SkeletonKey/BindingsUI.lua Sat Jul 30 19:08:11 2016 -0400 @@ -37,24 +37,29 @@ local saveButton local KeyButton_OnKeyDown = function(self, key) + if key == 'ESCAPE' or key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then + return + end + kb.saveTarget.border:SetColorTexture(1,1,1,1) end local KeyButton_OnKeyUp = function(self, key) if key == 'ESCAPE' then kb.DeactivateSlot(kb.saveTarget) - else + kb.ui() + return + end - if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then - return + if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then + return + end + + if kb.SaveSlot(kb.saveTarget, key) then + if not (kb.db.stickyMode or kb.db.hoverInput) then + + kb.DeactivateSlot(kb.saveTarget) end - kb.SaveSlot(kb.saveTarget, key) - - if not kb.stickyMode then - kb:SetScript('OnKeyUp', nil) - kb:SetScript('OnKeyDown', nil) - kb.saveTarget = nil - end + kb.ui() end - kb.ui() end local KeyButton_OnClick = function(self, click) @@ -65,12 +70,8 @@ kb.DropToSlot(self) else if IsShiftKeyDown() then - kb.stickyMode = true + kb.db.stickyMode = true KeyBinderStickyMode:SetChecked(true) - - kb.saveTarget = button - kb:SetScript('OnKeyUp', KeyButton_OnKeyUp) - kb:SetScript('OnKeyDown', KeyButton_OnKeyDown) end kb.ActivateSlot(self) @@ -145,10 +146,10 @@ end else - if self.active then + if self.active and kb.db.hoverInput then self.active = nil - kb.DeactivateSlot(self) - kb.ui() + --kb.DeactivateSlot(self) + --kb.ui() end end end @@ -177,18 +178,41 @@ kb.ui(true) end -local CheckButton_OnEnter = function(self) - if self.tooltip then - GameTooltip:SetOwner(self) - GameTooltip:SetText(self.tooltip) - GameTooltip:Show() +local KeyBinder_CheckButton = function(frame ,enableText, disableText, dbKey, tooltipText, callback) + if kb.db[dbKey] then + frame:SetChecked(true) end -end -local CheckButton_OnLeave = function(self) - if self.tooltip and GameTooltip:GetOwner() == self then - GameTooltip:Hide() - end + frame.label:SetText(kb.db[dbKey] and enableText or disableText) + frame:SetWidth(frame.label:GetStringWidth()+8) + frame:SetScript('OnClick', function(self) + if callback then + callback(self) + end + kb.db[dbKey] = self:GetChecked() + if not kb.db[dbKey] then + if kb.saveTarget then + kb.DeactivateSlot(kb.saveTarget) + end + end + self.label:SetText(kb.db[dbKey] and enableText or disableText) + self:SetWidth(self.label:GetStringWidth()+8) + kb.ui() + end) + + frame:SetScript('OnEnter', function(self) + if tooltipText then + GameTooltip:SetOwner(self) + GameTooltip:SetText(tooltipText) + GameTooltip:Show() + end + end) + + frame:SetScript('OnLeave', function(self) + if tooltipText and GameTooltip:GetOwner() == self then + GameTooltip:Hide() + end + end) end local KeyBinder_OnHide = function() @@ -292,28 +316,8 @@ function() OpenAllBags() end, "Interface\\BUTTONS\\UI-MicroButtonCharacter-Up", {0, 1, .4, 1}) - KeyBinderStickyMode.tooltip = 'Keep input active after receiving a key.' - KeyBinderStickyMode:SetScript('OnClick', function(self) - kb.db.stickyMode = self:GetChecked() - if not kb.db.stickyMode then - if kb.saveTarget then - kb.DeactivateSlot(kb.saveTarget) - end - end - kb.ui() - end) - if kb.db.stickyMode then - KeyBinderStickyMode:SetChecked(true) - end - - KeyBinderHoverInput.tooltip = 'Enable key input when the cursor is over a binding slot.' - KeyBinderHoverInput:SetScript('OnClick', function(self) - kb.db.hoverInput = self:GetChecked() - kb.ui() - end) - if kb.db.hoverInput then - KeyBinderHoverInput:SetChecked(true) - end + KeyBinder_CheckButton(KeyBinderStickyMode, 'Enabled', 'Disabled', 'stickyMode', 'Keep input active after receiving a key.') + KeyBinder_CheckButton(KeyBinderHoverInput, 'MouseOver', 'Click', 'hoverInput', 'Enable key input when the cursor is over a binding slot.') KeyBinderUnbindButton:SetScript('OnClick', function() @@ -323,10 +327,6 @@ kb.ui() end) - KeyBinderStickyMode:SetScript('OnEnter', CheckButton_OnEnter) - KeyBinderHoverInput:SetScript('OnEnter', CheckButton_OnEnter) - KeyBinderStickyMode:SetScript('OnLeave', CheckButton_OnLeave) - KeyBinderHoverInput:SetScript('OnLeave', CheckButton_OnLeave) kb.info:SetPoint('TOPLEFT', kb.UIPanels[1], 'BOTTOMLEFT', 0, -BUTTON_SPACING) HEADER_OFFSET = kb.UIPanels[1]:GetHeight() + BUTTON_PADDING @@ -434,15 +434,12 @@ if kb.saveTarget then KeyBinderUnbindButton:SetParent(kb.saveTarget) - KeyBinderUnbindButton:SetPoint('TOPRIGHT', kb.saveTarget, 'TOPLEFT', -2,0) + KeyBinderUnbindButton:SetPoint('TOPLEFT', kb.saveTarget, 'BOTTOMLEFT', 0, -1) KeyBinderUnbindButton:Show() else KeyBinderUnbindButton:Hide() end - KeyBinderStickyMode.label:SetText(kb.db.stickyMode and 'Sticky' or 'Normal') - KeyBinderHoverInput.label:SetText(kb.db.hoverInput and 'MouseOver' or 'Manual') - -- Reset this so talent cache can be rebuilt kb.talentsPushed = nil end