From f7b692dfbbcf73b7a43019f66e66bc7f3bd591d1 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sun, 15 Dec 2002 00:36:34 +0000 Subject: added input callback hook to console svn-id: r5973 --- gui/console.cpp | 25 +++++++++++++++++++++---- gui/console.h | 18 +++++++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) (limited to 'gui') 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 @@ -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); -- cgit v1.2.3