aboutsummaryrefslogtreecommitdiff
path: root/gui/console.cpp
diff options
context:
space:
mode:
authorYotam Barnoy2010-02-21 04:04:13 +0000
committerYotam Barnoy2010-02-21 04:04:13 +0000
commitef330ed9b4e5d6252134ed137b042593f79d02a9 (patch)
tree919c4ae91efca10102936a1833251b48323b8983 /gui/console.cpp
parentcebb052e2cfd963b95d7357b7c21dc8c437e058a (diff)
downloadscummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.tar.gz
scummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.tar.bz2
scummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.zip
Patch for bug 2943361 by littleboy, adding full kb modifier support to all engines + GUI and proper keypad handling
svn-id: r48101
Diffstat (limited to 'gui/console.cpp')
-rw-r--r--gui/console.cpp160
1 files changed, 116 insertions, 44 deletions
diff --git a/gui/console.cpp b/gui/console.cpp
index 1316b59241..37d3bd6aa5 100644
--- a/gui/console.cpp
+++ b/gui/console.cpp
@@ -302,9 +302,11 @@ void ConsoleDialog::handleKeyDown(Common::KeyState state) {
slideUpAndClose();
break;
}
+
case Common::KEYCODE_ESCAPE:
slideUpAndClose();
break;
+
case Common::KEYCODE_BACKSPACE:
if (_caretVisible)
drawCaret(true);
@@ -316,8 +318,8 @@ void ConsoleDialog::handleKeyDown(Common::KeyState state) {
scrollToCurrent();
drawLine(pos2line(_currentPos));
break;
- case Common::KEYCODE_TAB:
- {
+
+ case Common::KEYCODE_TAB: {
if (_completionCallbackProc) {
int len = _currentPos - _promptStartPos;
assert(len >= 0);
@@ -339,24 +341,64 @@ void ConsoleDialog::handleKeyDown(Common::KeyState state) {
delete[] str;
}
break;
- }
+ }
+
+ // Keypad & special keys
+ // - if num lock is set, we always go to the default case
+ // - if num lock is not set, we either fall down to the special key case
+ // or ignore the key press in case of 0 (INSERT) or 5
+
+ case Common::KEYCODE_KP0:
+ case Common::KEYCODE_KP5:
+ if (state.flags & Common::KBD_NUM)
+ defaultKeyDownHandler(state);
+ break;
+
+ case Common::KEYCODE_KP_PERIOD:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
case Common::KEYCODE_DELETE:
if (_currentPos < _promptEndPos) {
killChar();
drawLine(pos2line(_currentPos));
}
break;
- case Common::KEYCODE_PAGEUP:
- if (state.flags == Common::KBD_SHIFT) {
- _scrollLine -= _linesPerPage - 1;
- if (_scrollLine < _firstLineInBuffer + _linesPerPage - 1)
- _scrollLine = _firstLineInBuffer + _linesPerPage - 1;
+
+ case Common::KEYCODE_KP1:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
+ case Common::KEYCODE_END:
+ if (state.hasFlags(Common::KBD_SHIFT)) {
+ _scrollLine = _promptEndPos / kCharsPerLine;
+ if (_scrollLine < _linesPerPage - 1)
+ _scrollLine = _linesPerPage - 1;
updateScrollBuffer();
- draw();
+ } else {
+ _currentPos = _promptEndPos;
}
+ draw();
break;
+
+ case Common::KEYCODE_KP2:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
+ case Common::KEYCODE_DOWN:
+ historyScroll(-1);
+ break;
+
+ case Common::KEYCODE_KP3:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
case Common::KEYCODE_PAGEDOWN:
- if (state.flags == Common::KBD_SHIFT) {
+ if (state.hasFlags(Common::KBD_SHIFT)) {
_scrollLine += _linesPerPage - 1;
if (_scrollLine > _promptEndPos / kCharsPerLine) {
_scrollLine = _promptEndPos / kCharsPerLine;
@@ -367,8 +409,36 @@ void ConsoleDialog::handleKeyDown(Common::KeyState state) {
draw();
}
break;
+
+ case Common::KEYCODE_KP4:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
+ case Common::KEYCODE_LEFT:
+ if (_currentPos > _promptStartPos)
+ _currentPos--;
+ drawLine(pos2line(_currentPos));
+ break;
+
+ case Common::KEYCODE_KP6:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
+ case Common::KEYCODE_RIGHT:
+ if (_currentPos < _promptEndPos)
+ _currentPos++;
+ drawLine(pos2line(_currentPos));
+ break;
+
+ case Common::KEYCODE_KP7:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
case Common::KEYCODE_HOME:
- if (state.flags == Common::KBD_SHIFT) {
+ if (state.hasFlags(Common::KBD_SHIFT)) {
_scrollLine = _firstLineInBuffer + _linesPerPage - 1;
updateScrollBuffer();
} else {
@@ -376,45 +446,47 @@ void ConsoleDialog::handleKeyDown(Common::KeyState state) {
}
draw();
break;
- case Common::KEYCODE_END:
- if (state.flags == Common::KBD_SHIFT) {
- _scrollLine = _promptEndPos / kCharsPerLine;
- if (_scrollLine < _linesPerPage - 1)
- _scrollLine = _linesPerPage - 1;
- updateScrollBuffer();
- } else {
- _currentPos = _promptEndPos;
+
+ case Common::KEYCODE_KP8:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
}
- draw();
- break;
case Common::KEYCODE_UP:
historyScroll(+1);
break;
- case Common::KEYCODE_DOWN:
- historyScroll(-1);
- break;
- case Common::KEYCODE_RIGHT:
- if (_currentPos < _promptEndPos)
- _currentPos++;
- drawLine(pos2line(_currentPos));
- break;
- case Common::KEYCODE_LEFT:
- if (_currentPos > _promptStartPos)
- _currentPos--;
- drawLine(pos2line(_currentPos));
+
+ case Common::KEYCODE_KP9:
+ if (state.flags & Common::KBD_NUM) {
+ defaultKeyDownHandler(state);
+ break;
+ }
+ case Common::KEYCODE_PAGEUP:
+ if (state.hasFlags(Common::KBD_SHIFT)) {
+ _scrollLine -= _linesPerPage - 1;
+ if (_scrollLine < _firstLineInBuffer + _linesPerPage - 1)
+ _scrollLine = _firstLineInBuffer + _linesPerPage - 1;
+ updateScrollBuffer();
+ draw();
+ }
break;
+
default:
- if (state.ascii == '~' || state.ascii == '#') {
- slideUpAndClose();
- } else if (state.flags == Common::KBD_CTRL) {
- specialKeys(state.keycode);
- } else if ((state.ascii >= 32 && state.ascii <= 127) || (state.ascii >= 160 && state.ascii <= 255)) {
- for (i = _promptEndPos - 1; i >= _currentPos; i--)
- buffer(i + 1) = buffer(i);
- _promptEndPos++;
- putchar((byte)state.ascii);
- scrollToCurrent();
- }
+ defaultKeyDownHandler(state);
+ }
+}
+
+void ConsoleDialog::defaultKeyDownHandler(Common::KeyState &state) {
+ if (state.ascii == '~' || state.ascii == '#') {
+ slideUpAndClose();
+ } else if (state.hasFlags(Common::KBD_CTRL)) {
+ specialKeys(state.keycode);
+ } else if ((state.ascii >= 32 && state.ascii <= 127) || (state.ascii >= 160 && state.ascii <= 255)) {
+ for (int i = _promptEndPos - 1; i >= _currentPos; i--)
+ buffer(i + 1) = buffer(i);
+ _promptEndPos++;
+ putchar((byte)state.ascii);
+ scrollToCurrent();
}
}