namespace simgear
{
- //------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
PropertyBasedElement::PropertyBasedElement(SGPropertyNode* node):
_node(node)
{
_node->addChangeListener(this);
}
- //------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
PropertyBasedElement::~PropertyBasedElement()
+ {
+ onDestroy();
+ removeListener();
+ }
+
+ //----------------------------------------------------------------------------
+ void PropertyBasedElement::removeListener()
{
_node->removeChangeListener(this);
}
- //------------------------------------------------------------------------------
- SGConstPropertyNode_ptr PropertyBasedElement::getProps() const
+ //----------------------------------------------------------------------------
+ void PropertyBasedElement::destroy()
{
- return _node;
+ if( !_node )
+ return;
+
+ // TODO check if really not in use anymore
+ if( _node->getParent() )
+ _node->getParent()
+ ->removeChild(_node->getName(), _node->getIndex());
}
- //------------------------------------------------------------------------------
- SGPropertyNode_ptr PropertyBasedElement::getProps()
+ //----------------------------------------------------------------------------
+ SGConstPropertyNode_ptr PropertyBasedElement::getProps() const
{
return _node;
}
//----------------------------------------------------------------------------
- void PropertyBasedElement::setSelf(const PropertyBasedElementPtr& self)
+ SGPropertyNode_ptr PropertyBasedElement::getProps()
{
- _self = self;
+ return _node;
}
} // namespace simgear