123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- /*
- * 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/String.h>
- #include <AK/StringBuilder.h>
- #include <AK/Vector.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 (size_t i = 0; i < parts.size(); ++i) {
- builder.append(parts[i]);
- if (i != parts.size() - 1)
- builder.append('+');
- }
- return builder.to_string();
- }
- }
|