KeyboardManager: a class to manage the polling of a switch-matrix keyboard
KeyMapper.cpp
- Committer:
- osmeest
- Date:
- 2011-02-03
- Revision:
- 3:1310c57aca77
File content as of revision 3:1310c57aca77:
#include "kbd_mgr/KeyMapper.h" #include <algorithm> #include <functional> namespace kbd_mgr { void KeyMap::addMapping(KeyEvent::EventType event, int key, char ch) { const KeyMapping *mapping = getMapping(event, key); if (mapping) { KeyMapping *updatable = const_cast<KeyMapping*>(mapping); updatable->ch = ch; } else { KeyMapping o(event, key, ch); this->map_.push_back(o); } } void KeyMap::addMappings(KeyEvent::EventType event, const std::string &str) { for(int key = 0; key < str.size(); ++key) { addMapping(event, key, str[key]); } } char KeyMap::map(KeyEvent::EventType event, int key) const { const KeyMapping *mapping = getMapping(event, key); if (!mapping) { mapping = getMapping(KeyEvent::NoEvent, key); } return (mapping ? mapping->ch : '\0'); } const KeyMap::KeyMapping * KeyMap::getMapping(KeyEvent::EventType event, int key) const { std::pair<KeyEvent::EventType, int> criteria = std::make_pair(event, key); Map::const_iterator p = this->map_.begin(); while (p != this->map_.end() && !p->matches(criteria)) { ++p; } if (p == this->map_.end()) { return NULL; } return &(*p); } void KeyMapper::handleKeyPress(const KeyEvent &keypress) { char ch = map(keypress.event, keypress.keyCode); KeyEvent mapped(keypress, ch); invokeHandler(mapped); } } // kbd_mgr