[Scummvm-git-logs] scummvm master -> 29af23c8328bd38fddbe44769dbbff7575c975a6

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Thu Jul 29 04:47:11 UTC 2021


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

Summary:
36abd91264 GRAPHICS: MACGUI: introduce checkBoxAccess to determines what happens when user clicks the checkbox or radio button
6315f744d8 DIRECTOR: implement checkBoxAccess property
7168e9a491 DIRECTOR: skip b_alert due to the tests
c57c7b11b2 DIRECTOR: skip setting shortcut key when we only read /
53fd14b283 GRAPHICS: MACGUI: add functions for setting member checkMark and Enable of menuItem
a317110704 DIRECTOR: implement setTheMenuItemEntity
948604d79d GRAPHICS: MACGUI: text length should not bigger than maxWidth - 1
7673cbcc86 GRAPHICS: MACGUI: implement setMenuItemName
5ae035f4b5 GRAPHICS: MACGUI: implement overload version for the functions for setting menu attributes
29af23c832 DIRECTOR: fix setTheMenuItemEntity


Commit: 36abd912648694843f4a9d9316c03d204a918931
    https://github.com/scummvm/scummvm/commit/36abd912648694843f4a9d9316c03d204a918931
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00

Commit Message:
GRAPHICS: MACGUI: introduce checkBoxAccess to determines what happens when user clicks the checkbox or radio button

Changed paths:
    graphics/macgui/macbutton.cpp
    graphics/macgui/macbutton.h


diff --git a/graphics/macgui/macbutton.cpp b/graphics/macgui/macbutton.cpp
index 2531e841e0..b74afe5190 100644
--- a/graphics/macgui/macbutton.cpp
+++ b/graphics/macgui/macbutton.cpp
@@ -43,6 +43,7 @@ MacButton::MacButton(MacButtonType buttonType, TextAlign textAlignment, MacWidge
 void MacButton::init() {
 	_invertInner = false;
 	_checkBoxType = 0;
+	_checkBoxAccess = 0;
 
 	switch (_buttonType) {
 	case kCheckBox:
@@ -193,7 +194,22 @@ bool MacButton::processEvent(Common::Event &event) {
 		break;
 	case Common::EVENT_LBUTTONUP:
 		setActive(false);
-		_invertInner = !_invertInner;
+
+		switch (_checkBoxAccess) {
+		case 0:
+			_invertInner = !_invertInner;
+			break;
+		case 1:
+			_invertInner = true;
+			break;
+		case 2:
+			// no op, type 2 will prevent user from setting checkboxes
+			break;
+		default:
+			warning("MacButton::processEvent can not handle checkBoxAccess with type %d", _checkBoxAccess);
+			break;
+		}
+
 		_wm->_hilitingWidget = false;
 		break;
 	default:
diff --git a/graphics/macgui/macbutton.h b/graphics/macgui/macbutton.h
index d8fee07375..a95b95cfb7 100644
--- a/graphics/macgui/macbutton.h
+++ b/graphics/macgui/macbutton.h
@@ -56,6 +56,7 @@ public:
 
 	void setHilite(bool hilite);
 	void setCheckBoxType(int type);
+	void setCheckBoxAccess(int type) { _checkBoxAccess = type; }
 
 	virtual bool draw(ManagedSurface *g, bool forceRedraw = false) override;
 	virtual bool draw(bool forceRedraw = false) override;
@@ -70,6 +71,7 @@ private:
 	MacPlotData _pd;
 	bool _invertInner;
 	int _checkBoxType;
+	int _checkBoxAccess;
 };
 
 } // End of namespace Graphics


Commit: 6315f744d866e3c127ba2eddc730e0e893e97673
    https://github.com/scummvm/scummvm/commit/6315f744d866e3c127ba2eddc730e0e893e97673
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00

Commit Message:
DIRECTOR: implement checkBoxAccess property

Changed paths:
    engines/director/channel.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/movie.cpp
    engines/director/movie.h


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 5966622172..7ce2034d65 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -401,8 +401,10 @@ void Channel::updateGlobalAttr() {
 		((Graphics::MacText *)_widget)->setSelRange(g_director->getCurrentMovie()->_selStart, g_director->getCurrentMovie()->_selEnd);
 
 	// update button info, including checkBoxType
-	if ((_sprite->_cast->_type == kCastButton || isButtonSprite(_sprite->_spriteType)) && _widget)
+	if ((_sprite->_cast->_type == kCastButton || isButtonSprite(_sprite->_spriteType)) && _widget) {
 		((Graphics::MacButton *)_widget)->setCheckBoxType(g_director->getCurrentMovie()->_checkBoxType);
+		((Graphics::MacButton *)_widget)->setCheckBoxAccess(g_director->getCurrentMovie()->_checkBoxAccess);
+	}
 }
 
 void Channel::replaceSprite(Sprite *nextSprite) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index c92e064bbf..819b8c4831 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -394,7 +394,8 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d.u.i = g_director->_centerStage;
 		break;
 	case kTheCheckBoxAccess:
-		getTheEntitySTUB(kTheCheckBoxAccess);
+		d.type = INT;
+		d.u.i = g_director->getCurrentMovie()->_checkBoxAccess;
 		break;
 	case kTheCheckBoxType:
 		d.type = INT;
@@ -901,7 +902,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		g_director->_centerStage = d.asInt();
 		break;
 	case kTheCheckBoxAccess:
-		setTheEntitySTUB(kTheCheckBoxAccess);
+		g_director->getCurrentMovie()->_checkBoxAccess = d.asInt();
 		break;
 	case kTheCheckBoxType:
 		g_director->getCurrentMovie()->_checkBoxType = d.asInt();
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 8a83bc55ab..0e737416bf 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -79,6 +79,7 @@ Movie::Movie(Window *window) {
 	_selStart = -1;
 
 	_checkBoxType = 0;
+	_checkBoxAccess = 0;
 }
 
 Movie::~Movie() {
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 317ed2a8b6..c89d5b25b3 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -158,6 +158,7 @@ public:
 	int _selEnd;
 
 	int _checkBoxType;
+	int _checkBoxAccess;
 
 	uint16 _currentHiliteChannelId;
 


Commit: 7168e9a491376fed911aeff2163ba7c8d63609c5
    https://github.com/scummvm/scummvm/commit/7168e9a491376fed911aeff2163ba7c8d63609c5
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00

Commit Message:
DIRECTOR: skip b_alert due to the tests

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index c83e588f45..87d4dc3632 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1582,6 +1582,12 @@ void LB::b_alert(int nargs) {
 	Common::String alert = d.asString();
 	warning("b_alert(%s)", alert.c_str());
 
+	if (g_director->getGameGID() == GID_TEST) {
+		warning("b_alert: Skipping due to tests");
+
+		return;
+	}
+
 	if (!debugChannelSet(-1, kDebugFewFramesOnly)) {
 		g_director->_wm->clearHandlingWidgets();
 		GUI::MessageDialog dialog(alert.c_str(), "OK");


Commit: c57c7b11b204a579efd674c62d7b455d43392d23
    https://github.com/scummvm/scummvm/commit/c57c7b11b204a579efd674c62d7b455d43392d23
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00

Commit Message:
DIRECTOR: skip setting shortcut key when we only read /

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index b46c411638..2ad58e99e4 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -542,7 +542,9 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
 					item.deleteChar(shortPtr - item.c_str());
 					item.deleteChar(shortPtr - item.c_str());
 				} else {
-					error("MacMenu::createSubMenuFromString(): Unexpected shortcut: '%s', item '%s' in menu '%s'", shortPtr, item.c_str(), string.c_str());
+					// if we only have one / without shortcut key, we skip it.
+					item.deleteChar(shortPtr - item.c_str());
+					// error("MacMenu::createSubMenuFromString(): Unexpected shortcut: '%s', item '%s' in menu '%s'", shortPtr, item.c_str(), string.c_str());
 				}
 			}
 


Commit: 53fd14b283168b3863799c74714592750cbbcb50
    https://github.com/scummvm/scummvm/commit/53fd14b283168b3863799c74714592750cbbcb50
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T11:40:18+08:00

Commit Message:
GRAPHICS: MACGUI: add functions for setting member checkMark and Enable of menuItem

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 2ad58e99e4..4101ef2a68 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -486,6 +486,61 @@ void MacMenu::loadMenuBarResource(Common::MacResManager *resFork, uint16 id) {
 	}
 }
 
+void MacMenu::setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->checked = checkMark;
+		_contentIsDirty = true;
+	}
+}
+
+void MacMenu::setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->enabled = enabled;
+		_contentIsDirty = true;
+	}
+}
+
+MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
+	// TODO: support arbitrary level menu item finding
+	// only support 2 level finding now.
+
+	MacMenuItem *menu = nullptr;
+	for (uint i = 0; i < _items.size(); i++) {
+		// TODO: support unicode text menu
+		// didn't support unicode item finding yet
+		if (!_items[i]->unicode) {
+			if (_items[i]->text.equalsIgnoreCase(menuId)) {
+				menu = _items[i];
+				break;
+			}
+		}
+	}
+
+	if (!menu) {
+		warning("MacMenu::findMenuItem: can not find menu with id %s", menuId.c_str());
+		return nullptr;
+	}
+
+	if (!menu->submenu) {
+		warning("MacMenu::findMenuItem: menu %s doesn't have submenu", menuId.c_str());
+		return nullptr;
+	}
+
+	for (uint i = 0; i < menu->submenu->items.size(); i++) {
+		if (!menu->submenu->items[i]->unicode) {
+			if (menu->submenu->items[i]->text.equalsIgnoreCase(itemId))
+				return menu->submenu->items[i];
+		}
+	}
+
+	warning("MacMenu::findMenuItem: menu %s doesn't have item with id %s", menuId.c_str(), itemId.c_str());
+	return nullptr;
+}
+
 void MacMenu::clearSubMenu(int id) {
 	MacMenuItem *menu = _items[id];
 
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 852169fcd8..5344a141d6 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -97,6 +97,9 @@ public:
 
 	bool checkIntersects(Common::Rect &rect);
 
+	void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
+	void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+
 	Common::Rect _bbox;
 
 private:
@@ -130,6 +133,8 @@ private:
 
 	void eventLoop();
 
+	MacMenuItem *findMenuItem(const Common::String &menuId, const Common::String &itemId);
+
 	ItemArray _items;
 
 	const Font *_font;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index ee592badf5..cf66aaa341 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -426,6 +426,22 @@ void MacWindowManager::disableScreenCopy() {
 	g_system->copyRectToScreen(_screenCopy->getBasePtr(0, 0), _screenCopy->pitch, 0, 0, _screenCopy->w, _screenCopy->h);
 }
 
+void MacWindowManager::setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark) {
+	if (_menu) {
+		_menu->setCheckMark(menuId, itemId, checkMark);
+	} else {
+		warning("MacWindowManager::setMenuItemCheckMark: wm doesn't have menu");
+	}
+}
+
+void MacWindowManager::setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled) {
+	if (_menu) {
+		_menu->setEnabled(menuId, itemId, enabled);
+	} else {
+		warning("MacWindowManager::setMenuItemEnabled: wm doesn't have menu");
+	}
+}
+
 // this is refer to how we deal U32String in splitString in mactext
 // maybe we can optimize this specifically
 Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 5ae47180a1..3eb6ebf9c0 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -334,6 +334,9 @@ public:
 	 */
 	void clearHandlingWidgets();
 
+	void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
+	void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+
 public:
 	MacFontManager *_fontMan;
 	uint32 _mode;


Commit: a317110704d025ada8f99a2860d5fa019a92ae80
    https://github.com/scummvm/scummvm/commit/a317110704d025ada8f99a2860d5fa019a92ae80
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T11:40:39+08:00

Commit Message:
DIRECTOR: implement setTheMenuItemEntity

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-the.cpp


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 42d1a7913f..517a5a7941 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -844,9 +844,9 @@ void LC::cb_v4theentityassign() {
 		break;
 	case kTEAMenuIdItemId:
 		{
-			/*Datum menuId = */g_lingo->pop();
-			/*Datum itemId = */g_lingo->pop();
-			warning("cb_v4theentityassign: STUB: kTEAMenuIdItemId");
+			Datum menuId = g_lingo->pop();
+			Datum itemId = g_lingo->pop();
+			g_lingo->setTheMenuItemEntity(entity, menuId, field, itemId, value);
 		}
 		break;
 	case kTEAChunk:
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 819b8c4831..28d26ac802 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1107,8 +1107,23 @@ Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &m
 }
 
 void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
-	warning("STUB: setTheMenuItemEntity(%s, %s, %s, %s, %s)", entity2str(entity), menuId.asString(true).c_str(), field2str(field),
-				menuItemId.asString(true).c_str(), d.asString(true).c_str());
+	switch(field) {
+	case kTheCheckMark:
+		g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+		break;
+	case kTheEnabled:
+		g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+		break;
+	case kTheName:
+		setTheEntitySTUB(kTheName);
+		break;
+	case kTheScript:
+		setTheEntitySTUB(kTheScript);
+		break;
+	default:
+		warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+		break;
+	}
 }
 
 Datum Lingo::getTheSprite(Datum &id1, int field) {


Commit: 948604d79dd1c46009f6c860f85fd74fa8fe5f30
    https://github.com/scummvm/scummvm/commit/948604d79dd1c46009f6c860f85fd74fa8fe5f30
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:04:20+08:00

Commit Message:
GRAPHICS: MACGUI: text length should not bigger than maxWidth - 1

Changed paths:
    graphics/fonts/macfont.cpp
    graphics/macgui/mactext.cpp


diff --git a/graphics/fonts/macfont.cpp b/graphics/fonts/macfont.cpp
index afe7a95e4e..fe23795156 100644
--- a/graphics/fonts/macfont.cpp
+++ b/graphics/fonts/macfont.cpp
@@ -419,7 +419,7 @@ void MacFONTFont::drawChar(Surface *dst, uint32 chr, int x, int y, uint32 color)
 
 	// due to the way we are handling the generated fonts. we only add the kerning offset for the original font
 	if (!_data._slant)
-	x += glyph->kerningOffset;
+		x += glyph->kerningOffset;
 
 	if (x >= dst->w)
 		return;
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 2b423d3c3e..01c4771e8f 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -275,7 +275,7 @@ MacFontRun MacText::getFgColor() {
 }
 
 // we are doing this because we may need to dealing with the plain byte. See ctor of mactext which contains String str instead of U32String str
-// thus, if we are passing the str, meaning we are using plainByteMode. And when we calculating the string width. we need to convert it to it's orignal state first;
+// thus, if we are passing the str, meaning we are using plainByteMode. And when we calculate the string width. we need to convert it to it's original state first;
 int MacText::getStringWidth(MacFontRun &format, const Common::U32String &str) {
 	if (format.plainByteMode())
 		return format.getFont()->getStringWidth(Common::convertFromU32String(str, format.getEncoding()));
@@ -740,7 +740,7 @@ void MacText::splitString(const Common::U32String &str, int curLine) {
 			D(9, "curWidth %d word_width %d", cur_width, word_width);
 			// if cur_width == 0 but there`s chunks, meaning there must be empty string here
 			// if cur_width == 0, then you don`t have to add a newline for it
-			if (cur_width + word_width > _maxWidth && cur_width != 0) {
+			if (cur_width + word_width >= _maxWidth && cur_width != 0) {
 				++curLine;
 				_textLines.insert_at(curLine, MacTextLine());
 			}
@@ -778,7 +778,7 @@ void MacText::splitString(const Common::U32String &str, int curLine) {
 						} else {
 							char_width = word[i].getFont()->getCharWidth(c);
 						}
-						if (char_width + tmp_width + cur_width > _maxWidth) {
+						if (char_width + tmp_width + cur_width >= _maxWidth) {
 							++curLine;
 							_textLines.insert_at(curLine, MacTextLine());
 							_textLines[curLine].chunks.push_back(word[i]);
@@ -900,7 +900,7 @@ void MacText::render(int from, int to, int shadow) {
 
 		// TODO: _textMaxWidth, when -1, was not rendering ANY text.
 		for (uint j = 0; j < _textLines[i].chunks.size(); j++) {
-			debug(9, "MacText::render: line %d[%d] h:%d at %d,%d (%s) fontid: %d on %dx%d, fgcolor: %d bgcolor: %d, font: %p",
+			debug(0, "MacText::render: line %d[%d] h:%d at %d,%d (%s) fontid: %d on %dx%d, fgcolor: %d bgcolor: %d, font: %p",
 				  i, j, _textLines[i].height, xOffset, _textLines[i].y, _textLines[i].chunks[j].text.encode().c_str(),
 				  _textLines[i].chunks[j].fontId, _surface->w, _surface->h, _textLines[i].chunks[j].fgcolor, _bgcolor,
 				  (const void *)_textLines[i].chunks[j].getFont());


Commit: 7673cbcc8631b8c34baf1a13578fbc925578b1b8
    https://github.com/scummvm/scummvm/commit/7673cbcc8631b8c34baf1a13578fbc925578b1b8
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:28:05+08:00

Commit Message:
GRAPHICS: MACGUI: implement setMenuItemName

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 4101ef2a68..365dfbba7f 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -504,6 +504,15 @@ void MacMenu::setEnabled(const Common::String &menuId, const Common::String &ite
 	}
 }
 
+void MacMenu::setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->text = name;
+		_contentIsDirty = true;
+	}
+}
+
 MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
 	// TODO: support arbitrary level menu item finding
 	// only support 2 level finding now.
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 5344a141d6..2566ecdc3d 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -99,6 +99,7 @@ public:
 
 	void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
 	void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+	void setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
 
 	Common::Rect _bbox;
 
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index cf66aaa341..6d380110d7 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -442,6 +442,14 @@ void MacWindowManager::setMenuItemEnabled(const Common::String &menuId, const Co
 	}
 }
 
+void MacWindowManager::setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name) {
+	if (_menu) {
+		_menu->setName(menuId, itemId, name);
+	} else {
+		warning("MacWindowManager::setMenuItemName: wm doesn't have menu");
+	}
+}
+
 // this is refer to how we deal U32String in splitString in mactext
 // maybe we can optimize this specifically
 Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 3eb6ebf9c0..e80383b457 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -336,6 +336,7 @@ public:
 
 	void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
 	void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+	void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
 
 public:
 	MacFontManager *_fontMan;


Commit: 5ae035f4b55b2db621541158371356bdce30788d
    https://github.com/scummvm/scummvm/commit/5ae035f4b55b2db621541158371356bdce30788d
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:45:16+08:00

Commit Message:
GRAPHICS: MACGUI: implement overload version for the functions for setting menu attributes

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 365dfbba7f..2377058c9e 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -513,6 +513,33 @@ void MacMenu::setName(const Common::String &menuId, const Common::String &itemId
 	}
 }
 
+void MacMenu::setCheckMark(int menuId, int itemId, bool checkMark) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->checked = checkMark;
+		_contentIsDirty = true;
+	}
+}
+
+void MacMenu::setEnabled(int menuId, int itemId, bool enabled) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->enabled = enabled;
+		_contentIsDirty = true;
+	}
+}
+
+void MacMenu::setName(int menuId, int itemId, const Common::String &name) {
+	MacMenuItem *item = findMenuItem(menuId, itemId);
+
+	if (item) {
+		item->text = name;
+		_contentIsDirty = true;
+	}
+}
+
 MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
 	// TODO: support arbitrary level menu item finding
 	// only support 2 level finding now.
@@ -550,6 +577,29 @@ MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::S
 	return nullptr;
 }
 
+MacMenuItem *MacMenu::findMenuItem(int menuId, int itemId) {
+	MacMenuItem *menu = nullptr;
+
+	if ((uint)menuId < _items.size())
+		menu = _items[menuId];
+
+	if (!menu) {
+		warning("MacMenu::findMenuItem: menuId %d out of bounds", menuId);
+		return nullptr;
+	}
+
+	if (!menu->submenu) {
+		warning("MacMenu::findMenuItem: menu %d doesn't have submenu", menuId);
+		return nullptr;
+	}
+
+	if ((uint)itemId < menu->submenu->items.size())
+		return menu->submenu->items[itemId];
+
+	warning("MacMenu::findMenuItem: itemId %d out of bounds in menu %d", itemId, menuId);
+	return nullptr;
+}
+
 void MacMenu::clearSubMenu(int id) {
 	MacMenuItem *menu = _items[id];
 
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 2566ecdc3d..f3852442f9 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -100,6 +100,9 @@ public:
 	void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
 	void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
 	void setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
+	void setCheckMark(int menuId, int itemId, bool checkMark);
+	void setEnabled(int menuId, int itemId, bool enabled);
+	void setName(int menuId, int itemId, const Common::String &name);
 
 	Common::Rect _bbox;
 
@@ -135,6 +138,7 @@ private:
 	void eventLoop();
 
 	MacMenuItem *findMenuItem(const Common::String &menuId, const Common::String &itemId);
+	MacMenuItem *findMenuItem(int menuId, int itemId);
 
 	ItemArray _items;
 
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 6d380110d7..e2b393f5a2 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -450,6 +450,30 @@ void MacWindowManager::setMenuItemName(const Common::String &menuId, const Commo
 	}
 }
 
+void MacWindowManager::setMenuItemCheckMark(int menuId, int itemId, bool checkMark) {
+	if (_menu) {
+		_menu->setCheckMark(menuId, itemId, checkMark);
+	} else {
+		warning("MacWindowManager::setMenuItemCheckMark: wm doesn't have menu");
+	}
+}
+
+void MacWindowManager::setMenuItemEnabled(int menuId, int itemId, bool enabled) {
+	if (_menu) {
+		_menu->setEnabled(menuId, itemId, enabled);
+	} else {
+		warning("MacWindowManager::setMenuItemEnabled: wm doesn't have menu");
+	}
+}
+
+void MacWindowManager::setMenuItemName(int menuId, int itemId, const Common::String &name) {
+	if (_menu) {
+		_menu->setName(menuId, itemId, name);
+	} else {
+		warning("MacWindowManager::setMenuItemName: wm doesn't have menu");
+	}
+}
+
 // this is refer to how we deal U32String in splitString in mactext
 // maybe we can optimize this specifically
 Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index e80383b457..c74339e916 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -337,6 +337,9 @@ public:
 	void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
 	void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
 	void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
+	void setMenuItemCheckMark(int menuId, int itemId, bool checkMark);
+	void setMenuItemEnabled(int menuId, int itemId, bool enabled);
+	void setMenuItemName(int menuId, int itemId, const Common::String &name);
 
 public:
 	MacFontManager *_fontMan;


Commit: 29af23c8328bd38fddbe44769dbbff7575c975a6
    https://github.com/scummvm/scummvm/commit/29af23c8328bd38fddbe44769dbbff7575c975a6
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:45:35+08:00

Commit Message:
DIRECTOR: fix setTheMenuItemEntity

Changed paths:
    engines/director/lingo/lingo-the.cpp


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 28d26ac802..291ef3775c 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1109,16 +1109,31 @@ Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &m
 void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
 	switch(field) {
 	case kTheCheckMark:
-		g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+		if (menuId.type == STRING && menuItemId.type == STRING)
+			g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+		else if (menuId.type == INT && menuItemId.type == INT)
+			g_director->_wm->setMenuItemCheckMark(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asInt());
+		else
+			warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
 		break;
 	case kTheEnabled:
-		g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+		if (menuId.type == STRING && menuItemId.type == STRING)
+			g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+		else if (menuId.type == INT && menuItemId.type == INT)
+			g_director->_wm->setMenuItemEnabled(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asInt());
+		else
+			warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
 		break;
 	case kTheName:
-		setTheEntitySTUB(kTheName);
+		if (menuId.type == STRING && menuItemId.type == STRING)
+			g_director->_wm->setMenuItemName(menuId.asString(), menuItemId.asString(), d.asString());
+		else if (menuId.type == INT && menuItemId.type == INT)
+			g_director->_wm->setMenuItemName(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asString());
+		else
+			warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
 		break;
 	case kTheScript:
-		setTheEntitySTUB(kTheScript);
+		warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
 		break;
 	default:
 		warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));




More information about the Scummvm-git-logs mailing list