166 lignes
4,4 Kio
Lua
166 lignes
4,4 Kio
Lua
--[[
|
|
Author: Alternator (Massiner of Nathrezim)
|
|
Copyright 2010
|
|
|
|
Notes:
|
|
]]
|
|
|
|
if (BFKeyBinder == nil) then BFKeyBinder = {}; end local KeyBinder = BFKeyBinder;
|
|
if (BFUILib == nil) then BFUILib = {}; end local UILib = BFUILib;
|
|
|
|
KeyBinder.SelectedBar = nil;
|
|
KeyBinder.SelectedButton = nil;
|
|
|
|
|
|
function KeyBinder.SetButtonSelectorMode(Bar)
|
|
if (KeyBinder.SelectedBar == Bar) then
|
|
KeyBinder.CancelButtonSelectorMode();
|
|
return;
|
|
elseif (KeyBinder.SelectedBar) then
|
|
KeyBinder.CancelButtonSelectorMode();
|
|
end
|
|
BFBindingMode:Show();
|
|
KeyBinder.SelectedBar = Bar;
|
|
end
|
|
function KeyBinder.CancelButtonSelectorMode()
|
|
BFBindingMode:Hide();
|
|
end
|
|
function KeyBinder.OnHideBindingMode()
|
|
KeyBinder.HideBindingDialog(); --This will chain through to clear the keybind input state
|
|
|
|
if (KeyBinder.SelectedBar) then
|
|
KeyBinder.SelectedBar:CancelKeyBindMode();
|
|
end
|
|
|
|
KeyBinder.SelectedBar = nil;
|
|
KeyBinder.SelectedButton = nil;
|
|
end
|
|
|
|
function KeyBinder.ShowBindingDialog(Button)
|
|
if (KeyBinder.SelectedButton == Button) then
|
|
KeyBinder.HideBindingDialog();
|
|
return;
|
|
elseif (KeyBinder.SelectedButton) then
|
|
KeyBinder.HideBindingDialog();
|
|
end
|
|
|
|
if (Button) then
|
|
KeyBinder.SelectedButton = Button
|
|
if (KeyBinder.SelectedButton.ButtonSave["KeyBinding"]) then
|
|
BFBindingDialogBinding:SetText(KeyBinder.SelectedButton.ButtonSave["KeyBinding"]);
|
|
else
|
|
BFBindingDialogBinding:SetText(NORMAL_FONT_COLOR_CODE..NOT_BOUND..FONT_COLOR_CODE_CLOSE);
|
|
end
|
|
BFBindingDialog:Show();
|
|
BFBindingDialog:ClearAllPoints();
|
|
BFBindingDialog:SetPoint("RIGHT", KeyBinder.SelectedButton.Widget, "LEFT");
|
|
UILib.LockMask();
|
|
--I'm now streamlining this to go straight into Input Binding Mode
|
|
KeyBinder.InputBindingMode()
|
|
end
|
|
end
|
|
function KeyBinder.HideBindingDialog()
|
|
BFBindingDialog:Hide();
|
|
end
|
|
function KeyBinder.OnHideBindingDialog()
|
|
KeyBinder.CancelBindingMode();
|
|
BFBindingDialog:ClearAllPoints();
|
|
BFBindingDialog.Message.Text:SetText("");
|
|
BFBindingDialogBinding:SetText(NORMAL_FONT_COLOR_CODE..NOT_BOUND..FONT_COLOR_CODE_CLOSE);
|
|
UILib.UnlockMask();
|
|
KeyBinder.SelectedButton = nil;
|
|
end
|
|
|
|
function KeyBinder.InputBindingMode()
|
|
if (BFBindingOverlay:IsShown()) then
|
|
KeyBinder.CancelBindingMode();
|
|
return;
|
|
end
|
|
if (InCombatLockdown()) then
|
|
BFBindingDialog.Message.Text:SetText("Bindings Cannot be Updated While in Combat");
|
|
return;
|
|
end
|
|
BFBindingDialog.Message.Text:SetText("Press Key to Bind to Button");
|
|
BFBindingDialogBinding:LockHighlight();
|
|
BFBindingOverlay:Show();
|
|
end
|
|
function KeyBinder.CancelBindingMode()
|
|
BFBindingDialog.Message.Text:SetText("");
|
|
BFBindingOverlay:Hide();
|
|
end
|
|
function KeyBinder.OnHideBindingOverlay()
|
|
BFBindingDialogBinding:UnlockHighlight();
|
|
end
|
|
|
|
function KeyBinder.UpdateBinding(Binding)
|
|
if (not KeyBinder.SelectedButton:SetKeyBind(Binding)) then
|
|
BFBindingDialog.Message.Text:SetText("Bindings Cannot be Updated While in Combat");
|
|
return;
|
|
end
|
|
if (Binding ~= nil and Binding ~= "") then
|
|
BFBindingDialogBinding:SetText(Binding);
|
|
BFBindingDialog.Message.Text:SetText("Key Bound Successfully");
|
|
else
|
|
BFBindingDialogBinding:SetText(NORMAL_FONT_COLOR_CODE..NOT_BOUND..FONT_COLOR_CODE_CLOSE);
|
|
BFBindingDialog.Message.Text:SetText("");
|
|
end
|
|
|
|
--I'm streamlining this to auto hide the bind dialog when a binding is set
|
|
KeyBinder.HideBindingDialog();
|
|
end
|
|
|
|
|
|
function KeyBinder.OnInputBindingOverlay(Input)
|
|
if (not BFBindingOverlay:IsShown()) then
|
|
return;
|
|
end
|
|
if (GetBindingFromClick(Input) == "SCREENSHOT") then
|
|
RunBinding("SCREENSHOT");
|
|
return;
|
|
end
|
|
|
|
--I have chosen to not bind escape (most users would expect it to cancel binding even though the default ui allows it to be rebound)
|
|
if (Input == "ESCAPE") then
|
|
KeyBinder.CancelBindingMode();
|
|
return;
|
|
end
|
|
|
|
--These are bindings that I won't allow
|
|
if (Input == "UNKNOWN" or
|
|
Input == "LeftButton" or
|
|
Input == "RightButton") then
|
|
return;
|
|
end
|
|
|
|
--These are modifier keys so don't constitute bindings by themselves
|
|
if (Input == "LSHIFT" or
|
|
Input == "RSHIFT" or
|
|
Input == "LCTRL" or
|
|
Input == "RCTRL" or
|
|
Input == "LALT" or
|
|
Input == "RALT" ) then
|
|
return;
|
|
end
|
|
|
|
--Translate button clicks
|
|
if (Input == "MiddleButton") then
|
|
Input = "BUTTON3";
|
|
elseif (strfind(Input, "Button", 1, true)) then
|
|
Input = strupper(Input);
|
|
end
|
|
|
|
--Prepend Modifiers
|
|
if (IsShiftKeyDown()) then
|
|
Input = "SHIFT-"..Input;
|
|
end
|
|
if (IsControlKeyDown()) then
|
|
Input = "CTRL-"..Input;
|
|
end
|
|
if (IsAltKeyDown()) then
|
|
Input = "ALT-"..Input;
|
|
end
|
|
|
|
KeyBinder.CancelBindingMode();
|
|
KeyBinder.UpdateBinding(Input);
|
|
|
|
end
|