[Scummvm-cvs-logs] CVS: scummvm/scumm dialogs.cpp,1.11,1.12 dialogs.h,1.4,1.5

Max Horn fingolfin at users.sourceforge.net
Fri Oct 18 18:23:03 CEST 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv24677/scumm

Modified Files:
	dialogs.cpp dialogs.h 
Log Message:
reworked the way the save/load dialog works. yup, still not perfect, but we're hopefully getting closer. Feedback welcome

Index: dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dialogs.cpp	16 Oct 2002 17:37:29 -0000	1.11
+++ dialogs.cpp	19 Oct 2002 01:22:41 -0000	1.12
@@ -307,47 +307,63 @@
 //  addResText(10, 7, 240, 16, 2);
 //  addResText(10, 7, 240, 16, 3);
 
-	addButton(200, 20, queryResString(4), kSaveCmd, 'S');	// Save
-	addButton(200, 40, queryResString(5), kLoadCmd, 'L');	// Load
+	_saveButton = (PushButtonWidget *)addPushButton(200, 20, queryResString(4), kSaveCmd, 'S');
+	_loadButton = (PushButtonWidget *)addPushButton(200, 40, queryResString(5), kLoadCmd, 'L');
 	addButton(200, 60, queryResString(6), kPlayCmd, 'P');	// Play
 	addButton(200, 80, queryCustomString(17), kOptionsCmd, 'O');	// Options
 	addButton(200, 100, queryResString(8), kQuitCmd, 'Q');	// Quit
 	
 	_savegameList = new ListWidget(this, 10, 20, 180, 90);
-	_savegameList->setNumberingMode(kListNumberingZero);
-	
-	// Get savegame names
-	ScummVM::StringList l;
-	char name[32];
+}
 
-	for (int i = 0; i <= 80; i++) {		// 80 - got this value from the old GUI
-		_scumm->getSavegameName(i, name);
-		l.push_back(name);
-	}
+void SaveLoadDialog::open()
+{
+	_saveMode = false;
+	_saveButton->setState(false);
+	_loadButton->setState(true);
+	fillList();
 
-	_savegameList->setList(l);
+	ScummDialog::open();
 }
 
 void SaveLoadDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data)
 {
 	switch (cmd) {
-	case kListItemActivatedCmd:
 	case kSaveCmd:
-		if (_savegameList->getSelected() >= 1 && !_savegameList->getSelectedString().isEmpty()) {
-			_scumm->_saveLoadSlot = _savegameList->getSelected();
-			_scumm->_saveLoadCompatible = false;
-			_scumm->_saveLoadFlag = 1;		// 1 for save, I assume (Painelf)
-			strcpy(_scumm->_saveLoadName, _savegameList->getSelectedString().c_str());
-			close();
+		if (!_saveMode) {
+			_saveMode = true;
+			_saveButton->setState(true);
+			_loadButton->setState(false);
+			fillList();
+			draw();
 		}
 		break;
-	case kListItemDoubleClickedCmd:
 	case kLoadCmd:
+		if (_saveMode) {
+			_saveMode = false;
+			_saveButton->setState(false);
+			_loadButton->setState(true);
+			fillList();
+			draw();
+		}
+		break;
+	case kListItemDoubleClickedCmd:
 		if (_savegameList->getSelected() >= 0 && !_savegameList->getSelectedString().isEmpty()) {
-			_scumm->_saveLoadSlot = _savegameList->getSelected();
-			_scumm->_saveLoadCompatible = false;
-			_scumm->_saveLoadFlag = 2;		// 2 for load. Magic number anyone?
-			close();
+			if (_saveMode) {
+				// Start editing the selected item, for saving
+				_savegameList->startEditMode();
+			} else {
+				load();
+			}
+		}
+		break;
+	case kListItemActivatedCmd:
+		if (_savegameList->getSelected() >= 0 && !_savegameList->getSelectedString().isEmpty()) {
+			if (_saveMode) {
+				save();
+			} else {
+				load();
+			}
 		}
 		break;
 	case kPlayCmd:
@@ -364,8 +380,44 @@
 	}
 }
 
+void SaveLoadDialog::fillList()
+{
+	// Get savegame names
+	ScummVM::StringList l;
+	char name[32];
+	int i = _saveMode ? 1 : 0;
+
+	for (; i <= 80; i++) {		// 80 - got this value from the old GUI
+		_scumm->getSavegameName(i, name);
+		l.push_back(name);
+	}
+
+	_savegameList->setList(l);
+	_savegameList->setNumberingMode(_saveMode ? kListNumberingOne : kListNumberingZero);
+}
+
+void SaveLoadDialog::save()
+{
+	// Save the selected item
+	_scumm->_saveLoadSlot = _savegameList->getSelected() + 1;
+	_scumm->_saveLoadCompatible = false;
+	_scumm->_saveLoadFlag = 1;		// 1 for save, I assume (Painelf)
+	strcpy(_scumm->_saveLoadName, _savegameList->getSelectedString().c_str());
+	close();
+}
+
+void SaveLoadDialog::load()
+{
+	// Load the selected item
+	_scumm->_saveLoadSlot = _savegameList->getSelected();
+	_scumm->_saveLoadCompatible = false;
+	_scumm->_saveLoadFlag = 2;		// 2 for load. Magic number anyone?
+	close();
+}
+
 
 #pragma mark -
+
 
 enum {
 	kMasterVolumeChanged	= 'mavc',

Index: dialogs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- dialogs.h	12 Oct 2002 00:26:24 -0000	1.4
+++ dialogs.h	19 Oct 2002 01:22:41 -0000	1.5
@@ -51,10 +51,21 @@
 public:
 	SaveLoadDialog(NewGui *gui, Scumm *scumm);
 
+	virtual void open();
+
 	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
 
 protected:
-	ListWidget	*_savegameList;
+	ListWidget       *_savegameList;
+	
+	PushButtonWidget *_saveButton;
+	PushButtonWidget *_loadButton;
+	
+	bool			_saveMode;
+
+	void fillList();
+	void save();
+	void load();
 };
 
 





More information about the Scummvm-git-logs mailing list