diff options
Diffstat (limited to 'engines/agi/agi.cpp')
-rw-r--r-- | engines/agi/agi.cpp | 72 |
1 files changed, 33 insertions, 39 deletions
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp index e9c9645768..8218d82a05 100644 --- a/engines/agi/agi.cpp +++ b/engines/agi/agi.cpp @@ -46,6 +46,8 @@ #include "agi/keyboard.h" #include "agi/menu.h" +#include "gui/predictivedialog.h" + namespace Agi { void AgiEngine::allowSynthetic(bool allow) { @@ -58,9 +60,25 @@ void AgiEngine::processEvents() { while (_eventMan->pollEvent(event)) { switch (event.type) { - case Common::EVENT_PREDICTIVE_DIALOG: - if (_predictiveDialogRunning) - break; + case Common::EVENT_PREDICTIVE_DIALOG: { + GUI::PredictiveDialog _predictiveDialog; + _predictiveDialog.runModal(); + strcpy(_predictiveResult, _predictiveDialog.getResult()); + if (strcmp(_predictiveResult, "")) { + if (_game.inputMode == INPUT_NORMAL) { + strcpy((char *)_game.inputBuffer, _predictiveResult); + handleKeys(KEY_ENTER); + } else if (_game.inputMode == INPUT_GETSTRING) { + strcpy(_game.strings[_stringdata.str], _predictiveResult); + newInputMode(INPUT_NORMAL); + _gfx->printCharacter(_stringdata.x + strlen(_game.strings[_stringdata.str]) + 1, + _stringdata.y, ' ', _game.colorFg, _game.colorBg); + } else if (_game.inputMode == INPUT_NONE) { + for (int n = 0; _predictiveResult[n]; n++) + keyEnqueue(_predictiveResult[n]); + } + } + /* if (predictiveDialog()) { if (_game.inputMode == INPUT_NORMAL) { strcpy((char *)_game.inputBuffer, _predictiveResult); @@ -75,6 +93,8 @@ void AgiEngine::processEvents() { keyEnqueue(_predictiveResult[n]); } } + */ + } break; case Common::EVENT_LBUTTONDOWN: key = BUTTON_LEFT; @@ -131,65 +151,46 @@ void AgiEngine::processEvents() { switch (key = event.kbd.keycode) { case Common::KEYCODE_LEFT: case Common::KEYCODE_KP4: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP4) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_LEFT; break; case Common::KEYCODE_RIGHT: case Common::KEYCODE_KP6: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP6) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_RIGHT; break; case Common::KEYCODE_UP: case Common::KEYCODE_KP8: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP8) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_UP; break; case Common::KEYCODE_DOWN: case Common::KEYCODE_KP2: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP2) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_DOWN; break; case Common::KEYCODE_PAGEUP: case Common::KEYCODE_KP9: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP9) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_UP_RIGHT; break; case Common::KEYCODE_PAGEDOWN: case Common::KEYCODE_KP3: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP3) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_DOWN_RIGHT; break; case Common::KEYCODE_HOME: case Common::KEYCODE_KP7: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP7) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_UP_LEFT; break; case Common::KEYCODE_END: case Common::KEYCODE_KP1: - if (_predictiveDialogRunning && key == Common::KEYCODE_KP1) - key = event.kbd.ascii; - else if (_allowSynthetic || !event.synthetic) + if (_allowSynthetic || !event.synthetic) key = KEY_DOWN_LEFT; break; case Common::KEYCODE_KP5: - if (_predictiveDialogRunning) - key = event.kbd.ascii; - else - key = KEY_STATIONARY; + key = KEY_STATIONARY; break; case Common::KEYCODE_PLUS: key = '+'; @@ -218,7 +219,7 @@ void AgiEngine::processEvents() { case Common::KEYCODE_F6: key = 0x4000; break; - case Common::KEYCODE_F7: + case Common::KEYCODE_F7: key = 0x4100; break; case Common::KEYCODE_F8: @@ -575,10 +576,6 @@ AgiEngine::AgiEngine(OSystem *syst, const AGIGameDescription *gameDesc) : AgiBas _oldMode = INPUT_NONE; - _predictiveDialogRunning = false; - _predictiveDictText = NULL; - _predictiveDictLine = NULL; - _predictiveDictLineCount = 0; _firstSlot = 0; resetControllers(); @@ -684,9 +681,6 @@ AgiEngine::~AgiEngine() { _gfx->deinitMachine(); delete _gfx; delete _console; - - free(_predictiveDictLine); - free(_predictiveDictText); } Common::Error AgiBase::init() { |