void ValueNodeManager::ValueNodeValueChanged(ValueNode* valueNode) { if (fContainer == NULL) return; AutoLocker<ValueNodeContainer> containerLocker(fContainer); // check whether we know the node ValueNodeChild* nodeChild = valueNode->NodeChild(); if (nodeChild == NULL) return; if (valueNode->ChildCreationNeedsValue() && !valueNode->ChildrenCreated()) { status_t error = valueNode->CreateChildren(); if (error == B_OK) { for (int32 i = 0; i < valueNode->CountChildren(); i++) { ValueNodeChild* child = valueNode->ChildAt(i); _CreateValueNode(child); AddChildNodes(child); } } } for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) fListeners.ItemAt(i)->ValueNodeValueChanged(valueNode); }
status_t ValueNodeManager::AddChildNodes(ValueNodeChild* nodeChild) { AutoLocker<ValueNodeContainer> containerLocker(fContainer); // create a value node for the value node child, if doesn't have one yet ValueNode* valueNode = nodeChild->Node(); if (valueNode == NULL) { status_t error = _CreateValueNode(nodeChild); if (error != B_OK) return error; valueNode = nodeChild->Node(); } // check if this node requires child creation // to be deferred until after its location/value have been resolved if (valueNode->ChildCreationNeedsValue()) return B_OK; // create the children, if not done yet if (valueNode->ChildrenCreated()) return B_OK; return valueNode->CreateChildren(); }
status_t VariablesView::VariableTableModel::_AddChildNodes(ValueNodeChild* nodeChild) { // create a value node for the value node child, if doesn't have one yet ValueNode* valueNode = nodeChild->Node(); if (valueNode == NULL) { status_t error = _CreateValueNode(nodeChild); if (error != B_OK) return error; valueNode = nodeChild->Node(); } // create the children, if not done yet if (valueNode->ChildrenCreated()) return B_OK; return valueNode->CreateChildren(); }