1 // -*- Mode: C++; tab-width:2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 2 // vi:tw=80:et:ts=2:sts=2 3 // 4 // ----------------------------------------------------------------------- 5 // 6 // This file is part of RLVM, a RealLive virtual machine clone. 7 // 8 // ----------------------------------------------------------------------- 9 // 10 // Copyright (C) 2007 Elliot Glaysher 11 // 12 // This program is free software; you can redistribute it and/or modify 13 // it under the terms of the GNU General Public License as published by 14 // the Free Software Foundation; either version 3 of the License, or 15 // (at your option) any later version. 16 // 17 // This program is distributed in the hope that it will be useful, 18 // but WITHOUT ANY WARRANTY; without even the implied warranty of 19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 // GNU General Public License for more details. 21 // 22 // You should have received a copy of the GNU General Public License 23 // along with this program; if not, write to the Free Software 24 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 25 // 26 // ----------------------------------------------------------------------- 27 28 #ifndef SRC_SYSTEMS_BASE_EVENT_LISTENER_H_ 29 #define SRC_SYSTEMS_BASE_EVENT_LISTENER_H_ 30 31 class RLMachine; 32 class Point; 33 34 enum MouseButton { 35 MOUSE_NONE = 0, 36 MOUSE_LEFT, 37 MOUSE_RIGHT, 38 MOUSE_MIDDLE, 39 MOUSE_WHEELUP, 40 MOUSE_WHEELDOWN 41 }; 42 43 // Note that this looks suspiciously like the SDLKey definition with 44 // s/SDLK_/RLKEY/;. This was done because I'm lazy and SDL was the 45 // first backend I used, and they're right that lining up with ASCII 46 // as much as possible is a really good idea. 47 enum KeyCode { 48 // The keyboard syms have been cleverly chosen to map to ASCII 49 RLKEY_UNKNOWN = 0, 50 RLKEY_FIRST = 0, 51 RLKEY_BACKSPACE = 8, 52 RLKEY_TAB = 9, 53 RLKEY_CLEAR = 12, 54 RLKEY_RETURN = 13, 55 RLKEY_PAUSE = 19, 56 RLKEY_ESCAPE = 27, 57 RLKEY_SPACE = 32, 58 RLKEY_EXCLAIM = 33, 59 RLKEY_QUOTEDBL = 34, 60 RLKEY_HASH = 35, 61 RLKEY_DOLLAR = 36, 62 RLKEY_AMPERSAND = 38, 63 RLKEY_QUOTE = 39, 64 RLKEY_LEFTPAREN = 40, 65 RLKEY_RIGHTPAREN = 41, 66 RLKEY_ASTERISK = 42, 67 RLKEY_PLUS = 43, 68 RLKEY_COMMA = 44, 69 RLKEY_MINUS = 45, 70 RLKEY_PERIOD = 46, 71 RLKEY_SLASH = 47, 72 RLKEY_0 = 48, 73 RLKEY_1 = 49, 74 RLKEY_2 = 50, 75 RLKEY_3 = 51, 76 RLKEY_4 = 52, 77 RLKEY_5 = 53, 78 RLKEY_6 = 54, 79 RLKEY_7 = 55, 80 RLKEY_8 = 56, 81 RLKEY_9 = 57, 82 RLKEY_COLON = 58, 83 RLKEY_SEMICOLON = 59, 84 RLKEY_LESS = 60, 85 RLKEY_EQUALS = 61, 86 RLKEY_GREATER = 62, 87 RLKEY_QUESTION = 63, 88 RLKEY_AT = 64, 89 // Skip uppercase letters 90 RLKEY_LEFTBRACKET = 91, 91 RLKEY_BACKSLASH = 92, 92 RLKEY_RIGHTBRACKET = 93, 93 RLKEY_CARET = 94, 94 RLKEY_UNDERSCORE = 95, 95 RLKEY_BACKQUOTE = 96, 96 RLKEY_a = 97, 97 RLKEY_b = 98, 98 RLKEY_c = 99, 99 RLKEY_d = 100, 100 RLKEY_e = 101, 101 RLKEY_f = 102, 102 RLKEY_g = 103, 103 RLKEY_h = 104, 104 RLKEY_i = 105, 105 RLKEY_j = 106, 106 RLKEY_k = 107, 107 RLKEY_l = 108, 108 RLKEY_m = 109, 109 RLKEY_n = 110, 110 RLKEY_o = 111, 111 RLKEY_p = 112, 112 RLKEY_q = 113, 113 RLKEY_r = 114, 114 RLKEY_s = 115, 115 RLKEY_t = 116, 116 RLKEY_u = 117, 117 RLKEY_v = 118, 118 RLKEY_w = 119, 119 RLKEY_x = 120, 120 RLKEY_y = 121, 121 RLKEY_z = 122, 122 RLKEY_DELETE = 127, 123 // End of ASCII mapped keysyms 124 125 // International keyboard syms 126 RLKEY_WORLD_0 = 160, // 0xA0 127 RLKEY_WORLD_1 = 161, 128 RLKEY_WORLD_2 = 162, 129 RLKEY_WORLD_3 = 163, 130 RLKEY_WORLD_4 = 164, 131 RLKEY_WORLD_5 = 165, 132 RLKEY_WORLD_6 = 166, 133 RLKEY_WORLD_7 = 167, 134 RLKEY_WORLD_8 = 168, 135 RLKEY_WORLD_9 = 169, 136 RLKEY_WORLD_10 = 170, 137 RLKEY_WORLD_11 = 171, 138 RLKEY_WORLD_12 = 172, 139 RLKEY_WORLD_13 = 173, 140 RLKEY_WORLD_14 = 174, 141 RLKEY_WORLD_15 = 175, 142 RLKEY_WORLD_16 = 176, 143 RLKEY_WORLD_17 = 177, 144 RLKEY_WORLD_18 = 178, 145 RLKEY_WORLD_19 = 179, 146 RLKEY_WORLD_20 = 180, 147 RLKEY_WORLD_21 = 181, 148 RLKEY_WORLD_22 = 182, 149 RLKEY_WORLD_23 = 183, 150 RLKEY_WORLD_24 = 184, 151 RLKEY_WORLD_25 = 185, 152 RLKEY_WORLD_26 = 186, 153 RLKEY_WORLD_27 = 187, 154 RLKEY_WORLD_28 = 188, 155 RLKEY_WORLD_29 = 189, 156 RLKEY_WORLD_30 = 190, 157 RLKEY_WORLD_31 = 191, 158 RLKEY_WORLD_32 = 192, 159 RLKEY_WORLD_33 = 193, 160 RLKEY_WORLD_34 = 194, 161 RLKEY_WORLD_35 = 195, 162 RLKEY_WORLD_36 = 196, 163 RLKEY_WORLD_37 = 197, 164 RLKEY_WORLD_38 = 198, 165 RLKEY_WORLD_39 = 199, 166 RLKEY_WORLD_40 = 200, 167 RLKEY_WORLD_41 = 201, 168 RLKEY_WORLD_42 = 202, 169 RLKEY_WORLD_43 = 203, 170 RLKEY_WORLD_44 = 204, 171 RLKEY_WORLD_45 = 205, 172 RLKEY_WORLD_46 = 206, 173 RLKEY_WORLD_47 = 207, 174 RLKEY_WORLD_48 = 208, 175 RLKEY_WORLD_49 = 209, 176 RLKEY_WORLD_50 = 210, 177 RLKEY_WORLD_51 = 211, 178 RLKEY_WORLD_52 = 212, 179 RLKEY_WORLD_53 = 213, 180 RLKEY_WORLD_54 = 214, 181 RLKEY_WORLD_55 = 215, 182 RLKEY_WORLD_56 = 216, 183 RLKEY_WORLD_57 = 217, 184 RLKEY_WORLD_58 = 218, 185 RLKEY_WORLD_59 = 219, 186 RLKEY_WORLD_60 = 220, 187 RLKEY_WORLD_61 = 221, 188 RLKEY_WORLD_62 = 222, 189 RLKEY_WORLD_63 = 223, 190 RLKEY_WORLD_64 = 224, 191 RLKEY_WORLD_65 = 225, 192 RLKEY_WORLD_66 = 226, 193 RLKEY_WORLD_67 = 227, 194 RLKEY_WORLD_68 = 228, 195 RLKEY_WORLD_69 = 229, 196 RLKEY_WORLD_70 = 230, 197 RLKEY_WORLD_71 = 231, 198 RLKEY_WORLD_72 = 232, 199 RLKEY_WORLD_73 = 233, 200 RLKEY_WORLD_74 = 234, 201 RLKEY_WORLD_75 = 235, 202 RLKEY_WORLD_76 = 236, 203 RLKEY_WORLD_77 = 237, 204 RLKEY_WORLD_78 = 238, 205 RLKEY_WORLD_79 = 239, 206 RLKEY_WORLD_80 = 240, 207 RLKEY_WORLD_81 = 241, 208 RLKEY_WORLD_82 = 242, 209 RLKEY_WORLD_83 = 243, 210 RLKEY_WORLD_84 = 244, 211 RLKEY_WORLD_85 = 245, 212 RLKEY_WORLD_86 = 246, 213 RLKEY_WORLD_87 = 247, 214 RLKEY_WORLD_88 = 248, 215 RLKEY_WORLD_89 = 249, 216 RLKEY_WORLD_90 = 250, 217 RLKEY_WORLD_91 = 251, 218 RLKEY_WORLD_92 = 252, 219 RLKEY_WORLD_93 = 253, 220 RLKEY_WORLD_94 = 254, 221 RLKEY_WORLD_95 = 255, // 0xFF 222 223 // Numeric keypad 224 RLKEY_KP0 = 256, 225 RLKEY_KP1 = 257, 226 RLKEY_KP2 = 258, 227 RLKEY_KP3 = 259, 228 RLKEY_KP4 = 260, 229 RLKEY_KP5 = 261, 230 RLKEY_KP6 = 262, 231 RLKEY_KP7 = 263, 232 RLKEY_KP8 = 264, 233 RLKEY_KP9 = 265, 234 RLKEY_KP_PERIOD = 266, 235 RLKEY_KP_DIVIDE = 267, 236 RLKEY_KP_MULTIPLY = 268, 237 RLKEY_KP_MINUS = 269, 238 RLKEY_KP_PLUS = 270, 239 RLKEY_KP_ENTER = 271, 240 RLKEY_KP_EQUALS = 272, 241 242 // Arrows + Home/End pad 243 RLKEY_UP = 273, 244 RLKEY_DOWN = 274, 245 RLKEY_RIGHT = 275, 246 RLKEY_LEFT = 276, 247 RLKEY_INSERT = 277, 248 RLKEY_HOME = 278, 249 RLKEY_END = 279, 250 RLKEY_PAGEUP = 280, 251 RLKEY_PAGEDOWN = 281, 252 253 // Function keys 254 RLKEY_F1 = 282, 255 RLKEY_F2 = 283, 256 RLKEY_F3 = 284, 257 RLKEY_F4 = 285, 258 RLKEY_F5 = 286, 259 RLKEY_F6 = 287, 260 RLKEY_F7 = 288, 261 RLKEY_F8 = 289, 262 RLKEY_F9 = 290, 263 RLKEY_F10 = 291, 264 RLKEY_F11 = 292, 265 RLKEY_F12 = 293, 266 RLKEY_F13 = 294, 267 RLKEY_F14 = 295, 268 RLKEY_F15 = 296, 269 270 // Key state modifier keys 271 RLKEY_NUMLOCK = 300, 272 RLKEY_CAPSLOCK = 301, 273 RLKEY_SCROLLOCK = 302, 274 RLKEY_RSHIFT = 303, 275 RLKEY_LSHIFT = 304, 276 RLKEY_RCTRL = 305, 277 RLKEY_LCTRL = 306, 278 RLKEY_RALT = 307, 279 RLKEY_LALT = 308, 280 RLKEY_RMETA = 309, 281 RLKEY_LMETA = 310, 282 RLKEY_LSUPER = 311, // Left "Windows" key 283 RLKEY_RSUPER = 312, // Right "Windows" key 284 RLKEY_MODE = 313, // "Alt Gr" key 285 RLKEY_COMPOSE = 314, // Multi-key compose key 286 287 // Miscellaneous function keys 288 RLKEY_HELP = 315, 289 RLKEY_PRINT = 316, 290 RLKEY_SYSREQ = 317, 291 RLKEY_BREAK = 318, 292 RLKEY_MENU = 319, 293 RLKEY_POWER = 320, // Power Macintosh power key 294 RLKEY_EURO = 321, // Some European keyboards 295 RLKEY_UNDO = 322, // Atari keyboard has Undo 296 }; 297 298 // Interface to receive information from the Event system when the 299 // mouse is moved. 300 class EventListener { 301 public: 302 virtual ~EventListener(); 303 304 // Notifies of the new location of the mouse hotspot. 305 virtual void MouseMotion(const Point& new_location); 306 307 // A notification of a mouse or key press. Returns true if this EventListener 308 // handled the message (and this message shouldn't be Dispatched to other 309 // EventListeners). 310 virtual bool MouseButtonStateChanged(MouseButton mouse_button, bool pressed); 311 312 // A notification that a key was pressed or unpressed. Returns true if this 313 // EventListener handled the message (and this message shouldn't be 314 // Dispatched to other EventListeners). 315 virtual bool KeyStateChanged(KeyCode key_code, bool pressed); 316 }; 317 318 #endif // SRC_SYSTEMS_BASE_EVENT_LISTENER_H_ 319