[Scummvm-git-logs] scummvm master -> cec5900287c81aa13e47b768aeaea472f4361f2d

OMGPizzaGuy noreply at scummvm.org
Sun Jan 28 20:14:00 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
cec5900287 ULTIMA8: Show last save page when opening save and load gump


Commit: cec5900287c81aa13e47b768aeaea472f4361f2d
    https://github.com/scummvm/scummvm/commit/cec5900287c81aa13e47b768aeaea472f4361f2d
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-01-28T14:13:35-06:00

Commit Message:
ULTIMA8: Show last save page when opening save and load gump

Changed paths:
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.h
    engines/ultima/ultima8/gumps/u8_save_gump.cpp


diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index cb8957b331b..c89ce78b687 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -35,8 +35,7 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(PagedGump)
 PagedGump::PagedGump(int left, int right, int top, int shape):
 	ModalGump(0, 0, 5, 5), _leftOff(left), _rightOff(right), _topOff(top),
 	_gumpShape(shape), _nextButton(nullptr), _prevButton(nullptr),
-	_buttonsEnabled(true) {
-	_current = _gumps.end();
+	_current(0), _buttonsEnabled(true) {
 }
 
 PagedGump::~PagedGump(void) {
@@ -88,8 +87,9 @@ void PagedGump::onMouseDouble(int button, int32 mx, int32 my) {
 }
 
 bool PagedGump::OnKeyDown(int key, int mod) {
-	if (_current != _gumps.end())
-		if ((*_current)->OnKeyDown(key, mod)) return true;
+	if (_current < _gumps.size())
+		if (_gumps[_current]->OnKeyDown(key, mod))
+			return true;
 
 	switch (key) {
 	case Common::KEYCODE_ESCAPE:
@@ -110,25 +110,25 @@ void PagedGump::ChildNotify(Gump *child, uint32 message) {
 
 	if (message == ButtonWidget::BUTTON_UP) {
 		if (cid == _nextButton->getObjId()) {
-			if (_current + 1 != _gumps.end()) {
-				(*_current)->HideGump();
+			if (_current + 1 < _gumps.size()) {
+				_gumps[_current]->HideGump();
 				++_current;
-				(*_current)->UnhideGump();
-				(*_current)->MakeFocus();
+				_gumps[_current]->UnhideGump();
+				_gumps[_current]->MakeFocus();
 
-				if (_current + 1 == _gumps.end())
+				if (_current + 1 == _gumps.size())
 					_nextButton->HideGump();
 
 				_prevButton->UnhideGump();
 			}
 		} else if (cid == _prevButton->getObjId()) {
-			if (_current != _gumps.begin()) {
-				(*_current)->HideGump();
+			if (_current > 0) {
+				_gumps[_current]->HideGump();
 				--_current;
-				(*_current)->UnhideGump();
-				(*_current)->MakeFocus();
+				_gumps[_current]->UnhideGump();
+				_gumps[_current]->MakeFocus();
 
-				if (_current == _gumps.begin())
+				if (_current == 0)
 					_prevButton->HideGump();
 
 				_nextButton->UnhideGump();
@@ -143,17 +143,37 @@ void PagedGump::addPage(Gump *g) {
 	g->HideGump();
 	_gumps.push_back(g);
 
-	_current = _gumps.begin();
-	(*_current)->UnhideGump();
-	if (_focusChild != *_current)
-		(*_current)->MakeFocus();
+	_current = 0;
+	_gumps[_current]->UnhideGump();
+	if (_focusChild != _gumps[_current])
+		_gumps[_current]->MakeFocus();
 
-	if (_current + 1 == _gumps.end())
+	if (_current + 1 == _gumps.size())
 		_nextButton->HideGump();
 	else
 		_nextButton->UnhideGump();
 }
 
+void PagedGump::showPage(uint index) {
+	if (index >= _gumps.size())
+		return;
+
+	_gumps[_current]->HideGump();
+	_current = index;
+	_gumps[_current]->UnhideGump();
+	_gumps[_current]->MakeFocus();
+
+	if (_current + 1 == _gumps.size())
+		_nextButton->HideGump();
+	else
+		_nextButton->UnhideGump();
+
+	if (_current == 0)
+		_prevButton->HideGump();
+	else
+		_prevButton->UnhideGump();
+}
+
 bool PagedGump::loadData(Common::ReadStream *rs) {
 	warning("Trying to load ModalGump");
 	return false;
diff --git a/engines/ultima/ultima8/gumps/paged_gump.h b/engines/ultima/ultima8/gumps/paged_gump.h
index 73cb2df1d6f..065b74508a5 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.h
+++ b/engines/ultima/ultima8/gumps/paged_gump.h
@@ -51,6 +51,7 @@ public:
 
 	//! add a page. Note: g already has to be a child gump.
 	void addPage(Gump *g);
+	void showPage(uint index);
 
 	void enableButtons(bool enabled) {
 		_buttonsEnabled = enabled;
@@ -61,10 +62,10 @@ public:
 
 protected:
 	int _leftOff, _rightOff, _topOff, _gumpShape;
-	Std::vector<Gump *> _gumps;
+	Common::Array<Gump *> _gumps;
 	Gump *_nextButton;
 	Gump *_prevButton;
-	Std::vector<Gump *>::iterator _current;
+	uint _current;
 	bool _buttonsEnabled;
 };
 
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.cpp b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
index 9235a1d4fb8..5f410c5515a 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.cpp
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
@@ -329,6 +329,10 @@ Gump *U8SaveGump::showLoadSaveGump(Gump *parent, bool save) {
 		gump->addPage(s);
 	}
 
+	int lastSave = ConfMan.hasKey("lastSave") ? ConfMan.getInt("lastSave") : -1;
+	if (lastSave > 0) {
+		gump->showPage((lastSave - 1) / 6);
+	}
 
 	gump->setRelativePosition(CENTER);
 




More information about the Scummvm-git-logs mailing list