diff options
author | frosch <frosch@openttd.org> | 2013-03-17 13:05:45 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2013-03-17 13:05:45 +0000 |
commit | c2c50b0c507d427caa32f71eda009bba95fac684 (patch) | |
tree | f21279587550f7711729c87c56ab67369e6c3799 /src/textbuf.cpp | |
parent | 1ddf5a0786a59431c3092673fd65a7a8aca755a3 (diff) | |
download | openttd-c2c50b0c507d427caa32f71eda009bba95fac684.tar.xz |
(svn r25092) -Codechange: Deduplicate keyboard handling between console and editboxes.
Diffstat (limited to 'src/textbuf.cpp')
-rw-r--r-- | src/textbuf.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 2a34a18d9..e84b14e7b 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -450,3 +450,49 @@ bool Textbuf::HandleCaret() } return false; } + +HandleKeyPressResult Textbuf::HandleKeyPress(uint16 key, uint16 keycode) +{ + bool edited = false; + + switch (keycode) { + case WKC_ESC: return HKPR_CANCEL; + + case WKC_RETURN: case WKC_NUM_ENTER: return HKPR_CONFIRM; + +#ifdef WITH_COCOA + case (WKC_META | 'V'): +#endif + case (WKC_CTRL | 'V'): + edited = this->InsertClipboard(); + break; + +#ifdef WITH_COCOA + case (WKC_META | 'U'): +#endif + case (WKC_CTRL | 'U'): + this->DeleteAll(); + edited = true; + break; + + case WKC_BACKSPACE: case WKC_DELETE: + case WKC_CTRL | WKC_BACKSPACE: case WKC_CTRL | WKC_DELETE: + edited = this->DeleteChar(keycode); + break; + + case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME: + case WKC_CTRL | WKC_LEFT: case WKC_CTRL | WKC_RIGHT: + this->MovePos(keycode); + break; + + default: + if (IsValidChar(key, this->afilter)) { + edited = this->InsertChar(key); + } else { + return HKPR_NOT_HANDLED; + } + break; + } + + return edited ? HKPR_EDITING : HKPR_CURSOR; +} |