From 8db54382bb1b5e2c3b8d262cff54b3edf62fd841 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 18 Mar 2010 15:09:48 +0000 Subject: ENGINES: Move SaveStateDescriptor etc. to engine/savestate.* svn-id: r48283 --- engines/game.cpp | 52 ------------------- engines/game.h | 104 +------------------------------------- engines/metaengine.h | 2 + engines/module.mk | 3 +- engines/savestate.cpp | 77 ++++++++++++++++++++++++++++ engines/savestate.h | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 218 insertions(+), 156 deletions(-) create mode 100644 engines/savestate.cpp create mode 100644 engines/savestate.h (limited to 'engines') diff --git a/engines/game.cpp b/engines/game.cpp index 0bd1c59791..c7f26019d6 100644 --- a/engines/game.cpp +++ b/engines/game.cpp @@ -25,7 +25,6 @@ #include "engines/game.h" #include "base/plugins.h" -#include "graphics/surface.h" const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list) { @@ -103,54 +102,3 @@ void GameDescriptor::updateDesc(const char *extra) { setVal("description", descr); } } - -void SaveStateDescriptor::setThumbnail(Graphics::Surface *t) { - if (_thumbnail.get() == t) - return; - - _thumbnail = Common::SharedPtr(t, Graphics::SharedPtrSurfaceDeleter()); -} - -bool SaveStateDescriptor::getBool(const Common::String &key) const { - if (contains(key)) { - Common::String value = getVal(key); - if (value.equalsIgnoreCase("true") || - value.equalsIgnoreCase("yes") || - value.equals("1")) - return true; - if (value.equalsIgnoreCase("false") || - value.equalsIgnoreCase("no") || - value.equals("0")) - return false; - error("SaveStateDescriptor: %s '%s' has unknown value '%s' for boolean '%s'", - save_slot().c_str(), description().c_str(), value.c_str(), key.c_str()); - } - return false; -} - -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); - setVal("save_date", buffer); -} - -void SaveStateDescriptor::setSaveTime(int hour, int min) { - char buffer[32]; - snprintf(buffer, 32, "%.2d:%.2d", hour, min); - setVal("save_time", buffer); -} - -void SaveStateDescriptor::setPlayTime(int hours, int minutes) { - char buffer[32]; - snprintf(buffer, 32, "%.2d:%.2d", hours, minutes); - setVal("play_time", buffer); -} - diff --git a/engines/game.h b/engines/game.h index 63c988a345..49136ecf5a 100644 --- a/engines/game.h +++ b/engines/game.h @@ -26,14 +26,9 @@ #ifndef ENGINES_GAME_H #define ENGINES_GAME_H -#include "common/str.h" #include "common/array.h" #include "common/hash-str.h" -#include "common/ptr.h" - -namespace Graphics { - struct Surface; -} +#include "engines/savestate.h" // TODO: Push this #include out to .cpp files needing it /** * A simple structure used to map gameids (like "monkey", "sword1", ...) to @@ -114,101 +109,4 @@ public: } }; -/** - * A hashmap describing details about a given save state. - * TODO - * Guaranteed to contain save_slot and description values. - * Additional ideas: Playtime, creation date, thumbnail, ... - */ -class SaveStateDescriptor : public Common::StringMap { -protected: - Common::SharedPtr _thumbnail; // can be 0 - -public: - SaveStateDescriptor() : _thumbnail() { - setVal("save_slot", "-1"); // FIXME: default to 0 (first slot) or to -1 (invalid slot) ? - setVal("description", ""); - } - - SaveStateDescriptor(int s, const Common::String &d) : _thumbnail() { - char buf[16]; - sprintf(buf, "%d", s); - setVal("save_slot", buf); - setVal("description", d); - } - - SaveStateDescriptor(const Common::String &s, const Common::String &d) : _thumbnail() { - setVal("save_slot", s); - setVal("description", d); - } - - /** The saveslot id, as it would be passed to the "-x" command line switch. */ - Common::String &save_slot() { return getVal("save_slot"); } - - /** The saveslot id, as it would be passed to the "-x" command line switch (read-only variant). */ - const Common::String &save_slot() const { return getVal("save_slot"); } - - /** A human readable description of the save state. */ - Common::String &description() { return getVal("description"); } - - /** A human readable description of the save state (read-only variant). */ - const Common::String &description() const { return getVal("description"); } - - /** Optional entries only included when querying via MetaEngine::querySaveMetaInfo */ - - /** - * Returns the value of a given key as boolean. - * It accepts 'true', 'yes' and '1' for true and - * 'false', 'no' and '0' for false. - * (FIXME:) On unknown value it errors out ScummVM. - * On unknown key it returns false as default. - */ - bool getBool(const Common::String &key) const; - - /** - * 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 - * ratio of the game. If another ratio is required, contact the core team. - */ - const Graphics::Surface *getThumbnail() const { return _thumbnail.get(); } - - /** - * Set a thumbnail graphics surface representing the savestate visually. - * Ownership of the surface is transferred to the SaveStateDescriptor. - * Hence the caller must not delete the surface. - */ - void setThumbnail(Graphics::Surface *t); - - /** - * Sets the 'save_date' key properly, based on the given values. - */ - void setSaveDate(int year, int month, int day); - - /** - * Sets the 'save_time' key properly, based on the given values. - */ - void setSaveTime(int hour, int min); - - /** - * Sets the 'play_time' key properly, based on the given values. - */ - void setPlayTime(int hours, int minutes); -}; - -/** List of savestates. */ -typedef Common::Array SaveStateList; - #endif diff --git a/engines/metaengine.h b/engines/metaengine.h index dd62c6cc68..ab549eee82 100644 --- a/engines/metaengine.h +++ b/engines/metaengine.h @@ -29,6 +29,8 @@ #include "common/error.h" #include "engines/game.h" +#include "engines/savestate.h" + #include "base/plugins.h" class Engine; diff --git a/engines/module.mk b/engines/module.mk index 7fd9980d4b..643310002f 100644 --- a/engines/module.mk +++ b/engines/module.mk @@ -4,7 +4,8 @@ MODULE_OBJS := \ advancedDetector.o \ dialogs.o \ engine.o \ - game.o + game.o \ + savestate.o # Include common rules include $(srcdir)/rules.mk diff --git a/engines/savestate.cpp b/engines/savestate.cpp new file mode 100644 index 0000000000..32aa39c118 --- /dev/null +++ b/engines/savestate.cpp @@ -0,0 +1,77 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "engines/savestate.h" +#include "graphics/surface.h" + +void SaveStateDescriptor::setThumbnail(Graphics::Surface *t) { + if (_thumbnail.get() == t) + return; + + _thumbnail = Common::SharedPtr(t, Graphics::SharedPtrSurfaceDeleter()); +} + +bool SaveStateDescriptor::getBool(const Common::String &key) const { + if (contains(key)) { + Common::String value = getVal(key); + if (value.equalsIgnoreCase("true") || + value.equalsIgnoreCase("yes") || + value.equals("1")) + return true; + if (value.equalsIgnoreCase("false") || + value.equalsIgnoreCase("no") || + value.equals("0")) + return false; + error("SaveStateDescriptor: %s '%s' has unknown value '%s' for boolean '%s'", + save_slot().c_str(), description().c_str(), value.c_str(), key.c_str()); + } + return false; +} + +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); + setVal("save_date", buffer); +} + +void SaveStateDescriptor::setSaveTime(int hour, int min) { + char buffer[32]; + snprintf(buffer, 32, "%.2d:%.2d", hour, min); + setVal("save_time", buffer); +} + +void SaveStateDescriptor::setPlayTime(int hours, int minutes) { + char buffer[32]; + snprintf(buffer, 32, "%.2d:%.2d", hours, minutes); + setVal("play_time", buffer); +} diff --git a/engines/savestate.h b/engines/savestate.h new file mode 100644 index 0000000000..ddbcea1acf --- /dev/null +++ b/engines/savestate.h @@ -0,0 +1,136 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef ENGINES_SAVESTATE_H +#define ENGINES_SAVESTATE_H + +#include "common/array.h" +#include "common/hash-str.h" +#include "common/ptr.h" + + +namespace Graphics { + struct Surface; +} + +/** + * A hashmap describing details about a given save state. + * TODO + * Guaranteed to contain save_slot and description values. + * Additional ideas: Playtime, creation date, thumbnail, ... + */ +class SaveStateDescriptor : public Common::StringMap { +protected: + Common::SharedPtr _thumbnail; // can be 0 + +public: + SaveStateDescriptor() : _thumbnail() { + setVal("save_slot", "-1"); // FIXME: default to 0 (first slot) or to -1 (invalid slot) ? + setVal("description", ""); + } + + SaveStateDescriptor(int s, const Common::String &d) : _thumbnail() { + char buf[16]; + sprintf(buf, "%d", s); + setVal("save_slot", buf); + setVal("description", d); + } + + SaveStateDescriptor(const Common::String &s, const Common::String &d) : _thumbnail() { + setVal("save_slot", s); + setVal("description", d); + } + + /** The saveslot id, as it would be passed to the "-x" command line switch. */ + Common::String &save_slot() { return getVal("save_slot"); } + + /** The saveslot id, as it would be passed to the "-x" command line switch (read-only variant). */ + const Common::String &save_slot() const { return getVal("save_slot"); } + + /** A human readable description of the save state. */ + Common::String &description() { return getVal("description"); } + + /** A human readable description of the save state (read-only variant). */ + const Common::String &description() const { return getVal("description"); } + + /** Optional entries only included when querying via MetaEngine::querySaveMetaInfo */ + + /** + * Returns the value of a given key as boolean. + * It accepts 'true', 'yes' and '1' for true and + * 'false', 'no' and '0' for false. + * (FIXME:) On unknown value it errors out ScummVM. + * On unknown key it returns false as default. + */ + bool getBool(const Common::String &key) const; + + /** + * 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 + * ratio of the game. If another ratio is required, contact the core team. + */ + const Graphics::Surface *getThumbnail() const { return _thumbnail.get(); } + + /** + * Set a thumbnail graphics surface representing the savestate visually. + * Ownership of the surface is transferred to the SaveStateDescriptor. + * Hence the caller must not delete the surface. + */ + void setThumbnail(Graphics::Surface *t); + + /** + * Sets the 'save_date' key properly, based on the given values. + */ + void setSaveDate(int year, int month, int day); + + /** + * Sets the 'save_time' key properly, based on the given values. + */ + void setSaveTime(int hour, int min); + + /** + * Sets the 'play_time' key properly, based on the given values. + */ + void setPlayTime(int hours, int minutes); +}; + +/** List of savestates. */ +typedef Common::Array SaveStateList; + + +#endif -- cgit v1.2.3