flickerstreak@2: -- ReBinder.lua flickerstreak@2: -- flickerstreak@2: flickerstreak@2: ReBinder = { } flickerstreak@2: flickerstreak@2: -- initial values flickerstreak@2: ReBinder.active = false flickerstreak@2: flickerstreak@2: ReBinder.targets = { } flickerstreak@2: flickerstreak@2: function ReBinder:AddKeybindTarget( t ) flickerstreak@2: if t then flickerstreak@2: self.targets[t] = CreateFrame("Button", nil, t, "ReBinderClickBindingTemplate") flickerstreak@2: self.targets[t].keybindTarget = t:GetName() flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:RemoveKeybindTarget( t ) flickerstreak@2: if t then flickerstreak@2: self.targets[t] = nil flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:ShowClickBindingButtons() flickerstreak@2: for _, clickFrame in pairs(self.targets) do flickerstreak@2: clickFrame:Show() flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:HideClickBindingButtons() flickerstreak@2: for _, clickFrame in pairs(self.targets) do flickerstreak@2: clickFrame:Hide() flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:ClearSelectedKey() flickerstreak@2: self.selectedKey = nil flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:ToggleEnabled() flickerstreak@2: if self:IsEnabled() then flickerstreak@2: self:Disable() flickerstreak@2: else flickerstreak@2: self:Enable() flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:IsEnabled() flickerstreak@2: return ReBinderFrame:IsVisible() flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:Enable() flickerstreak@2: ReBinderFrame:Show() flickerstreak@2: end flickerstreak@2: flickerstreak@2: function ReBinder:Disable() flickerstreak@2: ReBinderFrame:Hide() flickerstreak@2: end flickerstreak@2: flickerstreak@2: flickerstreak@2: function ReBinder:HandleKeyPressed( key ) flickerstreak@2: if key == nil or key == "UNKNOWN" or key == "SHIFT" or key == "CTRL" or key == "ALT" then flickerstreak@2: return flickerstreak@2: end flickerstreak@2: if IsShiftKeyDown() then flickerstreak@2: key = "SHIFT-"..key flickerstreak@2: end flickerstreak@2: if IsControlKeyDown() then flickerstreak@2: key = "CTRL-"..key flickerstreak@2: end flickerstreak@2: if IsAltKeyDown() then flickerstreak@2: key = "ALT-"..key flickerstreak@2: end flickerstreak@2: if key == "ESCAPE" or GetBindingAction(key) == "REBINDER_TOGGLEBINDINGMODE" then flickerstreak@2: ReBinderFrame:Hide() flickerstreak@2: return nil, nil flickerstreak@2: end flickerstreak@2: flickerstreak@2: self.selectedKey = key flickerstreak@2: flickerstreak@2: local keyTxt = GetBindingText(key, "KEY_") flickerstreak@2: local cmd = GetBindingAction(key) flickerstreak@2: local cmdTxt flickerstreak@2: flickerstreak@2: if cmd then flickerstreak@2: cmdTxt = GetBindingText(cmd, "BINDING_NAME_") flickerstreak@2: end flickerstreak@2: flickerstreak@2: -- make click-bindings look prettier flickerstreak@2: local btnName flickerstreak@2: if cmdTxt then flickerstreak@2: btnName = string.match(cmdTxt,"CLICK (.+)\:LeftButton") flickerstreak@2: btnName = btnName or string.match(cmdTxt,"CLICK (.+)\:RightButton") flickerstreak@2: end flickerstreak@2: flickerstreak@2: return keyTxt, btnName or cmdTxt flickerstreak@2: end flickerstreak@2: flickerstreak@2: -- TODO: move to override-binding model and store data in profile flickerstreak@2: function ReBinder:BindSelectedKeyTo( btnName ) flickerstreak@2: if self.selectedKey and btnName then flickerstreak@2: self:ClearBinding(btnName) flickerstreak@2: SetBindingClick(self.selectedKey, btnName, "LeftButton") flickerstreak@2: SaveBindings(2) -- 2 = character-specific flickerstreak@2: ReBinderFrame.statusMsg:SetText(GetBindingText(self.selectedKey, "KEY_") .. " is now bound to " .. btnName) flickerstreak@2: ReBinderFrame.selectedKey:SetText("(none)") flickerstreak@2: ReBinderFrame.currentAction:SetText("(none)") flickerstreak@2: self.selectedKey = nil flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: flickerstreak@2: function ReBinder:ClearBinding( btnName ) flickerstreak@2: if btnName then flickerstreak@2: local current = GetBindingKey("CLICK "..btnName..":LeftButton") flickerstreak@2: if current then flickerstreak@2: SetBinding(current, nil) flickerstreak@2: ReBinderFrame.statusMsg:SetText("|cFFFF3333"..btnName .. " is now unbound|r") flickerstreak@2: end flickerstreak@2: end flickerstreak@2: end flickerstreak@2: flickerstreak@2: flickerstreak@2: function ReBinder:UpdateCurrentTarget( btnName ) flickerstreak@2: local msg = "" flickerstreak@2: if btnName then flickerstreak@2: msg = btnName.." is currently " flickerstreak@2: local current = GetBindingKey("CLICK "..btnName..":LeftButton") flickerstreak@2: if current then flickerstreak@2: msg = msg .. "bound to " .. GetBindingText(current, "KEY_") flickerstreak@2: else flickerstreak@2: msg = msg .. " not bound" flickerstreak@2: end flickerstreak@2: end flickerstreak@2: ReBinderFrame.statusMsg:SetText(msg) flickerstreak@2: end