FIFE 2008.0
|
00001 /*************************************************************************** 00002 * Copyright (C) 2005-2008 by the FIFE team * 00003 * http://www.fifengine.de * 00004 * This file is part of FIFE. * 00005 * * 00006 * FIFE is free software; you can redistribute it and/or * 00007 * modify it under the terms of the GNU Lesser General Public * 00008 * License as published by the Free Software Foundation; either * 00009 * version 2.1 of the License, or (at your option) any later version. * 00010 * * 00011 * This library is distributed in the hope that it will be useful, * 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00014 * Lesser General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU Lesser General Public * 00017 * License along with this library; if not, write to the * 00018 * Free Software Foundation, Inc., * 00019 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 00020 ***************************************************************************/ 00021 00022 #ifndef FIFE_EVENTCHANNEL_KEY_H 00023 #define FIFE_EVENTCHANNEL_KEY_H 00024 00025 // Standard C++ library includes 00026 // 00027 00028 // 3rd party library includes 00029 // 00030 #include <SDL.h> 00031 00032 // FIFE includes 00033 // These includes are split up in two parts, separated by one empty line 00034 // First block: files included from the FIFE root src directory 00035 // Second block: files included from the same folder 00036 // 00037 namespace FIFE { 00038 00041 class Key { 00042 public: 00045 enum KeyType { 00046 INVALID_KEY = -1, 00047 BACKSPACE = SDLK_BACKSPACE, 00048 TAB = SDLK_TAB, 00049 CLEAR = SDLK_CLEAR, 00050 ENTER = SDLK_RETURN, 00051 PAUSE = SDLK_PAUSE, 00052 ESCAPE = SDLK_ESCAPE, 00053 SPACE = SDLK_SPACE, 00054 EXCLAIM = SDLK_EXCLAIM, 00055 QUOTEDBL = SDLK_QUOTEDBL, 00056 HASH = SDLK_HASH, 00057 DOLLAR = SDLK_DOLLAR, 00058 AMPERSAND = SDLK_AMPERSAND, 00059 QUOTE = SDLK_QUOTE, 00060 LEFTPAREN = SDLK_LEFTPAREN, 00061 RIGHTPAREN = SDLK_RIGHTPAREN, 00062 ASTERISK = SDLK_ASTERISK, 00063 PLUS = SDLK_PLUS, 00064 COMMA = SDLK_COMMA, 00065 MINUS = SDLK_MINUS, 00066 PERIOD = SDLK_PERIOD, 00067 SLASH = SDLK_SLASH, 00068 NUM_0 = SDLK_0, 00069 NUM_1 = SDLK_1, 00070 NUM_2 = SDLK_2, 00071 NUM_3 = SDLK_3, 00072 NUM_4 = SDLK_4, 00073 NUM_5 = SDLK_5, 00074 NUM_6 = SDLK_6, 00075 NUM_7 = SDLK_7, 00076 NUM_8 = SDLK_8, 00077 NUM_9 = SDLK_9, 00078 COLON = SDLK_COLON, 00079 SEMICOLON = SDLK_SEMICOLON, 00080 LESS = SDLK_LESS, 00081 EQUALS = SDLK_EQUALS, 00082 GREATER = SDLK_GREATER, 00083 QUESTION = SDLK_QUESTION, 00084 AT = SDLK_AT, 00085 LEFTBRACKET = SDLK_LEFTBRACKET, 00086 BACKSLASH = SDLK_BACKSLASH, 00087 RIGHTBRACKET = SDLK_RIGHTBRACKET, 00088 CARET = SDLK_CARET, 00089 UNDERSCORE = SDLK_UNDERSCORE, 00090 BACKQUOTE = SDLK_BACKQUOTE, 00091 A = SDLK_a, 00092 B = SDLK_b, 00093 C = SDLK_c, 00094 D = SDLK_d, 00095 E = SDLK_e, 00096 F = SDLK_f, 00097 G = SDLK_g, 00098 H = SDLK_h, 00099 I = SDLK_i, 00100 J = SDLK_j, 00101 K = SDLK_k, 00102 L = SDLK_l, 00103 M = SDLK_m, 00104 N = SDLK_n, 00105 O = SDLK_o, 00106 P = SDLK_p, 00107 Q = SDLK_q, 00108 R = SDLK_r, 00109 S = SDLK_s, 00110 T = SDLK_t, 00111 U = SDLK_u, 00112 V = SDLK_v, 00113 W = SDLK_w, 00114 X = SDLK_x, 00115 Y = SDLK_y, 00116 Z = SDLK_z, 00117 DELETE = SDLK_DELETE, 00118 WORLD_0 = SDLK_WORLD_0, 00119 WORLD_1 = SDLK_WORLD_1, 00120 WORLD_2 = SDLK_WORLD_2, 00121 WORLD_3 = SDLK_WORLD_3, 00122 WORLD_4 = SDLK_WORLD_4, 00123 WORLD_5 = SDLK_WORLD_5, 00124 WORLD_6 = SDLK_WORLD_6, 00125 WORLD_7 = SDLK_WORLD_7, 00126 WORLD_8 = SDLK_WORLD_8, 00127 WORLD_9 = SDLK_WORLD_9, 00128 WORLD_10 = SDLK_WORLD_10, 00129 WORLD_11 = SDLK_WORLD_11, 00130 WORLD_12 = SDLK_WORLD_12, 00131 WORLD_13 = SDLK_WORLD_13, 00132 WORLD_14 = SDLK_WORLD_14, 00133 WORLD_15 = SDLK_WORLD_15, 00134 WORLD_16 = SDLK_WORLD_16, 00135 WORLD_17 = SDLK_WORLD_17, 00136 WORLD_18 = SDLK_WORLD_18, 00137 WORLD_19 = SDLK_WORLD_19, 00138 WORLD_20 = SDLK_WORLD_20, 00139 WORLD_21 = SDLK_WORLD_21, 00140 WORLD_22 = SDLK_WORLD_22, 00141 WORLD_23 = SDLK_WORLD_23, 00142 WORLD_24 = SDLK_WORLD_24, 00143 WORLD_25 = SDLK_WORLD_25, 00144 WORLD_26 = SDLK_WORLD_26, 00145 WORLD_27 = SDLK_WORLD_27, 00146 WORLD_28 = SDLK_WORLD_28, 00147 WORLD_29 = SDLK_WORLD_29, 00148 WORLD_30 = SDLK_WORLD_30, 00149 WORLD_31 = SDLK_WORLD_31, 00150 WORLD_32 = SDLK_WORLD_32, 00151 WORLD_33 = SDLK_WORLD_33, 00152 WORLD_34 = SDLK_WORLD_34, 00153 WORLD_35 = SDLK_WORLD_35, 00154 WORLD_36 = SDLK_WORLD_36, 00155 WORLD_37 = SDLK_WORLD_37, 00156 WORLD_38 = SDLK_WORLD_38, 00157 WORLD_39 = SDLK_WORLD_39, 00158 WORLD_40 = SDLK_WORLD_40, 00159 WORLD_41 = SDLK_WORLD_41, 00160 WORLD_42 = SDLK_WORLD_42, 00161 WORLD_43 = SDLK_WORLD_43, 00162 WORLD_44 = SDLK_WORLD_44, 00163 WORLD_45 = SDLK_WORLD_45, 00164 WORLD_46 = SDLK_WORLD_46, 00165 WORLD_47 = SDLK_WORLD_47, 00166 WORLD_48 = SDLK_WORLD_48, 00167 WORLD_49 = SDLK_WORLD_49, 00168 WORLD_50 = SDLK_WORLD_50, 00169 WORLD_51 = SDLK_WORLD_51, 00170 WORLD_52 = SDLK_WORLD_52, 00171 WORLD_53 = SDLK_WORLD_53, 00172 WORLD_54 = SDLK_WORLD_54, 00173 WORLD_55 = SDLK_WORLD_55, 00174 WORLD_56 = SDLK_WORLD_56, 00175 WORLD_57 = SDLK_WORLD_57, 00176 WORLD_58 = SDLK_WORLD_58, 00177 WORLD_59 = SDLK_WORLD_59, 00178 WORLD_60 = SDLK_WORLD_60, 00179 WORLD_61 = SDLK_WORLD_61, 00180 WORLD_62 = SDLK_WORLD_62, 00181 WORLD_63 = SDLK_WORLD_63, 00182 WORLD_64 = SDLK_WORLD_64, 00183 WORLD_65 = SDLK_WORLD_65, 00184 WORLD_66 = SDLK_WORLD_66, 00185 WORLD_67 = SDLK_WORLD_67, 00186 WORLD_68 = SDLK_WORLD_68, 00187 WORLD_69 = SDLK_WORLD_69, 00188 WORLD_70 = SDLK_WORLD_70, 00189 WORLD_71 = SDLK_WORLD_71, 00190 WORLD_72 = SDLK_WORLD_72, 00191 WORLD_73 = SDLK_WORLD_73, 00192 WORLD_74 = SDLK_WORLD_74, 00193 WORLD_75 = SDLK_WORLD_75, 00194 WORLD_76 = SDLK_WORLD_76, 00195 WORLD_77 = SDLK_WORLD_77, 00196 WORLD_78 = SDLK_WORLD_78, 00197 WORLD_79 = SDLK_WORLD_79, 00198 WORLD_80 = SDLK_WORLD_80, 00199 WORLD_81 = SDLK_WORLD_81, 00200 WORLD_82 = SDLK_WORLD_82, 00201 WORLD_83 = SDLK_WORLD_83, 00202 WORLD_84 = SDLK_WORLD_84, 00203 WORLD_85 = SDLK_WORLD_85, 00204 WORLD_86 = SDLK_WORLD_86, 00205 WORLD_87 = SDLK_WORLD_87, 00206 WORLD_88 = SDLK_WORLD_88, 00207 WORLD_89 = SDLK_WORLD_89, 00208 WORLD_90 = SDLK_WORLD_90, 00209 WORLD_91 = SDLK_WORLD_91, 00210 WORLD_92 = SDLK_WORLD_92, 00211 WORLD_93 = SDLK_WORLD_93, 00212 WORLD_94 = SDLK_WORLD_94, 00213 WORLD_95 = SDLK_WORLD_95, 00214 KP0 = SDLK_KP0, 00215 KP1 = SDLK_KP1, 00216 KP2 = SDLK_KP2, 00217 KP3 = SDLK_KP3, 00218 KP4 = SDLK_KP4, 00219 KP5 = SDLK_KP5, 00220 KP6 = SDLK_KP6, 00221 KP7 = SDLK_KP7, 00222 KP8 = SDLK_KP8, 00223 KP9 = SDLK_KP9, 00224 KP_PERIOD = SDLK_KP_PERIOD, 00225 KP_DIVIDE = SDLK_KP_DIVIDE, 00226 KP_MULTIPLY = SDLK_KP_MULTIPLY, 00227 KP_MINUS = SDLK_KP_MINUS, 00228 KP_PLUS = SDLK_KP_PLUS, 00229 KP_ENTER = SDLK_KP_ENTER, 00230 KP_EQUALS = SDLK_KP_EQUALS, 00231 UP = SDLK_UP, 00232 DOWN = SDLK_DOWN, 00233 RIGHT = SDLK_RIGHT, 00234 LEFT = SDLK_LEFT, 00235 INSERT = SDLK_INSERT, 00236 HOME = SDLK_HOME, 00237 END = SDLK_END, 00238 PAGE_UP = SDLK_PAGEUP, 00239 PAGE_DOWN = SDLK_PAGEDOWN, 00240 F1 = SDLK_F1, 00241 F2 = SDLK_F2, 00242 F3 = SDLK_F3, 00243 F4 = SDLK_F4, 00244 F5 = SDLK_F5, 00245 F6 = SDLK_F6, 00246 F7 = SDLK_F7, 00247 F8 = SDLK_F8, 00248 F9 = SDLK_F9, 00249 F10 = SDLK_F10, 00250 F11 = SDLK_F11, 00251 F12 = SDLK_F12, 00252 F13 = SDLK_F13, 00253 F14 = SDLK_F14, 00254 F15 = SDLK_F15, 00255 NUM_LOCK = SDLK_NUMLOCK, 00256 CAPS_LOCK = SDLK_CAPSLOCK, 00257 SCROLL_LOCK = SDLK_SCROLLOCK, 00258 RIGHT_SHIFT = SDLK_RSHIFT, 00259 LEFT_SHIFT = SDLK_LSHIFT, 00260 RIGHT_CONTROL = SDLK_RCTRL, 00261 LEFT_CONTROL = SDLK_LCTRL, 00262 RIGHT_ALT = SDLK_RALT, 00263 LEFT_ALT = SDLK_LALT, 00264 RIGHT_META = SDLK_RMETA, 00265 LEFT_META = SDLK_LMETA, 00266 RIGHT_SUPER = SDLK_RSUPER, 00267 LEFT_SUPER = SDLK_LSUPER, 00268 ALT_GR = SDLK_MODE, 00269 COMPOSE = SDLK_COMPOSE, 00270 HELP = SDLK_HELP, 00271 PRINT_SCREEN = SDLK_PRINT, 00272 SYSREQ = SDLK_SYSREQ, 00273 BREAK = SDLK_BREAK, 00274 MENU = SDLK_MENU, 00275 POWER = SDLK_POWER, 00276 EURO = SDLK_EURO, 00277 UNDO = SDLK_UNDO 00278 }; 00279 00284 Key(KeyType key = INVALID_KEY, uint32_t codepoint = 0): 00285 m_key(key), 00286 m_unicode(codepoint) {} 00287 00290 virtual ~Key() {} 00291 00294 bool isPrintable() const { 00295 // Unicode does not have control characters, so this should be sufficient 00296 return m_unicode != 0; 00297 } 00298 00299 bool isFunctionKey() const { 00300 return m_key >= F1 && m_key <= F15; 00301 } 00302 00305 KeyType getValue() const { 00306 return m_key; 00307 } 00308 00311 std::string getAsString() const { 00312 // older sdl versions have the 3rd argument non const, but it is in fact const... 00313 char* converted = SDL_iconv_string("UTF-8", "UTF-32", 00314 const_cast<char*>(reinterpret_cast<const char*>(&m_unicode)), 4); 00315 std::string retval(converted); 00316 SDL_free(converted); 00317 return retval; 00318 } 00319 00320 private: 00321 KeyType m_key; 00322 uint32_t m_unicode; 00323 }; 00324 00325 } //FIFE 00326 00327 #endif