00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_keymap.hpp"
00012
00013 #include "xrb_util.hpp"
00014
00015 namespace Xrb
00016 {
00017
00018 KeyMap const *KeyMap::Create (std::string name)
00019 {
00020 Util::MakeLowercase(&name);
00021 if (name == "dvorak")
00022 return new KeyMapDvorak();
00023 else
00024 return new KeyMapIdentity();
00025 }
00026
00027 KeyMapDvorak::KeyMapDvorak ()
00028 :
00029 KeyMap()
00030 {
00031
00032
00033
00034 m_map[Key::MINUS] = Key::LEFTBRACKET;
00035 m_map[Key::EQUALS] = Key::RIGHTBRACKET;
00036
00037
00038 m_map[Key::Q] = Key::QUOTE;
00039 m_map[Key::W] = Key::COMMA;
00040 m_map[Key::E] = Key::PERIOD;
00041 m_map[Key::R] = Key::P;
00042 m_map[Key::T] = Key::Y;
00043 m_map[Key::Y] = Key::F;
00044 m_map[Key::U] = Key::G;
00045 m_map[Key::I] = Key::C;
00046 m_map[Key::O] = Key::R;
00047 m_map[Key::P] = Key::L;
00048 m_map[Key::LEFTBRACKET] = Key::SLASH;
00049 m_map[Key::RIGHTBRACKET] = Key::EQUALS;
00050
00051
00052 m_map[Key::A] = Key::A;
00053 m_map[Key::S] = Key::O;
00054 m_map[Key::D] = Key::E;
00055 m_map[Key::F] = Key::U;
00056 m_map[Key::G] = Key::I;
00057 m_map[Key::H] = Key::D;
00058 m_map[Key::J] = Key::H;
00059 m_map[Key::K] = Key::T;
00060 m_map[Key::L] = Key::N;
00061 m_map[Key::SEMICOLON] = Key::S;
00062 m_map[Key::QUOTE] = Key::MINUS;
00063
00064
00065 m_map[Key::Z] = Key::SEMICOLON;
00066 m_map[Key::X] = Key::Q;
00067 m_map[Key::C] = Key::J;
00068 m_map[Key::V] = Key::K;
00069 m_map[Key::B] = Key::X;
00070 m_map[Key::N] = Key::B;
00071 m_map[Key::M] = Key::M;
00072 m_map[Key::COMMA] = Key::W;
00073 m_map[Key::PERIOD] = Key::V;
00074 m_map[Key::SLASH] = Key::Z;
00075 }
00076
00077 Key::Code KeyMapDvorak::MappedKey (Key::Code const code) const
00078 {
00079 QwertyToDvorakMap::const_iterator it = m_map.find(code);
00080 if (it == m_map.end())
00081 return code;
00082 else
00083 return it->second;
00084 }
00085
00086 }