void SceneGraphTreeModel::removeNode(NodeUnrecPtr nodeToBeRemoved) { NodeRefPtr parent = nodeToBeRemoved->getParent(); TreePath pathOfNode = createPath(nodeToBeRemoved); if(parent!=NULL) { UInt32 ChildIndex(parent->findChild(nodeToBeRemoved)); produceTreeNodesWillBeRemoved(pathOfNode.getParentPath(),std::vector<UInt32>(1, ChildIndex),std::vector<boost::any>(1, nodeToBeRemoved)); parent->subChild(nodeToBeRemoved); produceTreeNodesRemoved(pathOfNode.getParentPath(),std::vector<UInt32>(1, ChildIndex),std::vector<boost::any>(1, nodeToBeRemoved)); if(parent->getNChildren() == 0) { if(parent->getParent() != NULL) { std::vector<UInt32> childIndices; childIndices.push_back(parent->getParent()->findChild(parent)); std::vector<boost::any> ChildUserObjects; for(UInt32 i(0) ; i< childIndices.size() ; ++i) { ChildUserObjects.push_back(boost::any(NodeUnrecPtr(parent->getParent()->getChild(childIndices[i])))); } produceTreeNodesChanged(createPath(parent->getParent()), childIndices, ChildUserObjects); } } } }
void DefaultTreeModel::removeNodeFromParent(MutableTreeNodeRefPtr node) { ModelTreeNodeRefPtr Parent = node->getParent(); std::vector<UInt32> ChildIndicies; ChildIndicies.push_back(Parent->getIndex(node)); std::vector<boost::any> Children; Children.push_back(dynamic_pointer_cast<ModelTreeNode>(node)); produceTreeNodesWillBeRemoved(getPath(boost::any(Parent)), ChildIndicies, Children); node->removeFromParent(); produceTreeNodesRemoved(getPath(boost::any(Parent)), ChildIndicies, Children); if(Parent->getChildCount() == 0) { nodeChanged(Parent); } }