ladybird/LibGUI/GShortcut.cpp
Andreas Kling 57fe316e01 Detect the "Logo" (Windows/Apple/whatever) key and use it for window resize.
This will be comfortable enough while I'm still developing with emulators.
QEMU keeps eating my "Alt" key presses and it's making things difficult.
2019-03-03 12:56:48 +01:00

140 lines
4.0 KiB
C++

#include <LibGUI/GShortcut.h>
#include <AK/StringBuilder.h>
static String to_string(KeyCode key)
{
switch (key) {
case Key_Escape: return "Escape";
case Key_Tab: return "Tab";
case Key_Backspace: return "Backspace";
case Key_Return: return "Return";
case Key_Insert: return "Insert";
case Key_Delete: return "Delete";
case Key_PrintScreen: return "PrintScreen";
case Key_SysRq: return "SysRq";
case Key_Home: return "Home";
case Key_End: return "End";
case Key_Left: return "Left";
case Key_Up: return "Up";
case Key_Right: return "Right";
case Key_Down: return "Down";
case Key_PageUp: return "PageUp";
case Key_PageDown: return "PageDown";
case Key_Shift: return "Shift";
case Key_Control: return "Control";
case Key_Alt: return "Alt";
case Key_CapsLock: return "CapsLock";
case Key_NumLock: return "NumLock";
case Key_ScrollLock: return "ScrollLock";
case Key_F1: return "F1";
case Key_F2: return "F2";
case Key_F3: return "F3";
case Key_F4: return "F4";
case Key_F5: return "F5";
case Key_F6: return "F6";
case Key_F7: return "F7";
case Key_F8: return "F8";
case Key_F9: return "F9";
case Key_F10: return "F10";
case Key_F11: return "F11";
case Key_F12: return "F12";
case Key_Space: return "Space";
case Key_ExclamationPoint: return "!";
case Key_DoubleQuote: return "\"";
case Key_Hashtag: return "#";
case Key_Dollar: return "$";
case Key_Percent: return "%";
case Key_Ampersand: return "&";
case Key_Apostrophe: return "'";
case Key_LeftParen: return "(";
case Key_RightParen: return ")";
case Key_Asterisk: return "*";
case Key_Plus: return "+";
case Key_Comma: return ",";
case Key_Minus: return "-";
case Key_Period: return ",";
case Key_Slash: return "/";
case Key_0: return "0";
case Key_1: return "1";
case Key_2: return "2";
case Key_3: return "3";
case Key_4: return "4";
case Key_5: return "5";
case Key_6: return "6";
case Key_7: return "7";
case Key_8: return "8";
case Key_9: return "9";
case Key_Colon: return ":";
case Key_Semicolon: return ";";
case Key_LessThan: return "<";
case Key_Equal: return "=";
case Key_GreaterThan: return ">";
case Key_QuestionMark: return "?";
case Key_AtSign: return "@";
case Key_A: return "A";
case Key_B: return "B";
case Key_C: return "C";
case Key_D: return "D";
case Key_E: return "E";
case Key_F: return "F";
case Key_G: return "G";
case Key_H: return "H";
case Key_I: return "I";
case Key_J: return "J";
case Key_K: return "K";
case Key_L: return "L";
case Key_M: return "M";
case Key_N: return "N";
case Key_O: return "O";
case Key_P: return "P";
case Key_Q: return "Q";
case Key_R: return "R";
case Key_S: return "S";
case Key_T: return "T";
case Key_U: return "U";
case Key_V: return "V";
case Key_W: return "W";
case Key_X: return "X";
case Key_Y: return "Y";
case Key_Z: return "Z";
case Key_LeftBracket: return "[";
case Key_RightBracket: return "]";
case Key_Backslash: return "\\";
case Key_Circumflex: return "^";
case Key_Underscore: return "_";
case Key_LeftBrace: return "{";
case Key_RightBrace: return "}";
case Key_Pipe: return "|";
case Key_Tilde: return "~";
case Key_Backtick: return "`";
case Key_Invalid: return "Invalid";
default:
ASSERT_NOT_REACHED();
}
}
String GShortcut::to_string() const
{
Vector<String> parts;
if (m_modifiers & Mod_Ctrl)
parts.append("Ctrl");
if (m_modifiers & Mod_Shift)
parts.append("Shift");
if (m_modifiers & Mod_Alt)
parts.append("Alt");
if (m_modifiers & Mod_Logo)
parts.append("Logo");
parts.append(::to_string(m_key));
StringBuilder builder;
for (int i = 0; i < parts.size(); ++i) {
builder.append(parts[i]);
if (i != parts.size() - 1)
builder.append('+');
}
return builder.to_string();
}