make_menu(menu_nodes[i]);
_menuBar->close();
- make_map(props);
+ make_object_map(props);
if (_visible)
_menuBar->reveal();
}
void
-FGMenuBar::make_map(SGPropertyNode * node)
+FGMenuBar::make_object_map(SGPropertyNode * node)
{
- int menu_index = 0;
+ unsigned int menu_index = 0;
+ vector<SGPropertyNode_ptr> menus = node->getChildren("menu");
for (puObject *obj = ((puGroup *)_menuBar)->getFirstChild();
obj; obj = obj->getNextObject()) {
if (!(obj->getType() & PUCLASS_ONESHOT))
continue;
- SGPropertyNode *menu = node->getNode("menu", menu_index, false);
- if (!menu) {
+ if (menu_index >= menus.size()) {
SG_LOG(SG_GENERAL, SG_WARN, "'menu' object without node: "
<< node->getPath() << "/menu[" << menu_index << ']');
- continue;
+ return;
}
+ SGPropertyNode *menu = menus.at(menu_index);
_objects[menu->getPath()] = obj;
add_enabled_listener(menu);
for (puObject *me = popup->getFirstChild(); me; me = me->getNextObject())
e.push_back(me);
+ vector<SGPropertyNode_ptr> items = menu->getChildren("item");
for (unsigned int i = 0; i < e.size(); i++) {
- SGPropertyNode *item = menu->getNode("item", e.size() - i - 1, false);
- if (!item) {
+ if (i >= items.size()) {
SG_LOG(SG_GENERAL, SG_WARN, "'item' object without node: "
<< menu->getPath() << "/item[" << i << ']');
- continue;
+ break;
}
+ SGPropertyNode *item = items.at(e.size() - i - 1);
_objects[item->getPath()] = e[i];
add_enabled_listener(item);
}
bool
FGMenuBar::enable_item(const SGPropertyNode * node, bool state)
{
- if (!node || _objects.find(node->getPath()) == _objects.end()) {
- SG_LOG(SG_GENERAL, SG_WARN, "Trying to enable/disable "
- "non-existent menu item");
+ const char *path = node->getPath();
+ if (_objects.find(path) == _objects.end()) {
+ SG_LOG(SG_GENERAL, SG_ALERT, "Trying to enable/disable "
+ "non-existent menu item for node `" << path << '\'');
return false;
}
- puObject *object = _objects[node->getPath()];
+ puObject *object = _objects[path];
if (state)
object->activate();
else