[Scummvm-cvs-logs] SF.net SVN: scummvm: [31395] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sat Apr 5 04:22:12 CEST 2008


Revision: 31395
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31395&view=rev
Author:   lordhoto
Date:     2008-04-04 19:22:11 -0700 (Fri, 04 Apr 2008)

Log Message:
-----------
- Implemented delete savegame menu
- Reverted hack introduced with last commit

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui.cpp
    scummvm/trunk/engines/kyra/gui_v2.cpp
    scummvm/trunk/engines/kyra/gui_v2.h
    scummvm/trunk/engines/kyra/staticres.cpp

Modified: scummvm/trunk/engines/kyra/gui.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui.cpp	2008-04-05 01:55:44 UTC (rev 31394)
+++ scummvm/trunk/engines/kyra/gui.cpp	2008-04-05 02:22:11 UTC (rev 31395)
@@ -72,8 +72,6 @@
 }
 
 void GUI::initMenu(Menu &menu) {
-	// HACK: else sometimes the scroll button appears after loading a savegame in kyrandia 2
-	updateAllMenuButtons();
 	_menuButtonList = 0;
 
 	_screen->hideMouse();

Modified: scummvm/trunk/engines/kyra/gui_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_v2.cpp	2008-04-05 01:55:44 UTC (rev 31394)
+++ scummvm/trunk/engines/kyra/gui_v2.cpp	2008-04-05 02:22:11 UTC (rev 31395)
@@ -1194,6 +1194,7 @@
 		_isLoadMenu = false;
 		_isSaveMenu = false;
 		_isOptionsMenu = false;
+		_isDeleteMenu = false;
 	}
 }
 
@@ -1423,7 +1424,7 @@
 int GUI_v2::scrollUpButton(Button *button) {
 	updateMenuButton(button);
 
-	if (_savegameOffset == 0)
+	if (_savegameOffset == (_isDeleteMenu ? 1 : 0))
 		return 0;
 
 	--_savegameOffset;
@@ -1431,7 +1432,7 @@
 		setupSavegameNames(_loadMenu, 5);
 		// original calls something different here...
 		initMenu(_loadMenu);
-	} else if (_isSaveMenu) {
+	} else if (_isSaveMenu || _isDeleteMenu) {
 		setupSavegameNames(_saveMenu, 5);
 		// original calls something different here...
 		initMenu(_saveMenu);
@@ -1445,13 +1446,13 @@
 	++_savegameOffset;
 
 	if (uint(_savegameOffset + 5) >= _saveSlots.size())
-		_savegameOffset = MAX<int>(_saveSlots.size() - 5, 0);
+		_savegameOffset = MAX<int>(_saveSlots.size() - 5, _isDeleteMenu ? 1 : 0);
 
 	if (_isLoadMenu) {
 		setupSavegameNames(_loadMenu, 5);
 		// original calls something different here...
 		initMenu(_loadMenu);
-	} else if (_isSaveMenu) {
+	} else if (_isSaveMenu || _isDeleteMenu) {
 		setupSavegameNames(_saveMenu, 5);
 		// original calls something different here...
 		initMenu(_saveMenu);
@@ -1861,14 +1862,14 @@
 	MenuItem &item = _saveMenu.item[caller->index-0x10];
 	
 	if (item.saveSlot >= 0) {
-		//if (_isDeleteMenu) {
-		//	_slotToDelete = item.saveSlot;
-		//	_isDeleteMenu = false;
-		//	return 0;
-		//else {
+		if (_isDeleteMenu) {
+			_slotToDelete = item.saveSlot;
+			_isDeleteMenu = false;
+			return 0;
+		} else {
 			_saveSlot = item.saveSlot;
 			strcpy(_saveDescription, _vm->getTableString(item.itemId, _vm->_optionsBuffer, 0));
-		//}
+		}
 	} else if (item.saveSlot == -2) {
 		_saveSlot = getNextSavegameSlot();
 		memset(_saveDescription, 0, sizeof(_saveDescription));
@@ -1884,7 +1885,7 @@
 	backUpPage1(_vm->_screenBuffer);
 	if (desc) {
 		_isSaveMenu = false;
-		//_isDeleteMenu = false;
+		_isDeleteMenu = false;
 	} else {
 		initMenu(_saveMenu);
 	}
@@ -1895,11 +1896,68 @@
 int GUI_v2::cancelSaveMenu(Button *caller) {
 	updateMenuButton(caller);
 	_isSaveMenu = false;
-	//_isDeleteMenu = false;
+	_isDeleteMenu = false;
 	_noSaveProcess = true;
 	return 0;
 }
 
+int GUI_v2::deleteMenu(Button *caller) {
+	updateSaveList();
+
+	updateMenuButton(caller);
+	if (_saveSlots.size() < 2) {
+		_vm->snd_playSoundEffect(0x0D);
+		return 0;
+	}
+
+	do {
+		restorePage1(_vm->_screenBuffer);
+		backUpPage1(_vm->_screenBuffer);
+		_savegameOffset = 1;
+		_saveMenu.menuNameId = 35;
+		setupSavegameNames(_saveMenu, 5);
+		initMenu(_saveMenu);
+		_isDeleteMenu = true;
+		_slotToDelete = -1;
+		updateAllMenuButtons();
+
+		while (_isDeleteMenu) {
+			processHighlights(_saveMenu, _vm->_mouseX, _vm->_mouseY);
+			getInput();
+		}
+		
+		if (_slotToDelete < 1) {
+			restorePage1(_vm->_screenBuffer);
+			backUpPage1(_vm->_screenBuffer);
+			initMenu(*_currentMenu);
+			updateAllMenuButtons();
+			_saveMenu.menuNameId = 9;
+			return 0;
+		}
+	} while (choiceDialog(0x24, 1) == 0);
+
+	restorePage1(_vm->_screenBuffer);
+	backUpPage1(_vm->_screenBuffer);
+	initMenu(*_currentMenu);
+	updateAllMenuButtons();
+	_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(_slotToDelete));
+	Common::Array<int>::iterator i = Common::find(_saveSlots.begin(), _saveSlots.end(), _slotToDelete);
+	int lastSlot = _slotToDelete;
+	while (i != _saveSlots.end()) {
+		++i;
+		if (i == _saveSlots.end())
+			break;
+		if (lastSlot + 1 != *i)
+			break;
+		Common::String oldName = _vm->getSavegameFilename(*i);
+		Common::String newName = _vm->getSavegameFilename(*i-1);
+		_vm->_saveFileMan->renameSavefile(oldName.c_str(), newName.c_str());
+		lastSlot = *i;
+	}	
+	_saveMenu.menuNameId = 9;
+	return 0;
+}
+
 const char *GUI_v2::nameInputProcess(char *buffer, int x, int y, uint8 c1, uint8 c2, uint8 c3, int bufferSize) {
 	bool running = true;
 	int curPos = strlen(buffer);

Modified: scummvm/trunk/engines/kyra/gui_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/gui_v2.h	2008-04-05 01:55:44 UTC (rev 31394)
+++ scummvm/trunk/engines/kyra/gui_v2.h	2008-04-05 02:22:11 UTC (rev 31395)
@@ -156,6 +156,7 @@
 	bool _isLoadMenu;
 	bool _isDeathMenu;
 	bool _isSaveMenu;
+	bool _isDeleteMenu;
 	bool _isChoiceMenu;
 	bool _isOptionsMenu;
 	bool _madeSave;
@@ -206,6 +207,10 @@
 	int clickSaveSlot(Button *caller);
 	int cancelSaveMenu(Button *caller);
 
+	// delete menu
+	int _slotToDelete;
+	int deleteMenu(Button *caller);
+
 	// savename menu
 	bool _finishNameInput, _cancelNameInput;
 	Common::KeyState _keyPressed;

Modified: scummvm/trunk/engines/kyra/staticres.cpp
===================================================================
--- scummvm/trunk/engines/kyra/staticres.cpp	2008-04-05 01:55:44 UTC (rev 31394)
+++ scummvm/trunk/engines/kyra/staticres.cpp	2008-04-05 02:22:11 UTC (rev 31395)
@@ -1508,6 +1508,7 @@
 	GUI_V2_MENU_ITEM(_mainMenu.item[1], 1, 0x03, -1, 0x2F, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
 	_mainMenu.item[1].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::saveMenu);
 	GUI_V2_MENU_ITEM(_mainMenu.item[2], 1, 0x23, -1, 0x40, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+	_mainMenu.item[2].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::deleteMenu);
 	GUI_V2_MENU_ITEM(_mainMenu.item[3], 1, 0x04, -1, 0x51, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
 	_mainMenu.item[3].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::gameOptions);
 	GUI_V2_MENU_ITEM(_mainMenu.item[4], 1, 0x25, -1, 0x62, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);


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