aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2008-11-09 20:07:46 +0000
committerFilippos Karapetis2008-11-09 20:07:46 +0000
commitea7f3059605526e61e8cea2364c70bef3c35806a (patch)
treecb2f732f79a980cedf31ffdd38c0a1bbe0218c48
parent7d8e4ca59bc1877ccb86bcbffacb1847bdf7f3e9 (diff)
downloadscummvm-rg350-ea7f3059605526e61e8cea2364c70bef3c35806a.tar.gz
scummvm-rg350-ea7f3059605526e61e8cea2364c70bef3c35806a.tar.bz2
scummvm-rg350-ea7f3059605526e61e8cea2364c70bef3c35806a.zip
Added a new SaveStateDescriptor flag, is_write_protected, which can be used to stop the user from overwriting certain saves (e.g. the auto save, the restart save in the Kyrandia games, the quicksaves etc)
svn-id: r34970
-rw-r--r--engines/game.cpp4
-rw-r--r--engines/game.h8
-rw-r--r--gui/launcher.cpp4
3 files changed, 14 insertions, 2 deletions
diff --git a/engines/game.cpp b/engines/game.cpp
index 5011685412..3e6cdc2e79 100644
--- a/engines/game.cpp
+++ b/engines/game.cpp
@@ -115,6 +115,10 @@ void SaveStateDescriptor::setDeletableFlag(bool state) {
setVal("is_deletable", state ? "true" : "false");
}
+void SaveStateDescriptor::setWriteProtectedFlag(bool state) {
+ setVal("is_write_protected", state ? "true" : "false");
+}
+
void SaveStateDescriptor::setSaveDate(int year, int month, int day) {
char buffer[32];
snprintf(buffer, 32, "%.2d.%.2d.%.4d", day, month, year);
diff --git a/engines/game.h b/engines/game.h
index 9a8c25e35b..21bfbce0f5 100644
--- a/engines/game.h
+++ b/engines/game.h
@@ -151,12 +151,18 @@ public:
bool getBool(const Common::String &key) const;
/**
- * Sets the 'is_deletable' key, which indicates, if the
+ * Sets the 'is_deletable' key, which indicates if the
* given savestate is safe for deletion.
*/
void setDeletableFlag(bool state);
/**
+ * Sets the 'is_write_protected' key, which indicates if the
+ * given savestate can be overwritten or not
+ */
+ void setWriteProtectedFlag(bool state);
+
+ /**
* Return a thumbnail graphics surface representing the savestate visually.
* This is usually a scaled down version of the game graphics. The size
* should be either 160x100 or 160x120 pixels, depending on the aspect
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index c11cc58ae1..3f569c22bb 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -673,11 +673,13 @@ void SaveLoadChooser::updateSelection(bool redraw) {
int selItem = _list->getSelected();
bool isDeletable = _delSupport;
+ bool isWriteProtected = false;
if (selItem >= 0 && !_list->getSelectedString().empty() && _metaInfoSupport) {
SaveStateDescriptor desc = (*_plugin)->querySaveMetaInfos(_target.c_str(), atoi(_saveList[selItem].save_slot().c_str()));
isDeletable = desc.getBool("is_deletable") && _delSupport;
+ isWriteProtected = desc.getBool("is_write_protected");
if (_thumbnailSupport) {
const Graphics::Surface *thumb = desc.getThumbnail();
@@ -720,7 +722,7 @@ void SaveLoadChooser::updateSelection(bool redraw) {
// Disable these buttons if nothing is selected, or if an empty
// list item is selected.
- _chooseButton->setEnabled(selItem >= 0 && (!_list->getSelectedString().empty()));
+ _chooseButton->setEnabled(selItem >= 0 && (!_list->getSelectedString().empty()) && !isWriteProtected);
// Delete will always be disabled if the engine doesn't support it.
_deleteButton->setEnabled(isDeletable && (selItem >= 0) && (!_list->getSelectedString().empty()));