Revision 47d95679
Von Christian Ehringfeld vor mehr als 8 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());
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
const QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
|
||
|
QVariant &entity) {
|
||
|
|
||
|
return *static_cast<const QSharedPointer<Entity>*>(entity.constData());
|
||
|
}
|
||
|
|
||
|
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
bugfix