00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_EVENTCHANNEL_KEY_H
00023 #define FIFE_EVENTCHANNEL_KEY_H
00024
00025
00026
00027
00028
00029
00030 #include <SDL.h>
00031
00032
00033
00034
00035
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
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
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 }
00326
00327 #endif