#include "PropertyBasedMgr.hxx"
+#include <boost/foreach.hpp>
+
#include <stdexcept>
#include <string>
//----------------------------------------------------------------------------
void PropertyBasedMgr::shutdown()
{
+ _props->removeAllChildren();
_props->removeChangeListener(this);
}
return _elements[index];
}
+ //----------------------------------------------------------------------------
+ PropertyBasedElementPtr
+ PropertyBasedMgr::getElement(const std::string& name) const
+ {
+ if( name.empty() )
+ return PropertyBasedElementPtr();
+
+ BOOST_FOREACH(PropertyBasedElementPtr el, _elements)
+ if( el && el->getProps()->getStringValue("name") == name )
+ return el;
+
+ return PropertyBasedElementPtr();
+ }
+
//----------------------------------------------------------------------------
const SGPropertyNode* PropertyBasedMgr::getPropertyRoot() const
{
_elements.resize(index + 1);
}
else if( _elements[index] )
+ {
SG_LOG
(
SG_GENERAL,
_name_elements << "[" << index << "] already exists!"
);
+ // Give anything holding a reference to this element to release it
+ _elements[index]->onDestroy();
+ }
+
PropertyBasedElementPtr el = _element_factory(child);
- el->setSelf( el );
_elements[index] = el;
elementCreated( el );
}
"can't removed unknown " << _name_elements << "[" << index << "]!"
);
else
+ {
// remove the element...
+ _elements[index]->onDestroy();
_elements[index].reset();
+ }
}
} // namespace simgear