00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __CXUTILS_KEYBOARD__H
00042 #define __CXUTILS_KEYBOARD__H
00043
00044 #include "cxutils/cxbase.h"
00045 #include "cxutils/timer.h"
00046 #include <vector>
00047 #include <string>
00048
00049 namespace CxUtils
00050 {
00060 class CX_UTILS_DLL Keyboard
00061 {
00062 public:
00063 static const unsigned int MaxKeys = 256;
00064
00065
00066
00067
00068
00069
00070 enum Key
00071 {
00072 Any = -1,
00073 Invalid = 0,
00074 Backspace,
00075 Tab,
00076 Clear,
00077 Return,
00078 ShiftLock,
00079 Pause,
00080 CapsLock,
00081 Escape,
00082 Space,
00083 PageUp,
00084 PageDown,
00085 End,
00086 Home,
00087 LeftArrow,
00088 UpArrow,
00089 RightArrow,
00090 DownArrow,
00091 Select,
00092 Print,
00093 Execute,
00094 PrintScreen,
00095 Insert,
00096 Delete,
00097 Help,
00098 Zero = 0x30,
00099 One,
00100 Two,
00101 Three,
00102 Four,
00103 Five,
00104 Six,
00105 Seven,
00106 Eight,
00107 Nine,
00108 A = 0x41,
00109 B,
00110 C,
00111 D,
00112 E,
00113 F,
00114 G,
00115 H,
00116 I,
00117 J,
00118 K,
00119 L,
00120 M,
00121 N,
00122 O,
00123 P,
00124 Q,
00125 R,
00126 S,
00127 T,
00128 U,
00129 V,
00130 W,
00131 X,
00132 Y,
00133 Z,
00134 Numpad0,
00135 Numpad1,
00136 Numpad2,
00137 Numpad3,
00138 Numpad4,
00139 Numpad5,
00140 Numpad6,
00141 Numpad7,
00142 Numpad8,
00143 Numpad9,
00144 Multiply,
00145 Add,
00146 Separator,
00147 Subtract,
00148 Decimal,
00149 Divide,
00150 F1,
00151 F2,
00152 F3,
00153 F4,
00154 F5,
00155 F6,
00156 F7,
00157 F8,
00158 F9,
00159 F10,
00160 F11,
00161 F12,
00162 NumLock,
00163 ScrollLock,
00164 LeftShift,
00165 RightShift,
00166 LeftControl,
00167 RightControl,
00168 Comma,
00169 Period,
00170 LeftAlt,
00171 RightAlt
00172 };
00173 typedef std::vector<Key> KeyList;
00180 class CX_UTILS_DLL Callback
00181 {
00182 public:
00183 typedef std::set<Callback*> Set;
00184 Callback() {}
00185 virtual ~Callback() {}
00186 virtual void ProcessKeyEvent(const Keyboard::Key key, const bool down) = 0;
00187 };
00188 Keyboard();
00189 ~Keyboard();
00190 bool RegisterCallback(Callback* cb);
00191 void RemoveCallback(Callback* cb);
00192 static bool IsKeyDown(const Key key = Any);
00193 static Key GetCurrentKey();
00194 static KeyList GetPressedKeys();
00195 static bool FakeKeyPress(const Key key, const bool releaseFlag = true, const bool directX = false);
00196 static bool FakeKeyRelease(const Key key, const bool directX = false);
00197 static unsigned int LookupHostSystemKey(const Key key);
00198 static Key LookupFromHostSystemKey(const unsigned int hostKey);
00199 static std::string ToString(const Key key);
00200 static Key FromString(const std::string& strKey);
00201 #ifdef WIN32
00202 static int LookupScanCodeDX(const Key key);
00203 #endif
00204
00205 inline bool IsActive() const { return mTimer.IsActive(); }
00206 private:
00207 static void KeyboardTimerEvent(void* args);
00208 Mutex mCallbacksMutex;
00209 Callback::Set mCallbacks;
00210 Timer mTimer;
00211 std::map<Key, bool> mKeyStates;
00212 };
00213
00219 int CX_UTILS_DLL GetChar();
00220 }
00221
00222
00223 #endif
00224