view classes/ReBinder.lua @ 4:dfd829db3ad0

(none)
author Flick <flickerstreak@gmail.com>
date Tue, 20 Mar 2007 21:19:34 +0000
parents ReBinder.lua@8e0ff8ae4c08
children
line wrap: on
line source
-- ReBinder.lua
-- 

ReBinder = { }

-- initial values
ReBinder.active = false

ReBinder.targets = { }

function ReBinder:AddKeybindTarget( t )
  if t then
    self.targets[t] = CreateFrame("Button", nil, t, "ReBinderClickBindingTemplate")
    self.targets[t].keybindTarget = t:GetName()
  end
end

function ReBinder:RemoveKeybindTarget( t )
  if t then
    self.targets[t] = nil
  end
end

function ReBinder:ShowClickBindingButtons()
  for _, clickFrame in pairs(self.targets) do
    clickFrame:Show()
  end    
end

function ReBinder:HideClickBindingButtons()
  for _, clickFrame in pairs(self.targets) do
    clickFrame:Hide()
  end    
end

function ReBinder:ClearSelectedKey()
  self.selectedKey = nil
end

function ReBinder:ToggleEnabled()
  if self:IsEnabled() then
    self:Disable()
  else
    self:Enable()
  end
end

function ReBinder:IsEnabled()
  return ReBinderFrame:IsVisible()
end

function ReBinder:Enable()
  ReBinderFrame:Show()
end

function ReBinder:Disable()
  ReBinderFrame:Hide()
end


function ReBinder:HandleKeyPressed( key )
  if key == nil or key == "UNKNOWN" or key == "SHIFT" or key == "CTRL" or key == "ALT" then 
    return
  end
  if IsShiftKeyDown() then 
    key = "SHIFT-"..key
  end
  if IsControlKeyDown() then
    key = "CTRL-"..key
  end
  if IsAltKeyDown() then
    key = "ALT-"..key
  end
  if key == "ESCAPE" or GetBindingAction(key) == "REBINDER_TOGGLEBINDINGMODE" then
    ReBinderFrame:Hide()
    return nil, nil
  end

  self.selectedKey = key

  local keyTxt = GetBindingText(key, "KEY_")
  local cmd    = GetBindingAction(key)
  local cmdTxt
  
  if cmd then
    cmdTxt = GetBindingText(cmd, "BINDING_NAME_")
  end
  
  -- make click-bindings look prettier
  local btnName
  if cmdTxt then
    btnName = string.match(cmdTxt,"CLICK (.+)\:LeftButton")
    btnName = btnName or string.match(cmdTxt,"CLICK (.+)\:RightButton")
  end
  
  return keyTxt, btnName or cmdTxt
end

-- TODO: move to override-binding model and store data in profile
function ReBinder:BindSelectedKeyTo( btnName )
  if self.selectedKey and btnName then
    self:ClearBinding(btnName)
    SetBindingClick(self.selectedKey, btnName, "LeftButton")
    SaveBindings(2) -- 2 = character-specific
    ReBinderFrame.statusMsg:SetText(GetBindingText(self.selectedKey, "KEY_") .. " is now bound to " .. btnName)
    ReBinderFrame.selectedKey:SetText("(none)")
    ReBinderFrame.currentAction:SetText("(none)")
    self.selectedKey = nil
  end
end


function ReBinder:ClearBinding( btnName )
  if btnName then
    local current = GetBindingKey("CLICK "..btnName..":LeftButton")
    if current then
      SetBinding(current, nil)
      ReBinderFrame.statusMsg:SetText("|cFFFF3333"..btnName .. " is now unbound|r")
    end
  end
end


function ReBinder:UpdateCurrentTarget( btnName )
  local msg = ""
  if btnName then
    msg = btnName.." is currently "
    local current = GetBindingKey("CLICK "..btnName..":LeftButton")
    if current then
      msg = msg .. "bound to " .. GetBindingText(current, "KEY_")
    else
      msg = msg .. " not bound"
    end
  end
  ReBinderFrame.statusMsg:SetText(msg)
end