bool isFieldContentDerivedFrom(const FieldType &TheFieldType, const FieldContainerType* TheFCType) { if(TheFieldType.isPtrField()) { std::string FieldPtrTypeName(TheFieldType.getContentType().getName()); switch(TheFieldType.getClass()) { case FieldType::PtrField: case FieldType::ParentPtrField: case FieldType::ChildPtrField: FieldPtrTypeName = FieldPtrTypeName.substr(0,FieldPtrTypeName.size()-3); break; default: case FieldType::ValueField: return false; break; } const FieldContainerType* PtrContentType = FieldContainerFactory::the()->findType(FieldPtrTypeName.c_str()); return TheFCType->isDerivedFrom(*PtrContentType); } else { return false; } return false; }
void FCPtrFieldEditor::initMethod(InitPhase ePhase) { Inherited::initMethod(ePhase); if(ePhase == TypeObject::FactoryPost) { //Fill in all of the editable types UInt32 NumTypes(TypeFactory::the()->getNumTypes()); FieldType* type; for(UInt32 i(0) ; i<NumTypes; ++i) { type = dynamic_cast<FieldType*>(TypeFactory::the()->findType(i)); if(type != NULL && (type->getClass() == FieldType::PtrField || type->getClass() == FieldType::ChildPtrField)) { _EditableTypes.push_back(&type->getContentType()); FieldEditorFactory::the()->setEditorType(&type->getContentType(), &getClassType(), "FieldContainerPtr"); } } } }