[Scummvm-cvs-logs] SF.net SVN: scummvm: [22021] scummvm/trunk/engines/scumm

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue Apr 18 22:48:00 CEST 2006


Revision: 22021
Author:   lordhoto
Date:     2006-04-18 22:46:57 -0700 (Tue, 18 Apr 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22021&view=rev

Log Message:
-----------
Merges SaveLoadChooser and SaveLoadChooserEx.

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/dialogs.cpp
    scummvm/trunk/engines/scumm/dialogs.h
Modified: scummvm/trunk/engines/scumm/dialogs.cpp
===================================================================
--- scummvm/trunk/engines/scumm/dialogs.cpp	2006-04-19 05:46:21 UTC (rev 22020)
+++ scummvm/trunk/engines/scumm/dialogs.cpp	2006-04-19 05:46:57 UTC (rev 22021)
@@ -268,95 +268,11 @@
 	kOptionsCmd = 'OPTN',
 	kHelpCmd = 'HELP',
 	kAboutCmd = 'ABOU',
-	kQuitCmd = 'QUIT'
+	kQuitCmd = 'QUIT',
+	kChooseCmd = 'CHOS'
 };
 
-class SaveLoadChooser : public GUI::ChooserDialog, public BaseSaveLoadChooser {
-	typedef Common::String String;
-	typedef Common::StringList StringList;
-protected:
-	bool _saveMode;
-
-public:
-	SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode);
-
-	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
-	void handleScreenChanged() { ChooserDialog::handleScreenChanged(); }
-	const String &getResultString() const;
-	void setList(const StringList& list) { GUI_ChooserDialog::setList(list); }
-	int runModal() { return GUI_ChooserDialog::runModal(); }
-};
-
-SaveLoadChooser::SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode)
-	: GUI::ChooserDialog(title, "scummsaveload_", buttonLabel), _saveMode(saveMode) {
-
-	_list->setEditable(saveMode);
-	_list->setNumberingMode(saveMode ? GUI::kListNumberingOne : GUI::kListNumberingZero);
-}
-
-const Common::String &SaveLoadChooser::getResultString() const {
-	return _list->getSelectedString();
-}
-
-void SaveLoadChooser::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
-	int selItem = _list->getSelected();
-	switch (cmd) {
-	case GUI::kListItemActivatedCmd:
-	case GUI::kListItemDoubleClickedCmd:
-		if (selItem >= 0) {
-			if (_saveMode || !getResultString().empty()) {
-				setResult(selItem);
-				close();
-			}
-		}
-		break;
-	case GUI::kListSelectionChangedCmd:
-		if (_saveMode) {
-			_list->startEditMode();
-		}
-		// Disable button if nothing is selected, or (in load mode) if an empty
-		// list item is selected. We allow choosing an empty item in save mode
-		// because we then just assign a default name.
-		_chooseButton->setEnabled(selItem >= 0 && (_saveMode || !getResultString().empty()));
-		_chooseButton->draw();
-		break;
-	default:
-		GUI_ChooserDialog::handleCommand(sender, cmd, data);
-	}
-}
-
-#pragma mark -
-
-enum {
-	kChooseCmd = 'Chos'
-};
-
-// only for use with >= 640x400 resolutions
-class SaveLoadChooserEx : public GUI::Dialog, public BaseSaveLoadChooser {
-	typedef Common::String String;
-	typedef Common::StringList StringList;
-protected:
-	bool _saveMode;
-	GUI::ListWidget		*_list;
-	GUI::ButtonWidget	*_chooseButton;
-	GUI::GraphicsWidget	*_gfxWidget;
-	GUI::StaticTextWidget	*_date;
-	GUI::StaticTextWidget	*_time;
-	GUI::StaticTextWidget	*_playtime;
-	ScummEngine			*_scumm;
-
-	virtual void handleScreenChanged();
-
-public:
-	SaveLoadChooserEx(const String &title, const String &buttonLabel, bool saveMode, ScummEngine *engine);
-
-	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
-	const String &getResultString() const;
-	void setList(const StringList& list);
-	int runModal();
-};
-
-SaveLoadChooserEx::SaveLoadChooserEx(const String &title, const String &buttonLabel, bool saveMode, ScummEngine *engine)
+SaveLoadChooser::SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode, ScummEngine *engine)
 	: Dialog("scummsaveload"), _saveMode(saveMode), _list(0), _chooseButton(0), _gfxWidget(0), _scumm(engine) {
 
 	_drawingHints |= GUI::THEME_HINT_SPECIAL_COLOR;
@@ -368,70 +284,78 @@
 	_list->setEditable(saveMode);
 	_list->setNumberingMode(saveMode ? GUI::kListNumberingOne : GUI::kListNumberingZero);
 
-	int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x");
-	int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y");
+	if (g_gui.evaluator()->getVar("scummsaveload_extinfo.visible") == 1) {
+		int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x");
+		int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y");
 
-	// Add the thumbnail display
-	_gfxWidget = new GUI::GraphicsWidget(this,
-			thumbX, thumbY,
-			kThumbnailWidth + 8,
-			((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8);
-	_gfxWidget->setFlags(GUI::WIDGET_BORDER);
+		// Add the thumbnail display
+		_gfxWidget = new GUI::GraphicsWidget(this,
+				thumbX, thumbY,
+				kThumbnailWidth + 8,
+				((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8);
+		_gfxWidget->setFlags(GUI::WIDGET_BORDER);
+	
+		int height = thumbY + ((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8;
+	
+		_date = new StaticTextWidget(this,
+						thumbX,
+						height,
+						kThumbnailWidth + 8,
+						kLineHeight,
+						"No date saved",
+						kTextAlignCenter);
+	
+		height += kLineHeight;
+	
+		_time = new StaticTextWidget(this,
+						thumbX,
+						height,
+						kThumbnailWidth + 8,
+						kLineHeight,
+						"No time saved",
+						kTextAlignCenter);
+	
+		height += kLineHeight;
+	
+		_playtime = new StaticTextWidget(this,
+						thumbX,
+						height,
+						kThumbnailWidth + 8,
+						kLineHeight,
+						"No playtime saved",
+						kTextAlignCenter);
+	} else {
+		_gfxWidget = 0;
+		_date = 0;
+		_time = 0;
+		_playtime = 0;
+	}
 
-	int height = thumbY + ((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8;
-
-	_date = new StaticTextWidget(this,
-					thumbX,
-					height,
-					kThumbnailWidth + 8,
-					kLineHeight,
-					"No date saved",
-					kTextAlignCenter);
-	_date->setFlags(GUI::WIDGET_CLEARBG);
-
-	height += kLineHeight;
-
-	_time = new StaticTextWidget(this,
-					thumbX,
-					height,
-					kThumbnailWidth + 8,
-					kLineHeight,
-					"No time saved",
-					kTextAlignCenter);
-	_time->setFlags(GUI::WIDGET_CLEARBG);
-
-	height += kLineHeight;
-
-	_playtime = new StaticTextWidget(this,
-					thumbX,
-					height,
-					kThumbnailWidth + 8,
-					kLineHeight,
-					"No playtime saved",
-					kTextAlignCenter);
-	_playtime->setFlags(GUI::WIDGET_CLEARBG);
-
 	// Buttons
 	new GUI::ButtonWidget(this, "scummsaveload_cancel", "Cancel", kCloseCmd, 0);
 	_chooseButton = new GUI::ButtonWidget(this, "scummsaveload_choose", buttonLabel, kChooseCmd, 0);
 	_chooseButton->setEnabled(false);
 }
 
-const Common::String &SaveLoadChooserEx::getResultString() const {
+SaveLoadChooser::~SaveLoadChooser() {
+}
+
+const Common::String &SaveLoadChooser::getResultString() const {
 	return _list->getSelectedString();
 }
 
-void SaveLoadChooserEx::setList(const StringList& list) {
+void SaveLoadChooser::setList(const StringList& list) {
 	_list->setList(list);
 }
 
-int SaveLoadChooserEx::runModal() {
-	_gfxWidget->setGfx(0);
+int SaveLoadChooser::runModal() {
+	if (_gfxWidget)
+		_gfxWidget->setGfx(0);
 	int ret = Dialog::runModal();
 	return ret;
 }
 
-void SaveLoadChooserEx::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+void SaveLoadChooser::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
 	int selItem = _list->getSelected();
 	switch (cmd) {
 	case GUI::kListItemActivatedCmd:
@@ -450,49 +374,8 @@
 		close();
 		break;
 	case GUI::kListSelectionChangedCmd: {
-		Graphics::Surface *thumb;
-		thumb = _scumm->loadThumbnailFromSlot(_saveMode ? selItem + 1 : selItem);
-		_gfxWidget->setGfx(thumb);
-		if (thumb)
-			thumb->free();
-		delete thumb;
-		_gfxWidget->draw();
-
-		InfoStuff infos;
-		memset(&infos, 0, sizeof(InfoStuff));
-		char buffer[32];
-		if (_scumm->loadInfosFromSlot(_saveMode ? selItem + 1 : selItem, &infos)) {
-			snprintf(buffer, 32, "Date: %.2d.%.2d.%.4d",
-				(infos.date >> 24) & 0xFF, (infos.date >> 16) & 0xFF,
-				infos.date & 0xFFFF);
-			_date->setLabel(buffer);
-			_date->draw();
-			
-			snprintf(buffer, 32, "Time: %.2d:%.2d",
-				(infos.time >> 8) & 0xFF, infos.time & 0xFF);
-			_time->setLabel(buffer);
-			_time->draw();
-
-			int minutes = infos.playtime / 60;
-			int hours = minutes / 60;
-			minutes %= 60;
-
-			snprintf(buffer, 32, "Playtime: %.2d:%.2d",
-				hours & 0xFF, minutes & 0xFF);
-			_playtime->setLabel(buffer);
-			_playtime->draw();
-		} else {
-			snprintf(buffer, 32, "No date saved");
-			_date->setLabel(buffer);
-			_date->draw();
-			
-			snprintf(buffer, 32, "No time saved");
-			_time->setLabel(buffer);
-			_time->draw();
-
-			snprintf(buffer, 32, "No playtime saved");
-			_playtime->setLabel(buffer);
-			_playtime->draw();
+		if (_gfxWidget) {
+			updateInfos();
 		}
 
 		if (_saveMode) {
@@ -511,28 +394,72 @@
 	}
 }
 
-void SaveLoadChooserEx::handleScreenChanged() {
-	Dialog::handleScreenChanged();
+void SaveLoadChooser::handleScreenChanged() {
+	if (g_gui.evaluator()->getVar("scummsaveload_extinfo.visible") == 1) {
+		int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x");
+		int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y");
+	
+		// Add the thumbnail display
+		if (!_gfxWidget) {
+			_gfxWidget = new GUI::GraphicsWidget(this, 0, 0, 0, 0);
+			_gfxWidget->setFlags(GUI::WIDGET_BORDER);
+		}
+		_gfxWidget->resize(thumbX, thumbY, kThumbnailWidth + 8,
+				((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8);
+	
+		int height = thumbY + ((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8;
 
-	int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x");
-	int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y");
+		if (!_date)
+			_date = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter);
+		_date->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
+	
+		height += kLineHeight;
 
-	// Add the thumbnail display
-	_gfxWidget->resize(thumbX, thumbY, kThumbnailWidth + 8,
-			((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8);
+		if (!_time)
+			_time = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter);
+		_time->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
+	
+		height += kLineHeight;
 
-	int height = thumbY + ((_scumm->_system->getHeight() % 200 && _scumm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8;
+		if (!_playtime)
+			_playtime = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter);
+		_playtime->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
+	
+		updateInfos();
+	} else {
+		if (_gfxWidget) {
+			deleteWidget(_gfxWidget);
+			_gfxWidget->setNext(0);
+			delete _gfxWidget;
+			_gfxWidget = 0;
+		}
 
-	_date->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
+		if (_date) {
+			deleteWidget(_date);
+			_date->setNext(0);
+			delete _date;
+			_date = 0;
+		}
 
-	height += kLineHeight;
+		if (_time) {
+			deleteWidget(_time);
+			_time->setNext(0);
+			delete _time;
+			_time = 0;
+		}
 
-	_time->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
+		if (_playtime) {
+			deleteWidget(_playtime);
+			_playtime->setNext(0);
+			delete _playtime;
+			_playtime = 0;
+		}
+	}
 
-	height += kLineHeight;
+	Dialog::handleScreenChanged();
+}
 
-	_playtime->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight);
-
+void SaveLoadChooser::updateInfos() {
 	int selItem = _list->getSelected();
 	Graphics::Surface *thumb;
 	thumb = _scumm->loadThumbnailFromSlot(_saveMode ? selItem + 1 : selItem);
@@ -540,6 +467,44 @@
 	if (thumb)
 		thumb->free();
 	delete thumb;
+	_gfxWidget->draw();
+
+	InfoStuff infos;
+	memset(&infos, 0, sizeof(InfoStuff));
+	char buffer[32];
+	if (_scumm->loadInfosFromSlot(_saveMode ? selItem + 1 : selItem, &infos)) {
+		snprintf(buffer, 32, "Date: %.2d.%.2d.%.4d",
+			(infos.date >> 24) & 0xFF, (infos.date >> 16) & 0xFF,
+			infos.date & 0xFFFF);
+		_date->setLabel(buffer);
+		_date->draw();
+
+		snprintf(buffer, 32, "Time: %.2d:%.2d",
+			(infos.time >> 8) & 0xFF, infos.time & 0xFF);
+		_time->setLabel(buffer);
+		_time->draw();
+
+		int minutes = infos.playtime / 60;
+		int hours = minutes / 60;
+		minutes %= 60;
+
+		snprintf(buffer, 32, "Playtime: %.2d:%.2d",
+			hours & 0xFF, minutes & 0xFF);
+		_playtime->setLabel(buffer);
+		_playtime->draw();
+	} else {
+		snprintf(buffer, 32, "No date saved");
+		_date->setLabel(buffer);
+		_date->draw();
+
+		snprintf(buffer, 32, "No time saved");
+		_time->setLabel(buffer);
+		_time->draw();
+
+		snprintf(buffer, 32, "No playtime saved");
+		_playtime->setLabel(buffer);
+		_playtime->draw();
+	}
 }
 
 #pragma mark -
@@ -587,13 +552,8 @@
 #ifndef DISABLE_HELP
 	_helpDialog = new HelpDialog(scumm);
 #endif
-	if (scumm->_system->getOverlayWidth() <= 320) {
-		_saveDialog = new SaveLoadChooser("Save game:", "Save", true);
-		_loadDialog = new SaveLoadChooser("Load game:", "Load", false);
-	} else {
-		_saveDialog = new SaveLoadChooserEx("Save game:", "Save", true, scumm);
-		_loadDialog = new SaveLoadChooserEx("Load game:", "Load", false, scumm);
-	}
+	_saveDialog = new SaveLoadChooser("Save game:", "Save", true, scumm);
+	_loadDialog = new SaveLoadChooser("Load game:", "Load", false, scumm);
 }
 
 MainMenuDialog::~MainMenuDialog() {
@@ -638,14 +598,17 @@
 }
 
 void MainMenuDialog::handleScreenChanged() {
+	ScummDialog::handleScreenChanged();
+
 	_optionsDialog->handleScreenChanged();
 	_aboutDialog->handleScreenChanged();
+
 	_saveDialog->handleScreenChanged();
 	_loadDialog->handleScreenChanged();
+
 #ifndef DISABLE_HELP
 	_helpDialog->handleScreenChanged();
 #endif
-	ScummDialog::handleScreenChanged();
 }
 
 void MainMenuDialog::save() {
@@ -677,6 +640,11 @@
 	}
 }
 
+void MainMenuDialog::open() {
+	handleScreenChanged();
+	Dialog::open();
+}
+
 #pragma mark -
 
 enum {

Modified: scummvm/trunk/engines/scumm/dialogs.h
===================================================================
--- scummvm/trunk/engines/scumm/dialogs.h	2006-04-19 05:46:21 UTC (rev 22020)
+++ scummvm/trunk/engines/scumm/dialogs.h	2006-04-19 05:46:57 UTC (rev 22021)
@@ -33,6 +33,7 @@
 
 namespace GUI {
 	class ListWidget;
+	class CommandSender;
 }
 
 
@@ -53,19 +54,31 @@
 	const String queryResString(int stringno);
 };
 
-// to have a base for all different Save/Load Choosers
-// currently only for SaveLoadChooser (320x200)
-// and for SaveLoadChooserEx (640x400/640x480)
-class BaseSaveLoadChooser
-{
+class SaveLoadChooser : public GUI::Dialog {
+	typedef Common::String String;
+	typedef Common::StringList StringList;
+protected:
+	bool _saveMode;
+	GUI::ListWidget		*_list;
+	GUI::ButtonWidget	*_chooseButton;
+	GUI::GraphicsWidget	*_gfxWidget;
+	GUI::StaticTextWidget	*_date;
+	GUI::StaticTextWidget	*_time;
+	GUI::StaticTextWidget	*_playtime;
+	ScummEngine			*_scumm;
+
+	void updateInfos();
 public:
-	virtual ~BaseSaveLoadChooser() {};
+	SaveLoadChooser(const String &title, const String &buttonLabel, bool saveMode, ScummEngine *engine);
+	~SaveLoadChooser();
 
-	virtual const Common::String &getResultString() const = 0;
-	virtual void setList(const Common::StringList& list) = 0;
-	virtual int runModal() = 0;
+	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
+	const String &getResultString() const;
+	void setList(const StringList& list);
+	int runModal();
 
-	virtual void handleScreenChanged() = 0;
+	void handleScreenChanged();
+	
 };
 
 class MainMenuDialog : public ScummDialog {
@@ -81,11 +94,12 @@
 #ifndef DISABLE_HELP
 	GUI::Dialog		*_helpDialog;
 #endif
-	BaseSaveLoadChooser	*_saveDialog;
-	BaseSaveLoadChooser	*_loadDialog;
+	SaveLoadChooser	*_saveDialog;
+	SaveLoadChooser	*_loadDialog;
 
 	void save();
 	void load();
+	void open();
 };
 
 #ifndef DISABLE_HELP


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