diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-07 15:31:51 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-07 15:31:51 +0000 |
| commit | fce04ebed510a97e17f019a35c327dce78b6d916 (patch) | |
| tree | ca21275f30cedcd9e2b7627dea7a0e5d9f27d812 /lib/gui | |
| parent | 45442377fc854e7224605085375e75f958aa5722 (diff) | |
| download | enigma2-fce04ebed510a97e17f019a35c327dce78b6d916.tar.gz enigma2-fce04ebed510a97e17f019a35c327dce78b6d916.zip | |
more work on keyboard support
Diffstat (limited to 'lib/gui')
| -rw-r--r-- | lib/gui/einput.cpp | 81 | ||||
| -rw-r--r-- | lib/gui/einput.h | 13 |
2 files changed, 61 insertions, 33 deletions
diff --git a/lib/gui/einput.cpp b/lib/gui/einput.cpp index 7d411f9e..62a77c5d 100644 --- a/lib/gui/einput.cpp +++ b/lib/gui/einput.cpp @@ -94,34 +94,54 @@ int eInput::event(int event, void *data, void *data2) case evtAction: if (isVisible()) { - switch((int)data2) + if ((int)data == ASCII_ACTIONS) { - case moveLeft: - m_content->moveCursor(eInputContent::dirLeft); - break; - case moveRight: - m_content->moveCursor(eInputContent::dirRight); - break; - case moveHome: - m_content->moveCursor(eInputContent::dirHome); - break; - case moveEnd: - m_content->moveCursor(eInputContent::dirEnd); - break; - case deleteForward: - m_content->deleteChar(eInputContent::deleteForward); - break; - case deleteBackward: - m_content->deleteChar(eInputContent::deleteBackward); - break; - case toggleOverwrite: - setOverwriteMode(!m_mode); - break; - case accept: - changed(); - mayKillFocus(); + if ((int)data2 == gotAsciiCode) + { + if (m_content) + { + extern int getPrevAsciiCode(); // defined in enigma.cpp + return m_content->haveKey(getPrevAsciiCode(), m_mode); + } + } + } + else if ((int)data == INPUT_ACTIONS) + { + switch((int)data2) + { + case moveLeft: + if (m_content) + m_content->moveCursor(eInputContent::dirLeft); + break; + case moveRight: + if (m_content) + m_content->moveCursor(eInputContent::dirRight); + break; + case moveHome: + if (m_content) + m_content->moveCursor(eInputContent::dirHome); + break; + case moveEnd: + if (m_content) + m_content->moveCursor(eInputContent::dirEnd); + break; + case deleteForward: + if (m_content) + m_content->deleteChar(eInputContent::deleteForward); + break; + case deleteBackward: + if (m_content) + m_content->deleteChar(eInputContent::deleteBackward); + break; + case toggleOverwrite: + setOverwriteMode(!m_mode); + break; + case accept: + changed(); + mayKillFocus(); + } + return 1; } - return 1; } return 0; case evtKey: @@ -137,9 +157,8 @@ int eInput::event(int event, void *data, void *data2) eDebug("focus got in %p", this); ePtr<eActionMap> ptr; eActionMap::getInstance(ptr); - ptr->bindAction("InputActions", 0, 0, this); - // bind all keys - ptr->bindAction("", 0, 1, this); + ptr->bindAction("InputActions", 0, INPUT_ACTIONS, this); + ptr->bindAction("AsciiActions", 0, ASCII_ACTIONS, this); m_have_focus = 1; eRCInput::getInstance()->setKeyboardMode(eRCInput::kmAscii); // fixme. we should use a style for this. @@ -152,8 +171,8 @@ int eInput::event(int event, void *data, void *data2) eDebug("focus lostin %p", this); ePtr<eActionMap> ptr; eActionMap::getInstance(ptr); - ptr->unbindAction(this, 0); - ptr->unbindAction(this, 1); + ptr->unbindAction(this, INPUT_ACTIONS); + ptr->unbindAction(this, ASCII_ACTIONS); m_have_focus = 0; if (m_content) m_content->validate(); diff --git a/lib/gui/einput.h b/lib/gui/einput.h index 7c65cc13..ae838978 100644 --- a/lib/gui/einput.h +++ b/lib/gui/einput.h @@ -14,7 +14,12 @@ public: PSignal0<void> changed; int m_cursor; - + + enum { + INPUT_ACTIONS, + ASCII_ACTIONS + }; + enum InputActions { moveLeft, moveRight, @@ -25,7 +30,11 @@ public: toggleOverwrite, accept }; - + + enum AsciiActions { + gotAsciiCode + }; + void setContent(eInputContent *cnt); void setOverwriteMode(int o); |
