FIFE  2008.0
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
ec_key.h
1 /***************************************************************************
2  * Copyright (C) 2005-2008 by the FIFE team *
3  * http://www.fifengine.de *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 #ifndef FIFE_EVENTCHANNEL_KEY_H
23 #define FIFE_EVENTCHANNEL_KEY_H
24 
25 // Standard C++ library includes
26 //
27 
28 // 3rd party library includes
29 //
30 #include <SDL.h>
31 
32 // FIFE includes
33 // These includes are split up in two parts, separated by one empty line
34 // First block: files included from the FIFE root src directory
35 // Second block: files included from the same folder
36 //
37 namespace FIFE {
38 
41  class Key {
42  public:
45  enum KeyType {
46  INVALID_KEY = -1,
47  BACKSPACE = SDLK_BACKSPACE,
48  TAB = SDLK_TAB,
49  CLEAR = SDLK_CLEAR,
50  ENTER = SDLK_RETURN,
51  PAUSE = SDLK_PAUSE,
52  ESCAPE = SDLK_ESCAPE,
53  SPACE = SDLK_SPACE,
54  EXCLAIM = SDLK_EXCLAIM,
55  QUOTEDBL = SDLK_QUOTEDBL,
56  HASH = SDLK_HASH,
57  DOLLAR = SDLK_DOLLAR,
58  AMPERSAND = SDLK_AMPERSAND,
59  QUOTE = SDLK_QUOTE,
60  LEFTPAREN = SDLK_LEFTPAREN,
61  RIGHTPAREN = SDLK_RIGHTPAREN,
62  ASTERISK = SDLK_ASTERISK,
63  PLUS = SDLK_PLUS,
64  COMMA = SDLK_COMMA,
65  MINUS = SDLK_MINUS,
66  PERIOD = SDLK_PERIOD,
67  SLASH = SDLK_SLASH,
68  NUM_0 = SDLK_0,
69  NUM_1 = SDLK_1,
70  NUM_2 = SDLK_2,
71  NUM_3 = SDLK_3,
72  NUM_4 = SDLK_4,
73  NUM_5 = SDLK_5,
74  NUM_6 = SDLK_6,
75  NUM_7 = SDLK_7,
76  NUM_8 = SDLK_8,
77  NUM_9 = SDLK_9,
78  COLON = SDLK_COLON,
79  SEMICOLON = SDLK_SEMICOLON,
80  LESS = SDLK_LESS,
81  EQUALS = SDLK_EQUALS,
82  GREATER = SDLK_GREATER,
83  QUESTION = SDLK_QUESTION,
84  AT = SDLK_AT,
85  LEFTBRACKET = SDLK_LEFTBRACKET,
86  BACKSLASH = SDLK_BACKSLASH,
87  RIGHTBRACKET = SDLK_RIGHTBRACKET,
88  CARET = SDLK_CARET,
89  UNDERSCORE = SDLK_UNDERSCORE,
90  BACKQUOTE = SDLK_BACKQUOTE,
91  A = SDLK_a,
92  B = SDLK_b,
93  C = SDLK_c,
94  D = SDLK_d,
95  E = SDLK_e,
96  F = SDLK_f,
97  G = SDLK_g,
98  H = SDLK_h,
99  I = SDLK_i,
100  J = SDLK_j,
101  K = SDLK_k,
102  L = SDLK_l,
103  M = SDLK_m,
104  N = SDLK_n,
105  O = SDLK_o,
106  P = SDLK_p,
107  Q = SDLK_q,
108  R = SDLK_r,
109  S = SDLK_s,
110  T = SDLK_t,
111  U = SDLK_u,
112  V = SDLK_v,
113  W = SDLK_w,
114  X = SDLK_x,
115  Y = SDLK_y,
116  Z = SDLK_z,
117  DELETE = SDLK_DELETE,
118  WORLD_0 = SDLK_WORLD_0,
119  WORLD_1 = SDLK_WORLD_1,
120  WORLD_2 = SDLK_WORLD_2,
121  WORLD_3 = SDLK_WORLD_3,
122  WORLD_4 = SDLK_WORLD_4,
123  WORLD_5 = SDLK_WORLD_5,
124  WORLD_6 = SDLK_WORLD_6,
125  WORLD_7 = SDLK_WORLD_7,
126  WORLD_8 = SDLK_WORLD_8,
127  WORLD_9 = SDLK_WORLD_9,
128  WORLD_10 = SDLK_WORLD_10,
129  WORLD_11 = SDLK_WORLD_11,
130  WORLD_12 = SDLK_WORLD_12,
131  WORLD_13 = SDLK_WORLD_13,
132  WORLD_14 = SDLK_WORLD_14,
133  WORLD_15 = SDLK_WORLD_15,
134  WORLD_16 = SDLK_WORLD_16,
135  WORLD_17 = SDLK_WORLD_17,
136  WORLD_18 = SDLK_WORLD_18,
137  WORLD_19 = SDLK_WORLD_19,
138  WORLD_20 = SDLK_WORLD_20,
139  WORLD_21 = SDLK_WORLD_21,
140  WORLD_22 = SDLK_WORLD_22,
141  WORLD_23 = SDLK_WORLD_23,
142  WORLD_24 = SDLK_WORLD_24,
143  WORLD_25 = SDLK_WORLD_25,
144  WORLD_26 = SDLK_WORLD_26,
145  WORLD_27 = SDLK_WORLD_27,
146  WORLD_28 = SDLK_WORLD_28,
147  WORLD_29 = SDLK_WORLD_29,
148  WORLD_30 = SDLK_WORLD_30,
149  WORLD_31 = SDLK_WORLD_31,
150  WORLD_32 = SDLK_WORLD_32,
151  WORLD_33 = SDLK_WORLD_33,
152  WORLD_34 = SDLK_WORLD_34,
153  WORLD_35 = SDLK_WORLD_35,
154  WORLD_36 = SDLK_WORLD_36,
155  WORLD_37 = SDLK_WORLD_37,
156  WORLD_38 = SDLK_WORLD_38,
157  WORLD_39 = SDLK_WORLD_39,
158  WORLD_40 = SDLK_WORLD_40,
159  WORLD_41 = SDLK_WORLD_41,
160  WORLD_42 = SDLK_WORLD_42,
161  WORLD_43 = SDLK_WORLD_43,
162  WORLD_44 = SDLK_WORLD_44,
163  WORLD_45 = SDLK_WORLD_45,
164  WORLD_46 = SDLK_WORLD_46,
165  WORLD_47 = SDLK_WORLD_47,
166  WORLD_48 = SDLK_WORLD_48,
167  WORLD_49 = SDLK_WORLD_49,
168  WORLD_50 = SDLK_WORLD_50,
169  WORLD_51 = SDLK_WORLD_51,
170  WORLD_52 = SDLK_WORLD_52,
171  WORLD_53 = SDLK_WORLD_53,
172  WORLD_54 = SDLK_WORLD_54,
173  WORLD_55 = SDLK_WORLD_55,
174  WORLD_56 = SDLK_WORLD_56,
175  WORLD_57 = SDLK_WORLD_57,
176  WORLD_58 = SDLK_WORLD_58,
177  WORLD_59 = SDLK_WORLD_59,
178  WORLD_60 = SDLK_WORLD_60,
179  WORLD_61 = SDLK_WORLD_61,
180  WORLD_62 = SDLK_WORLD_62,
181  WORLD_63 = SDLK_WORLD_63,
182  WORLD_64 = SDLK_WORLD_64,
183  WORLD_65 = SDLK_WORLD_65,
184  WORLD_66 = SDLK_WORLD_66,
185  WORLD_67 = SDLK_WORLD_67,
186  WORLD_68 = SDLK_WORLD_68,
187  WORLD_69 = SDLK_WORLD_69,
188  WORLD_70 = SDLK_WORLD_70,
189  WORLD_71 = SDLK_WORLD_71,
190  WORLD_72 = SDLK_WORLD_72,
191  WORLD_73 = SDLK_WORLD_73,
192  WORLD_74 = SDLK_WORLD_74,
193  WORLD_75 = SDLK_WORLD_75,
194  WORLD_76 = SDLK_WORLD_76,
195  WORLD_77 = SDLK_WORLD_77,
196  WORLD_78 = SDLK_WORLD_78,
197  WORLD_79 = SDLK_WORLD_79,
198  WORLD_80 = SDLK_WORLD_80,
199  WORLD_81 = SDLK_WORLD_81,
200  WORLD_82 = SDLK_WORLD_82,
201  WORLD_83 = SDLK_WORLD_83,
202  WORLD_84 = SDLK_WORLD_84,
203  WORLD_85 = SDLK_WORLD_85,
204  WORLD_86 = SDLK_WORLD_86,
205  WORLD_87 = SDLK_WORLD_87,
206  WORLD_88 = SDLK_WORLD_88,
207  WORLD_89 = SDLK_WORLD_89,
208  WORLD_90 = SDLK_WORLD_90,
209  WORLD_91 = SDLK_WORLD_91,
210  WORLD_92 = SDLK_WORLD_92,
211  WORLD_93 = SDLK_WORLD_93,
212  WORLD_94 = SDLK_WORLD_94,
213  WORLD_95 = SDLK_WORLD_95,
214  KP0 = SDLK_KP0,
215  KP1 = SDLK_KP1,
216  KP2 = SDLK_KP2,
217  KP3 = SDLK_KP3,
218  KP4 = SDLK_KP4,
219  KP5 = SDLK_KP5,
220  KP6 = SDLK_KP6,
221  KP7 = SDLK_KP7,
222  KP8 = SDLK_KP8,
223  KP9 = SDLK_KP9,
224  KP_PERIOD = SDLK_KP_PERIOD,
225  KP_DIVIDE = SDLK_KP_DIVIDE,
226  KP_MULTIPLY = SDLK_KP_MULTIPLY,
227  KP_MINUS = SDLK_KP_MINUS,
228  KP_PLUS = SDLK_KP_PLUS,
229  KP_ENTER = SDLK_KP_ENTER,
230  KP_EQUALS = SDLK_KP_EQUALS,
231  UP = SDLK_UP,
232  DOWN = SDLK_DOWN,
233  RIGHT = SDLK_RIGHT,
234  LEFT = SDLK_LEFT,
235  INSERT = SDLK_INSERT,
236  HOME = SDLK_HOME,
237  END = SDLK_END,
238  PAGE_UP = SDLK_PAGEUP,
239  PAGE_DOWN = SDLK_PAGEDOWN,
240  F1 = SDLK_F1,
241  F2 = SDLK_F2,
242  F3 = SDLK_F3,
243  F4 = SDLK_F4,
244  F5 = SDLK_F5,
245  F6 = SDLK_F6,
246  F7 = SDLK_F7,
247  F8 = SDLK_F8,
248  F9 = SDLK_F9,
249  F10 = SDLK_F10,
250  F11 = SDLK_F11,
251  F12 = SDLK_F12,
252  F13 = SDLK_F13,
253  F14 = SDLK_F14,
254  F15 = SDLK_F15,
255  NUM_LOCK = SDLK_NUMLOCK,
256  CAPS_LOCK = SDLK_CAPSLOCK,
257  SCROLL_LOCK = SDLK_SCROLLOCK,
258  RIGHT_SHIFT = SDLK_RSHIFT,
259  LEFT_SHIFT = SDLK_LSHIFT,
260  RIGHT_CONTROL = SDLK_RCTRL,
261  LEFT_CONTROL = SDLK_LCTRL,
262  RIGHT_ALT = SDLK_RALT,
263  LEFT_ALT = SDLK_LALT,
264  RIGHT_META = SDLK_RMETA,
265  LEFT_META = SDLK_LMETA,
266  RIGHT_SUPER = SDLK_RSUPER,
267  LEFT_SUPER = SDLK_LSUPER,
268  ALT_GR = SDLK_MODE,
269  COMPOSE = SDLK_COMPOSE,
270  HELP = SDLK_HELP,
271  PRINT_SCREEN = SDLK_PRINT,
272  SYSREQ = SDLK_SYSREQ,
273  BREAK = SDLK_BREAK,
274  MENU = SDLK_MENU,
275  POWER = SDLK_POWER,
276  EURO = SDLK_EURO,
277  UNDO = SDLK_UNDO
278  };
279 
284  Key(KeyType key = INVALID_KEY, uint32_t codepoint = 0):
285  m_key(key),
286  m_unicode(codepoint) {}
287 
290  virtual ~Key() {}
291 
294  bool isPrintable() const {
295  // Unicode does not have control characters, so this should be sufficient
296  return m_unicode != 0;
297  }
298 
299  bool isFunctionKey() const {
300  return m_key >= F1 && m_key <= F15;
301  }
302 
305  KeyType getValue() const {
306  return m_key;
307  }
308 
311  std::string getAsString() const {
312  // older sdl versions have the 3rd argument non const, but it is in fact const...
313  char* converted = SDL_iconv_string("UTF-8", "UTF-32",
314  const_cast<char*>(reinterpret_cast<const char*>(&m_unicode)), 4);
315  std::string retval(converted);
316  SDL_free(converted);
317  return retval;
318  }
319 
320  private:
321  KeyType m_key;
322  uint32_t m_unicode;
323  };
324 
325 } //FIFE
326 
327 #endif
KeyType getValue() const
Definition: ec_key.h:305
bool isPrintable() const
Definition: ec_key.h:294
std::string getAsString() const
Definition: ec_key.h:311
virtual ~Key()
Definition: ec_key.h:290
Key(KeyType key=INVALID_KEY, uint32_t codepoint=0)
Definition: ec_key.h:284