FIFE  2008.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
ec_key.h
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