#[derive(Debug, Clone)]
pub struct KeyDefinition {
pub code: &'static str,
pub key: &'static str,
pub key_code: i32,
pub text: Option<&'static str>,
pub is_keypad: bool,
pub location: i32,
}
pub fn get_key_definition(key: &str) -> Option<KeyDefinition> {
Some(match key {
"Alt" | "AltLeft" => KeyDefinition {
code: "AltLeft",
key: "Alt",
key_code: 18,
text: None,
is_keypad: false,
location: 1,
},
"AltRight" => KeyDefinition {
code: "AltRight",
key: "Alt",
key_code: 18,
text: None,
is_keypad: false,
location: 2,
},
"Control" | "ControlLeft" => KeyDefinition {
code: "ControlLeft",
key: "Control",
key_code: 17,
text: None,
is_keypad: false,
location: 1,
},
"ControlRight" => KeyDefinition {
code: "ControlRight",
key: "Control",
key_code: 17,
text: None,
is_keypad: false,
location: 2,
},
"Meta" | "MetaLeft" => KeyDefinition {
code: "MetaLeft",
key: "Meta",
key_code: 91,
text: None,
is_keypad: false,
location: 1,
},
"MetaRight" => KeyDefinition {
code: "MetaRight",
key: "Meta",
key_code: 92,
text: None,
is_keypad: false,
location: 2,
},
"Shift" | "ShiftLeft" => KeyDefinition {
code: "ShiftLeft",
key: "Shift",
key_code: 16,
text: None,
is_keypad: false,
location: 1,
},
"ShiftRight" => KeyDefinition {
code: "ShiftRight",
key: "Shift",
key_code: 16,
text: None,
is_keypad: false,
location: 2,
},
"F1" => KeyDefinition {
code: "F1",
key: "F1",
key_code: 112,
text: None,
is_keypad: false,
location: 0,
},
"F2" => KeyDefinition {
code: "F2",
key: "F2",
key_code: 113,
text: None,
is_keypad: false,
location: 0,
},
"F3" => KeyDefinition {
code: "F3",
key: "F3",
key_code: 114,
text: None,
is_keypad: false,
location: 0,
},
"F4" => KeyDefinition {
code: "F4",
key: "F4",
key_code: 115,
text: None,
is_keypad: false,
location: 0,
},
"F5" => KeyDefinition {
code: "F5",
key: "F5",
key_code: 116,
text: None,
is_keypad: false,
location: 0,
},
"F6" => KeyDefinition {
code: "F6",
key: "F6",
key_code: 117,
text: None,
is_keypad: false,
location: 0,
},
"F7" => KeyDefinition {
code: "F7",
key: "F7",
key_code: 118,
text: None,
is_keypad: false,
location: 0,
},
"F8" => KeyDefinition {
code: "F8",
key: "F8",
key_code: 119,
text: None,
is_keypad: false,
location: 0,
},
"F9" => KeyDefinition {
code: "F9",
key: "F9",
key_code: 120,
text: None,
is_keypad: false,
location: 0,
},
"F10" => KeyDefinition {
code: "F10",
key: "F10",
key_code: 121,
text: None,
is_keypad: false,
location: 0,
},
"F11" => KeyDefinition {
code: "F11",
key: "F11",
key_code: 122,
text: None,
is_keypad: false,
location: 0,
},
"F12" => KeyDefinition {
code: "F12",
key: "F12",
key_code: 123,
text: None,
is_keypad: false,
location: 0,
},
"ArrowDown" => KeyDefinition {
code: "ArrowDown",
key: "ArrowDown",
key_code: 40,
text: None,
is_keypad: false,
location: 0,
},
"ArrowLeft" => KeyDefinition {
code: "ArrowLeft",
key: "ArrowLeft",
key_code: 37,
text: None,
is_keypad: false,
location: 0,
},
"ArrowRight" => KeyDefinition {
code: "ArrowRight",
key: "ArrowRight",
key_code: 39,
text: None,
is_keypad: false,
location: 0,
},
"ArrowUp" => KeyDefinition {
code: "ArrowUp",
key: "ArrowUp",
key_code: 38,
text: None,
is_keypad: false,
location: 0,
},
"End" => KeyDefinition {
code: "End",
key: "End",
key_code: 35,
text: None,
is_keypad: false,
location: 0,
},
"Home" => KeyDefinition {
code: "Home",
key: "Home",
key_code: 36,
text: None,
is_keypad: false,
location: 0,
},
"PageDown" => KeyDefinition {
code: "PageDown",
key: "PageDown",
key_code: 34,
text: None,
is_keypad: false,
location: 0,
},
"PageUp" => KeyDefinition {
code: "PageUp",
key: "PageUp",
key_code: 33,
text: None,
is_keypad: false,
location: 0,
},
"Backspace" => KeyDefinition {
code: "Backspace",
key: "Backspace",
key_code: 8,
text: None,
is_keypad: false,
location: 0,
},
"Delete" => KeyDefinition {
code: "Delete",
key: "Delete",
key_code: 46,
text: None,
is_keypad: false,
location: 0,
},
"Enter" => KeyDefinition {
code: "Enter",
key: "Enter",
key_code: 13,
text: Some("\r"),
is_keypad: false,
location: 0,
},
"NumpadEnter" => KeyDefinition {
code: "NumpadEnter",
key: "Enter",
key_code: 13,
text: Some("\r"),
is_keypad: true,
location: 3,
},
"Tab" => KeyDefinition {
code: "Tab",
key: "Tab",
key_code: 9,
text: None,
is_keypad: false,
location: 0,
},
"Escape" => KeyDefinition {
code: "Escape",
key: "Escape",
key_code: 27,
text: None,
is_keypad: false,
location: 0,
},
"Insert" => KeyDefinition {
code: "Insert",
key: "Insert",
key_code: 45,
text: None,
is_keypad: false,
location: 0,
},
"Space" | " " => KeyDefinition {
code: "Space",
key: " ",
key_code: 32,
text: Some(" "),
is_keypad: false,
location: 0,
},
"Digit0" | "0" => KeyDefinition {
code: "Digit0",
key: "0",
key_code: 48,
text: Some("0"),
is_keypad: false,
location: 0,
},
"Digit1" | "1" => KeyDefinition {
code: "Digit1",
key: "1",
key_code: 49,
text: Some("1"),
is_keypad: false,
location: 0,
},
"Digit2" | "2" => KeyDefinition {
code: "Digit2",
key: "2",
key_code: 50,
text: Some("2"),
is_keypad: false,
location: 0,
},
"Digit3" | "3" => KeyDefinition {
code: "Digit3",
key: "3",
key_code: 51,
text: Some("3"),
is_keypad: false,
location: 0,
},
"Digit4" | "4" => KeyDefinition {
code: "Digit4",
key: "4",
key_code: 52,
text: Some("4"),
is_keypad: false,
location: 0,
},
"Digit5" | "5" => KeyDefinition {
code: "Digit5",
key: "5",
key_code: 53,
text: Some("5"),
is_keypad: false,
location: 0,
},
"Digit6" | "6" => KeyDefinition {
code: "Digit6",
key: "6",
key_code: 54,
text: Some("6"),
is_keypad: false,
location: 0,
},
"Digit7" | "7" => KeyDefinition {
code: "Digit7",
key: "7",
key_code: 55,
text: Some("7"),
is_keypad: false,
location: 0,
},
"Digit8" | "8" => KeyDefinition {
code: "Digit8",
key: "8",
key_code: 56,
text: Some("8"),
is_keypad: false,
location: 0,
},
"Digit9" | "9" => KeyDefinition {
code: "Digit9",
key: "9",
key_code: 57,
text: Some("9"),
is_keypad: false,
location: 0,
},
"KeyA" | "a" => KeyDefinition {
code: "KeyA",
key: "a",
key_code: 65,
text: Some("a"),
is_keypad: false,
location: 0,
},
"KeyB" | "b" => KeyDefinition {
code: "KeyB",
key: "b",
key_code: 66,
text: Some("b"),
is_keypad: false,
location: 0,
},
"KeyC" | "c" => KeyDefinition {
code: "KeyC",
key: "c",
key_code: 67,
text: Some("c"),
is_keypad: false,
location: 0,
},
"KeyD" | "d" => KeyDefinition {
code: "KeyD",
key: "d",
key_code: 68,
text: Some("d"),
is_keypad: false,
location: 0,
},
"KeyE" | "e" => KeyDefinition {
code: "KeyE",
key: "e",
key_code: 69,
text: Some("e"),
is_keypad: false,
location: 0,
},
"KeyF" | "f" => KeyDefinition {
code: "KeyF",
key: "f",
key_code: 70,
text: Some("f"),
is_keypad: false,
location: 0,
},
"KeyG" | "g" => KeyDefinition {
code: "KeyG",
key: "g",
key_code: 71,
text: Some("g"),
is_keypad: false,
location: 0,
},
"KeyH" | "h" => KeyDefinition {
code: "KeyH",
key: "h",
key_code: 72,
text: Some("h"),
is_keypad: false,
location: 0,
},
"KeyI" | "i" => KeyDefinition {
code: "KeyI",
key: "i",
key_code: 73,
text: Some("i"),
is_keypad: false,
location: 0,
},
"KeyJ" | "j" => KeyDefinition {
code: "KeyJ",
key: "j",
key_code: 74,
text: Some("j"),
is_keypad: false,
location: 0,
},
"KeyK" | "k" => KeyDefinition {
code: "KeyK",
key: "k",
key_code: 75,
text: Some("k"),
is_keypad: false,
location: 0,
},
"KeyL" | "l" => KeyDefinition {
code: "KeyL",
key: "l",
key_code: 76,
text: Some("l"),
is_keypad: false,
location: 0,
},
"KeyM" | "m" => KeyDefinition {
code: "KeyM",
key: "m",
key_code: 77,
text: Some("m"),
is_keypad: false,
location: 0,
},
"KeyN" | "n" => KeyDefinition {
code: "KeyN",
key: "n",
key_code: 78,
text: Some("n"),
is_keypad: false,
location: 0,
},
"KeyO" | "o" => KeyDefinition {
code: "KeyO",
key: "o",
key_code: 79,
text: Some("o"),
is_keypad: false,
location: 0,
},
"KeyP" | "p" => KeyDefinition {
code: "KeyP",
key: "p",
key_code: 80,
text: Some("p"),
is_keypad: false,
location: 0,
},
"KeyQ" | "q" => KeyDefinition {
code: "KeyQ",
key: "q",
key_code: 81,
text: Some("q"),
is_keypad: false,
location: 0,
},
"KeyR" | "r" => KeyDefinition {
code: "KeyR",
key: "r",
key_code: 82,
text: Some("r"),
is_keypad: false,
location: 0,
},
"KeyS" | "s" => KeyDefinition {
code: "KeyS",
key: "s",
key_code: 83,
text: Some("s"),
is_keypad: false,
location: 0,
},
"KeyT" | "t" => KeyDefinition {
code: "KeyT",
key: "t",
key_code: 84,
text: Some("t"),
is_keypad: false,
location: 0,
},
"KeyU" | "u" => KeyDefinition {
code: "KeyU",
key: "u",
key_code: 85,
text: Some("u"),
is_keypad: false,
location: 0,
},
"KeyV" | "v" => KeyDefinition {
code: "KeyV",
key: "v",
key_code: 86,
text: Some("v"),
is_keypad: false,
location: 0,
},
"KeyW" | "w" => KeyDefinition {
code: "KeyW",
key: "w",
key_code: 87,
text: Some("w"),
is_keypad: false,
location: 0,
},
"KeyX" | "x" => KeyDefinition {
code: "KeyX",
key: "x",
key_code: 88,
text: Some("x"),
is_keypad: false,
location: 0,
},
"KeyY" | "y" => KeyDefinition {
code: "KeyY",
key: "y",
key_code: 89,
text: Some("y"),
is_keypad: false,
location: 0,
},
"KeyZ" | "z" => KeyDefinition {
code: "KeyZ",
key: "z",
key_code: 90,
text: Some("z"),
is_keypad: false,
location: 0,
},
"A" => KeyDefinition {
code: "KeyA",
key: "A",
key_code: 65,
text: Some("A"),
is_keypad: false,
location: 0,
},
"B" => KeyDefinition {
code: "KeyB",
key: "B",
key_code: 66,
text: Some("B"),
is_keypad: false,
location: 0,
},
"C" => KeyDefinition {
code: "KeyC",
key: "C",
key_code: 67,
text: Some("C"),
is_keypad: false,
location: 0,
},
"D" => KeyDefinition {
code: "KeyD",
key: "D",
key_code: 68,
text: Some("D"),
is_keypad: false,
location: 0,
},
"E" => KeyDefinition {
code: "KeyE",
key: "E",
key_code: 69,
text: Some("E"),
is_keypad: false,
location: 0,
},
"F" => KeyDefinition {
code: "KeyF",
key: "F",
key_code: 70,
text: Some("F"),
is_keypad: false,
location: 0,
},
"G" => KeyDefinition {
code: "KeyG",
key: "G",
key_code: 71,
text: Some("G"),
is_keypad: false,
location: 0,
},
"H" => KeyDefinition {
code: "KeyH",
key: "H",
key_code: 72,
text: Some("H"),
is_keypad: false,
location: 0,
},
"I" => KeyDefinition {
code: "KeyI",
key: "I",
key_code: 73,
text: Some("I"),
is_keypad: false,
location: 0,
},
"J" => KeyDefinition {
code: "KeyJ",
key: "J",
key_code: 74,
text: Some("J"),
is_keypad: false,
location: 0,
},
"K" => KeyDefinition {
code: "KeyK",
key: "K",
key_code: 75,
text: Some("K"),
is_keypad: false,
location: 0,
},
"L" => KeyDefinition {
code: "KeyL",
key: "L",
key_code: 76,
text: Some("L"),
is_keypad: false,
location: 0,
},
"M" => KeyDefinition {
code: "KeyM",
key: "M",
key_code: 77,
text: Some("M"),
is_keypad: false,
location: 0,
},
"N" => KeyDefinition {
code: "KeyN",
key: "N",
key_code: 78,
text: Some("N"),
is_keypad: false,
location: 0,
},
"O" => KeyDefinition {
code: "KeyO",
key: "O",
key_code: 79,
text: Some("O"),
is_keypad: false,
location: 0,
},
"P" => KeyDefinition {
code: "KeyP",
key: "P",
key_code: 80,
text: Some("P"),
is_keypad: false,
location: 0,
},
"Q" => KeyDefinition {
code: "KeyQ",
key: "Q",
key_code: 81,
text: Some("Q"),
is_keypad: false,
location: 0,
},
"R" => KeyDefinition {
code: "KeyR",
key: "R",
key_code: 82,
text: Some("R"),
is_keypad: false,
location: 0,
},
"S" => KeyDefinition {
code: "KeyS",
key: "S",
key_code: 83,
text: Some("S"),
is_keypad: false,
location: 0,
},
"T" => KeyDefinition {
code: "KeyT",
key: "T",
key_code: 84,
text: Some("T"),
is_keypad: false,
location: 0,
},
"U" => KeyDefinition {
code: "KeyU",
key: "U",
key_code: 85,
text: Some("U"),
is_keypad: false,
location: 0,
},
"V" => KeyDefinition {
code: "KeyV",
key: "V",
key_code: 86,
text: Some("V"),
is_keypad: false,
location: 0,
},
"W" => KeyDefinition {
code: "KeyW",
key: "W",
key_code: 87,
text: Some("W"),
is_keypad: false,
location: 0,
},
"X" => KeyDefinition {
code: "KeyX",
key: "X",
key_code: 88,
text: Some("X"),
is_keypad: false,
location: 0,
},
"Y" => KeyDefinition {
code: "KeyY",
key: "Y",
key_code: 89,
text: Some("Y"),
is_keypad: false,
location: 0,
},
"Z" => KeyDefinition {
code: "KeyZ",
key: "Z",
key_code: 90,
text: Some("Z"),
is_keypad: false,
location: 0,
},
"Numpad0" => KeyDefinition {
code: "Numpad0",
key: "0",
key_code: 96,
text: Some("0"),
is_keypad: true,
location: 3,
},
"Numpad1" => KeyDefinition {
code: "Numpad1",
key: "1",
key_code: 97,
text: Some("1"),
is_keypad: true,
location: 3,
},
"Numpad2" => KeyDefinition {
code: "Numpad2",
key: "2",
key_code: 98,
text: Some("2"),
is_keypad: true,
location: 3,
},
"Numpad3" => KeyDefinition {
code: "Numpad3",
key: "3",
key_code: 99,
text: Some("3"),
is_keypad: true,
location: 3,
},
"Numpad4" => KeyDefinition {
code: "Numpad4",
key: "4",
key_code: 100,
text: Some("4"),
is_keypad: true,
location: 3,
},
"Numpad5" => KeyDefinition {
code: "Numpad5",
key: "5",
key_code: 101,
text: Some("5"),
is_keypad: true,
location: 3,
},
"Numpad6" => KeyDefinition {
code: "Numpad6",
key: "6",
key_code: 102,
text: Some("6"),
is_keypad: true,
location: 3,
},
"Numpad7" => KeyDefinition {
code: "Numpad7",
key: "7",
key_code: 103,
text: Some("7"),
is_keypad: true,
location: 3,
},
"Numpad8" => KeyDefinition {
code: "Numpad8",
key: "8",
key_code: 104,
text: Some("8"),
is_keypad: true,
location: 3,
},
"Numpad9" => KeyDefinition {
code: "Numpad9",
key: "9",
key_code: 105,
text: Some("9"),
is_keypad: true,
location: 3,
},
"NumpadAdd" => KeyDefinition {
code: "NumpadAdd",
key: "+",
key_code: 107,
text: Some("+"),
is_keypad: true,
location: 3,
},
"NumpadDecimal" => KeyDefinition {
code: "NumpadDecimal",
key: ".",
key_code: 110,
text: Some("."),
is_keypad: true,
location: 3,
},
"NumpadDivide" => KeyDefinition {
code: "NumpadDivide",
key: "/",
key_code: 111,
text: Some("/"),
is_keypad: true,
location: 3,
},
"NumpadMultiply" => KeyDefinition {
code: "NumpadMultiply",
key: "*",
key_code: 106,
text: Some("*"),
is_keypad: true,
location: 3,
},
"NumpadSubtract" => KeyDefinition {
code: "NumpadSubtract",
key: "-",
key_code: 109,
text: Some("-"),
is_keypad: true,
location: 3,
},
"Backquote" | "`" => KeyDefinition {
code: "Backquote",
key: "`",
key_code: 192,
text: Some("`"),
is_keypad: false,
location: 0,
},
"Minus" | "-" => KeyDefinition {
code: "Minus",
key: "-",
key_code: 189,
text: Some("-"),
is_keypad: false,
location: 0,
},
"Equal" | "=" => KeyDefinition {
code: "Equal",
key: "=",
key_code: 187,
text: Some("="),
is_keypad: false,
location: 0,
},
"BracketLeft" | "[" => KeyDefinition {
code: "BracketLeft",
key: "[",
key_code: 219,
text: Some("["),
is_keypad: false,
location: 0,
},
"BracketRight" | "]" => KeyDefinition {
code: "BracketRight",
key: "]",
key_code: 221,
text: Some("]"),
is_keypad: false,
location: 0,
},
"Backslash" | "\\" => KeyDefinition {
code: "Backslash",
key: "\\",
key_code: 220,
text: Some("\\"),
is_keypad: false,
location: 0,
},
"Semicolon" | ";" => KeyDefinition {
code: "Semicolon",
key: ";",
key_code: 186,
text: Some(";"),
is_keypad: false,
location: 0,
},
"Quote" | "'" => KeyDefinition {
code: "Quote",
key: "'",
key_code: 222,
text: Some("'"),
is_keypad: false,
location: 0,
},
"Comma" | "," => KeyDefinition {
code: "Comma",
key: ",",
key_code: 188,
text: Some(","),
is_keypad: false,
location: 0,
},
"Period" | "." => KeyDefinition {
code: "Period",
key: ".",
key_code: 190,
text: Some("."),
is_keypad: false,
location: 0,
},
"Slash" | "/" => KeyDefinition {
code: "Slash",
key: "/",
key_code: 191,
text: Some("/"),
is_keypad: false,
location: 0,
},
"CapsLock" => KeyDefinition {
code: "CapsLock",
key: "CapsLock",
key_code: 20,
text: None,
is_keypad: false,
location: 0,
},
"NumLock" => KeyDefinition {
code: "NumLock",
key: "NumLock",
key_code: 144,
text: None,
is_keypad: false,
location: 0,
},
"ScrollLock" => KeyDefinition {
code: "ScrollLock",
key: "ScrollLock",
key_code: 145,
text: None,
is_keypad: false,
location: 0,
},
"Pause" => KeyDefinition {
code: "Pause",
key: "Pause",
key_code: 19,
text: None,
is_keypad: false,
location: 0,
},
"PrintScreen" => KeyDefinition {
code: "PrintScreen",
key: "PrintScreen",
key_code: 44,
text: None,
is_keypad: false,
location: 0,
},
"ContextMenu" => KeyDefinition {
code: "ContextMenu",
key: "ContextMenu",
key_code: 93,
text: None,
is_keypad: false,
location: 0,
},
_ => return None,
})
}