aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/agi/detection.cpp3
-rw-r--r--engines/agos/detection.cpp3
-rw-r--r--engines/cine/detection.cpp3
-rw-r--r--engines/kyra/detection.cpp3
-rw-r--r--engines/lure/detection.cpp3
-rw-r--r--engines/metaengine.h7
-rw-r--r--engines/parallaction/detection.cpp3
-rw-r--r--engines/saga/detection.cpp13
-rw-r--r--engines/scumm/detection.cpp3
-rw-r--r--engines/tinsel/detection.cpp2
-rw-r--r--engines/touche/detection.cpp3
-rw-r--r--gui/launcher.cpp12
12 files changed, 46 insertions, 12 deletions
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index 27b1e799bb..bcc2b60d74 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -2125,6 +2125,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
const Common::ADGameDescription *fallbackDetect(const Common::FSList &fslist) const;
@@ -2193,6 +2194,8 @@ SaveStateList AgiMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int AgiMetaEngine::getMaximumSaveSlot() const { return 999; }
+
void AgiMetaEngine::removeSaveState(const char *target, int slot) const {
char extension[6];
snprintf(extension, sizeof(extension), ".%03d", slot);
diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp
index b00267368f..5ca640d96c 100644
--- a/engines/agos/detection.cpp
+++ b/engines/agos/detection.cpp
@@ -114,6 +114,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
};
bool AgosMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -191,6 +192,8 @@ SaveStateList AgosMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int AgosMetaEngine::getMaximumSaveSlot() const { return 999; }
+
#if PLUGIN_ENABLED_DYNAMIC(AGOS)
REGISTER_PLUGIN_DYNAMIC(AGOS, PLUGIN_TYPE_ENGINE, AgosMetaEngine);
#else
diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp
index ca47e5028b..eefd60e26c 100644
--- a/engines/cine/detection.cpp
+++ b/engines/cine/detection.cpp
@@ -536,6 +536,7 @@ public:
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual bool hasFeature(MetaEngineFeature f) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
};
bool CineMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -601,6 +602,8 @@ SaveStateList CineMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int CineMetaEngine::getMaximumSaveSlot() const { return 9; }
+
#if PLUGIN_ENABLED_DYNAMIC(CINE)
REGISTER_PLUGIN_DYNAMIC(CINE, PLUGIN_TYPE_ENGINE, CineMetaEngine);
#else
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 59d7edf2fb..20a78260a7 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -1067,6 +1067,7 @@ public:
bool hasFeature(MetaEngineFeature f) const;
bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
void removeSaveState(const char *target, int slot) const;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
};
@@ -1162,6 +1163,8 @@ SaveStateList KyraMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int KyraMetaEngine::getMaximumSaveSlot() const { return 999; }
+
void KyraMetaEngine::removeSaveState(const char *target, int slot) const {
// Slot 0 can't be deleted, it's for restarting the game(s)
if (slot == 0)
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index 863cb7fec0..5749e96bde 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -188,6 +188,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
};
@@ -239,6 +240,8 @@ SaveStateList LureMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int LureMetaEngine::getMaximumSaveSlot() const { return 999; }
+
void LureMetaEngine::removeSaveState(const char *target, int slot) const {
char extension[6];
snprintf(extension, sizeof(extension), ".%03d", slot);
diff --git a/engines/metaengine.h b/engines/metaengine.h
index fb4c5c2938..6658a00bd7 100644
--- a/engines/metaengine.h
+++ b/engines/metaengine.h
@@ -125,6 +125,13 @@ public:
return SaveStateDescriptor();
}
+ /**
+ * Gets the maximum save slot that the engine supports
+ */
+ virtual int getMaximumSaveSlot() const {
+ return 0;
+ }
+
/** @name MetaEngineFeature flags */
//@{
diff --git a/engines/parallaction/detection.cpp b/engines/parallaction/detection.cpp
index 626aba6569..10882662d1 100644
--- a/engines/parallaction/detection.cpp
+++ b/engines/parallaction/detection.cpp
@@ -247,6 +247,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
};
@@ -308,6 +309,8 @@ SaveStateList ParallactionMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int ParallactionMetaEngine::getMaximumSaveSlot() const { return 99; }
+
void ParallactionMetaEngine::removeSaveState(const char *target, int slot) const {
char extension[6];
snprintf(extension, sizeof(extension), ".0%02d", slot);
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index b7503278e7..f114fa31b7 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -151,6 +151,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
};
@@ -200,23 +201,15 @@ SaveStateList SagaMetaEngine::listSaves(const char *target) const {
in->read(saveDesc, SAVE_TITLE_SIZE);
saveList.push_back(SaveStateDescriptor(slotNum, saveDesc));
delete in;
- } else {
- // handle gaps
- *saveDesc = 0;
- saveList.push_back(SaveStateDescriptor(slotNum, saveDesc));
}
}
}
- // Fill the rest of the list with empty slots
- *saveDesc = 0;
- for (int i = slotNum + 1; i <= 99; i++) {
- saveList.push_back(SaveStateDescriptor(i, saveDesc));
- }
-
return saveList;
}
+int SagaMetaEngine::getMaximumSaveSlot() const { return 99; }
+
void SagaMetaEngine::removeSaveState(const char *target, int slot) const {
char extension[6];
snprintf(extension, sizeof(extension), ".s%02d", slot);
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index e4694cf68b..5a82373c0b 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -685,6 +685,7 @@ public:
virtual Common::Error createInstance(OSystem *syst, Engine **engine) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
};
@@ -961,6 +962,8 @@ namespace Scumm {
extern bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion);
}
+int ScummMetaEngine::getMaximumSaveSlot() const { return 99; }
+
SaveStateList ScummMetaEngine::listSaves(const char *target) const {
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
Common::StringList filenames;
diff --git a/engines/tinsel/detection.cpp b/engines/tinsel/detection.cpp
index a52a6c9c1e..45cd903552 100644
--- a/engines/tinsel/detection.cpp
+++ b/engines/tinsel/detection.cpp
@@ -343,6 +343,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
};
bool TinselMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -367,6 +368,7 @@ SaveStateList TinselMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int TinselMetaEngine::getMaximumSaveSlot() const { return 999; }
bool TinselMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const {
const Tinsel::TinselGameDescription *gd = (const Tinsel::TinselGameDescription *)desc;
diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp
index 2b9f3b49fa..d37bd0775e 100644
--- a/engines/touche/detection.cpp
+++ b/engines/touche/detection.cpp
@@ -140,6 +140,7 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
+ virtual int getMaximumSaveSlot() const;
virtual void removeSaveState(const char *target, int slot) const;
};
@@ -214,6 +215,8 @@ SaveStateList ToucheMetaEngine::listSaves(const char *target) const {
return saveList;
}
+int ToucheMetaEngine::getMaximumSaveSlot() const { return 99; }
+
void ToucheMetaEngine::removeSaveState(const char *target, int slot) const {
char extension[5];
snprintf(extension, sizeof(extension), ".%d", slot);
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 4a8211e03c..b4802b06e8 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -483,7 +483,7 @@ SaveLoadChooser::SaveLoadChooser(const String &title, const String &buttonLabel)
// Add choice list
_list = new GUI::ListWidget(this, "ScummSaveLoad.List");
- _list->setNumberingMode(GUI::kListNumberingOff);
+ setSaveMode(false);
_gfxWidget = new GUI::GraphicsWidget(this, 0, 0, 10, 10);
@@ -541,7 +541,7 @@ const Common::String &SaveLoadChooser::getResultString() const {
void SaveLoadChooser::setSaveMode(bool saveMode) {
_list->setEditable(saveMode);
- _list->setNumberingMode(saveMode ? GUI::kListNumberingOne : GUI::kListNumberingZero);
+ _list->setNumberingMode(GUI::kListNumberingOne);
}
void SaveLoadChooser::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
@@ -738,10 +738,18 @@ void SaveLoadChooser::close() {
void SaveLoadChooser::updateSaveList() {
_saveList = (*_plugin)->listSaves(_target.c_str());
+ int curSlot = 0;
StringList saveNames;
for (SaveStateList::const_iterator x = _saveList.begin(); x != _saveList.end(); ++x) {
saveNames.push_back(x->description());
+ curSlot++;
}
+
+ // Fill the rest of the save slots with empty saves
+ Common::String emptyDesc;
+ for (int i = curSlot + 1; i <= (*_plugin)->getMaximumSaveSlot(); i++)
+ saveNames.push_back(emptyDesc);
+
_list->setList(saveNames);
}