diff options
author | Max Horn | 2002-12-15 00:36:34 +0000 |
---|---|---|
committer | Max Horn | 2002-12-15 00:36:34 +0000 |
commit | f7b692dfbbcf73b7a43019f66e66bc7f3bd591d1 (patch) | |
tree | 981d4a3e46c6e305105744690a34145cb1dbaed4 | |
parent | d58ec10ea2abf739ee129fef893397a45d8da04c (diff) | |
download | scummvm-rg350-f7b692dfbbcf73b7a43019f66e66bc7f3bd591d1.tar.gz scummvm-rg350-f7b692dfbbcf73b7a43019f66e66bc7f3bd591d1.tar.bz2 scummvm-rg350-f7b692dfbbcf73b7a43019f66e66bc7f3bd591d1.zip |
added input callback hook to console
svn-id: r5973
-rw-r--r-- | gui/console.cpp | 25 | ||||
-rw-r--r-- | gui/console.h | 18 |
2 files changed, 36 insertions, 7 deletions
diff --git a/gui/console.cpp b/gui/console.cpp index a416d57192..9318e73d9a 100644 --- a/gui/console.cpp +++ b/gui/console.cpp @@ -48,7 +48,7 @@ This code is not finished, so please don't complain :-) * - a *lot* of others things, this code is in no way complete and heavily under progress */ ConsoleDialog::ConsoleDialog(NewGui *gui) - : Dialog(gui, 0, 0, 320, 6*kLineHeight+2) + : Dialog(gui, 0, 0, 320, 12*kLineHeight+2) { _lineWidth = (_w - kScrollBarWidth - 2) / kCharWidth; _linesPerPage = (_h - 2) / kLineHeight; @@ -70,8 +70,19 @@ ConsoleDialog::ConsoleDialog(NewGui *gui) print("ScummVM "SCUMMVM_VERSION" (" SCUMMVM_CVS ")\n"); print("Console is ready\n"); - print(PROMPT); - _promptStartPos = _promptEndPos = _currentPos; + _promptStartPos = _promptEndPos = -1; + + _callbackProc = 0; + _callbackRefCon = 0; +} + +void ConsoleDialog::open() +{ + Dialog::open(); + if (_promptStartPos == -1) { + print(PROMPT); + _promptStartPos = _promptEndPos = _currentPos; + } } void ConsoleDialog::drawDialog() @@ -138,12 +149,18 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) for (i = 0; i < len; i++) str[i] = _buffer[(_promptStartPos + i) % kBufferSize]; str[len] = 0; - printf("You entered '%s'\n", str); + + bool keepRunning = true; + if (_callbackProc) + keepRunning = (*_callbackProc)(this, str, _callbackRefCon); + //printf("You entered '%s'\n", str); print(PROMPT); _promptStartPos = _promptEndPos = _currentPos; draw(); + if (!keepRunning) + close(); break; } case 27: // escape diff --git a/gui/console.h b/gui/console.h index fd0042e9df..a3b91223a6 100644 --- a/gui/console.h +++ b/gui/console.h @@ -23,8 +23,6 @@ #include "dialog.h" #include "newgui.h" -#include "common/str.h" -#include "common/list.h" #include <stdarg.h> @@ -37,7 +35,9 @@ enum { class ScrollBarWidget; class ConsoleDialog : public Dialog { - typedef ScummVM::String String; +public: + typedef bool (*InputCallbackProc)(ConsoleDialog *console, const char *input, void *refCon); + protected: char _buffer[kBufferSize]; int _linesInBuffer; @@ -55,10 +55,16 @@ protected: uint32 _caretTime; ScrollBarWidget *_scrollBar; + + // The _callbackProc is called whenver a data line is entered + // + InputCallbackProc _callbackProc; + void *_callbackRefCon; public: ConsoleDialog(NewGui *gui); + void open(); void drawDialog(); void handleTickle(); @@ -70,6 +76,12 @@ public: int vprintf(const char *format, va_list argptr); #undef putchar void putchar(int c); + + void setInputeCallback(InputCallbackProc proc, void *refCon) + { + _callbackProc = proc; + _callbackRefCon = refCon; + } protected: void drawCaret(bool erase); |