예제 #1
0
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");
            }
        }
    }
}