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 class pgKeyDaemon;
00033
00034
00039 class PG_API pgKeyMgr
00040 {
00041 friend class pgKeyDaemon;
00042
00043 public:
00044 pgDefineException(ExceptionInvalidArgument);
00045 pgDefineException(ExceptionNotInitialized);
00046
00047 static const u32 EXTRA_VALUE_NUM = 16;
00048
00052 enum KeyType
00053 {
00054 KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9,
00055
00056 KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M,
00057 KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z,
00058
00059 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12,
00060
00061 KEY_LEFT, KEY_UP, KEY_RIGHT, KEY_DOWN,
00062 KEY_SHIFT, KEY_CTRL, KEY_ALT,
00063
00064 KEY_BACKSPACE, KEY_TAB, KEY_ENTER, KEY_ESCAPE, KEY_SPACE,
00065 KEY_PAGEUP, KEY_PAGEDOWN, KEY_END, KEY_HOME, KEY_INSERT, KEY_DELETE,
00066
00067 KEY_NUMPAD0, KEY_NUMPAD1, KEY_NUMPAD2, KEY_NUMPAD3, KEY_NUMPAD4,
00068 KEY_NUMPAD5, KEY_NUMPAD6, KEY_NUMPAD7, KEY_NUMPAD8, KEY_NUMPAD9,
00069 KEY_MULTIPLY, KEY_ADD, KEY_SEPARATOR, KEY_SUBTRACT, KEY_DECIMAL, KEY_DIVIDE,
00070
00071 KEY_LBUTTON, KEY_MBUTTON, KEY_RBUTTON, KEY_WHEELUP, KEY_WHEELDOWN,
00072
00073 KEY_EXT_00, KEY_EXT_01, KEY_EXT_02, KEY_EXT_03, KEY_EXT_04, KEY_EXT_05, KEY_EXT_06, KEY_EXT_07,
00074 KEY_EXT_08, KEY_EXT_09, KEY_EXT_10, KEY_EXT_11, KEY_EXT_12, KEY_EXT_13, KEY_EXT_14, KEY_EXT_15,
00075
00076 KEY_ANY, KEY_NONE
00077 };
00078
00082 enum KeyState
00083 {
00084 STATE_DOWN,
00085 STATE_UP
00086 };
00087
00088 typedef void (*KeyEventHandler)(KeyType key, KeyState key_state);
00089 typedef void (*MouseEventHandler)(s16 mouse_x, s16 mouse_y);
00090 typedef void (*ExtraEventHandler)(u8 val_index, r32 value);
00091
00092 static bool isCreated();
00093 static void createAfterTask();
00094 static void destroyBeforeSys();
00095
00096 static KeyEventHandler getKeyEventHandlerN();
00097 static void setKeyEventHandler(KeyEventHandler handler);
00098 static void defaultKeyEventHandler(KeyType key, KeyState key_state);
00099
00100 static MouseEventHandler getMouseEventHandlerN();
00101 static void setMouseEventHandler(MouseEventHandler handler);
00102 static void defaultMouseEventHandler(s16 mouse_x, s16 mouse_y);
00103
00104 static ExtraEventHandler getExtraEventHandlerN();
00105 static void setExtraEventHandler(ExtraEventHandler handler);
00106 static void defaultExtraEventHandler(u8 val_index, r32 value);
00107
00108 static bool isOn(KeyType key);
00109 static bool isOff(KeyType key);
00110 static bool isPressed(KeyType key);
00111 static bool isReleased(KeyType key);
00112
00113 static s16 getMouseX();
00114 static s16 getMouseY();
00115 static s16 getMouseWheel();
00116 static void setMousePos(s16 mouse_x, s16 mouse_y);
00117 static bool isMouseVisible();
00118 static void setMouseVisible(bool is_visible);
00119
00120 static s32 getExtraValue_s32(u8 val_index);
00121 static r32 getExtraValue_r32(u8 val_index);
00122
00123 static void updateKeyStateForSystem();
00124 static void resetKeyStateForSystem();
00125 static void updateExtraValueForSystem();
00126
00127 private:
00128 static const u32 KEY_TYPE_NUM = KEY_NONE + 1;
00129
00130 enum KeyFlag
00131 {
00132 FLAG_REAL_ON = 0x01,
00133 FLAG_DELAY_ON = 0x02,
00134 FLAG_CUR_ON = 0x04,
00135 FLAG_LAST_ON = 0x08
00136 };
00137
00138 pgKeyMgr();
00139 ~pgKeyMgr();
00140 void operator=(const pgKeyMgr&);
00141
00142 static pgKeyMgr* instance();
00143
00144 KeyEventHandler m_key_event_handler;
00145 MouseEventHandler m_mouse_event_handler;
00146 ExtraEventHandler m_extra_event_handler;
00147 u8 m_key_flag[KEY_TYPE_NUM];
00148 r32 m_cur_ext_val[EXTRA_VALUE_NUM];
00149 r32 m_real_ext_val[EXTRA_VALUE_NUM];
00150 s16 m_mouse_x;
00151 s16 m_mouse_y;
00152 s16 m_real_mouse_wheel;
00153 s16 m_cur_mouse_wheel;
00154 pgKeyDaemon* m_key_daemon;
00155
00156 static pgKeyMgr* m_instance;
00157 };