OMKInputListener.cpp

Go to the documentation of this file.
00001 /************************************************************************/
00002 /* This file is part of openMask(c) INRIA, CNRS, Universite de Rennes 1 */
00003 /* 1993-2002, thereinafter the Software                                 */
00004 /*                                                                      */
00005 /* The Software has been developped within the Siames Project.          */
00006 /* INRIA, the University of Rennes 1 and CNRS jointly hold intellectual */
00007 /* property rights                                                      */
00008 /*                                                                      */
00009 /* The Software has been registered with the Agence pour la Protection  */
00010 /* des Programmes (APP) under registration number                       */
00011 /* IDDN.FR.001.510008.00.S.P.2001.000.41200                             */
00012 /*                                                                      */
00013 /* This file may be distributed under the terms of the Q Public License */
00014 /* version 1.0 as defined by Trolltech AS of Norway and appearing in    */
00015 /* the file LICENSE.QPL included in the packaging of this file.         */
00016 /*                                                                      */
00017 /* Licensees holding valid specific licenses issued by INRIA, CNRS or   */
00018 /* Universite Rennes 1 for the software may use this file in            */
00019 /* acordance with that specific license                                 */
00020 /************************************************************************/
00021 #include "OMKInputListener.h"
00022 #include "OMKExtensibleSimulatedObject.h"
00023 #ifdef _MSC_VER
00024 //Includes for using std::transform and toupper under VC
00025 #include <cctype>
00026 #include <string>
00027 #include <algorithm>
00028 #endif
00029 
00030 using namespace OMK ;
00031 using namespace OMK::Inp ;
00032 //-------------------------------------------------------------------------
00033 InputListener::InputListener( ExtensibleSimulatedObject* sender, const Name& id, 
00034                               const ConfigurationParameterDescriptor* node ) 
00035   : _id( id ),
00036     _sender( sender )
00037 {
00038   OMASSERT( _sender && "Must be a valid pointer on a simulated object" ) ;
00039 }
00040 //-------------------------------------------------------------------------
00041 InputListener::~InputListener()
00042 {
00043 }
00044 //-------------------------------------------------------------------------
00045 void InputListener::sendEvent( const Name& receiver, const EventIdentifier & eventId ) 
00046 {
00047   _sender->sendEvent( receiver, eventId ) ;
00048 }
00049 //-------------------------------------------------------------------------
00050 bool initCodes( std::map< std::string, OIS::KeyCode > & keyCodes )
00051 {
00052   // May be not thread safe
00053   keyCodes[ "ESCAPE"       ] = OIS::KC_ESCAPE       ;
00054   keyCodes[ "1"            ] = OIS::KC_1            ;
00055   keyCodes[ "2"            ] = OIS::KC_2            ;
00056   keyCodes[ "3"            ] = OIS::KC_3            ;
00057   keyCodes[ "4"            ] = OIS::KC_4            ;
00058   keyCodes[ "5"            ] = OIS::KC_5            ;
00059   keyCodes[ "6"            ] = OIS::KC_6            ;
00060   keyCodes[ "7"            ] = OIS::KC_7            ;
00061   keyCodes[ "8"            ] = OIS::KC_8            ;
00062   keyCodes[ "9"            ] = OIS::KC_9            ;
00063   keyCodes[ "0"            ] = OIS::KC_0            ;
00064   keyCodes[ "MINUS"        ] = OIS::KC_MINUS        ;    // - on main keyboard
00065   keyCodes[ "EQUALS"       ] = OIS::KC_EQUALS       ;
00066   keyCodes[ "BACK"         ] = OIS::KC_BACK         ;    // backspace
00067   keyCodes[ "TAB"          ] = OIS::KC_TAB          ;
00068   keyCodes[ "Q"            ] = OIS::KC_Q            ;
00069   keyCodes[ "W"            ] = OIS::KC_W            ;
00070   keyCodes[ "E"            ] = OIS::KC_E            ;
00071   keyCodes[ "R"            ] = OIS::KC_R            ;
00072   keyCodes[ "T"            ] = OIS::KC_T            ;
00073   keyCodes[ "Y"            ] = OIS::KC_Y            ;
00074   keyCodes[ "U"            ] = OIS::KC_U            ;
00075   keyCodes[ "I"            ] = OIS::KC_I            ;
00076   keyCodes[ "O"            ] = OIS::KC_O            ;
00077   keyCodes[ "P"            ] = OIS::KC_P            ;
00078   keyCodes[ "LBRACKET"     ] = OIS::KC_LBRACKET     ;
00079   keyCodes[ "RBRACKET"     ] = OIS::KC_RBRACKET     ;
00080   keyCodes[ "RETURN"       ] = OIS::KC_RETURN       ;    // Enter on main keyboard
00081   keyCodes[ "LCONTROL"     ] = OIS::KC_LCONTROL     ;
00082   keyCodes[ "A"            ] = OIS::KC_A            ;
00083   keyCodes[ "S"            ] = OIS::KC_S            ;
00084   keyCodes[ "D"            ] = OIS::KC_D            ;
00085   keyCodes[ "F"            ] = OIS::KC_F            ;
00086   keyCodes[ "G"            ] = OIS::KC_G            ;
00087   keyCodes[ "H"            ] = OIS::KC_H            ;
00088   keyCodes[ "J"            ] = OIS::KC_J            ;
00089   keyCodes[ "K"            ] = OIS::KC_K            ;
00090   keyCodes[ "L"            ] = OIS::KC_L            ;
00091   keyCodes[ "SEMICOLON"    ] = OIS::KC_SEMICOLON    ;
00092   keyCodes[ "APOSTROPHE"   ] = OIS::KC_APOSTROPHE   ;
00093   keyCodes[ "GRAVE"        ] = OIS::KC_GRAVE        ;    // accent
00094   keyCodes[ "LSHIFT"       ] = OIS::KC_LSHIFT       ;
00095   keyCodes[ "BACKSLASH"    ] = OIS::KC_BACKSLASH    ;
00096   keyCodes[ "Z"            ] = OIS::KC_Z            ;
00097   keyCodes[ "X"            ] = OIS::KC_X            ;
00098   keyCodes[ "C"            ] = OIS::KC_C            ;
00099   keyCodes[ "V"            ] = OIS::KC_V            ;
00100   keyCodes[ "B"            ] = OIS::KC_B            ;
00101   keyCodes[ "N"            ] = OIS::KC_N            ;
00102   keyCodes[ "M"            ] = OIS::KC_M            ;
00103   keyCodes[ "COMMA"        ] = OIS::KC_COMMA        ;
00104   keyCodes[ "PERIOD"       ] = OIS::KC_PERIOD       ;    // . on main keyboard
00105   keyCodes[ "SLASH"        ] = OIS::KC_SLASH        ;    // / on main keyboard
00106   keyCodes[ "RSHIFT"       ] = OIS::KC_RSHIFT       ;
00107   keyCodes[ "MULTIPLY"     ] = OIS::KC_MULTIPLY     ;    // * on numeric keypad
00108   keyCodes[ "LMENU"        ] = OIS::KC_LMENU        ;    // left Alt
00109   keyCodes[ "SPACE"        ] = OIS::KC_SPACE        ;
00110   keyCodes[ "CAPITAL"      ] = OIS::KC_CAPITAL      ;
00111   keyCodes[ "F1"           ] = OIS::KC_F1           ;
00112   keyCodes[ "F2"           ] = OIS::KC_F2           ;
00113   keyCodes[ "F3"           ] = OIS::KC_F3           ;
00114   keyCodes[ "F4"           ] = OIS::KC_F4           ;
00115   keyCodes[ "F5"           ] = OIS::KC_F5           ;
00116   keyCodes[ "F6"           ] = OIS::KC_F6           ;
00117   keyCodes[ "F7"           ] = OIS::KC_F7           ;
00118   keyCodes[ "F8"           ] = OIS::KC_F8           ;
00119   keyCodes[ "F9"           ] = OIS::KC_F9           ;
00120   keyCodes[ "F10"          ] = OIS::KC_F10          ;
00121   keyCodes[ "NUMLOCK"      ] = OIS::KC_NUMLOCK      ;
00122   keyCodes[ "SCROLL"       ] = OIS::KC_SCROLL       ;    // Scroll Lock
00123   keyCodes[ "NUMPAD7"      ] = OIS::KC_NUMPAD7      ;
00124   keyCodes[ "NUMPAD8"      ] = OIS::KC_NUMPAD8      ;
00125   keyCodes[ "NUMPAD9"      ] = OIS::KC_NUMPAD9      ;
00126   keyCodes[ "SUBTRACT"     ] = OIS::KC_SUBTRACT     ;    // - on numeric keypad
00127   keyCodes[ "NUMPAD4"      ] = OIS::KC_NUMPAD4      ;
00128   keyCodes[ "NUMPAD5"      ] = OIS::KC_NUMPAD5      ;
00129   keyCodes[ "NUMPAD6"      ] = OIS::KC_NUMPAD6      ;
00130   keyCodes[ "ADD"          ] = OIS::KC_ADD          ;    // + on numeric keypad
00131   keyCodes[ "NUMPAD1"      ] = OIS::KC_NUMPAD1      ;
00132   keyCodes[ "NUMPAD2"      ] = OIS::KC_NUMPAD2      ;
00133   keyCodes[ "NUMPAD3"      ] = OIS::KC_NUMPAD3      ;
00134   keyCodes[ "NUMPAD0"      ] = OIS::KC_NUMPAD0      ;
00135   keyCodes[ "DECIMAL"      ] = OIS::KC_DECIMAL      ;    // . on numeric keypad
00136   keyCodes[ "OEM_102"      ] = OIS::KC_OEM_102      ;    // < > | on UK/Germany keyboards
00137   keyCodes[ "F11"          ] = OIS::KC_F11          ;
00138   keyCodes[ "F12"          ] = OIS::KC_F12          ;
00139   keyCodes[ "F13"          ] = OIS::KC_F13          ;    //                     (NEC PC98)
00140   keyCodes[ "F14"          ] = OIS::KC_F14          ;    //                     (NEC PC98)
00141   keyCodes[ "F15"          ] = OIS::KC_F15          ;    //                     (NEC PC98)
00142   keyCodes[ "KANA"         ] = OIS::KC_KANA         ;    // (Japanese keyboard)
00143   keyCodes[ "ABNT_C1"      ] = OIS::KC_ABNT_C1      ;    // / ? on Portugese (Brazilian) keyboards
00144   keyCodes[ "CONVERT"      ] = OIS::KC_CONVERT      ;    // (Japanese keyboard)
00145   keyCodes[ "NOCONVERT"    ] = OIS::KC_NOCONVERT    ;    // (Japanese keyboard)
00146   keyCodes[ "YEN"          ] = OIS::KC_YEN          ;    // (Japanese keyboard)
00147   keyCodes[ "ABNT_C2"      ] = OIS::KC_ABNT_C2      ;    // Numpad . on Portugese (Brazilian) keyboards
00148   keyCodes[ "NUMPADEQUALS" ] = OIS::KC_NUMPADEQUALS ;    // = OIS::on numeric keypad (NEC PC98)
00149   keyCodes[ "PREVTRACK"    ] = OIS::KC_PREVTRACK    ;    // Previous Track (s_keyCodes[ "CIRCUMFLEX on Japanese keyboard)
00150   keyCodes[ "AT"           ] = OIS::KC_AT           ;    //                     (NEC PC98)
00151   keyCodes[ "COLON"        ] = OIS::KC_COLON        ;    //                     (NEC PC98)
00152   keyCodes[ "UNDERLINE"    ] = OIS::KC_UNDERLINE    ;    //                     (NEC PC98)
00153   keyCodes[ "KANJI"        ] = OIS::KC_KANJI        ;    // (Japanese keyboard)
00154   keyCodes[ "STOP"         ] = OIS::KC_STOP         ;    //                     (NEC PC98)
00155   keyCodes[ "AX"           ] = OIS::KC_AX           ;    //                     (Japan AX)
00156   keyCodes[ "UNLABELED"    ] = OIS::KC_UNLABELED    ;    //                        (J3100)
00157   keyCodes[ "NEXTTRACK"    ] = OIS::KC_NEXTTRACK    ;    // Next Track
00158   keyCodes[ "NUMPADENTER"  ] = OIS::KC_NUMPADENTER  ;    // Enter on numeric keypad
00159   keyCodes[ "RCONTROL"     ] = OIS::KC_RCONTROL     ;
00160   keyCodes[ "MUTE"         ] = OIS::KC_MUTE         ;    // Mute
00161   keyCodes[ "CALCULATOR"   ] = OIS::KC_CALCULATOR   ;    // Calculator
00162   keyCodes[ "PLAYPAUSE"    ] = OIS::KC_PLAYPAUSE    ;    // Play / Pause
00163   keyCodes[ "MEDIASTOP"    ] = OIS::KC_MEDIASTOP    ;    // Media Stop
00164   keyCodes[ "VOLUMEDOWN"   ] = OIS::KC_VOLUMEDOWN   ;    // Volume -
00165   keyCodes[ "VOLUMEUP"     ] = OIS::KC_VOLUMEUP     ;    // Volume +
00166   keyCodes[ "WEBHOME"      ] = OIS::KC_WEBHOME      ;    // Web home
00167   keyCodes[ "NUMPADCOMMA"  ] = OIS::KC_NUMPADCOMMA  ;    //  ; on numeric keypad (NEC PC98)
00168   keyCodes[ "DIVIDE"       ] = OIS::KC_DIVIDE       ;    // / on numeric keypad
00169   keyCodes[ "SYSRQ"        ] = OIS::KC_SYSRQ        ;
00170   keyCodes[ "RMENU"        ] = OIS::KC_RMENU        ;    // right Alt
00171   keyCodes[ "PAUSE"        ] = OIS::KC_PAUSE        ;    // Pause
00172   keyCodes[ "HOME"         ] = OIS::KC_HOME         ;    // Home on arrow keypad
00173   keyCodes[ "UP"           ] = OIS::KC_UP           ;    // UpArrow on arrow keypad
00174   keyCodes[ "PGUP"         ] = OIS::KC_PGUP         ;    // PgUp on arrow keypad
00175   keyCodes[ "LEFT"         ] = OIS::KC_LEFT         ;    // LeftArrow on arrow keypad
00176   keyCodes[ "RIGHT"        ] = OIS::KC_RIGHT        ;    // RightArrow on arrow keypad
00177   keyCodes[ "END"          ] = OIS::KC_END          ;    // End on arrow keypad
00178   keyCodes[ "DOWN"         ] = OIS::KC_DOWN         ;    // DownArrow on arrow keypad
00179   keyCodes[ "PGDOWN"       ] = OIS::KC_PGDOWN       ;    // PgDn on arrow keypad
00180   keyCodes[ "INSERT"       ] = OIS::KC_INSERT       ;    // Insert on arrow keypad
00181   keyCodes[ "DELETE"       ] = OIS::KC_DELETE       ;    // Delete on arrow keypad
00182   keyCodes[ "LWIN"         ] = OIS::KC_LWIN         ;    // Left Windows key
00183   keyCodes[ "RWIN"         ] = OIS::KC_RWIN         ;    // Right Windows key
00184   keyCodes[ "APPS"         ] = OIS::KC_APPS         ;    // AppMenu key
00185   keyCodes[ "POWER"        ] = OIS::KC_POWER        ;    // System Power
00186   keyCodes[ "SLEEP"        ] = OIS::KC_SLEEP        ;    // System Sleep
00187   keyCodes[ "WAKE"         ] = OIS::KC_WAKE         ;    // System Wake
00188   keyCodes[ "WEBSEARCH"    ] = OIS::KC_WEBSEARCH    ;    // Web Search
00189   keyCodes[ "WEBFAVORITES" ] = OIS::KC_WEBFAVORITES ;    // Web Favorites
00190   keyCodes[ "WEBREFRESH"   ] = OIS::KC_WEBREFRESH   ;    // Web Refresh
00191   keyCodes[ "WEBSTOP"      ] = OIS::KC_WEBSTOP      ;    // Web Stop
00192   keyCodes[ "WEBFORWARD"   ] = OIS::KC_WEBFORWARD   ;    // Web Forward
00193   keyCodes[ "WEBBACK"      ] = OIS::KC_WEBBACK      ;    // Web Back
00194   keyCodes[ "MYCOMPUTER"   ] = OIS::KC_MYCOMPUTER   ;    // My Computer
00195   keyCodes[ "MAIL"         ] = OIS::KC_MAIL         ;    // Mail
00196   keyCodes[ "MEDIASELECT"  ] = OIS::KC_MEDIASELECT  ;    // Media Select
00197   return true ;
00198 }
00199 //-------------------------------------------------------------------------
00200 OIS::KeyCode InputListener::retrieveCode( const std::string& code )
00201 {
00202   // May be not thread safe
00203   static bool keyCodesRetrieved = false ;
00204   static std::map< std::string, OIS::KeyCode > s_keyCodes ;
00205   if( !keyCodesRetrieved )
00206   { // try to retreive key codes only once per OMK session
00207     keyCodesRetrieved = true ;
00208     initCodes( s_keyCodes ) ;
00209   }
00210 
00211   std::string str( code ) ;
00212   std::transform( str.begin(), str.end(), str.begin(), toupper );
00213   return s_keyCodes[ str ] ;
00214 }
00215 //-------------------------------------------------------------------------
00216 //-------------------------------------------------------------------------
00217 bool InputListener::retrieveCodeFromConfig(
00218   const ConfigurationParameterDescriptor* node,
00219   const std::string& keyId,
00220   OIS::KeyCode& keyCode )
00221 {
00222   std::string keyVal ;
00223   if( ParametersAccessor::get( node, keyId, keyVal ) )
00224   {
00225     OIS::KeyCode k( retrieveCode( keyVal ) ) ;
00226     if( k != OIS::KC_UNASSIGNED )
00227     {
00228       keyCode = k ;
00229       return true ;
00230     }
00231   }
00232   return false ;
00233 }

logo OpenMask

Documentation generated on Mon Jun 9 11:45:56 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007