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); } } } }
void QtPropertyDataIntrospection::AddMember(const DAVA::InspMember *member, int hasAllFlags) { QtPropertyData* retData = CreateMemberData(object, member, hasAllFlags); void *memberObject = member->Data(object); const DAVA::MetaInfo *memberMetaInfo = member->Type(); const DAVA::InspInfo *memberIntrospection = memberMetaInfo->GetIntrospection(memberObject); ChildAdd(member->Name(), retData); //condition for variant if((!memberMetaInfo->IsPointer()) && (!member->Collection()) && (NULL == memberIntrospection || (memberIntrospection->Type() != DAVA::MetaInfo::Instance<DAVA::KeyedArchive>()))) { QtPropertyDataInspMember *childData = dynamic_cast<QtPropertyDataInspMember *>(retData); if(NULL != childData) { childVariantMembers.insert(childData, member); } } }
QtPropertyItem::QtPropertyItem(QtPropertyData* data, QtPropertyItem *name) : QStandardItem() , itemData(data) , parentName(name) , itemDataDeleteByParent(false) { if(NULL != data && NULL != parentName) { for (int i = 0; i < data->ChildCount(); ++i) { QPair<QString, QtPropertyData*> childData = data->ChildGet(i); ChildAdd(childData.first, childData.second); } ApplyDataFlags(); ApplyNameStyle(); QObject::connect(data, SIGNAL(ChildRemoving(const QString &, QtPropertyData *)), this, SLOT(DataChildRemoving(const QString &, QtPropertyData *))); QObject::connect(data, SIGNAL(ChildAdded(const QString &, QtPropertyData *)), this, SLOT(DataChildAdded(const QString &, QtPropertyData *))); } }
void QtPropertyDataDavaKeyedArcive::ChildCreate(const QString &key, DAVA::VariantType *value) { QtPropertyData *childData = NULL; if(value->type == DAVA::VariantType::TYPE_KEYED_ARCHIVE) { childData = new QtPropertyDataDavaKeyedArcive(value->AsKeyedArchive()); } else { childData = new QtPropertyDataDavaVariant(*value); } ChildAdd(key, childData); // add optional widget (button) to remove this key QPushButton *remButton = new QPushButton(QIcon(":/QtIcons/keyminus.png"), ""); remButton->setIconSize(QSize(12, 12)); childData->AddOW(QtPropertyOW(remButton)); childData->SetOWViewport(GetOWViewport()); QObject::connect(remButton, SIGNAL(pressed()), this, SLOT(RemKeyedArchiveField())); }
void QtPropertyDataDavaKeyedArcive::ChildCreate(const QString &key, DAVA::VariantType *value) { QtPropertyData *childData = NULL; if(value->type == DAVA::VariantType::TYPE_KEYED_ARCHIVE) { childData = new QtPropertyDataDavaKeyedArcive(value->AsKeyedArchive()); } else { childData = new QtPropertyKeyedArchiveMember(curArchive, key.toStdString()); int presetValueType = EditorConfig::Instance()->GetPropertyValueType(key.toStdString()); if(presetValueType != DAVA::VariantType::TYPE_NONE) { if(value->type == presetValueType) { const DAVA::Vector<DAVA::String>& allowedValues = EditorConfig::Instance()->GetComboPropertyValues(key.toStdString()); for(size_t i = 0; i < allowedValues.size(); ++i) { ((QtPropertyKeyedArchiveMember *) childData)->AddAllowedValue(DAVA::VariantType((int) i), allowedValues[i].c_str()); } } } } ChildAdd(key, childData); // add optional widget (button) to remove this key QPushButton *remButton = new QPushButton(QIcon(":/QtIcons/keyminus.png"), ""); remButton->setIconSize(QSize(12, 12)); childData->AddOW(QtPropertyOW(remButton)); childData->SetOWViewport(GetOWViewport()); QObject::connect(remButton, SIGNAL(pressed()), this, SLOT(RemKeyedArchiveField())); }
void QtPropertyData::ChildAdd(const QString &key, const QVariant &value) { ChildAdd(key, new QtPropertyData(value)); }
QtPropertyDataInspColl::QtPropertyDataInspColl(void *_object, const DAVA::InspColl *_collection, bool autoAddChilds) : object(_object) , collection(_collection) { if(NULL != collection && collection->Size(object) > 0 && autoAddChilds) { int index = 0; DAVA::MetaInfo *valueType = collection->ItemType(); DAVA::InspColl::Iterator i = collection->Begin(object); while(NULL != i) { if(NULL != valueType->GetIntrospection()) { void * itemObject = collection->ItemData(i); const DAVA::InspInfo *itemInfo = valueType->GetIntrospection(itemObject); if(NULL != itemInfo && NULL != itemObject) { QtPropertyData *childData = new QtPropertyDataIntrospection(itemObject, itemInfo); ChildAdd(QString::number(index), childData); } else { QString s; QtPropertyData* childData = new QtPropertyData(s.sprintf("[%p] Pointer", itemObject)); childData->SetEnabled(false); ChildAdd(QString::number(index), childData); } } else { if(!valueType->IsPointer()) { QtPropertyDataMetaObject *childData = new QtPropertyDataMetaObject(collection->ItemPointer(i), valueType); ChildAdd(QString::number(index), childData); } else { QString s; QtPropertyData* childData = new QtPropertyData(s.sprintf("[%p] Pointer", collection->ItemData(i))); childData->SetEnabled(false); if(collection->ItemKeyType() == DAVA::MetaInfo::Instance<DAVA::FastName>()) { const DAVA::FastName *fname = (const DAVA::FastName *) collection->ItemKeyData(i); ChildAdd(fname->operator*(), childData); } else { ChildAdd(QString::number(index), childData); } } } index++; i = collection->Next(i); } } SetEnabled(false); }
void QtPropertyItem::DataChildAdded(const QString &key, QtPropertyData *data) { ChildAdd(key, data); ApplyNameStyle(); }
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; } }