void QtPropertyDataIntrospection::AddMember(const DAVA::IntrospectionMember *member, int hasAnyFlags, int hasNotAnyFlags) { void *memberObject = member->Data(object); const DAVA::MetaInfo *memberMetaInfo = member->Type(); const DAVA::IntrospectionInfo *memberIntrospection = memberMetaInfo->GetIntrospection(memberObject); bool isKeyedArchive = false; // keyed archive if(NULL != memberIntrospection && (memberIntrospection->Type() == DAVA::MetaInfo::Instance<DAVA::KeyedArchive>())) { QtPropertyDataDavaKeyedArcive *childData = new QtPropertyDataDavaKeyedArcive((DAVA::KeyedArchive *) memberObject); ChildAdd(member->Name(), childData); } // introspection else if(NULL != memberObject && NULL != memberIntrospection) { QtPropertyDataIntrospection *childData = new QtPropertyDataIntrospection(memberObject, memberIntrospection, hasAnyFlags, hasNotAnyFlags); ChildAdd(member->Name(), childData); } // any other value else { // pointer if(memberMetaInfo->IsPointer()) { QString s; QtPropertyData* childData = new QtPropertyData(s.sprintf("[%p] Pointer", memberObject)); childData->SetFlags(childData->GetFlags() | FLAG_IS_DISABLED); ChildAdd(member->Name(), childData); } // other value else { // collection if(member->Collection() && !isKeyedArchive) { QtPropertyDataIntroCollection *childCollection = new QtPropertyDataIntroCollection(memberObject, member->Collection(), hasAnyFlags, hasNotAnyFlags); ChildAdd(member->Name(), childCollection); } // variant else { QtPropertyDataDavaVariant *childData = new QtPropertyDataDavaVariant(member->Value(object)); if(member->Flags() & DAVA::INTROSPECTION_EDITOR_READONLY) { childData->SetFlags(childData->GetFlags() | FLAG_IS_NOT_EDITABLE); } ChildAdd(member->Name(), childData); childVariantMembers.insert(childData, member); } } } }
QtPropertyData * QtPropertyDataIntrospection::CreateMemberData(void *_object, const DAVA::InspMember *member, int hasAllFlags) { void *memberObject = member->Data(_object); const DAVA::MetaInfo *memberMetaInfo = member->Type(); const DAVA::InspInfo *memberIntrospection = memberMetaInfo->GetIntrospection(memberObject); bool isKeyedArchive = false; QtPropertyData * retData = NULL; // keyed archive if(NULL != memberIntrospection && (memberIntrospection->Type() == DAVA::MetaInfo::Instance<DAVA::KeyedArchive>())) { retData = new QtPropertyDataDavaKeyedArcive((DAVA::KeyedArchive *) memberObject); } // introspection else if(NULL != memberObject && NULL != memberIntrospection) { retData = new QtPropertyDataIntrospection(memberObject, memberIntrospection, hasAllFlags); } // any other value else { // pointer if(memberMetaInfo->IsPointer()) { QString s; retData = new QtPropertyData(s.sprintf("[%p] Pointer", memberObject)); retData->SetFlags(retData->GetFlags() | FLAG_IS_DISABLED); } // other value else { // collection if(member->Collection() && !isKeyedArchive) { retData = new QtPropertyDataInspColl(memberObject, member->Collection(), hasAllFlags); } // variant else { QtPropertyDataInspMember *childData = new QtPropertyDataInspMember(_object, member); if(!(member->Flags() & DAVA::I_EDIT)) { childData->SetFlags(childData->GetFlags() | FLAG_IS_NOT_EDITABLE); } else { // check if description has some predefines enum values const DAVA::InspDesc &desc = member->Desc(); if(NULL != desc.enumMap) { for(size_t i = 0; i < desc.enumMap->GetCount(); ++i) { int v; if(desc.enumMap->GetValue(i, v)) { childData->AddAllowedValue(DAVA::VariantType(v), desc.enumMap->ToString(v)); } } } } retData = childData; } } } return retData; }
void QtPropertyDataDavaVariant::ChildsCreate() { switch(curVariantValue.type) { case DAVA::VariantType::TYPE_KEYED_ARCHIVE: { DAVA::KeyedArchive *archive = curVariantValue.AsKeyedArchive(); DAVA::Map<DAVA::String, DAVA::VariantType*> data = archive->GetArchieveData(); DAVA::Map<DAVA::String, DAVA::VariantType*>::iterator i = data.begin(); for(; i != data.end(); ++i) { ChildAdd(i->first.c_str(), new QtPropertyDataDavaVariant(*(i->second))); } } break; case DAVA::VariantType::TYPE_MATRIX2: break; case DAVA::VariantType::TYPE_MATRIX3: break; case DAVA::VariantType::TYPE_MATRIX4: break; case DAVA::VariantType::TYPE_VECTOR2: { DAVA::Vector2 vec = curVariantValue.AsVector2(); ChildAdd("X", vec.x); ChildAdd("Y", vec.y); } break; case DAVA::VariantType::TYPE_VECTOR3: { DAVA::Vector3 vec = curVariantValue.AsVector3(); ChildAdd("X", vec.x); ChildAdd("Y", vec.y); ChildAdd("Z", vec.z); } break; case DAVA::VariantType::TYPE_VECTOR4: { DAVA::Vector4 vec = curVariantValue.AsVector4(); ChildAdd("X", vec.x); ChildAdd("Y", vec.y); ChildAdd("Z", vec.z); ChildAdd("W", vec.w); } break; case DAVA::VariantType::TYPE_COLOR: { // DAVA::Color color = curVariantValue.AsColor(); // ChildAdd("R", color.r); // ChildAdd("G", color.g); // ChildAdd("B", color.b); // ChildAdd("A", color.a); } break; case DAVA::VariantType::TYPE_AABBOX3: { DAVA::AABBox3 box = curVariantValue.AsAABBox3(); ChildAdd("min", FromVector3(box.min)); ChildAdd("max", FromVector3(box.max)); QtPropertyData* min = ChildGet("min"); min->SetFlags(FLAG_IS_NOT_EDITABLE); min->ChildAdd("X", box.min.x); min->ChildAdd("Y", box.min.y); min->ChildAdd("Z", box.min.z); QtPropertyData* max = ChildGet("max"); max->SetFlags(FLAG_IS_NOT_EDITABLE); max->ChildAdd("X", box.max.x); max->ChildAdd("Y", box.max.y); max->ChildAdd("Z", box.max.z); } break; } }