diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp index e9cecfc2f0b..2b25820673e 100644 --- a/engines/wage/menu.cpp +++ b/engines/wage/menu.cpp @@ -144,8 +144,9 @@ Menu::Menu(Gui *gui) : _gui(gui) { _items[m->menunum]->subitems.push_back(new MenuSubItem(m->title, m->action, 0, m->shortcut, m->enabled)); } - MenuItem *commands = createCommandsMenu(); - _items.push_back(commands); + _commands = new MenuItem(_gui->_engine->_world->_commandsMenuName.c_str()); + _items.push_back(_commands); + regenCommandsMenu(); if (!_gui->_engine->_world->_weaponMenuDisabled) { _weapons = new MenuItem(_gui->_engine->_world->_weaponsMenuName.c_str()); @@ -194,8 +195,17 @@ Menu::~Menu() { } } -MenuItem *Menu::createCommandsMenu() { - MenuItem *menu = new MenuItem(_gui->_engine->_world->_commandsMenuName.c_str()); +void Menu::regenCommandsMenu() { + for (int j = 0; j < _commands->subitems.size(); j++) + delete _commands->subitems[j]; + + _commands->subitems.clear(); + + createWeaponsMenu(_commands); + calcMenuBounds(_commands); +} + +void Menu::createCommandsMenu(MenuItem *menu) { Common::String string(_gui->_engine->_world->_commandsMenu); Common::String item; @@ -259,8 +269,6 @@ MenuItem *Menu::createCommandsMenu() { item = ""; } - - return menu; } void Menu::regenWeaponsMenu() { diff --git a/engines/wage/menu.h b/engines/wage/menu.h index 91c996bf5fb..62bc2526558 100644 --- a/engines/wage/menu.h +++ b/engines/wage/menu.h @@ -89,12 +89,14 @@ private: int calculateMenuWidth(MenuItem *menu); void calcMenuBounds(MenuItem *menu); void renderSubmenu(MenuItem *menu); - MenuItem *createCommandsMenu(); + void regenCommandsMenu(); + void createCommandsMenu(MenuItem *menu); void createWeaponsMenu(MenuItem *menu); void executeCommand(MenuSubItem *subitem); Common::Array<MenuItem *> _items; MenuItem *_weapons; + MenuItem *_commands; const Graphics::Font *_font;