namespace AutoAgent.Domain.Models { public class Key { public Button Code { get; private set; } public Key(Button code) { Code = code; } public Key(string key) { Button code; switch (key.ToLowerInvariant()) { case "-": case "_": Code = Button.Sub; break; case "+": case "=": Code = Button.Add; break; case "~": case "`": Code = Button.Tilde; break; case "<": case ",": Code = Button.Comma; break; case ">": case ".": Code = Button.Period; break; case ":": case ";": Code = Button.Colon; break; case "{": case "[": Code = Button.LBracket; break; case "}": case "]": Code = Button.RBracket; break; case "\\": case "|": Code = Button.BSol; break; case "/": case "?": Code = Button.Sol; break; case "'": case "\"": Code = Button.Quote; break; case "num+": Code = Button.NumAdd; break; case "num-": Code = Button.NumSub; break; case "num*": Code = Button.NumMul; break; case "num/": Code = Button.NumDiv; break; case "num.": Code = Button.NumDec; break; case "a": case "b": case "c": case "d": case "e": case "f": case "g": case "h": case "i": case "j": case "k": case "l": case "m": case "n": case "o": case "p": case "q": case "r": case "s": case "t": case "u": case "v": case "w": case "x": case "y": case "z": case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": if (Enum.TryParse($"Key{key}", out code)) { Code = code; break; } else goto default; case "shift": case "ctrl": case "alt": case "win": if (Enum.TryParse($"L{key}", out code)) { Code = code; break; } else goto default; default: if (Enum.TryParse(key, out code)) { Code = code; break; } else throw new ArgumentException($"Unexpected key \"{key}\""); } } } }