diff options
Diffstat (limited to 'Libraries/LibGUI/Shortcut.cpp')
-rw-r--r-- | Libraries/LibGUI/Shortcut.cpp | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/Libraries/LibGUI/Shortcut.cpp b/Libraries/LibGUI/Shortcut.cpp new file mode 100644 index 0000000000..37fa479450 --- /dev/null +++ b/Libraries/LibGUI/Shortcut.cpp @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <AK/StringBuilder.h> +#include <LibGUI/Shortcut.h> + +namespace GUI { + +static String key_code_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 Shortcut::to_string() const +{ + Vector<String, 8> 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(key_code_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(); +} + +} |