[Scummvm-cvs-logs] SF.net SVN: scummvm: [31392] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Sat Apr 5 03:49:28 CEST 2008
Revision: 31392
http://scummvm.svn.sourceforge.net/scummvm/?rev=31392&view=rev
Author: lordhoto
Date: 2008-04-04 18:49:28 -0700 (Fri, 04 Apr 2008)
Log Message:
-----------
Implemented proper savefile listing, this fixes bug #1479872 "KYRA1: a small menu issue".
Modified Paths:
--------------
scummvm/trunk/engines/kyra/gui.cpp
scummvm/trunk/engines/kyra/gui.h
scummvm/trunk/engines/kyra/gui_v1.cpp
scummvm/trunk/engines/kyra/gui_v2.cpp
Modified: scummvm/trunk/engines/kyra/gui.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui.cpp 2008-04-04 21:00:58 UTC (rev 31391)
+++ scummvm/trunk/engines/kyra/gui.cpp 2008-04-05 01:49:28 UTC (rev 31392)
@@ -298,6 +298,21 @@
return 0;
}
+void GUI::updateSaveList() {
+ Common::String pattern = _vm->_targetName + ".???";
+ Common::StringList saveFileList = _vm->_saveFileMan->listSavefiles(pattern.c_str());
+ Common::sort(saveFileList.begin(), saveFileList.end());
+ _saveSlots.clear();
+
+ for (Common::StringList::const_iterator i = saveFileList.begin(); i != saveFileList.end(); ++i) {
+ char s1 = 0, s2 = 0, s3 = 0;
+ s1 = (*i)[i->size()-3] - '0';
+ s2 = (*i)[i->size()-2] - '0';
+ s3 = (*i)[i->size()-1] - '0';
+ _saveSlots.push_back(s1*100+s2*10+s3);
+ }
+}
+
int GUI::getNextSavegameSlot() {
Common::InSaveFile *in;
Modified: scummvm/trunk/engines/kyra/gui.h
===================================================================
--- scummvm/trunk/engines/kyra/gui.h 2008-04-04 21:00:58 UTC (rev 31391)
+++ scummvm/trunk/engines/kyra/gui.h 2008-04-05 01:49:28 UTC (rev 31392)
@@ -30,6 +30,7 @@
#include "kyra/kyra.h"
#include "common/ptr.h"
+#include "common/array.h"
namespace Kyra {
@@ -185,6 +186,8 @@
void redrawText(const Menu &menu);
void redrawHighlight(const Menu &menu);
+ Common::Array<int> _saveSlots;
+ void updateSaveList();
int getNextSavegameSlot();
};
Modified: scummvm/trunk/engines/kyra/gui_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_v1.cpp 2008-04-04 21:00:58 UTC (rev 31391)
+++ scummvm/trunk/engines/kyra/gui_v1.cpp 2008-04-05 01:49:28 UTC (rev 31392)
@@ -613,12 +613,12 @@
}
KyraEngine::SaveHeader header;
- for (int i = startSlot; i < num; i++) {
- if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(i + _savegameOffset), header))) {
+ for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); i++) {
+ if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header))) {
strncpy(savenames[i], header.description.c_str(), 31);
menu.item[i].itemString = savenames[i];
menu.item[i].enabled = 1;
- menu.item[i].saveSlot = i + _savegameOffset;
+ menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
delete in;
} else {
menu.item[i].enabled = 0;
@@ -630,6 +630,8 @@
int GUI_v1::saveGameMenu(Button *button) {
debugC(9, kDebugLevelGUI, "GUI_v1::saveGameMenu()");
+ updateSaveList();
+
updateMenuButton(button);
_menu[2].item[5].enabled = true;
@@ -671,6 +673,8 @@
int GUI_v1::loadGameMenu(Button *button) {
debugC(9, kDebugLevelGUI, "GUI_v1::loadGameMenu()");
+ updateSaveList();
+
if (_vm->_menuDirectlyToLoad) {
_menu[2].item[5].enabled = false;
} else {
@@ -1101,6 +1105,8 @@
updateMenuButton(button);
_savegameOffset++;
+ if (uint(_savegameOffset + 5) >= _saveSlots.size())
+ _savegameOffset = MAX<int>(_saveSlots.size() - 5, 0);
setupSavegames(_menu[2], 5);
initMenu(_menu[2]);
Modified: scummvm/trunk/engines/kyra/gui_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_v2.cpp 2008-04-04 21:00:58 UTC (rev 31391)
+++ scummvm/trunk/engines/kyra/gui_v2.cpp 2008-04-05 01:49:28 UTC (rev 31392)
@@ -1396,10 +1396,10 @@
KyraEngine::SaveHeader header;
Common::InSaveFile *in;
- for (int i = startSlot; i < num; ++i) {
- if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(i + _savegameOffset), header)) != 0) {
+ for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); ++i) {
+ if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header)) != 0) {
strncpy(_vm->getTableString(menu.item[i].itemId, _vm->_optionsBuffer, 0), header.description.c_str(), 80);
- menu.item[i].saveSlot = i + _savegameOffset;
+ menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
menu.item[i].enabled = true;
delete in;
}
@@ -1421,10 +1421,9 @@
}
int GUI_v2::scrollUpButton(Button *button) {
- int startSlot = _isSaveMenu ? 1 : 0;
updateMenuButton(button);
- if (_savegameOffset <= startSlot)
+ if (_savegameOffset == 0)
return 0;
--_savegameOffset;
@@ -1444,6 +1443,10 @@
int GUI_v2::scrollDownButton(Button *button) {
updateMenuButton(button);
++_savegameOffset;
+
+ if (uint(_savegameOffset + 5) >= _saveSlots.size())
+ _savegameOffset = MAX<int>(_saveSlots.size() - 5, 0);
+
if (_isLoadMenu) {
setupSavegameNames(_loadMenu, 5);
// original calls something different here...
@@ -1737,6 +1740,8 @@
}
int GUI_v2::loadMenu(Button *caller) {
+ updateSaveList();
+
if (!_vm->_menuDirectlyToLoad) {
updateMenuButton(caller);
restorePage1(_vm->_screenBuffer);
@@ -1803,7 +1808,8 @@
}
int GUI_v2::saveMenu(Button *caller) {
- //XXX
+ updateSaveList();
+
updateMenuButton(caller);
restorePage1(_vm->_screenBuffer);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list