|
Blender
V2.59
|
00001 /* 00002 * $Id: KX_BlenderInputDevice.h 35063 2011-02-22 10:33:14Z jesterking $ 00003 * 00004 * ***** BEGIN GPL LICENSE BLOCK ***** 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program 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 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software Foundation, 00018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 * 00020 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. 00021 * All rights reserved. 00022 * 00023 * The Original Code is: all of this file. 00024 * 00025 * Contributor(s): none yet. 00026 * 00027 * ***** END GPL LICENSE BLOCK ***** 00028 */ 00029 00034 #ifndef __KX_BLENDERINPUTDEVICE 00035 #define __KX_BLENDERINPUTDEVICE 00036 00037 #if defined(WIN32) && !defined(FREE_WINDOWS) 00038 #pragma warning(disable : 4786) // shut off 255 char limit debug template warning 00039 #endif 00040 00041 #include <map> 00042 00043 #include "wm_event_types.h" 00044 #include "WM_types.h" 00045 #include "SCA_IInputDevice.h" 00046 00047 #ifdef WITH_CXX_GUARDEDALLOC 00048 #include "MEM_guardedalloc.h" 00049 #endif 00050 00054 class BL_BlenderInputDevice : public SCA_IInputDevice 00055 { 00056 // this map is Blender specific: a conversion between blender and ketsji enums 00057 std::map<int,KX_EnumInputs> m_reverseKeyTranslateTable; 00058 public: 00059 BL_BlenderInputDevice() 00060 { 00061 00062 /* The reverse table. In order to not confuse ourselves, we */ 00063 /* immediately convert all events that come in to KX codes. */ 00064 m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE ; 00065 m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE ; 00066 m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE ; 00067 m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE ; 00068 m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE ; 00069 m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX ; 00070 m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY ; 00071 00072 // TIMERS 00073 00074 m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0 ; 00075 m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1 ; 00076 m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2 ; 00077 00078 // SYSTEM 00079 #if 0 00080 /* **** XXX **** */ 00081 m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD ; 00082 m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD ; 00083 m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW ; 00084 m_reverseKeyTranslateTable[INPUTCHANGE ] = KX_INPUTCHANGE ; 00085 m_reverseKeyTranslateTable[QFULL ] = KX_QFULL ; 00086 m_reverseKeyTranslateTable[WINFREEZE ] = KX_WINFREEZE ; 00087 m_reverseKeyTranslateTable[WINTHAW ] = KX_WINTHAW ; 00088 m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE ; 00089 m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT ; 00090 m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME ; 00091 /* **** XXX **** */ 00092 #endif 00093 // standard keyboard 00094 00095 m_reverseKeyTranslateTable[AKEY ] = KX_AKEY ; 00096 m_reverseKeyTranslateTable[BKEY ] = KX_BKEY ; 00097 m_reverseKeyTranslateTable[CKEY ] = KX_CKEY ; 00098 m_reverseKeyTranslateTable[DKEY ] = KX_DKEY ; 00099 m_reverseKeyTranslateTable[EKEY ] = KX_EKEY ; 00100 m_reverseKeyTranslateTable[FKEY ] = KX_FKEY ; 00101 m_reverseKeyTranslateTable[GKEY ] = KX_GKEY ; 00102 //XXX clean up 00103 #ifdef WIN32 00104 #define HKEY 'h' 00105 #endif 00106 m_reverseKeyTranslateTable[HKEY ] = KX_HKEY ; 00107 //XXX clean up 00108 #ifdef WIN32 00109 #undef HKEY 00110 #endif 00111 m_reverseKeyTranslateTable[IKEY ] = KX_IKEY ; 00112 m_reverseKeyTranslateTable[JKEY ] = KX_JKEY ; 00113 m_reverseKeyTranslateTable[KKEY ] = KX_KKEY ; 00114 m_reverseKeyTranslateTable[LKEY ] = KX_LKEY ; 00115 m_reverseKeyTranslateTable[MKEY ] = KX_MKEY ; 00116 m_reverseKeyTranslateTable[NKEY ] = KX_NKEY ; 00117 m_reverseKeyTranslateTable[OKEY ] = KX_OKEY ; 00118 m_reverseKeyTranslateTable[PKEY ] = KX_PKEY ; 00119 m_reverseKeyTranslateTable[QKEY ] = KX_QKEY ; 00120 m_reverseKeyTranslateTable[RKEY ] = KX_RKEY ; 00121 m_reverseKeyTranslateTable[SKEY ] = KX_SKEY ; 00122 m_reverseKeyTranslateTable[TKEY ] = KX_TKEY ; 00123 m_reverseKeyTranslateTable[UKEY ] = KX_UKEY ; 00124 m_reverseKeyTranslateTable[VKEY ] = KX_VKEY ; 00125 m_reverseKeyTranslateTable[WKEY ] = KX_WKEY ; 00126 m_reverseKeyTranslateTable[XKEY ] = KX_XKEY ; 00127 m_reverseKeyTranslateTable[YKEY ] = KX_YKEY ; 00128 m_reverseKeyTranslateTable[ZKEY ] = KX_ZKEY ; 00129 00130 m_reverseKeyTranslateTable[ZEROKEY ] = KX_ZEROKEY ; 00131 m_reverseKeyTranslateTable[ONEKEY ] = KX_ONEKEY ; 00132 m_reverseKeyTranslateTable[TWOKEY ] = KX_TWOKEY ; 00133 m_reverseKeyTranslateTable[THREEKEY ] = KX_THREEKEY ; 00134 m_reverseKeyTranslateTable[FOURKEY ] = KX_FOURKEY ; 00135 m_reverseKeyTranslateTable[FIVEKEY ] = KX_FIVEKEY ; 00136 m_reverseKeyTranslateTable[SIXKEY ] = KX_SIXKEY ; 00137 m_reverseKeyTranslateTable[SEVENKEY ] = KX_SEVENKEY ; 00138 m_reverseKeyTranslateTable[EIGHTKEY ] = KX_EIGHTKEY ; 00139 m_reverseKeyTranslateTable[NINEKEY ] = KX_NINEKEY ; 00140 00141 m_reverseKeyTranslateTable[CAPSLOCKKEY ] = KX_CAPSLOCKKEY ; 00142 00143 m_reverseKeyTranslateTable[LEFTCTRLKEY ] = KX_LEFTCTRLKEY ; 00144 m_reverseKeyTranslateTable[LEFTALTKEY ] = KX_LEFTALTKEY ; 00145 m_reverseKeyTranslateTable[RIGHTALTKEY ] = KX_RIGHTALTKEY ; 00146 m_reverseKeyTranslateTable[RIGHTCTRLKEY ] = KX_RIGHTCTRLKEY ; 00147 m_reverseKeyTranslateTable[RIGHTSHIFTKEY ] = KX_RIGHTSHIFTKEY ; 00148 m_reverseKeyTranslateTable[LEFTSHIFTKEY ] = KX_LEFTSHIFTKEY ; 00149 00150 m_reverseKeyTranslateTable[ESCKEY ] = KX_ESCKEY ; 00151 m_reverseKeyTranslateTable[TABKEY ] = KX_TABKEY ; 00152 m_reverseKeyTranslateTable[RETKEY ] = KX_RETKEY ; 00153 m_reverseKeyTranslateTable[SPACEKEY ] = KX_SPACEKEY ; 00154 m_reverseKeyTranslateTable[LINEFEEDKEY ] = KX_LINEFEEDKEY ; 00155 m_reverseKeyTranslateTable[BACKSPACEKEY ] = KX_BACKSPACEKEY ; 00156 m_reverseKeyTranslateTable[DELKEY ] = KX_DELKEY ; 00157 m_reverseKeyTranslateTable[SEMICOLONKEY ] = KX_SEMICOLONKEY ; 00158 m_reverseKeyTranslateTable[PERIODKEY ] = KX_PERIODKEY ; 00159 m_reverseKeyTranslateTable[COMMAKEY ] = KX_COMMAKEY ; 00160 m_reverseKeyTranslateTable[QUOTEKEY ] = KX_QUOTEKEY ; 00161 m_reverseKeyTranslateTable[ACCENTGRAVEKEY ] = KX_ACCENTGRAVEKEY ; 00162 m_reverseKeyTranslateTable[MINUSKEY ] = KX_MINUSKEY ; 00163 m_reverseKeyTranslateTable[SLASHKEY ] = KX_SLASHKEY ; 00164 m_reverseKeyTranslateTable[BACKSLASHKEY ] = KX_BACKSLASHKEY ; 00165 m_reverseKeyTranslateTable[EQUALKEY ] = KX_EQUALKEY ; 00166 m_reverseKeyTranslateTable[LEFTBRACKETKEY ] = KX_LEFTBRACKETKEY ; 00167 m_reverseKeyTranslateTable[RIGHTBRACKETKEY ] = KX_RIGHTBRACKETKEY ; 00168 00169 m_reverseKeyTranslateTable[LEFTARROWKEY ] = KX_LEFTARROWKEY ; 00170 m_reverseKeyTranslateTable[DOWNARROWKEY ] = KX_DOWNARROWKEY ; 00171 m_reverseKeyTranslateTable[RIGHTARROWKEY ] = KX_RIGHTARROWKEY ; 00172 m_reverseKeyTranslateTable[UPARROWKEY ] = KX_UPARROWKEY ; 00173 00174 m_reverseKeyTranslateTable[PAD2 ] = KX_PAD2 ; 00175 m_reverseKeyTranslateTable[PAD4 ] = KX_PAD4 ; 00176 m_reverseKeyTranslateTable[PAD6 ] = KX_PAD6 ; 00177 m_reverseKeyTranslateTable[PAD8 ] = KX_PAD8 ; 00178 00179 m_reverseKeyTranslateTable[PAD1 ] = KX_PAD1 ; 00180 m_reverseKeyTranslateTable[PAD3 ] = KX_PAD3 ; 00181 m_reverseKeyTranslateTable[PAD5 ] = KX_PAD5 ; 00182 m_reverseKeyTranslateTable[PAD7 ] = KX_PAD7 ; 00183 m_reverseKeyTranslateTable[PAD9 ] = KX_PAD9 ; 00184 00185 m_reverseKeyTranslateTable[PADPERIOD ] = KX_PADPERIOD ; 00186 m_reverseKeyTranslateTable[PADSLASHKEY ] = KX_PADSLASHKEY ; 00187 m_reverseKeyTranslateTable[PADASTERKEY ] = KX_PADASTERKEY ; 00188 00189 00190 m_reverseKeyTranslateTable[PAD0 ] = KX_PAD0 ; 00191 m_reverseKeyTranslateTable[PADMINUS ] = KX_PADMINUS ; 00192 m_reverseKeyTranslateTable[PADENTER ] = KX_PADENTER ; 00193 m_reverseKeyTranslateTable[PADPLUSKEY ] = KX_PADPLUSKEY ; 00194 00195 00196 m_reverseKeyTranslateTable[F1KEY ] = KX_F1KEY ; 00197 m_reverseKeyTranslateTable[F2KEY ] = KX_F2KEY ; 00198 m_reverseKeyTranslateTable[F3KEY ] = KX_F3KEY ; 00199 m_reverseKeyTranslateTable[F4KEY ] = KX_F4KEY ; 00200 m_reverseKeyTranslateTable[F5KEY ] = KX_F5KEY ; 00201 m_reverseKeyTranslateTable[F6KEY ] = KX_F6KEY ; 00202 m_reverseKeyTranslateTable[F7KEY ] = KX_F7KEY ; 00203 m_reverseKeyTranslateTable[F8KEY ] = KX_F8KEY ; 00204 m_reverseKeyTranslateTable[F9KEY ] = KX_F9KEY ; 00205 m_reverseKeyTranslateTable[F10KEY ] = KX_F10KEY ; 00206 m_reverseKeyTranslateTable[F11KEY ] = KX_F11KEY ; 00207 m_reverseKeyTranslateTable[F12KEY ] = KX_F12KEY ; 00208 m_reverseKeyTranslateTable[F13KEY ] = KX_F13KEY ; 00209 m_reverseKeyTranslateTable[F14KEY ] = KX_F14KEY ; 00210 m_reverseKeyTranslateTable[F15KEY ] = KX_F15KEY ; 00211 m_reverseKeyTranslateTable[F16KEY ] = KX_F16KEY ; 00212 m_reverseKeyTranslateTable[F17KEY ] = KX_F17KEY ; 00213 m_reverseKeyTranslateTable[F18KEY ] = KX_F18KEY ; 00214 m_reverseKeyTranslateTable[F19KEY ] = KX_F19KEY ; 00215 00216 m_reverseKeyTranslateTable[PAUSEKEY ] = KX_PAUSEKEY ; 00217 m_reverseKeyTranslateTable[INSERTKEY ] = KX_INSERTKEY ; 00218 m_reverseKeyTranslateTable[HOMEKEY ] = KX_HOMEKEY ; 00219 m_reverseKeyTranslateTable[PAGEUPKEY ] = KX_PAGEUPKEY ; 00220 m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY ; 00221 m_reverseKeyTranslateTable[ENDKEY ] = KX_ENDKEY ; 00222 00223 00224 } 00225 00226 virtual ~BL_BlenderInputDevice() 00227 { 00228 00229 } 00230 00231 KX_EnumInputs ToNative(unsigned short incode) { 00232 return m_reverseKeyTranslateTable[incode]; 00233 } 00234 00235 virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0; 00236 // virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0; 00237 virtual bool ConvertBlenderEvent(unsigned short incode,short val)=0; 00238 00239 00240 #ifdef WITH_CXX_GUARDEDALLOC 00241 public: 00242 void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:BL_BlenderInputDevice"); } 00243 void operator delete(void *mem) { MEM_freeN(mem); } 00244 #endif 00245 }; 00246 #endif //__KX_BLENDERINPUTDEVICE 00247