| 597 | } |
| 598 | |
| 599 | void GraphicContainer::recursiveLoadStep(QPointF& cursor, |
| 600 | AbsBehaviorTree& tree, |
| 601 | AbstractTreeNode* abs_node, |
| 602 | Node* parent_node, int nest_level) |
| 603 | { |
| 604 | Node& new_node = _scene->createNodeAtPos( abs_node->model.registration_ID, |
| 605 | abs_node->instance_name, |
| 606 | cursor); |
| 607 | BehaviorTreeDataModel* bt_node = dynamic_cast<BehaviorTreeDataModel*>( new_node.nodeDataModel() ); |
| 608 | |
| 609 | for (auto& port_it: abs_node->ports_mapping) |
| 610 | { |
| 611 | bt_node->setPortMapping( port_it.first, port_it.second ); |
| 612 | } |
| 613 | bt_node->initWidget(); |
| 614 | |
| 615 | new_node.nodeGeometry().recalculateSize(); |
| 616 | |
| 617 | abs_node->pos = cursor; |
| 618 | abs_node->size = _scene->getNodeSize( new_node ); |
| 619 | abs_node->graphic_node = &new_node; |
| 620 | |
| 621 | // Special case for node Subtree. Expand if necessary |
| 622 | if( abs_node->model.type == NodeType::SUBTREE && |
| 623 | abs_node->children_index.size() == 1 ) |
| 624 | { |
| 625 | if( auto subtree_node = dynamic_cast<SubtreeNodeModel*>( bt_node ) ) |
| 626 | { |
| 627 | subtree_node->setExpanded(true); |
| 628 | new_node.nodeState().getEntries(PortType::Out).resize(1); |
| 629 | subtree_node->expandButton()->setHidden( true ); |
| 630 | emit subtree_node->updateNodeSize(); |
| 631 | } |
| 632 | } |
| 633 | |
| 634 | _scene->createConnection( *abs_node->graphic_node, 0, |
| 635 | *parent_node, 0 ); |
| 636 | |
| 637 | for ( int index: abs_node->children_index) |
| 638 | { |
| 639 | cursor.setX( cursor.x() + abs_node->size.width() ); |
| 640 | cursor.setY( cursor.y() + abs_node->size.height() ); |
| 641 | AbstractTreeNode* child = tree.node(index); |
| 642 | recursiveLoadStep(cursor, tree, child, abs_node->graphic_node, nest_level+1 ); |
| 643 | } |
| 644 | } |
| 645 | |
| 646 | |
| 647 | void GraphicContainer::loadSceneFromTree(const AbsBehaviorTree &tree) |
nothing calls this directly
no test coverage detected