diff --git a/ShiftOS.Frontend/GraphicsSubsystem/UIManager.cs b/ShiftOS.Frontend/GraphicsSubsystem/UIManager.cs
index 43762cf..a70c51b 100644
--- a/ShiftOS.Frontend/GraphicsSubsystem/UIManager.cs
+++ b/ShiftOS.Frontend/GraphicsSubsystem/UIManager.cs
@@ -298,217 +298,139 @@ namespace ShiftOS.Frontend.GraphicsSubsystem
public static class KeysExtensions
{
+ /*
+ * Notice: The following keymapping does not take into account the user's keyboard
+ * layout. This is written under the assumption the keyboard is en_US.
+ *
+ * @MichaelTheShifter I'm leaving you to figure out how to make this work with other layouts.
+ *
+ * My suggestion would be to simply do what you are doing with strings, define a JSON file
+ * mapping each character to its associated character.
+ */
+
+ private static Dictionary keymapDefault = new Dictionary() {
+ { Keys.Space, ' ' },
+ { Keys.Tab, '\t' },
+ { Keys.Enter, '\n' },
+ { Keys.Back, '\b' },
+ { Keys.A, 'a'},
+ { Keys.B, 'b'},
+ { Keys.C, 'c' },
+ { Keys.D, 'd' },
+ { Keys.E, 'e' },
+ { Keys.F, 'f' },
+ { Keys.G, 'g' },
+ { Keys.H, 'h' },
+ { Keys.I, 'i' },
+ { Keys.J, 'j' },
+ { Keys.K, 'k' },
+ { Keys.L, 'l' },
+ { Keys.M, 'm' },
+ { Keys.N, 'n' },
+ { Keys.O, 'o' },
+ { Keys.P, 'p' },
+ { Keys.Q, 'q' },
+ { Keys.R, 'r' },
+ { Keys.S, 's' },
+ { Keys.T, 't' },
+ { Keys.U, 'u' },
+ { Keys.V, 'v' },
+ { Keys.W, 'w' },
+ { Keys.X, 'x' },
+ { Keys.Y, 'y' },
+ { Keys.Z, 'z' },
+ { Keys.D0, '0' },
+ { Keys.D1, '1' },
+ { Keys.D2, '2' },
+ { Keys.D3, '3' },
+ { Keys.D4, '4' },
+ { Keys.D5, '5' },
+ { Keys.D6, '6' },
+ { Keys.D7, '7' },
+ { Keys.D8, '8' },
+ { Keys.D9, '9' },
+ { Keys.OemTilde, '`' },
+ { Keys.OemMinus, '-' },
+ { Keys.OemPlus, '+' },
+ { Keys.OemOpenBrackets, '[' },
+ { Keys.OemCloseBrackets, ']'},
+ { Keys.OemBackslash, '\\'},
+ { Keys.OemPipe, '\\' },
+ { Keys.OemSemicolon, ';' },
+ { Keys.OemQuotes, '\'' },
+ { Keys.OemComma, ',' },
+ { Keys.OemPeriod, '.' },
+ { Keys.OemQuestion, '/' },
+ };
+
+ private static Dictionary keymapShift = new Dictionary () {
+ { Keys.Space, ' ' },
+ { Keys.Tab, '\t' },
+ { Keys.Enter, '\n' },
+ { Keys.Back, '\b' },
+ { Keys.A, 'A'},
+ { Keys.B, 'B'},
+ { Keys.C, 'C' },
+ { Keys.D, 'D' },
+ { Keys.E, 'E' },
+ { Keys.F, 'F' },
+ { Keys.G, 'G' },
+ { Keys.H, 'H' },
+ { Keys.I, 'I' },
+ { Keys.J, 'J' },
+ { Keys.K, 'K' },
+ { Keys.L, 'L' },
+ { Keys.M, 'M' },
+ { Keys.N, 'N' },
+ { Keys.O, 'O' },
+ { Keys.P, 'P' },
+ { Keys.Q, 'Q' },
+ { Keys.R, 'R' },
+ { Keys.S, 'S' },
+ { Keys.T, 'T' },
+ { Keys.U, 'U' },
+ { Keys.V, 'V' },
+ { Keys.W, 'W' },
+ { Keys.X, 'X' },
+ { Keys.Y, 'Y' },
+ { Keys.Z, 'Z' },
+ { Keys.D0, ')' },
+ { Keys.D1, '!' },
+ { Keys.D2, '@' },
+ { Keys.D3, '#' },
+ { Keys.D4, '$' },
+ { Keys.D5, '%' },
+ { Keys.D6, '^' },
+ { Keys.D7, '&' },
+ { Keys.D8, '*' },
+ { Keys.D9, '(' },
+ { Keys.OemTilde, '~' },
+ { Keys.OemMinus, '_' },
+ { Keys.OemPlus, '+' },
+ { Keys.OemOpenBrackets, '{' },
+ { Keys.OemCloseBrackets, '}'},
+ { Keys.OemBackslash, '|'},
+ { Keys.OemPipe, '|' },
+ { Keys.OemSemicolon, ':' },
+ { Keys.OemQuotes, '\'' },
+ { Keys.OemComma, '<' },
+ { Keys.OemPeriod, '>' },
+ { Keys.OemQuestion, '?' },
+ };
+
public static char ToCharacter(this Keys key, bool shift)
{
- char c = '\0';
- switch (key)
+ if (shift && keymapShift.ContainsKey(key))
{
- case Keys.Space:
- c = ' ';
- break;
- case Keys.A:
- c = 'a';
- break;
- case Keys.B:
- c = 'b';
- break;
- case Keys.C:
- c = 'c';
- break;
- case Keys.D:
- c = 'd';
- break;
- case Keys.E:
- c = 'e';
- break;
- case Keys.F:
- c = 'f';
- break;
- case Keys.G:
- c = 'g';
- break;
- case Keys.H:
- c = 'h';
- break;
- case Keys.I:
- c = 'i';
- break;
- case Keys.J:
- c = 'j';
- break;
- case Keys.K:
- c = 'k';
- break;
- case Keys.L:
- c = 'l';
- break;
- case Keys.M:
- c = 'm';
- break;
- case Keys.N:
- c = 'n';
- break;
- case Keys.O:
- c = 'o';
- break;
- case Keys.P:
- c = 'p';
- break;
- case Keys.Q:
- c = 'q';
- break;
- case Keys.R:
- c = 'r';
- break;
- case Keys.S:
- c = 's';
- break;
- case Keys.T:
- c = 't';
- break;
- case Keys.U:
- c = 'u';
- break;
- case Keys.V:
- c = 'v';
- break;
- case Keys.W:
- c = 'w';
- break;
- case Keys.X:
- c = 'x';
- break;
- case Keys.Y:
- c = 'y';
- break;
- case Keys.Z:
- c = 'z';
- break;
- case Keys.D0:
- if (shift)
- c = ')';
- else
- c = '0';
- break;
- case Keys.D1:
- if (shift)
- c = '!';
- else
- c = '1';
- break;
- case Keys.D2:
- if (shift)
- c = '@';
- else
- c = '2';
- break;
- case Keys.D3:
- if (shift)
- c = '#';
- else
- c = '3';
- break;
- case Keys.D4:
- if (shift)
- c = '$';
- else
- c = '4';
- break;
- case Keys.D5:
- if (shift)
- c = '%';
- else
- c = '5';
- break;
- case Keys.D6:
- if (shift)
- c = '^';
- else
- c = '6';
- break;
- case Keys.D7:
- if (shift)
- c = '&';
- else
- c = '7';
- break;
- case Keys.D8:
- if (shift)
- c = '*';
- else
- c = '8';
- break;
- case Keys.D9:
- if (shift)
- c = '(';
- else
- c = '9';
- break;
- case Keys.OemBackslash:
- if (shift)
- c = '|';
- else
- c = '\\';
- break;
- case Keys.OemCloseBrackets:
- if (shift)
- c = '}';
- else
- c = ']';
- break;
- case Keys.OemComma:
- if (shift)
- c = '<';
- else
- c = ',';
- break;
- case Keys.OemPeriod:
- if (shift)
- c = '>';
- else
- c = '.';
- break;
- case Keys.OemQuestion:
- if (shift)
- c = '?';
- else
- c = '/';
- break;
- case Keys.OemSemicolon:
- if (shift)
- c = ':';
- else
- c = ';';
- break;
- case Keys.OemQuotes:
- if (shift)
- c = '"';
- else
- c = '\'';
- break;
- case Keys.OemTilde:
- if (shift)
- c = '~';
- else
- c = '`';
- break;
- case Keys.OemMinus:
- if (shift)
- c = '_';
- else
- c = '-';
- break;
- case Keys.OemPlus:
- if (shift)
- c = '+';
- else
- c = '=';
- break;
+ return keymapShift[key];
}
- if (char.IsLetter(c))
- if (shift)
- c = char.ToUpper(c);
- return c;
+
+ if (!shift && keymapDefault.ContainsKey(key))
+ {
+ return keymapDefault[key];
+ }
+
+ return '\0'; // Ideally all keys should be included in this map
}
}
}