/* client/keyboard.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_KEYBOARD_H__ #define __INCLUDED_CLIENT_KEYBOARD_H__ #include #include #include #include "SDL/SDL.h" #include "client/action.h" #include "client/key.h" namespace client { class Keyboard { public: typedef std::map Keys; typedef std::list Actions; Keyboard(); ~Keyboard(); /// find a key on a keysym Key *find(unsigned int keysym); /// find a key on name Key *find(std::string const & name); /// bind a string to a key, if str is empty, just list void bind(std::string const &name, const std::string str); /// clear the string bound to a key void unbind(std::string const &name); /// celar all key binds void unbindall(); /// reset key states void reset(); /// list keyboard key names void list_keys() const; /// list actions void list_actions() const; /// list keyboard binds void list_binds() const; /// load keyboard binds void load_binds() const; /// save keyboard binds void save_binds() const; /// a key has been pressed Key *press(unsigned int sym); /// a key has been pressed Key *press(Key *key); /// a key has been pressed Key *release(unsigned int sym); /// convert SDL_keysym to a keystroke static unsigned int translate_keysym(const int keysym, const int modifiers); inline Keys & keys() { return _keys; } private: Key *add_key(const char *name, const unsigned int keysym, const char ascii = 0, const char *bind = 0); Action *add_action(const char *name, Action::Identifier id, const char *description = 0); Keys _keys; Actions _actions; }; } #endif // __INCLUDED_CLIENT_KEYBOARD_H__