00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_KEYMAP_HPP_)
00012 #define _XRB_KEYMAP_HPP_
00013
00014 #include "xrb.hpp"
00015
00016 #include <map>
00017 #include <string>
00018
00019 #include "xrb_key.hpp"
00020
00021 namespace Xrb
00022 {
00023
00029 class KeyMap
00030 {
00031 public:
00032
00033 virtual ~KeyMap () { }
00034
00045 static KeyMap const *Create (std::string name);
00046
00047 virtual std::string Name () const = 0;
00048 virtual Key::Code MappedKey (Key::Code code) const = 0;
00049 };
00050
00051 class KeyMapIdentity : public KeyMap
00052 {
00053 public:
00054
00055 virtual std::string Name () const { return "none"; }
00056 virtual Key::Code MappedKey (Key::Code code) const { return code; }
00057 };
00058
00059 class KeyMapDvorak : public KeyMap
00060 {
00061 public:
00062
00063 KeyMapDvorak ();
00064
00065 virtual std::string Name () const { return "dvorak"; }
00066 virtual Key::Code MappedKey (Key::Code code) const;
00067
00068 private:
00069
00070 typedef std::map<Key::Code, Key::Code> QwertyToDvorakMap;
00071
00072 QwertyToDvorakMap m_map;
00073 };
00074
00075 }
00076
00077 #endif // !defined(_XRB_KEYMAP_HPP_)
00078