A DTMF sequence editor and player for HAM radio equipment command & control.

Dependencies:   mbed ExtTextLCD

Committer:
osmeest
Date:
Mon Mar 07 22:51:19 2011 +0000
Revision:
0:1324e7d9d471

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
osmeest 0:1324e7d9d471 1 #ifndef KEY_PRESS_EVENT_HANDLER_H_
osmeest 0:1324e7d9d471 2 #define KEY_PRESS_EVENT_HANDLER_H_
osmeest 0:1324e7d9d471 3
osmeest 0:1324e7d9d471 4 namespace kbd_mgr {
osmeest 0:1324e7d9d471 5
osmeest 0:1324e7d9d471 6 struct KeyEvent {
osmeest 0:1324e7d9d471 7 enum KeyId {
osmeest 0:1324e7d9d471 8 NoKey = -1
osmeest 0:1324e7d9d471 9 };
osmeest 0:1324e7d9d471 10
osmeest 0:1324e7d9d471 11 enum EventType {
osmeest 0:1324e7d9d471 12 NoEvent, KeyDown, KeyPress, RepeatedKeyPress, LongKeyPress, KeyUp
osmeest 0:1324e7d9d471 13 };
osmeest 0:1324e7d9d471 14
osmeest 0:1324e7d9d471 15 int keyCode;
osmeest 0:1324e7d9d471 16 char keyChar;
osmeest 0:1324e7d9d471 17 EventType event;
osmeest 0:1324e7d9d471 18
osmeest 0:1324e7d9d471 19 KeyEvent() : keyCode(NoKey), keyChar(0), event(NoEvent) { }
osmeest 0:1324e7d9d471 20
osmeest 0:1324e7d9d471 21 /**
osmeest 0:1324e7d9d471 22 * @brief Creates a raw key event (no char).
osmeest 0:1324e7d9d471 23 */
osmeest 0:1324e7d9d471 24 KeyEvent(int key, EventType event) : keyCode(key), keyChar(0), event(event) { }
osmeest 0:1324e7d9d471 25
osmeest 0:1324e7d9d471 26 /**
osmeest 0:1324e7d9d471 27 * @brief Converts a raw key event into a mapped key.
osmeest 0:1324e7d9d471 28 */
osmeest 0:1324e7d9d471 29 KeyEvent(const KeyEvent &raw, char ch) : keyCode(raw.keyCode), keyChar(ch), event(raw.event) { }
osmeest 0:1324e7d9d471 30
osmeest 0:1324e7d9d471 31 /**
osmeest 0:1324e7d9d471 32 * @brief Creates a key event with a different event code.
osmeest 0:1324e7d9d471 33 */
osmeest 0:1324e7d9d471 34 KeyEvent(const KeyEvent &other, EventType event) : keyCode(other.keyCode), keyChar(other.keyChar), event(event) { }
osmeest 0:1324e7d9d471 35 };
osmeest 0:1324e7d9d471 36
osmeest 0:1324e7d9d471 37 /**
osmeest 0:1324e7d9d471 38 * @brief Interface used to report key presses and releases.
osmeest 0:1324e7d9d471 39 */
osmeest 0:1324e7d9d471 40 class KeyPressEventHandler {
osmeest 0:1324e7d9d471 41 public:
osmeest 0:1324e7d9d471 42 virtual void handleKeyPress(const KeyEvent &keypress) = 0;
osmeest 0:1324e7d9d471 43 virtual ~KeyPressEventHandler() { }
osmeest 0:1324e7d9d471 44 };
osmeest 0:1324e7d9d471 45
osmeest 0:1324e7d9d471 46 template <class T>
osmeest 0:1324e7d9d471 47 class MemberKeyPressEventHandler : public KeyPressEventHandler {
osmeest 0:1324e7d9d471 48 public:
osmeest 0:1324e7d9d471 49 typedef void (T::*MemberFunction)(const KeyEvent &keypress);
osmeest 0:1324e7d9d471 50
osmeest 0:1324e7d9d471 51 MemberKeyPressEventHandler(T *obj, MemberFunction fn) :
osmeest 0:1324e7d9d471 52 object(obj), func(fn)
osmeest 0:1324e7d9d471 53 { }
osmeest 0:1324e7d9d471 54
osmeest 0:1324e7d9d471 55 virtual void handleKeyPress(const KeyEvent &keypress) {
osmeest 0:1324e7d9d471 56 (object->*func)(keypress);
osmeest 0:1324e7d9d471 57 }
osmeest 0:1324e7d9d471 58
osmeest 0:1324e7d9d471 59 private:
osmeest 0:1324e7d9d471 60 T *object;
osmeest 0:1324e7d9d471 61 MemberFunction func;
osmeest 0:1324e7d9d471 62 };
osmeest 0:1324e7d9d471 63
osmeest 0:1324e7d9d471 64 class FunctionKeyPressEventHandler : public KeyPressEventHandler {
osmeest 0:1324e7d9d471 65 public:
osmeest 0:1324e7d9d471 66 typedef void (*HandlerFunction)(const KeyEvent &keypress);
osmeest 0:1324e7d9d471 67
osmeest 0:1324e7d9d471 68 FunctionKeyPressEventHandler(HandlerFunction fn) :
osmeest 0:1324e7d9d471 69 func(fn)
osmeest 0:1324e7d9d471 70 { }
osmeest 0:1324e7d9d471 71
osmeest 0:1324e7d9d471 72 virtual void handleKeyPress(const KeyEvent &keypress) {
osmeest 0:1324e7d9d471 73 func(keypress);
osmeest 0:1324e7d9d471 74 }
osmeest 0:1324e7d9d471 75
osmeest 0:1324e7d9d471 76 private:
osmeest 0:1324e7d9d471 77 HandlerFunction func;
osmeest 0:1324e7d9d471 78 };
osmeest 0:1324e7d9d471 79
osmeest 0:1324e7d9d471 80 } // kbd_mgr
osmeest 0:1324e7d9d471 81
osmeest 0:1324e7d9d471 82 #endif // KEY_PRESS_EVENT_HANDLER_H_