flickerstreak@2
|
1 -- ReBinder.lua
|
flickerstreak@2
|
2 --
|
flickerstreak@2
|
3
|
flickerstreak@2
|
4 ReBinder = { }
|
flickerstreak@2
|
5
|
flickerstreak@2
|
6 -- initial values
|
flickerstreak@2
|
7 ReBinder.active = false
|
flickerstreak@2
|
8
|
flickerstreak@2
|
9 ReBinder.targets = { }
|
flickerstreak@2
|
10
|
flickerstreak@2
|
11 function ReBinder:AddKeybindTarget( t )
|
flickerstreak@2
|
12 if t then
|
flickerstreak@2
|
13 self.targets[t] = CreateFrame("Button", nil, t, "ReBinderClickBindingTemplate")
|
flickerstreak@2
|
14 self.targets[t].keybindTarget = t:GetName()
|
flickerstreak@2
|
15 end
|
flickerstreak@2
|
16 end
|
flickerstreak@2
|
17
|
flickerstreak@2
|
18 function ReBinder:RemoveKeybindTarget( t )
|
flickerstreak@2
|
19 if t then
|
flickerstreak@2
|
20 self.targets[t] = nil
|
flickerstreak@2
|
21 end
|
flickerstreak@2
|
22 end
|
flickerstreak@2
|
23
|
flickerstreak@2
|
24 function ReBinder:ShowClickBindingButtons()
|
flickerstreak@2
|
25 for _, clickFrame in pairs(self.targets) do
|
flickerstreak@2
|
26 clickFrame:Show()
|
flickerstreak@2
|
27 end
|
flickerstreak@2
|
28 end
|
flickerstreak@2
|
29
|
flickerstreak@2
|
30 function ReBinder:HideClickBindingButtons()
|
flickerstreak@2
|
31 for _, clickFrame in pairs(self.targets) do
|
flickerstreak@2
|
32 clickFrame:Hide()
|
flickerstreak@2
|
33 end
|
flickerstreak@2
|
34 end
|
flickerstreak@2
|
35
|
flickerstreak@2
|
36 function ReBinder:ClearSelectedKey()
|
flickerstreak@2
|
37 self.selectedKey = nil
|
flickerstreak@2
|
38 end
|
flickerstreak@2
|
39
|
flickerstreak@2
|
40 function ReBinder:ToggleEnabled()
|
flickerstreak@2
|
41 if self:IsEnabled() then
|
flickerstreak@2
|
42 self:Disable()
|
flickerstreak@2
|
43 else
|
flickerstreak@2
|
44 self:Enable()
|
flickerstreak@2
|
45 end
|
flickerstreak@2
|
46 end
|
flickerstreak@2
|
47
|
flickerstreak@2
|
48 function ReBinder:IsEnabled()
|
flickerstreak@2
|
49 return ReBinderFrame:IsVisible()
|
flickerstreak@2
|
50 end
|
flickerstreak@2
|
51
|
flickerstreak@2
|
52 function ReBinder:Enable()
|
flickerstreak@2
|
53 ReBinderFrame:Show()
|
flickerstreak@2
|
54 end
|
flickerstreak@2
|
55
|
flickerstreak@2
|
56 function ReBinder:Disable()
|
flickerstreak@2
|
57 ReBinderFrame:Hide()
|
flickerstreak@2
|
58 end
|
flickerstreak@2
|
59
|
flickerstreak@2
|
60
|
flickerstreak@2
|
61 function ReBinder:HandleKeyPressed( key )
|
flickerstreak@2
|
62 if key == nil or key == "UNKNOWN" or key == "SHIFT" or key == "CTRL" or key == "ALT" then
|
flickerstreak@2
|
63 return
|
flickerstreak@2
|
64 end
|
flickerstreak@2
|
65 if IsShiftKeyDown() then
|
flickerstreak@2
|
66 key = "SHIFT-"..key
|
flickerstreak@2
|
67 end
|
flickerstreak@2
|
68 if IsControlKeyDown() then
|
flickerstreak@2
|
69 key = "CTRL-"..key
|
flickerstreak@2
|
70 end
|
flickerstreak@2
|
71 if IsAltKeyDown() then
|
flickerstreak@2
|
72 key = "ALT-"..key
|
flickerstreak@2
|
73 end
|
flickerstreak@2
|
74 if key == "ESCAPE" or GetBindingAction(key) == "REBINDER_TOGGLEBINDINGMODE" then
|
flickerstreak@2
|
75 ReBinderFrame:Hide()
|
flickerstreak@2
|
76 return nil, nil
|
flickerstreak@2
|
77 end
|
flickerstreak@2
|
78
|
flickerstreak@2
|
79 self.selectedKey = key
|
flickerstreak@2
|
80
|
flickerstreak@2
|
81 local keyTxt = GetBindingText(key, "KEY_")
|
flickerstreak@2
|
82 local cmd = GetBindingAction(key)
|
flickerstreak@2
|
83 local cmdTxt
|
flickerstreak@2
|
84
|
flickerstreak@2
|
85 if cmd then
|
flickerstreak@2
|
86 cmdTxt = GetBindingText(cmd, "BINDING_NAME_")
|
flickerstreak@2
|
87 end
|
flickerstreak@2
|
88
|
flickerstreak@2
|
89 -- make click-bindings look prettier
|
flickerstreak@2
|
90 local btnName
|
flickerstreak@2
|
91 if cmdTxt then
|
flickerstreak@2
|
92 btnName = string.match(cmdTxt,"CLICK (.+)\:LeftButton")
|
flickerstreak@2
|
93 btnName = btnName or string.match(cmdTxt,"CLICK (.+)\:RightButton")
|
flickerstreak@2
|
94 end
|
flickerstreak@2
|
95
|
flickerstreak@2
|
96 return keyTxt, btnName or cmdTxt
|
flickerstreak@2
|
97 end
|
flickerstreak@2
|
98
|
flickerstreak@2
|
99 -- TODO: move to override-binding model and store data in profile
|
flickerstreak@2
|
100 function ReBinder:BindSelectedKeyTo( btnName )
|
flickerstreak@2
|
101 if self.selectedKey and btnName then
|
flickerstreak@2
|
102 self:ClearBinding(btnName)
|
flickerstreak@2
|
103 SetBindingClick(self.selectedKey, btnName, "LeftButton")
|
flickerstreak@2
|
104 SaveBindings(2) -- 2 = character-specific
|
flickerstreak@2
|
105 ReBinderFrame.statusMsg:SetText(GetBindingText(self.selectedKey, "KEY_") .. " is now bound to " .. btnName)
|
flickerstreak@2
|
106 ReBinderFrame.selectedKey:SetText("(none)")
|
flickerstreak@2
|
107 ReBinderFrame.currentAction:SetText("(none)")
|
flickerstreak@2
|
108 self.selectedKey = nil
|
flickerstreak@2
|
109 end
|
flickerstreak@2
|
110 end
|
flickerstreak@2
|
111
|
flickerstreak@2
|
112
|
flickerstreak@2
|
113 function ReBinder:ClearBinding( btnName )
|
flickerstreak@2
|
114 if btnName then
|
flickerstreak@2
|
115 local current = GetBindingKey("CLICK "..btnName..":LeftButton")
|
flickerstreak@2
|
116 if current then
|
flickerstreak@2
|
117 SetBinding(current, nil)
|
flickerstreak@2
|
118 ReBinderFrame.statusMsg:SetText("|cFFFF3333"..btnName .. " is now unbound|r")
|
flickerstreak@2
|
119 end
|
flickerstreak@2
|
120 end
|
flickerstreak@2
|
121 end
|
flickerstreak@2
|
122
|
flickerstreak@2
|
123
|
flickerstreak@2
|
124 function ReBinder:UpdateCurrentTarget( btnName )
|
flickerstreak@2
|
125 local msg = ""
|
flickerstreak@2
|
126 if btnName then
|
flickerstreak@2
|
127 msg = btnName.." is currently "
|
flickerstreak@2
|
128 local current = GetBindingKey("CLICK "..btnName..":LeftButton")
|
flickerstreak@2
|
129 if current then
|
flickerstreak@2
|
130 msg = msg .. "bound to " .. GetBindingText(current, "KEY_")
|
flickerstreak@2
|
131 else
|
flickerstreak@2
|
132 msg = msg .. " not bound"
|
flickerstreak@2
|
133 end
|
flickerstreak@2
|
134 end
|
flickerstreak@2
|
135 ReBinderFrame.statusMsg:SetText(msg)
|
flickerstreak@2
|
136 end
|