diff options
author | Andrew Kurushin | 2005-06-19 14:06:20 +0000 |
---|---|---|
committer | Andrew Kurushin | 2005-06-19 14:06:20 +0000 |
commit | 97337c46238d3e6ebd2a792d03bd6990c5775d03 (patch) | |
tree | 2456acf6d42e11f464f18c4871c25762e6a9e081 /saga/interface.cpp | |
parent | 04eba089f6af536b311c51753700a65d09fc9fb7 (diff) | |
download | scummvm-rg350-97337c46238d3e6ebd2a792d03bd6990c5775d03.tar.gz scummvm-rg350-97337c46238d3e6ebd2a792d03bd6990c5775d03.tar.bz2 scummvm-rg350-97337c46238d3e6ebd2a792d03bd6990c5775d03.zip |
implemented sfGetNumber
now use MagicHat (be carefull not to exceed overall scene number)
svn-id: r18410
Diffstat (limited to 'saga/interface.cpp')
-rw-r--r-- | saga/interface.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/saga/interface.cpp b/saga/interface.cpp index edd2e4ef51..c00b5b2cd1 100644 --- a/saga/interface.cpp +++ b/saga/interface.cpp @@ -207,6 +207,8 @@ Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) { _textInputRepeatPhase = 0; _textInput = false; + _statusTextInput = false; + _statusTextInputState = kStatusTextInputFirstRun; _initialized = true; } @@ -315,6 +317,10 @@ void Interface::setMode(int mode) { bool Interface::processAscii(uint16 ascii) { int i; PanelButton *panelButton; + if (_statusTextInput) { + processStatusTextInput(ascii); + return true; + } switch (_panelMode) { case kPanelNull: if (ascii == 27) {// Esc @@ -344,6 +350,7 @@ bool Interface::processAscii(uint16 ascii) { case kPanelSave: if (_textInput) { processTextInput(ascii); + return true; } else { if (ascii == 27) {// Esc ascii = 'c'; //cancel @@ -810,6 +817,41 @@ void Interface::setLoad(PanelButton *panelButton) { } } +void Interface::processStatusTextInput(uint16 ascii) { + + textInputStartRepeat(ascii); + switch (ascii) { + case(27): // esc + _statusTextInputState = kStatusTextInputAborted; + _statusTextInput = false; + _vm->_script->wakeUpThreads(kWaitTypeStatusTextInput); + break; + case(13): // return + _statusTextInputState = kStatusTextInputEntered; + _statusTextInput = false; + _vm->_script->wakeUpThreads(kWaitTypeStatusTextInput); + break; + case(8): // backspace + if (_statusTextInputPos == 0) { + break; + } + _statusTextInputPos--; + _statusTextInputString[_statusTextInputPos] = 0; + default: + if (_statusTextInputPos >= STATUS_TEXT_INPUT_MAX) { + break; + } + if (((ascii >= 'a') && (ascii <='z')) || + ((ascii >= '0') && (ascii <='9')) || + ((ascii >= 'A') && (ascii <='Z')) || + (ascii == ' ')) { + _statusTextInputString[_statusTextInputPos++] = ascii; + _statusTextInputString[_statusTextInputPos] = 0; + } + } + setStatusText(_statusTextInputString); +} + void Interface::processTextInput(uint16 ascii) { char ch[2]; char tempString[SAVE_TITLE_SIZE]; @@ -1131,6 +1173,10 @@ void Interface::update(const Point& mousePoint, int updateFlag) { return; } + if (_statusTextInput) { + return; + } + if (_panelMode == kPanelMain) { if (updateFlag & UPDATE_MOUSEMOVE) { bool lastWasPlayfield = _lastMousePoint.y < _vm->getSceneHeight(); |