comparison 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
comparison
equal deleted inserted replaced
18:91398d284a99 19:67db6b712bf3
35 local restingAlpha = 0.7 35 local restingAlpha = 0.7
36 local fadeTime, fadeDelay = .30, 0.15 36 local fadeTime, fadeDelay = .30, 0.15
37 local saveButton 37 local saveButton
38 38
39 local KeyButton_OnKeyDown = function(self, key) 39 local KeyButton_OnKeyDown = function(self, key)
40 if key == 'ESCAPE' or key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then
41 return
42 end
43 kb.saveTarget.border:SetColorTexture(1,1,1,1)
40 end 44 end
41 local KeyButton_OnKeyUp = function(self, key) 45 local KeyButton_OnKeyUp = function(self, key)
42 if key == 'ESCAPE' then 46 if key == 'ESCAPE' then
43 kb.DeactivateSlot(kb.saveTarget) 47 kb.DeactivateSlot(kb.saveTarget)
44 else 48 kb.ui()
45 49 return
46 if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then 50 end
47 return 51
48 end 52 if key:match('[RL]SHIFT') or key:match('[RL]ALT') or key:match('[RL]CTRL') then
49 kb.SaveSlot(kb.saveTarget, key) 53 return
50 54 end
51 if not kb.stickyMode then 55
52 kb:SetScript('OnKeyUp', nil) 56 if kb.SaveSlot(kb.saveTarget, key) then
53 kb:SetScript('OnKeyDown', nil) 57 if not (kb.db.stickyMode or kb.db.hoverInput) then
54 kb.saveTarget = nil 58
55 end 59 kb.DeactivateSlot(kb.saveTarget)
56 end 60 end
57 kb.ui() 61 kb.ui()
62 end
58 end 63 end
59 64
60 local KeyButton_OnClick = function(self, click) 65 local KeyButton_OnClick = function(self, click)
61 print(self:GetName(), 'OnMouseDown', click) 66 print(self:GetName(), 'OnMouseDown', click)
62 local cursorType = GetCursorInfo() 67 local cursorType = GetCursorInfo()
63 if click == 'LeftButton' then 68 if click == 'LeftButton' then
64 if cursorType then 69 if cursorType then
65 kb.DropToSlot(self) 70 kb.DropToSlot(self)
66 else 71 else
67 if IsShiftKeyDown() then 72 if IsShiftKeyDown() then
68 kb.stickyMode = true 73 kb.db.stickyMode = true
69 KeyBinderStickyMode:SetChecked(true) 74 KeyBinderStickyMode:SetChecked(true)
70
71 kb.saveTarget = button
72 kb:SetScript('OnKeyUp', KeyButton_OnKeyUp)
73 kb:SetScript('OnKeyDown', KeyButton_OnKeyDown)
74 end 75 end
75 76
76 kb.ActivateSlot(self) 77 kb.ActivateSlot(self)
77 kb.ui() 78 kb.ui()
78 end 79 end
143 kb.ui() 144 kb.ui()
144 end 145 end
145 146
146 end 147 end
147 else 148 else
148 if self.active then 149 if self.active and kb.db.hoverInput then
149 self.active = nil 150 self.active = nil
150 kb.DeactivateSlot(self) 151 --kb.DeactivateSlot(self)
151 kb.ui() 152 --kb.ui()
152 end 153 end
153 end 154 end
154 end 155 end
155 156
156 local KeyBinder_OnMouseWheel = function(self, delta) 157 local KeyBinder_OnMouseWheel = function(self, delta)
175 end 176 end
176 177
177 kb.ui(true) 178 kb.ui(true)
178 end 179 end
179 180
180 local CheckButton_OnEnter = function(self) 181 local KeyBinder_CheckButton = function(frame ,enableText, disableText, dbKey, tooltipText, callback)
181 if self.tooltip then 182 if kb.db[dbKey] then
182 GameTooltip:SetOwner(self) 183 frame:SetChecked(true)
183 GameTooltip:SetText(self.tooltip) 184 end
184 GameTooltip:Show() 185 frame.label:SetText(kb.db[dbKey] and enableText or disableText)
185 end 186 frame:SetWidth(frame.label:GetStringWidth()+8)
186 end 187
187 local CheckButton_OnLeave = function(self) 188 frame:SetScript('OnClick', function(self)
188 if self.tooltip and GameTooltip:GetOwner() == self then 189 if callback then
189 GameTooltip:Hide() 190 callback(self)
190 end 191 end
191 192 kb.db[dbKey] = self:GetChecked()
193 if not kb.db[dbKey] then
194 if kb.saveTarget then
195 kb.DeactivateSlot(kb.saveTarget)
196 end
197 end
198 self.label:SetText(kb.db[dbKey] and enableText or disableText)
199 self:SetWidth(self.label:GetStringWidth()+8)
200 kb.ui()
201 end)
202
203 frame:SetScript('OnEnter', function(self)
204 if tooltipText then
205 GameTooltip:SetOwner(self)
206 GameTooltip:SetText(tooltipText)
207 GameTooltip:Show()
208 end
209 end)
210
211 frame:SetScript('OnLeave', function(self)
212 if tooltipText and GameTooltip:GetOwner() == self then
213 GameTooltip:Hide()
214 end
215 end)
192 end 216 end
193 217
194 local KeyBinder_OnHide = function() 218 local KeyBinder_OnHide = function()
195 KeyBinderImportLog:Hide() 219 KeyBinderImportLog:Hide()
196 end 220 end
290 kb:uibutton( 314 kb:uibutton(
291 'KeyBinderInventoryButton', 'Bags', nil, 315 'KeyBinderInventoryButton', 'Bags', nil,
292 function() OpenAllBags() end, 316 function() OpenAllBags() end,
293 "Interface\\BUTTONS\\UI-MicroButtonCharacter-Up", {0, 1, .4, 1}) 317 "Interface\\BUTTONS\\UI-MicroButtonCharacter-Up", {0, 1, .4, 1})
294 318
295 KeyBinderStickyMode.tooltip = 'Keep input active after receiving a key.' 319 KeyBinder_CheckButton(KeyBinderStickyMode, 'Enabled', 'Disabled', 'stickyMode', 'Keep input active after receiving a key.')
296 KeyBinderStickyMode:SetScript('OnClick', function(self) 320 KeyBinder_CheckButton(KeyBinderHoverInput, 'MouseOver', 'Click', 'hoverInput', 'Enable key input when the cursor is over a binding slot.')
297 kb.db.stickyMode = self:GetChecked()
298 if not kb.db.stickyMode then
299 if kb.saveTarget then
300 kb.DeactivateSlot(kb.saveTarget)
301 end
302 end
303 kb.ui()
304 end)
305 if kb.db.stickyMode then
306 KeyBinderStickyMode:SetChecked(true)
307 end
308
309 KeyBinderHoverInput.tooltip = 'Enable key input when the cursor is over a binding slot.'
310 KeyBinderHoverInput:SetScript('OnClick', function(self)
311 kb.db.hoverInput = self:GetChecked()
312 kb.ui()
313 end)
314 if kb.db.hoverInput then
315 KeyBinderHoverInput:SetChecked(true)
316 end
317 321
318 322
319 KeyBinderUnbindButton:SetScript('OnClick', function() 323 KeyBinderUnbindButton:SetScript('OnClick', function()
320 if kb.saveTarget then 324 if kb.saveTarget then
321 kb.UnbindSlot(kb.saveTarget) 325 kb.UnbindSlot(kb.saveTarget)
322 end 326 end
323 kb.ui() 327 kb.ui()
324 end) 328 end)
325 329
326 KeyBinderStickyMode:SetScript('OnEnter', CheckButton_OnEnter)
327 KeyBinderHoverInput:SetScript('OnEnter', CheckButton_OnEnter)
328 KeyBinderStickyMode:SetScript('OnLeave', CheckButton_OnLeave)
329 KeyBinderHoverInput:SetScript('OnLeave', CheckButton_OnLeave)
330 330
331 kb.info:SetPoint('TOPLEFT', kb.UIPanels[1], 'BOTTOMLEFT', 0, -BUTTON_SPACING) 331 kb.info:SetPoint('TOPLEFT', kb.UIPanels[1], 'BOTTOMLEFT', 0, -BUTTON_SPACING)
332 HEADER_OFFSET = kb.UIPanels[1]:GetHeight() + BUTTON_PADDING 332 HEADER_OFFSET = kb.UIPanels[1]:GetHeight() + BUTTON_PADDING
333 + kb.info:GetHeight() 333 + kb.info:GetHeight()
334 FOOTER_OFFSET = saveButton:GetHeight() + BUTTON_PADDING 334 FOOTER_OFFSET = saveButton:GetHeight() + BUTTON_PADDING
432 432
433 kb:Show() 433 kb:Show()
434 434
435 if kb.saveTarget then 435 if kb.saveTarget then
436 KeyBinderUnbindButton:SetParent(kb.saveTarget) 436 KeyBinderUnbindButton:SetParent(kb.saveTarget)
437 KeyBinderUnbindButton:SetPoint('TOPRIGHT', kb.saveTarget, 'TOPLEFT', -2,0) 437 KeyBinderUnbindButton:SetPoint('TOPLEFT', kb.saveTarget, 'BOTTOMLEFT', 0, -1)
438 KeyBinderUnbindButton:Show() 438 KeyBinderUnbindButton:Show()
439 else 439 else
440 KeyBinderUnbindButton:Hide() 440 KeyBinderUnbindButton:Hide()
441 end 441 end
442
443 KeyBinderStickyMode.label:SetText(kb.db.stickyMode and 'Sticky' or 'Normal')
444 KeyBinderHoverInput.label:SetText(kb.db.hoverInput and 'MouseOver' or 'Manual')
445 442
446 -- Reset this so talent cache can be rebuilt 443 -- Reset this so talent cache can be rebuilt
447 kb.talentsPushed = nil 444 kb.talentsPushed = nil
448 end 445 end
449 446