summaryrefslogtreecommitdiff
path: root/src/textbuf.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-03-17 13:05:45 +0000
committerfrosch <frosch@openttd.org>2013-03-17 13:05:45 +0000
commitc2c50b0c507d427caa32f71eda009bba95fac684 (patch)
treef21279587550f7711729c87c56ab67369e6c3799 /src/textbuf.cpp
parent1ddf5a0786a59431c3092673fd65a7a8aca755a3 (diff)
downloadopenttd-c2c50b0c507d427caa32f71eda009bba95fac684.tar.xz
(svn r25092) -Codechange: Deduplicate keyboard handling between console and editboxes.
Diffstat (limited to 'src/textbuf.cpp')
-rw-r--r--src/textbuf.cpp46
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;
+}