/* 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 "SDL2/SDL.h" #include "client/action.h" #include "client/control.h" #include "client/key.h" namespace client { class Keyboard { public: typedef std::map Keys; typedef std::list Actions; typedef std::list Controls; Keyboard(); ~Keyboard(); /// find a key by scancode Key *find(unsigned int scancode); /// find a key by 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(); /// save keyboard binds void save_binds() const; /// load controls void load_controls(); /// a key has been pressed Key *press(const unsigned int scancode); /// a key has been pressed Key *press(Key *key); /// a key has been pressed Key *release(const unsigned int scancode); /// convert SDL_keysym to a keystroke static unsigned int translate_keysym(const unsigned int keysym, const int modifiers); inline Keys & keys() { return _keys; } inline Controls & controls() { return _controls; } private: Key *add_key(const unsigned int scancode, const char *name, const char ascii = 0, const char *bind = 0); Action *add_action(const char *name, Action::Identifier id, const char *description = 0); Control *add_control(const char *name, const char *command, const char *keyname = 0); Keys _keys; Actions _actions; Controls _controls; }; } #endif // __INCLUDED_CLIENT_KEYBOARD_H__