Orxonox  0.0.5 Codename: Arcturus
OISKeyboard.h
Go to the documentation of this file.
1 /*
2 The zlib/libpng License
3 
4 Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
5 
6 This software is provided 'as-is', without any express or implied warranty. In no event will
7 the authors be held liable for any damages arising from the use of this software.
8 
9 Permission is granted to anyone to use this software for any purpose, including commercial
10 applications, and to alter it and redistribute it freely, subject to the following
11 restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not claim that
14  you wrote the original software. If you use this software in a product,
15  an acknowledgment in the product documentation would be appreciated but is
16  not required.
17 
18  2. Altered source versions must be plainly marked as such, and must not be
19  misrepresented as being the original software.
20 
21  3. This notice may not be removed or altered from any source distribution.
22 */
23 #ifndef OIS_Keyboard_H
24 #define OIS_Keyboard_H
25 #include "OISObject.h"
26 #include "OISEvents.h"
27 
28 namespace OIS
29 {
31  enum KeyCode
32  {
33  KC_UNASSIGNED = 0x00,
34  KC_ESCAPE = 0x01,
35  KC_1 = 0x02,
36  KC_2 = 0x03,
37  KC_3 = 0x04,
38  KC_4 = 0x05,
39  KC_5 = 0x06,
40  KC_6 = 0x07,
41  KC_7 = 0x08,
42  KC_8 = 0x09,
43  KC_9 = 0x0A,
44  KC_0 = 0x0B,
45  KC_MINUS = 0x0C, // - on main keyboard
46  KC_EQUALS = 0x0D,
47  KC_BACK = 0x0E, // backspace
48  KC_TAB = 0x0F,
49  KC_Q = 0x10,
50  KC_W = 0x11,
51  KC_E = 0x12,
52  KC_R = 0x13,
53  KC_T = 0x14,
54  KC_Y = 0x15,
55  KC_U = 0x16,
56  KC_I = 0x17,
57  KC_O = 0x18,
58  KC_P = 0x19,
59  KC_LBRACKET = 0x1A,
60  KC_RBRACKET = 0x1B,
61  KC_RETURN = 0x1C, // Enter on main keyboard
62  KC_LCONTROL = 0x1D,
63  KC_A = 0x1E,
64  KC_S = 0x1F,
65  KC_D = 0x20,
66  KC_F = 0x21,
67  KC_G = 0x22,
68  KC_H = 0x23,
69  KC_J = 0x24,
70  KC_K = 0x25,
71  KC_L = 0x26,
72  KC_SEMICOLON = 0x27,
73  KC_APOSTROPHE = 0x28,
74  KC_GRAVE = 0x29, // accent
75  KC_LSHIFT = 0x2A,
76  KC_BACKSLASH = 0x2B,
77  KC_Z = 0x2C,
78  KC_X = 0x2D,
79  KC_C = 0x2E,
80  KC_V = 0x2F,
81  KC_B = 0x30,
82  KC_N = 0x31,
83  KC_M = 0x32,
84  KC_COMMA = 0x33,
85  KC_PERIOD = 0x34, // . on main keyboard
86  KC_SLASH = 0x35, // / on main keyboard
87  KC_RSHIFT = 0x36,
88  KC_MULTIPLY = 0x37, // * on numeric keypad
89  KC_LMENU = 0x38, // left Alt
90  KC_SPACE = 0x39,
91  KC_CAPITAL = 0x3A,
92  KC_F1 = 0x3B,
93  KC_F2 = 0x3C,
94  KC_F3 = 0x3D,
95  KC_F4 = 0x3E,
96  KC_F5 = 0x3F,
97  KC_F6 = 0x40,
98  KC_F7 = 0x41,
99  KC_F8 = 0x42,
100  KC_F9 = 0x43,
101  KC_F10 = 0x44,
102  KC_NUMLOCK = 0x45,
103  KC_SCROLL = 0x46, // Scroll Lock
104  KC_NUMPAD7 = 0x47,
105  KC_NUMPAD8 = 0x48,
106  KC_NUMPAD9 = 0x49,
107  KC_SUBTRACT = 0x4A, // - on numeric keypad
108  KC_NUMPAD4 = 0x4B,
109  KC_NUMPAD5 = 0x4C,
110  KC_NUMPAD6 = 0x4D,
111  KC_ADD = 0x4E, // + on numeric keypad
112  KC_NUMPAD1 = 0x4F,
113  KC_NUMPAD2 = 0x50,
114  KC_NUMPAD3 = 0x51,
115  KC_NUMPAD0 = 0x52,
116  KC_DECIMAL = 0x53, // . on numeric keypad
117  KC_OEM_102 = 0x56, // < > | on UK/Germany keyboards
118  KC_F11 = 0x57,
119  KC_F12 = 0x58,
120  KC_F13 = 0x64, // (NEC PC98)
121  KC_F14 = 0x65, // (NEC PC98)
122  KC_F15 = 0x66, // (NEC PC98)
123  KC_KANA = 0x70, // (Japanese keyboard)
124  KC_ABNT_C1 = 0x73, // / ? on Portugese (Brazilian) keyboards
125  KC_CONVERT = 0x79, // (Japanese keyboard)
126  KC_NOCONVERT = 0x7B, // (Japanese keyboard)
127  KC_YEN = 0x7D, // (Japanese keyboard)
128  KC_ABNT_C2 = 0x7E, // Numpad . on Portugese (Brazilian) keyboards
129  KC_NUMPADEQUALS= 0x8D, // = on numeric keypad (NEC PC98)
130  KC_PREVTRACK = 0x90, // Previous Track (KC_CIRCUMFLEX on Japanese keyboard)
131  KC_AT = 0x91, // (NEC PC98)
132  KC_COLON = 0x92, // (NEC PC98)
133  KC_UNDERLINE = 0x93, // (NEC PC98)
134  KC_KANJI = 0x94, // (Japanese keyboard)
135  KC_STOP = 0x95, // (NEC PC98)
136  KC_AX = 0x96, // (Japan AX)
137  KC_UNLABELED = 0x97, // (J3100)
138  KC_NEXTTRACK = 0x99, // Next Track
139  KC_NUMPADENTER = 0x9C, // Enter on numeric keypad
140  KC_RCONTROL = 0x9D,
141  KC_MUTE = 0xA0, // Mute
142  KC_CALCULATOR = 0xA1, // Calculator
143  KC_PLAYPAUSE = 0xA2, // Play / Pause
144  KC_MEDIASTOP = 0xA4, // Media Stop
145  KC_VOLUMEDOWN = 0xAE, // Volume -
146  KC_VOLUMEUP = 0xB0, // Volume +
147  KC_WEBHOME = 0xB2, // Web home
148  KC_NUMPADCOMMA = 0xB3, // , on numeric keypad (NEC PC98)
149  KC_DIVIDE = 0xB5, // / on numeric keypad
150  KC_SYSRQ = 0xB7,
151  KC_RMENU = 0xB8, // right Alt
152  KC_PAUSE = 0xC5, // Pause
153  KC_HOME = 0xC7, // Home on arrow keypad
154  KC_UP = 0xC8, // UpArrow on arrow keypad
155  KC_PGUP = 0xC9, // PgUp on arrow keypad
156  KC_LEFT = 0xCB, // LeftArrow on arrow keypad
157  KC_RIGHT = 0xCD, // RightArrow on arrow keypad
158  KC_END = 0xCF, // End on arrow keypad
159  KC_DOWN = 0xD0, // DownArrow on arrow keypad
160  KC_PGDOWN = 0xD1, // PgDn on arrow keypad
161  KC_INSERT = 0xD2, // Insert on arrow keypad
162  KC_DELETE = 0xD3, // Delete on arrow keypad
163  KC_LWIN = 0xDB, // Left Windows key
164  KC_RWIN = 0xDC, // Right Windows key
165  KC_APPS = 0xDD, // AppMenu key
166  KC_POWER = 0xDE, // System Power
167  KC_SLEEP = 0xDF, // System Sleep
168  KC_WAKE = 0xE3, // System Wake
169  KC_WEBSEARCH = 0xE5, // Web Search
170  KC_WEBFAVORITES= 0xE6, // Web Favorites
171  KC_WEBREFRESH = 0xE7, // Web Refresh
172  KC_WEBSTOP = 0xE8, // Web Stop
173  KC_WEBFORWARD = 0xE9, // Web Forward
174  KC_WEBBACK = 0xEA, // Web Back
175  KC_MYCOMPUTER = 0xEB, // My Computer
176  KC_MAIL = 0xEC, // Mail
177  KC_MEDIASELECT = 0xED // Media Select
178  };
179 
183  class _OISExport KeyEvent : public EventArg
184  {
185  public:
186  KeyEvent(Object* obj, KeyCode kc, unsigned int txt) : EventArg(obj), key(kc), text(txt) {}
187  virtual ~KeyEvent() {}
188 
190  const KeyCode key;
192  unsigned int text;
193  };
194 
200  {
201  public:
202  virtual ~KeyListener() {}
203  virtual bool keyPressed(const KeyEvent &arg) = 0;
204  virtual bool keyReleased(const KeyEvent &arg) = 0;
205  };
206 
211  class _OISExport Keyboard : public Object
212  {
213  public:
214  virtual ~Keyboard() {};
215 
222  virtual bool isKeyDown(KeyCode key) const = 0;
223 
231  virtual void setEventCallback(KeyListener *keyListener) { mListener = keyListener;}
232 
237  KeyListener* getEventCallback() const {return mListener;}
238 
241  {
244  Ascii
245  };
246 
256  virtual void setTextTranslation(TextTranslationMode mode);
257 
262  TextTranslationMode getTextTranslation() const {return mTextMode;}
263 
274  virtual const std::string& getAsString(KeyCode kc) = 0;
275 
277  enum Modifier
278  {
279  Shift = 0x0000001,
280  Ctrl = 0x0000010,
281  Alt = 0x0000100
282  };
283 
288  bool isModifierDown(Modifier mod) const;
289 
295  virtual void copyKeyStates(char keys[256]) const = 0;
296 
297  protected:
298  Keyboard(const std::string &vendor, bool buffered, int devID, InputManager* creator)
299  : Object(vendor, OISKeyboard, buffered, devID, creator),
300  mModifiers(0), mListener(0), mTextMode(Unicode) {}
301 
303  unsigned int mModifiers;
304 
307 
310  };
311 }
312 #endif
Definition: OISKeyboard.h:176
Definition: OISKeyboard.h:118
Definition: OISKeyboard.h:149
Base class of all events.
Definition: OISEvents.h:32
Definition: OISKeyboard.h:172
Definition: OISKeyboard.h:45
Definition: OISKeyboard.h:73
Definition: OISKeyboard.h:84
Definition: OISKeyboard.h:49
Definition: OISKeyboard.h:52
Definition: OISKeyboard.h:101
Definition: OISKeyboard.h:61
Definition: OISKeyboard.h:57
#define _OISExport
Definition: OISPrereqs.h:40
Definition: OISKeyboard.h:126
Definition: OISKeyboard.h:68
Definition: OISKeyboard.h:133
Definition: OISKeyboard.h:41
Definition: OISKeyboard.h:33
Definition: OISKeyboard.h:134
Definition: OISKeyboard.h:89
Definition: OISKeyboard.h:136
Definition: OISKeyboard.h:243
Definition: OISKeyboard.h:50
Definition: OISKeyboard.h:59
Definition: OISKeyboard.h:83
::std::string string
Definition: gtest-port.h:756
TextTranslationMode
TextTranslation Mode.
Definition: OISKeyboard.h:240
Definition: OISKeyboard.h:56
Definition: OISKeyboard.h:129
Definition: OISKeyboard.h:169
Definition: OISKeyboard.h:37
Definition: OISKeyboard.h:122
Definition: OISKeyboard.h:148
Definition: InputHandler.h:71
Definition: OISKeyboard.h:78
Definition: OISKeyboard.h:137
Definition: OISKeyboard.h:131
Definition: OISKeyboard.h:72
Definition: OISKeyboard.h:47
TextTranslationMode getTextTranslation() const
Definition: OISKeyboard.h:262
Definition: OISKeyboard.h:152
Definition: OISKeyboard.h:103
KeyCode
Keyboard scan codes.
Definition: OISKeyboard.h:31
Definition: OISKeyboard.h:51
virtual ~Keyboard()
Definition: OISKeyboard.h:214
Definition: OISKeyboard.h:156
Definition: OISKeyboard.h:171
Definition: OISKeyboard.h:99
Definition: OISKeyboard.h:34
Definition: OISKeyboard.h:157
Definition: OISKeyboard.h:111
Definition: OISKeyboard.h:242
Definition: OISKeyboard.h:121
Definition: OISKeyboard.h:86
Definition: OISKeyboard.h:150
Definition: OISKeyboard.h:96
Definition: OISKeyboard.h:97
Definition: OISKeyboard.h:123
Definition: OISKeyboard.h:135
Definition: OISKeyboard.h:38
Definition: OISKeyboard.h:109
Definition: OISKeyboard.h:104
Definition: OISKeyboard.h:48
Keyboard(const std::string &vendor, bool buffered, int devID, InputManager *creator)
Definition: OISKeyboard.h:298
Definition: OISKeyboard.h:170
Definition: OISKeyboard.h:128
Definition: OISKeyboard.h:88
Definition: OISKeyboard.h:70
KeyListener * getEventCallback() const
Definition: OISKeyboard.h:237
Definition: OISKeyboard.h:116
Definition: OISKeyboard.h:42
Modifier
Enum of bit position of modifer.
Definition: OISKeyboard.h:277
Definition: OISKeyboard.h:163
Definition: OISKeyboard.h:110
KeyListener * mListener
Used for buffered/actionmapping callback.
Definition: OISKeyboard.h:306
Definition: OISKeyboard.h:140
Definition: OISKeyboard.h:85
Definition: OISKeyboard.h:90
Definition: OISKeyboard.h:60
Definition: OISKeyboard.h:77
Definition: OISKeyboard.h:168
Definition: InputHandler.h:69
Definition: OISKeyboard.h:160
Definition: OISKeyboard.h:82
Definition: OISKeyboard.h:58
Definition: OISKeyboard.h:71
Definition: OISKeyboard.h:106
Definition: OISKeyboard.h:54
Definition: OISKeyboard.h:69
Definition: OISKeyboard.h:87
Definition: OISKeyboard.h:141
Definition: OISKeyboard.h:159
Definition: OISKeyboard.h:177
Definition: OISKeyboard.h:108
Definition: OISKeyboard.h:93
Definition: OISKeyboard.h:80
Definition: OISKeyboard.h:117
Definition: OISKeyboard.h:161
Definition: OISKeyboard.h:53
Definition: OISKeyboard.h:66
Definition: OISKeyboard.h:175
Definition: OISKeyboard.h:162
Definition: OISKeyboard.h:130
Definition: OISKeyboard.h:36
Definition: OISKeyboard.h:124
Definition: OISKeyboard.h:55
Definition: OISKeyboard.h:95
Definition: OISKeyboard.h:79
The base class of all input types.
Definition: OISObject.h:32
Definition: OISKeyboard.h:100
Definition: OISKeyboard.h:120
virtual ~KeyListener()
Definition: OISKeyboard.h:202
Definition: OISKeyboard.h:64
Definition: OISKeyboard.h:138
Definition: OISKeyboard.h:145
Definition: OISKeyboard.h:112
Definition: OISKeyboard.h:113
Definition: OISKeyboard.h:39
Definition: OISKeyboard.h:43
Definition: OISKeyboard.h:114
Definition: OISKeyboard.h:166
Definition: OISKeyboard.h:119
Definition: OISKeyboard.h:35
Definition: OISPrereqs.h:141
Definition: OISKeyboard.h:127
Definition: OISKeyboard.h:173
Definition: OISKeyboard.h:46
Definition: OISKeyboard.h:75
Definition: OISKeyboard.h:98
Definition: OISKeyboard.h:40
Definition: OISKeyboard.h:143
const KeyCode key
KeyCode of event.
Definition: OISKeyboard.h:190
Base Manager class.
Definition: OISInputManager.h:38
Definition: InputHandler.h:70
Definition: OISKeyboard.h:67
Definition: OISKeyboard.h:142
Definition: OISKeyboard.h:147
virtual ~KeyEvent()
Definition: OISKeyboard.h:187
Definition: OISKeyboard.h:151
unsigned int mModifiers
Bit field that holds status of Alt, Ctrl, Shift.
Definition: OISKeyboard.h:303
Definition: OISKeyboard.h:102
Definition: OISKeyboard.h:164
Definition: EventHelpers.h:31
unsigned int text
Text character, depends on current TextTranslationMode.
Definition: OISKeyboard.h:192
Definition: OISKeyboard.h:125
Definition: OISKeyboard.h:81
Definition: OISKeyboard.h:158
Definition: OISKeyboard.h:155
Definition: OISKeyboard.h:154
Definition: OISKeyboard.h:62
Definition: OISKeyboard.h:146
TextTranslationMode mTextMode
The current translation mode.
Definition: OISKeyboard.h:309
Definition: OISKeyboard.h:105
KeyEvent(Object *obj, KeyCode kc, unsigned int txt)
Definition: OISKeyboard.h:186
Definition: OISKeyboard.h:94
Definition: OISKeyboard.h:144
Definition: OISKeyboard.h:165
Specialised for key events.
Definition: OISKeyboard.h:183
Definition: OISKeyboard.h:65
Definition: OISKeyboard.h:132
Definition: OISKeyboard.h:92
Keyboard base class.
Definition: OISKeyboard.h:211
virtual void setEventCallback(KeyListener *keyListener)
Definition: OISKeyboard.h:231
Definition: OISKeyboard.h:63
int mod(T x, int max)
The modulo operation, enhanced to work properly with negative values.
Definition: Math.h:162
Definition: OISKeyboard.h:139
Definition: OISKeyboard.h:76
Definition: OISKeyboard.h:74
Definition: OISKeyboard.h:153
Definition: OISKeyboard.h:115
Definition: OISKeyboard.h:107
Definition: OISKeyboard.h:174
Definition: OISKeyboard.h:91
Definition: OISKeyboard.h:167
To recieve buffered keyboard input, derive a class from this, and implement the methods here...
Definition: OISKeyboard.h:199
Definition: OISKeyboard.h:44