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

This commit is contained in:
ysj1173886760 2021-07-29 11:40:18 +08:00
parent c57c7b11b2
commit 53fd14b283
4 changed files with 79 additions and 0 deletions

View File

@ -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];

View File

@ -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;

View File

@ -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) {

View File

@ -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;