/*for V4Studio...*/ GF_Err gf_node_remove_child(GF_Node *parent, GF_Node *toremove_child) { if (!gf_node_list_del_child(& ((GF_ParentNode *) parent)->children, toremove_child)) return GF_BAD_PARAM; /*V4Studio doesn't handle DEF/USE properly yet...*/ /*gf_node_unregister(toremove_child, parent);*/ return GF_OK; }
static void Node_on_remove_children(GF_Node *node) { GF_ChildNodeItem *list; GF_FieldInfo field; GF_VRMLParent *n = (GF_VRMLParent *)node; if (!n->removeChildren) return; list = n->removeChildren; while (list) { if (gf_node_list_del_child(& n->children, list->node)) { gf_node_unregister(list->node, node); } list = list->next; } gf_node_unregister_children(node, n->removeChildren); n->removeChildren = NULL; /*signal children field is modified*/ field.name = "children"; field.eventType = GF_SG_EVENT_EXPOSED_FIELD; field.fieldType = GF_SG_VRML_MFNODE; field.NDTtype = 0; field.fieldIndex = 2; field.far_ptr = & n->children; gf_node_changed(node, &field); }
static void Node_on_remove_children(GF_Node *node, GF_Route *route) { GF_ChildNodeItem *list; GF_FieldInfo field; GF_VRMLParent *n = (GF_VRMLParent *)node; if (!n->removeChildren) return; list = n->removeChildren; while (list) { if (gf_node_list_del_child(& n->children, list->node)) { gf_node_unregister(list->node, node); } list = list->next; } gf_node_unregister_children(node, n->removeChildren); n->removeChildren = NULL; /*signal children field is modified*/ field.name = "children"; field.eventType = GF_SG_EVENT_EXPOSED_FIELD; field.fieldType = GF_SG_VRML_MFNODE; field.NDTtype = -1; if ( node->sgprivate->tag == TAG_MPEG4_Transform ) field.fieldIndex = 3; else field.fieldIndex = 2; field.far_ptr = & n->children; gf_node_event_out(node, field.fieldIndex); gf_node_changed(node, &field); if (node->sgprivate->scenegraph->on_node_modified) { field.name = "removeChildren"; field.eventType = GF_SG_EVENT_IN; field.fieldType = GF_SG_VRML_MFNODE; field.NDTtype = -1; field.fieldIndex = 1; field.far_ptr = & n->removeChildren; node->sgprivate->scenegraph->on_node_modified(node->sgprivate->scenegraph, node, &field, NULL); } }