Currently if a SGPropertyNode is removed from the property tree
only for this single node a childRemoved event is triggered. So
if we just check for a specific child to be removed, we will never
be notified. This commit manually triggers the event recursively
for all children but this should probably go directly into simgear.
void PropertyBasedMgr::childRemoved( SGPropertyNode * parent,
SGPropertyNode * child )
{
- if( parent != _props || child->getNameString() != _name_elements )
+ if( parent != _props )
+ return canvas::triggerRemoveRecursive(child);
+ else if( child->getNameString() != _name_elements )
return;
size_t index = child->getIndex();
for( int i = 0; i < node->nChildren(); ++i )
triggerChangeRecursive( node->getChild(i) );
}
+
+ //----------------------------------------------------------------------------
+ void triggerRemoveRecursive(SGPropertyNode* node)
+ {
+ for( int i = 0; i < node->nChildren(); ++i )
+ {
+ SGPropertyNode* child = node->getChild(i);
+ node->fireChildRemoved( child );
+ triggerRemoveRecursive( child );
+ }
+ }
}
*/
void triggerChangeRecursive(SGPropertyNode* node);
+ /**
+ * Trigger a childRemoved event for every child of node (Unlimited depth) and
+ * node itself.
+ */
+ void triggerRemoveRecursive(SGPropertyNode* node);
+
} // namespace canvas
#endif /* PROPERTY_HELPER_HXX_ */