#ifndef KEYHANDLER_H #define KEYHANDLER_H #include enum class SpecialKey { NONE, UP, DOWN, LEFT, RIGHT, HOME, END, RETURN, ESCAPE }; enum KeyModifiers { KM_NONE = 0, KM_LSHIFT = 0x1, KM_RSHIFT = 0x2, KM_SHIFT = KM_LSHIFT, KM_SHIFT_MASK = KM_LSHIFT | KM_RSHIFT, KM_LCTRL = 0x4, KM_RCTRL = 0x8, KM_CTRL = KM_LCTRL, KM_CTRL_MASK = KM_LCTRL | KM_RCTRL, KM_LALT = 0x10, KM_RALT = 0x20, KM_ALT = KM_LALT, KM_ALT_MASK = KM_LALT | KM_RALT, KM_LMETA = 0x40, KM_RMETA = 0x80, KM_META = KM_LMETA, KM_META_MASK = KM_LMETA | KM_RMETA, }; class KeyHandler { public: KeyHandler() : m_paused(false) { } virtual ~KeyHandler(); virtual void Key(SpecialKey key, KeyModifiers mods = KeyModifiers::KM_NONE); virtual void Key(char key, KeyModifiers mods = KeyModifiers::KM_NONE); void TogglePaused(); protected: void WaitUntilNotPaused(); private: volatile bool m_paused; }; #endif // KEYHANDLER_H