[Scummvm-git-logs] scummvm master -> 5b0e4650016791ad95dd888548f27be22c843e8b

sev- sev at scummvm.org
Wed Oct 2 13:39:29 CEST 2019


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

Summary:
a49fd0dd5e GRAPHICS: MACGUI: Read nested submenus from PE exes
6dee083352 GRAPHICS: MACGUI: Added debug printout for MacMenu
5b0e465001 GRAPHICS: MACGUI: Fix debug menu printing


Commit: a49fd0dd5e2c578399858e1687f45dff056dc964
    https://github.com/scummvm/scummvm/commit/a49fd0dd5e2c578399858e1687f45dff056dc964
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T12:40:57+02:00

Commit Message:
GRAPHICS: MACGUI: Read nested submenus from PE exes

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


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 522144f..c22e3a0 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "common/system.h"
+#include "common/stack.h"
 #include "common/keyboard.h"
 #include "common/macresman.h"
 
@@ -218,6 +219,8 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
 
 	MacMenu *menu = wm->addMenu();
 
+	Common::Stack<MacMenuSubMenu *> menus;
+
 	int depth = 0;
 	int curMenuItemId = 0;
 	int action = 0;
@@ -228,11 +231,19 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
 		if (flags & kPopUp) {
 			if (depth == 0) {
 				menu->addMenuItem(readUnicodeString(menuData));
+
+				MacMenuSubMenu *submenu = menu->addSubMenu(nullptr);
+				menus.push(submenu);
 			} else {
-				// TODO
-				// for now skip
-				readUnicodeString(menuData);
+				MacMenuSubMenu *submenu = menu->addSubMenu(menus.size() ? menus.top() : nullptr);
+
+				menus.push(submenu);
+
+				Common::U32String name = readUnicodeString(menuData);
+				menu->addSubMenuItem(submenu, name, action);
+				action++;
 			}
+
 			if (lastPopUp) {
 				lastPopUpCopy = lastPopUp;
 			}
@@ -242,13 +253,15 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
 		} else {
 			menuData->readUint16LE(); // menu id
 			Common::U32String name = readUnicodeString(menuData);
-			if (depth == 1) {
-				menu->addMenuSubItem(curMenuItemId, name, action);
+			if (depth > 0) {
+				menu->addSubMenuItem(menus.top(), name, action);
 			}
 			if (!name.empty()) {
 				action++;
 			}
 			if (flags & kEndMenu) {
+				menus.pop();
+
 				if (lastPopUp)
 					depth -= 2;
 				else
@@ -303,6 +316,14 @@ int MacMenu::addMenuItem(const Common::U32String &name) {
 	return _items.size() - 1;
 }
 
+MacMenuSubMenu *MacMenu::addSubMenu(MacMenuSubMenu *submenu) {
+	if (submenu == nullptr) {
+		return (_items.back()->submenu = new MacMenuSubMenu());
+	} else {
+		return (submenu->subitems.back()->submenu = new MacMenuSubMenu());
+	}
+}
+
 void MacMenu::addMenuSubItem(int id, const Common::String &text, int action, int style, char shortcut, bool enabled) {
 	if (_items[id]->submenu == nullptr)
 		_items[id]->submenu = new MacMenuSubMenu();
@@ -321,6 +342,22 @@ void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action,
 	calcSubMenuBounds(_items[id]->submenu, _items[id]->bbox.left - 1, _items[id]->bbox.bottom + 1);
 }
 
+void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style, char shortcut, bool enabled) {
+	assert(submenu != nullptr);
+
+	submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+
+	calcSubMenuBounds(submenu, 0, 0); // FIXME
+}
+
+void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
+	assert(submenu != nullptr);
+
+	submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+
+	calcSubMenuBounds(submenu, 0, 0); // FIXME
+}
+
 void MacMenu::calcDimensions() {
 	// Calculate menu dimensions
 	int y = 1;
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 2ff2bf0..012ea5f 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -59,10 +59,13 @@ public:
 	void addStaticMenus(const MacMenuData *data);
 	void calcDimensions();
 
+	MacMenuSubMenu *addSubMenu(MacMenuSubMenu *submenu);
 	int addMenuItem(const Common::String &name);
 	int addMenuItem(const Common::U32String &name);
 	void addMenuSubItem(int id, const Common::String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
 	void addMenuSubItem(int id, const Common::U32String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
+	void addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
+	void addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
 	void loadMenuResource(Common::MacResManager *resFork, uint16 id);
 	void loadMenuBarResource(Common::MacResManager *resFork, uint16 id);
 	void createSubMenuFromString(int id, const char *string, int commandId);


Commit: 6dee0833520e06a8e97a85c3c76122d0af38d89f
    https://github.com/scummvm/scummvm/commit/6dee0833520e06a8e97a85c3c76122d0af38d89f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T12:41:45+02:00

Commit Message:
GRAPHICS: MACGUI: Added debug printout for MacMenu

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


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index c22e3a0..81208c0 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -276,9 +276,33 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
 		}
 	}
 	delete menuData;
+
+	menu->printMenu();
+
 	return menu;
 }
 
+void MacMenu::printMenu(int level, MacMenuSubMenu *submenu) {
+	if (!level) {
+		for (int i = 0; i < _items.size(); i++) {
+			debug("%s", _items[i]->unicode ? convertFromU32String(_items[i]->unicodeName).c_str() : _items[i]->name.c_str());
+
+			if (_items[i]->submenu != nullptr)
+				printMenu(level + 1, _items[i]->submenu);
+		}
+	} else {
+		for (int j = 0; j < level; j++)
+			debugN("  ");
+
+		for (int i = 0; i < submenu->subitems.size(); i++) {
+			debug("%s", submenu->subitems[i]->unicode ? convertFromU32String(submenu->subitems[i]->unicodeText).c_str() : submenu->subitems[i]->text.c_str());
+
+			if (submenu->subitems[i]->submenu != nullptr)
+				printMenu(level + 1, submenu->subitems[i]->submenu);
+		}
+	}
+}
+
 void MacMenu::addStaticMenus(const MacMenuData *data) {
 	MacMenuItem *about = new MacMenuItem(_wm->_fontMan->hasBuiltInFonts() ? "\xa9" : "\xf0"); // (c) Symbol as the most resembling apple
 	_items.push_back(about);
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 012ea5f..1239ceb 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -107,6 +107,8 @@ private:
 
 	void drawSubMenuArrow(ManagedSurface *dst, int x, int y, int color);
 
+	void printMenu(int level = 0, MacMenuSubMenu *submenu = nullptr);
+
 	Common::Array<MacMenuItem *> _items;
 
 	const Font *_font;


Commit: 5b0e4650016791ad95dd888548f27be22c843e8b
    https://github.com/scummvm/scummvm/commit/5b0e4650016791ad95dd888548f27be22c843e8b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T13:38:28+02:00

Commit Message:
GRAPHICS: MACGUI: Fix debug menu printing

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 81208c0..839404d 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -285,16 +285,17 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
 void MacMenu::printMenu(int level, MacMenuSubMenu *submenu) {
 	if (!level) {
 		for (int i = 0; i < _items.size(); i++) {
-			debug("%s", _items[i]->unicode ? convertFromU32String(_items[i]->unicodeName).c_str() : _items[i]->name.c_str());
+			debug("0. %s", _items[i]->unicode ? convertFromU32String(_items[i]->unicodeName).c_str() : _items[i]->name.c_str());
 
 			if (_items[i]->submenu != nullptr)
 				printMenu(level + 1, _items[i]->submenu);
 		}
 	} else {
-		for (int j = 0; j < level; j++)
-			debugN("  ");
-
 		for (int i = 0; i < submenu->subitems.size(); i++) {
+			debugN("%d. ", level);
+			for (int j = 0; j < level; j++)
+				debugN("  ");
+
 			debug("%s", submenu->subitems[i]->unicode ? convertFromU32String(submenu->subitems[i]->unicodeText).c_str() : submenu->subitems[i]->text.c_str());
 
 			if (submenu->subitems[i]->submenu != nullptr)





More information about the Scummvm-git-logs mailing list