Revision 6d91d381
Von Christian Ehringfeld vor mehr als 10 Jahren hinzugefügt
| src/entityinstancefactory.cpp | ||
|---|---|---|
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::createInstance(const char *className) {
|
||
|
return EntityInstanceFactory::createInstance(QMetaType::type(className));
|
||
|
QString s = QString(className);
|
||
|
if (!s.contains("*")) {
|
||
|
s.append("*");
|
||
|
}
|
||
|
return EntityInstanceFactory::createInstance(QMetaType::type(
|
||
|
s.toUtf8().constData()));
|
||
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::createInstance(const QString &className) {
|
||
| ... | ... | |
|
Entity *EntityInstanceFactory::createInstance(int metaTypeId) {
|
||
|
Entity *e = 0;
|
||
|
if (metaTypeId != QMetaType::UnknownType) {
|
||
|
e = static_cast<Entity *>(QMetaType::create(metaTypeId));
|
||
|
if(!e) {
|
||
|
auto metaObject = QMetaType::metaObjectForType(metaTypeId);
|
||
|
e = static_cast<Entity *>(metaObject->newInstance());
|
||
|
if (!e) {
|
||
|
qDebug() << "Entity instance could not created!";
|
||
|
throw -2; //testing
|
||
|
}
|
||
|
} else {
|
||
|
qDebug() << metaTypeId <<" is NOT registered! Please register it!";
|
||
|
throw -1; //testing
|
||
|
throw - 2; //testing
|
||
|
}
|
||
|
} else {
|
||
|
qDebug() << metaTypeId << "EntityClass NOT registered! Please register it!";
|
||
|
throw - 1; //testing
|
||
|
}
|
||
|
return e;
|
||
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::createInstance(const char *className,
|
||
|
const QHash<QString, QVariant> &attributes) {
|
||
|
Entity *e = EntityInstanceFactory::createInstance(className);
|
||
|
EntityInstanceFactory::setAttributes(e, attributes);
|
||
|
e = EntityInstanceFactory::setAttributes(e, attributes);
|
||
|
return e;
|
||
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::setAttributes(Entity *e,
|
||
|
Entity *EntityInstanceFactory::setAttributes(Entity *&e,
|
||
|
const QHash<QString, QVariant> &attributes,
|
||
|
QHash<QString, QMetaProperty> metaprops) {
|
||
|
if (e) {
|
||
| ... | ... | |
|
while (iterator != attributes.constEnd()) {
|
||
|
if (metaprops.contains(iterator.key())) {
|
||
|
QMetaProperty prop = metaprops.value(iterator.key());
|
||
|
if (!prop.isWritable() && !prop.write(e, iterator.value())) {
|
||
|
if (!(prop.isWritable() && prop.write(e, iterator.value()))) {
|
||
|
qDebug() << prop.name() << "on Entity" << e->getClassname() << "not writeable!";
|
||
|
}
|
||
|
}
|
||
| ... | ... | |
|
return e;
|
||
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::setAttributes(Entity *e,
|
||
|
Entity *EntityInstanceFactory::setAttributes(Entity *&e,
|
||
|
const QHash<QString, QVariant> &attributes) {
|
||
|
auto metaprops = e->getMetaProperties();
|
||
|
return EntityInstanceFactory::setAttributes(e, attributes, metaprops);
|
||
Auch abrufbar als: Unified diff
some bug fixes, caching works