Revision e8037987
Von Sebastian Diel vor mehr als 6 Jahren hinzugefügt
src/entityinstancefactory.cpp | ||
---|---|---|
|
||
QHash<QByteArray, EntityInstanceFactory::Constructor>
|
||
EntityInstanceFactory::instance =
|
||
QHash<QByteArray, EntityInstanceFactory::Constructor>();
|
||
QHash<QByteArray, EntityInstanceFactory::Constructor>();
|
||
|
||
EntityInstanceFactory::EntityInstanceFactory() {
|
||
}
|
||
... | ... | |
s.append("*");
|
||
}
|
||
auto ptr = EntityInstanceFactory::createInstance(QMetaType::type(
|
||
s.toUtf8().constData()));
|
||
s.toUtf8().constData()));
|
||
if (!ptr) {
|
||
s.remove("*");
|
||
ptr = EntityInstanceFactory::createObject(s.toUtf8());
|
||
... | ... | |
if(!e) {
|
||
e = qobject_cast<Entity *>(metaObject->newInstance());
|
||
qDebug() << "Backup method for dynamic object creation was called. Maybe the class " +
|
||
QString(metaObject->className()) + " isn't registered?";
|
||
QString(metaObject->className()) + " isn't registered?";
|
||
}
|
||
} else {
|
||
void *newObj = QMetaType::create(metaTypeId);
|
||
... | ... | |
}
|
||
|
||
Entity *EntityInstanceFactory::createInstance(const char *className,
|
||
const QHash<QString, QVariant> &attributes) {
|
||
const QHash<QString, QVariant> &attributes) {
|
||
Entity *e = EntityInstanceFactory::createInstance(className);
|
||
EntityInstanceFactory::setAttributes(e, attributes);
|
||
return e;
|
||
}
|
||
|
||
void EntityInstanceFactory::setAttributes(Entity *&e,
|
||
const QHash<QString, QVariant> &attributes,
|
||
QHash<QString, QMetaProperty> metaprops) {
|
||
const QHash<QString, QVariant> &attributes,
|
||
QHash<QString, QMetaProperty> metaprops) {
|
||
if (e) {
|
||
auto iterator = attributes.constBegin();
|
||
while (iterator != attributes.constEnd()) {
|
||
... | ... | |
}
|
||
} else {
|
||
qWarning() << prop.name() << "on Entity" << EntityHelper::getClassname(
|
||
e) << "not writeable!";
|
||
e) << "not writeable!";
|
||
}
|
||
} else {
|
||
e->setProperty(iterator.key().toLatin1().data(), iterator.value());
|
||
... | ... | |
}
|
||
|
||
void EntityInstanceFactory::setAttributes(Entity *&e,
|
||
const QHash<QString, QVariant> &attributes) {
|
||
const QHash<QString, QVariant> &attributes) {
|
||
if (!attributes.isEmpty()) {
|
||
auto metaprops = EntityHelper::getMetaProperties(e);
|
||
EntityInstanceFactory::setAttributes(e, attributes, metaprops);
|
||
... | ... | |
}
|
||
|
||
QList<QSharedPointer<Entity>> EntityInstanceFactory::castQVariantList(
|
||
QVariant &list) {
|
||
QVariant &list) {
|
||
return *reinterpret_cast<QList<QSharedPointer<Entity>>*>(list.data());
|
||
}
|
||
|
||
const QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
|
||
QVariant &entity) {
|
||
|
||
return *static_cast<const QSharedPointer<Entity>*>(entity.constData());
|
||
QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
|
||
QVariant &entity) {
|
||
auto e = entity.value<QSharedPointer<Entity>>();
|
||
if(!e) {
|
||
auto ne = *static_cast<QSharedPointer<QObject>*>(entity.data());
|
||
auto entityPtr = ne.objectCast<Entity>();
|
||
if(entityPtr) {
|
||
e = entityPtr;
|
||
}
|
||
}
|
||
return e;
|
||
}
|
||
|
||
QStringList EntityInstanceFactory::getRegisteredClasses() {
|
||
QStringList registered = QStringList();
|
||
for (auto i = EntityInstanceFactory::instance.constBegin();
|
||
i != EntityInstanceFactory::instance.constEnd(); ++i) {
|
||
i != EntityInstanceFactory::instance.constEnd(); ++i) {
|
||
registered.append(i.key());
|
||
}
|
||
return registered;
|
||
... | ... | |
|
||
Entity *EntityInstanceFactory::createInstance(Attribute *&attr) {
|
||
return EntityInstanceFactory::createInstance(
|
||
EntityInstanceFactory::extractEntityType(
|
||
attr->getMetaProperty().typeName()));
|
||
EntityInstanceFactory::extractEntityType(
|
||
attr->getMetaProperty().typeName()));
|
||
}
|
Auch abrufbar als: Unified diff
actually running, but still with the bug