#pragma once #include "cafPdmChildArrayField.h" #include "cafPdmObject.h" #include namespace caf { class PdmReferenceHelper; //================================================================================================== /// The PdmObjectGroup serves as a container of unknown PdmObjects //================================================================================================== class PdmObjectGroup : public PdmObject { CAF_PDM_HEADER_INIT; public: PdmObjectGroup(); ~PdmObjectGroup() override; std::vector objects; void deleteObjects(); void addObject( PdmObjectHandle* obj ); template void objectsByType( std::vector>* typedObjects ) const { if ( !typedObjects ) return; size_t it; for ( it = 0; it != objects.size(); ++it ) { T* obj = dynamic_cast( objects[it] ); if ( obj ) typedObjects->push_back( obj ); } } template void createCopyByType( std::vector>* copyOfTypedObjects, PdmObjectFactory* objectFactory ) const; }; //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template void PdmObjectGroup::createCopyByType( std::vector>* copyOfTypedObjects, PdmObjectFactory* objectFactory ) const { std::vector> sourceTypedObjects; objectsByType( &sourceTypedObjects ); for ( size_t i = 0; i < sourceTypedObjects.size(); i++ ) { QString xml = xmlObj( sourceTypedObjects[i] )->writeObjectToXmlString(); PdmObjectHandle* objectCopy = PdmXmlObjectHandle::readUnknownObjectFromXmlString( xml, PdmDefaultObjectFactory::instance(), true ); T* typedObject = dynamic_cast( objectCopy ); CAF_ASSERT( typedObject ); copyOfTypedObjects->push_back( typedObject ); } } //================================================================================================== /// The PdmObjectCollection serves as a container of unknown PdmObjects stored in a PdmChildArrayField //================================================================================================== class PdmObjectCollection : public PdmObject { CAF_PDM_HEADER_INIT; public: PdmObjectCollection(); ~PdmObjectCollection() override; caf::PdmChildArrayField objects; }; } // End of namespace caf