#pragma once #include "cafPdmObject.h" #include "cafPdmChildArrayField.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()); 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