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