|
KeyNames = |
|
{ |
|
[const.vkEsc ] = T(994618945577, "Escape"), |
|
[const.vkBackspace ] = T(363663173763, "Backspace"), |
|
[const.vkTab ] = T(362312379813, "Tab"), |
|
[const.vkEnter ] = T(434251720954, "Enter"), |
|
[const.vkShift ] = T(528194924773, "Shift"), |
|
[const.vkControl ] = T(526443613034, "Ctrl"), |
|
[const.vkAlt ] = T(382578073377, "Alt"), |
|
[const.vkCapital ] = T(295522905381, "Caps Lock"), |
|
[const.vkSpace ] = T(918886773235, "Space"), |
|
[const.vkPageup ] = T(408309138461, "Pageup"), |
|
[const.vkPagedown ] = T(842877867225, "Pagedown"), |
|
[const.vkEnd ] = T(431579043068, "End"), |
|
[const.vkHome ] = T(758009688242, "Home"), |
|
[const.vkLeft ] = T(986696793449, "Left"), |
|
[const.vkUp ] = T(456582989896, "Up"), |
|
[const.vkRight ] = T(154027640280, "Right"), |
|
[const.vkDown ] = T(931890286355, "Down"), |
|
[const.vkSnapshot ] = T(860978238624, "PrtScr"), |
|
[const.vkInsert ] = T(133397615161, "Insert"), |
|
[const.vkDelete ] = T(575155046483, "Delete"), |
|
[const.vk0 ] = T(727885787643, "0"), |
|
[const.vk1 ] = T(374798850608, "1"), |
|
[const.vk2 ] = T(874244724515, "2"), |
|
[const.vk3 ] = T(503064235248, "3"), |
|
[const.vk4 ] = T(944609632600, "4"), |
|
[const.vk5 ] = T(632712324097, "5"), |
|
[const.vk6 ] = T(323389503557, "6"), |
|
[const.vk7 ] = T(722986100874, "7"), |
|
[const.vk8 ] = T(110554267033, "8"), |
|
[const.vk9 ] = T(865411898395, "9"), |
|
[const.vkA ] = T(149656302141, "A"), |
|
[const.vkB ] = T(698574916535, "B"), |
|
[const.vkC ] = T(741290411749, "C"), |
|
[const.vkD ] = T(545051320623, "D"), |
|
[const.vkE ] = T(753030316400, "E"), |
|
[const.vkF ] = T(218798608273, "F"), |
|
[const.vkG ] = T(891009741813, "G"), |
|
[const.vkH ] = T(692140541849, "H"), |
|
[const.vkI ] = T(174022551728, "I"), |
|
[const.vkJ ] = T(539479830500, "J"), |
|
[const.vkK ] = T(161860974128, "K"), |
|
[const.vkL ] = T(249226123778, "L"), |
|
[const.vkM ] = T(481171943908, "M"), |
|
[const.vkN ] = T(839266622388, "N"), |
|
[const.vkO ] = T(157030789856, "O"), |
|
[const.vkP ] = T(516854979267, "P"), |
|
[const.vkQ ] = T(777840477129, "Q"), |
|
[const.vkR ] = T(334310658454, "R"), |
|
[const.vkS ] = T(757474062216, "S"), |
|
[const.vkT ] = T(631701410137, "T"), |
|
[const.vkU ] = T(746408826482, "U"), |
|
[const.vkV ] = T(821369968483, "V"), |
|
[const.vkW ] = T(462254668873, "W"), |
|
[const.vkX ] = T(777329821172, "X"), |
|
[const.vkY ] = T(247827094995, "Y"), |
|
[const.vkZ ] = T(828110723178, "Z"), |
|
[const.vkNumpad0 ] = T(489779093554, "Numpad 0"), |
|
[const.vkNumpad1 ] = T(456380228262, "Numpad 1"), |
|
[const.vkNumpad2 ] = T(113337768441, "Numpad 2"), |
|
[const.vkNumpad3 ] = T(740942281281, "Numpad 3"), |
|
[const.vkNumpad4 ] = T(980927237943, "Numpad 4"), |
|
[const.vkNumpad5 ] = T(588948567523, "Numpad 5"), |
|
[const.vkNumpad6 ] = T(340606982373, "Numpad 6"), |
|
[const.vkNumpad7 ] = T(772104171308, "Numpad 7"), |
|
[const.vkNumpad8 ] = T(227858857321, "Numpad 8"), |
|
[const.vkNumpad9 ] = T(153825312527, "Numpad 9"), |
|
[const.vkMultiply ] = T(351609916758, "Numpad *"), |
|
[const.vkAdd ] = T(405660426752, "Numpad +"), |
|
[const.vkNumpadenter] = T(499808818233, "Numpad Enter"), |
|
[const.vkSubtract ] = T(903488781508, "Numpad -"), |
|
[const.vkDecimal ] = T(716491142574, "Numpad ."), |
|
[const.vkDivide ] = T(491313029155, "Numpad /"), |
|
[const.vkF1 ] = T(613301875525, "F1"), |
|
[const.vkF2 ] = T(528903768897, "F2"), |
|
[const.vkF3 ] = T(810815604850, "F3"), |
|
[const.vkF4 ] = T(133047976173, "F4"), |
|
[const.vkF5 ] = T(251314716947, "F5"), |
|
[const.vkF6 ] = T(596085690833, "F6"), |
|
[const.vkF7 ] = T(791055510938, "F7"), |
|
[const.vkF8 ] = T(700725082489, "F8"), |
|
[const.vkF9 ] = T(929007287373, "F9"), |
|
[const.vkF10 ] = T(856045529332, "F10"), |
|
[const.vkF11 ] = T(220520835553, "F11"), |
|
[const.vkF12 ] = T(777345806029, "F12"), |
|
[const.vkNumlock ] = T(472739269737, "Num Lock"), |
|
[const.vkScroll ] = T(742990430859, "Scroll Lock"), |
|
[const.vkPause ] = T(539846438970, "Pause"), |
|
[const.vkLshift ] = T(584720376973, "L Shift"), |
|
[const.vkRshift ] = T(875823520952, "R Shift"), |
|
[const.vkLcontrol ] = T(818714172929, "L Ctrl"), |
|
[const.vkRcontrol ] = T(965397112297, "R Ctrl"), |
|
[const.vkLalt ] = T(790540664825, "L Alt"), |
|
[const.vkRalt ] = T(797234617727, "R Alt"), |
|
[const.vkSemicolon ] = T(189878265130, ";"), |
|
[const.vkEquals ] = T(650293704285, "="), |
|
[const.vkComma ] = T(425322120344, ","), |
|
[const.vkMinus ] = T(931174084977, "-"), |
|
[const.vkPlus ] = T(134544119265, "+"), |
|
[const.vkDot ] = T(580472321420, "."), |
|
[const.vkSlash ] = T(354341087783, "/"), |
|
[const.vkTilde ] = T(861506842495, "~"), |
|
[const.vkOpensq ] = T(989084215718, "["), |
|
[const.vkBackslash ] = T(263567644090, "\\"), |
|
[const.vkClosesq ] = T(137406678256, "]"), |
|
[const.vkQuote ] = T(358440088708, "'"), |
|
[const.vkLwin or false] = T(672291274770, "Lwin"), |
|
[const.vkRwin or false] = T(895098105879, "Rwin"), |
|
[const.vkApps or false] = T(358439604347, "Menu"), |
|
} |
|
KeyNames[false] = nil |
|
|
|
VKStrNames = |
|
{ |
|
[const.vkEsc ] = "Escape", |
|
[const.vkBackspace ] = "Backspace", |
|
[const.vkTab ] = "Tab", |
|
[const.vkEnter ] = "Enter", |
|
[const.vkShift ] = "Shift", |
|
[const.vkControl ] = "Ctrl", |
|
[const.vkAlt ] = "Alt", |
|
[const.vkCapital ] = "Caps Lock", |
|
[const.vkSpace ] = "Space", |
|
[const.vkPageup ] = "Pageup", |
|
[const.vkPagedown ] = "Pagedown", |
|
[const.vkEnd ] = "End", |
|
[const.vkHome ] = "Home", |
|
[const.vkLeft ] = "Left", |
|
[const.vkUp ] = "Up", |
|
[const.vkRight ] = "Right", |
|
[const.vkDown ] = "Down", |
|
[const.vkSnapshot ] = "PrtScr", |
|
[const.vkInsert ] = "Insert", |
|
[const.vkDelete ] = "Delete", |
|
[const.vk0 ] = "0", |
|
[const.vk1 ] = "1", |
|
[const.vk2 ] = "2", |
|
[const.vk3 ] = "3", |
|
[const.vk4 ] = "4", |
|
[const.vk5 ] = "5", |
|
[const.vk6 ] = "6", |
|
[const.vk7 ] = "7", |
|
[const.vk8 ] = "8", |
|
[const.vk9 ] = "9", |
|
[const.vkA ] = "A", |
|
[const.vkB ] = "B", |
|
[const.vkC ] = "C", |
|
[const.vkD ] = "D", |
|
[const.vkE ] = "E", |
|
[const.vkF ] = "F", |
|
[const.vkG ] = "G", |
|
[const.vkH ] = "H", |
|
[const.vkI ] = "I", |
|
[const.vkJ ] = "J", |
|
[const.vkK ] = "K", |
|
[const.vkL ] = "L", |
|
[const.vkM ] = "M", |
|
[const.vkN ] = "N", |
|
[const.vkO ] = "O", |
|
[const.vkP ] = "P", |
|
[const.vkQ ] = "Q", |
|
[const.vkR ] = "R", |
|
[const.vkS ] = "S", |
|
[const.vkT ] = "T", |
|
[const.vkU ] = "U", |
|
[const.vkV ] = "V", |
|
[const.vkW ] = "W", |
|
[const.vkX ] = "X", |
|
[const.vkY ] = "Y", |
|
[const.vkZ ] = "Z", |
|
[const.vkNumpad0 ] = "Numpad 0", |
|
[const.vkNumpad1 ] = "Numpad 1", |
|
[const.vkNumpad2 ] = "Numpad 2", |
|
[const.vkNumpad3 ] = "Numpad 3", |
|
[const.vkNumpad4 ] = "Numpad 4", |
|
[const.vkNumpad5 ] = "Numpad 5", |
|
[const.vkNumpad6 ] = "Numpad 6", |
|
[const.vkNumpad7 ] = "Numpad 7", |
|
[const.vkNumpad8 ] = "Numpad 8", |
|
[const.vkNumpad9 ] = "Numpad 9", |
|
[const.vkMultiply ] = "Numpad *", |
|
[const.vkAdd ] = "Numpad +", |
|
[const.vkNumpadenter] = "Numpad Enter", |
|
[const.vkSubtract ] = "Numpad -", |
|
[const.vkDecimal ] = "Numpad .", |
|
[const.vkDivide ] = "Numpad /", |
|
[const.vkF1 ] = "F1", |
|
[const.vkF2 ] = "F2", |
|
[const.vkF3 ] = "F3", |
|
[const.vkF4 ] = "F4", |
|
[const.vkF5 ] = "F5", |
|
[const.vkF6 ] = "F6", |
|
[const.vkF7 ] = "F7", |
|
[const.vkF8 ] = "F8", |
|
[const.vkF9 ] = "F9", |
|
[const.vkF10 ] = "F10", |
|
[const.vkF11 ] = "F11", |
|
[const.vkF12 ] = "F12", |
|
[const.vkNumlock ] = "Num Lock", |
|
[const.vkScroll ] = "Scroll Lock", |
|
[const.vkPause ] = "Pause", |
|
[const.vkLshift ] = "L Shift", |
|
[const.vkRshift ] = "R Shift", |
|
[const.vkLcontrol ] = "L Ctrl", |
|
[const.vkRcontrol ] = "R Ctrl", |
|
[const.vkLalt ] = "L Alt", |
|
[const.vkRalt ] = "R Alt", |
|
[const.vkSemicolon ] = ";", |
|
[const.vkEquals ] = "=", |
|
[const.vkComma ] = ",", |
|
[const.vkMinus ] = "-", |
|
[const.vkPlus ] = "+", |
|
[const.vkDot ] = ".", |
|
[const.vkSlash ] = "/", |
|
[const.vkTilde ] = "~", |
|
[const.vkOpensq ] = "[", |
|
[const.vkBackslash ] = "\\", |
|
[const.vkClosesq ] = "]", |
|
[const.vkQuote ] = "'", |
|
[const.vkLwin or false] = "Lwin", |
|
[const.vkRwin or false] = "Rwin", |
|
[const.vkApps or false] = "Menu", |
|
} |
|
VKStrNames[false] = nil |
|
|
|
MouseVKStrNames = |
|
{ |
|
[const.vkLbutton] = "MouseL", |
|
[const.vkRbutton] = "MouseR", |
|
[const.vkMbutton] = "MouseM", |
|
[const.vkXbutton1] = "MouseX1", |
|
[const.vkXbutton2] = "MouseX2", |
|
} |
|
|
|
if Platform.osx then |
|
KeyNames[131] = Untranslated( "Cmd") |
|
VKStrNames[131] = "Cmd" |
|
end |
|
|
|
VKStrNamesInverse = {} |
|
for k,v in pairs(VKStrNames) do |
|
VKStrNamesInverse[v] = k |
|
end |
|
|
|
MouseVKStrNamesInverse = {} |
|
for k,v in pairs(MouseVKStrNames) do |
|
MouseVKStrNamesInverse[v] = k |
|
end |
|
|
|
validKeys = {} |
|
for k, v in pairs(KeyNames) do |
|
validKeys[k] = true |
|
end |
|
|
|
function KbdShortcut(virtual_key) |
|
if not VKStrNames[virtual_key] then |
|
return |
|
end |
|
|
|
local s = "" |
|
if virtual_key == const.vkControl or terminal.IsKeyPressed(const.vkControl) or |
|
Platform.osx and terminal.IsKeyPressed(const.vkLwin) |
|
then |
|
s = s .. "Ctrl-" |
|
end |
|
if virtual_key == const.vkAlt or terminal.IsKeyPressed(const.vkAlt) then |
|
s = s .. "Alt-" |
|
end |
|
if virtual_key == const.vkShift or terminal.IsKeyPressed(const.vkShift) then |
|
s = s .. "Shift-" |
|
end |
|
if virtual_key == const.vkControl or virtual_key == const.vkAlt or virtual_key == const.vkShift then |
|
return s:sub(1, -2) |
|
end |
|
return s .. VKStrNames[virtual_key] |
|
end |
|
|
|
function XInputShortcut(button, controller_id) |
|
local s = "" |
|
if button == "LeftTrigger" or XInput.IsCtrlButtonPressed(controller_id, "LeftTrigger") then |
|
s = s .. "LeftTrigger-" |
|
end |
|
if button == "RightTrigger" or XInput.IsCtrlButtonPressed(controller_id, "RightTrigger") then |
|
s = s .. "RightTrigger-" |
|
end |
|
if button == "LeftShoulder" or XInput.IsCtrlButtonPressed(controller_id, "LeftShoulder") then |
|
s = s .. "LeftShoulder-" |
|
end |
|
if button == "RightShoulder" or XInput.IsCtrlButtonPressed(controller_id, "RightShoulder") then |
|
s = s .. "RightShoulder-" |
|
end |
|
if button == "LeftTrigger" or button == "RightTrigger" or |
|
button == "LeftShoulder" or button == "RightShoulder" then |
|
return s:sub(1, -2) |
|
end |
|
return s .. button |
|
end |
|
|
|
function MouseShortcut(button) |
|
if not button or button == "" then |
|
return |
|
end |
|
|
|
local s = "" |
|
if terminal.IsKeyPressed(const.vkControl) or Platform.osx and terminal.IsKeyPressed(const.vkLwin) |
|
then |
|
s = s .. "Ctrl-" |
|
end |
|
if terminal.IsKeyPressed(const.vkAlt) then |
|
s = s .. "Alt-" |
|
end |
|
if terminal.IsKeyPressed(const.vkShift) then |
|
s = s .. "Shift-" |
|
end |
|
return s .. "Mouse" .. button |
|
end |
|
|
|
if FirstLoad then |
|
g_WaitShortcutThread = false |
|
end |
|
|
|
function WaitShortcut() |
|
g_WaitShortcutThread = CurrentThread() |
|
local win = XWindow:new({ |
|
OnKbdKeyUp = function(self, virtual_key) |
|
local shortcut = KbdShortcut(virtual_key) |
|
if shortcut ~= "Ctrl" and shortcut ~= "Shift" then |
|
Wakeup(g_WaitShortcutThread, shortcut) |
|
end |
|
return "break" |
|
end, |
|
OnKbdKeyDown = function() return "break" end, |
|
OnKbdChar = function() return "break" end, |
|
OnKbdIMEStartComposition = function() return "break" end, |
|
OnKbdIMEEndComposition = function() return "break" end, |
|
OnMouseButtonUp = function(self, pt, button) |
|
local shortcut = MouseShortcut(button) |
|
Wakeup(g_WaitShortcutThread, shortcut) |
|
return "break" |
|
end, |
|
OnXButtonDown = function(self, button, controller_id) |
|
|
|
Wakeup(g_WaitShortcutThread, "Escape") |
|
return "break" |
|
end, |
|
HandleMouse = true, |
|
}, terminal.desktop) |
|
win:Open() |
|
win:SetModal() |
|
win:SetFocus() |
|
local success, shortcut = WaitWakeup() |
|
g_WaitShortcutThread = false |
|
win:Close() |
|
return shortcut |
|
end |
|
|
|
local function CancelKeybindingThread() |
|
if g_WaitShortcutThread then |
|
Wakeup(g_WaitShortcutThread, "Escape") |
|
end |
|
end |
|
|
|
|
|
OnMsg.OnXInputControllerDisconnected = CancelKeybindingThread |
|
|
|
|
|
OnMsg.GamepadUIStyleChanged = CancelKeybindingThread |
|
|
|
function GetCameraVKCodeFromShortcut(shortcut) |
|
return shortcut and (VKStrNamesInverse[shortcut] or MouseVKStrNamesInverse[shortcut]) or -1 |
|
end |