#2380 AppFwk: Move fieldsByType to RimProject

This commit is contained in:
Rebecca Cox
2018-01-19 12:52:50 +01:00
parent ed930da11d
commit 56188c8f3f
3 changed files with 61 additions and 9 deletions

View File

@@ -151,6 +151,10 @@ protected:
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
private:
template <typename T>
void fieldsByType(caf::PdmObjectHandle* object, std::vector<T*>& typedFields);
private:
caf::PdmField<QString> m_projectFileVersionString;
@@ -166,3 +170,39 @@ private:
caf::PdmChildArrayField<RimEclipseCase*> casesObsolete; // obsolete
caf::PdmChildArrayField<RimIdenticalGridCaseGroup*> caseGroupsObsolete; // obsolete
};
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
template <typename T>
void RimProject::fieldsByType(caf::PdmObjectHandle* object, std::vector<T*>& typedFields)
{
if (!object) return;
std::vector<caf::PdmFieldHandle*> allFieldsInObject;
object->fields(allFieldsInObject);
std::vector<caf::PdmObjectHandle*> children;
for (const auto& field : allFieldsInObject)
{
caf::PdmField<T>* typedField = dynamic_cast<caf::PdmField<T>*>(field);
if (typedField) typedFields.push_back(&typedField->v());
caf::PdmField< std::vector<T> >* typedFieldInVector = dynamic_cast<caf::PdmField< std::vector<T> >*>(field);
if (typedFieldInVector)
{
for (T& typedFieldFromVector : typedFieldInVector->v())
{
typedFields.push_back(&typedFieldFromVector);
}
}
field->childObjects(&children);
}
for (const auto& child : children)
{
fieldsByType(child, typedFields);
}
}