diff options
Diffstat (limited to 'saga/interface.cpp')
-rw-r--r-- | saga/interface.cpp | 101 |
1 files changed, 73 insertions, 28 deletions
diff --git a/saga/interface.cpp b/saga/interface.cpp index 95117c4b53..534d48a269 100644 --- a/saga/interface.cpp +++ b/saga/interface.cpp @@ -303,10 +303,8 @@ void Interface::setMode(int mode, bool force) { break; case(kPanelSave): _savePanel.currentButton = NULL; - _textInputMaxWidth = _saveEdit->width - 9; + _textInputMaxWidth = _saveEdit->width - 10; _textInput = true; - _textInputString[0] = 0; - strcpy(_textInputString, "test1"); _textInputStringLength = strlen(_textInputString); _textInputPos = _textInputStringLength + 1; _textInputRepeatPhase = 0; @@ -585,7 +583,7 @@ void Interface::draw() { } void Interface::calcOptionSaveSlider() { - int totalFiles = _vm->getSaveFileNameCount(); + int totalFiles = _vm->getSaveFilesCount(); int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible; int height = _optionSaveFileSlider->height; int sliderHeight; @@ -686,11 +684,11 @@ void Interface::drawOption() { if (idx == _optionSaveFileTitleNumber) { SWAP(bgColor, fgColor); } - if (idx < _vm->getSaveFileNameCount()) { + if (idx < _vm->getSaveFilesCount()) { rect2.top = rect.top + j * (fontHeight + 1); rect2.bottom = rect2.top + fontHeight; backBuffer->fillRect(rect2, bgColor); - text = _vm->getSaveFileName(idx); + text = _vm->getSaveFile(idx)->name; _vm->_font->draw(SMALL_FONT_ID, backBuffer, text, 0, rect.left + 1, rect2.top, fgColor, 0, 0); } @@ -811,7 +809,7 @@ void Interface::handleLoadClick(const Point& mousePoint) { void Interface::setLoad(PanelButton *panelButton) { _loadPanel.currentButton = NULL; switch (panelButton->id) { - case kTextOK: + case kTextOK: setMode(kPanelMain); break; } @@ -827,6 +825,9 @@ void Interface::processTextInput(uint16 ascii) { textInputStartRepeat(ascii); switch (ascii) { + case(27): // esc + _textInput = false; + break; case(8): // backspace if (_textInputPos <= 1) { break; @@ -947,6 +948,9 @@ void Interface::handleSaveUpdate(const Point& mousePoint) { bool releasedButton; _savePanel.currentButton = saveHitTest(mousePoint); + + validateSaveButtons(); + releasedButton = (_savePanel.currentButton != NULL) && (_savePanel.currentButton->state > 0) && (!_vm->mouseButtonPressed()); @@ -961,8 +965,10 @@ void Interface::handleSaveUpdate(const Point& mousePoint) { void Interface::handleSaveClick(const Point& mousePoint) { _savePanel.currentButton = saveHitTest(mousePoint); + + validateSaveButtons(); - _savePanel.zeroAllButtonState(); + _savePanel.zeroAllButtonState(); if (_savePanel.currentButton == NULL) { _textInput = false; @@ -976,18 +982,41 @@ void Interface::handleSaveClick(const Point& mousePoint) { } void Interface::setSave(PanelButton *panelButton) { -/* _savePanel.currentButton = NULL; + _savePanel.currentButton = NULL; + uint titleNumber; + char *fileName; switch (panelButton->id) { - case kTextOK: - setMode(kPanelMain); + case kTextSave: + if (_textInputStringLength == 0 ) { + break; + } + if (!_vm->isSaveListFull() && (_optionSaveFileTitleNumber == 0)) { + if (_vm->locateSaveFile(_textInputString, titleNumber)) { + fileName = _vm->calcSaveFileName(_vm->getSaveFile(titleNumber)->slotNumber); + _vm->save(fileName, _textInputString); + _optionSaveFileTitleNumber = titleNumber; + } else { + fileName = _vm->calcSaveFileName(_vm->getNewSaveSlotNumber()); + _vm->save(fileName, _textInputString); + _vm->fillSaveList(); + calcOptionSaveSlider(); + } + } else { + fileName = _vm->calcSaveFileName(_vm->getSaveFile(_optionSaveFileTitleNumber)->slotNumber); + _vm->save(fileName, _textInputString); + } + setMode(kPanelOption); + break; + case kTextCancel: + setMode(kPanelOption); break; - }*/ + } } void Interface::handleOptionUpdate(const Point& mousePoint) { int16 mouseY; Rect rect; - int totalFiles = _vm->getSaveFileNameCount(); + int totalFiles = _vm->getSaveFilesCount(); int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible; bool releasedButton; @@ -1004,12 +1033,15 @@ void Interface::handleOptionUpdate(const Point& mousePoint) { (_optionSaveFileSlider->height - _optionSaveRectSlider.height()); } - _optionSaveFileTop = clamp(0, _optionSaveFileTop, _vm->getSaveFileNameCount() - _vm->getDisplayInfo().optionSaveFileVisible); + _optionSaveFileTop = clamp(0, _optionSaveFileTop, _vm->getSaveFilesCount() - _vm->getDisplayInfo().optionSaveFileVisible); calcOptionSaveSlider(); } } _optionPanel.currentButton = optionHitTest(mousePoint); + + validateOptionButtons(); + releasedButton = (_optionPanel.currentButton != NULL) && (_optionPanel.currentButton->state > 0) && (!_vm->mouseButtonPressed()); if (!_vm->mouseButtonPressed()) { @@ -1026,6 +1058,8 @@ void Interface::handleOptionClick(const Point& mousePoint) { Rect rect; _optionPanel.currentButton = optionHitTest(mousePoint); + validateOptionButtons(); + _optionPanel.zeroAllButtonState(); if (_optionPanel.currentButton == NULL) { @@ -1039,14 +1073,14 @@ void Interface::handleOptionClick(const Point& mousePoint) { if ((_optionSaveRectBottom.height() > 0) && (mousePoint.y >= _optionSaveRectBottom.top)) { _optionSaveFileTop += _vm->getDisplayInfo().optionSaveFileVisible; } else { - if (_vm->getDisplayInfo().optionSaveFileVisible < _vm->getSaveFileNameCount()) { + if (_vm->getDisplayInfo().optionSaveFileVisible < _vm->getSaveFilesCount()) { _optionSaveFileMouseOff = mousePoint.y - _optionSaveRectSlider.top; _optionPanel.currentButton->state = 1; } } } - _optionSaveFileTop = clamp(0, _optionSaveFileTop, _vm->getSaveFileNameCount() - _vm->getDisplayInfo().optionSaveFileVisible); + _optionSaveFileTop = clamp(0, _optionSaveFileTop, _vm->getSaveFilesCount() - _vm->getDisplayInfo().optionSaveFileVisible); calcOptionSaveSlider(); } else { if (_optionPanel.currentButton == _optionSaveFilePanel) { @@ -1057,8 +1091,8 @@ void Interface::handleOptionClick(const Point& mousePoint) { _optionSaveFileTitleNumber = _vm->getDisplayInfo().optionSaveFileVisible - 1; } _optionSaveFileTitleNumber += _optionSaveFileTop; - if (_optionSaveFileTitleNumber >= _vm->getSaveFileNameCount()) { - _optionSaveFileTitleNumber = _vm->getSaveFileNameCount() - 1; + if (_optionSaveFileTitleNumber >= _vm->getSaveFilesCount()) { + _optionSaveFileTitleNumber = _vm->getSaveFilesCount() - 1; } } else { _optionPanel.currentButton->state = 1; @@ -1068,21 +1102,32 @@ void Interface::handleOptionClick(const Point& mousePoint) { void Interface::setOption(PanelButton *panelButton) { + char * fileName; _optionPanel.currentButton = NULL; switch (panelButton->id) { case kTextContinuePlaying: - setMode(kPanelMain); - break; + setMode(kPanelMain); + break; case kTextQuitGame: - setMode(kPanelQuit); - break; - case kTextLoad: - //todo: load - setMode(kPanelLoad); - break; + setMode(kPanelQuit); + break; + case kTextLoad: + if (_vm->getSaveFilesCount() > 0) { + if (_vm->isSaveListFull() || (_optionSaveFileTitleNumber > 0)) { + fileName = _vm->calcSaveFileName(_vm->getSaveFile(_optionSaveFileTitleNumber)->slotNumber); + _vm->load(fileName); + setMode(kPanelLoad); + } + } + break; case kTextSave: - setMode(kPanelSave); - break; + if (!_vm->isSaveListFull() && (_optionSaveFileTitleNumber == 0)) { + _textInputString[0] = 0; + } else { + strcpy(_textInputString, _vm->getSaveFile(_optionSaveFileTitleNumber)->name); + } + setMode(kPanelSave); + break; } } |