diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2014-12-30 16:26:18 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2015-01-08 12:34:20 +0100 |
commit | 1a86ccd5272e264a1e8ebce9afcb32c246f90aac (patch) | |
tree | 0ef89d76e2cb51b5376ecac2818c80f581996242 /src/qml/types | |
parent | b5c6b78ee4ff971c3224f9717496c9233e1e2d1d (diff) |
Reduce v8engine dependency for the list model
Change-Id: Ib9e39a886c918a8f6ee1477465895739f90e1a0a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/types')
-rw-r--r-- | src/qml/types/qqmllistmodel.cpp | 94 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodel_p.h | 8 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodel_p_p.h | 20 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodelworkeragent.cpp | 2 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodelworkeragent_p.h | 2 |
5 files changed, 61 insertions, 65 deletions
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 44a64ce71b..d09be1bb37 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -388,7 +388,7 @@ void ListModel::updateCacheIndices() } } -QVariant ListModel::getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV8Engine *eng) +QVariant ListModel::getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV4::ExecutionEngine *eng) { ListElement *e = elements[elementIndex]; const ListLayout::Role &r = m_layout->getExistingRole(roleIndex); @@ -401,7 +401,7 @@ ListModel *ListModel::getListProperty(int elementIndex, const ListLayout::Role & return e->getListProperty(role); } -void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles, QV8Engine *eng) +void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles) { ListElement *e = elements[elementIndex]; @@ -436,7 +436,7 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles, int arrayLength = a->getLength(); for (int j=0 ; j < arrayLength ; ++j) { o = a->getIndexed(j); - subModel->append(o, eng); + subModel->append(o); } roleIndex = e->setListProperty(r, subModel); @@ -457,7 +457,7 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles, const ListLayout::Role &role = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::VariantMap); if (role.type == ListLayout::Role::VariantMap) { QV4::ScopedObject obj(scope, o); - roleIndex = e->setVariantMapProperty(role, obj, eng); + roleIndex = e->setVariantMapProperty(role, obj); } } } else if (propertyValue->isNullOrUndefined()) { @@ -475,7 +475,7 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles, } } -void ListModel::set(int elementIndex, QV4::Object *object, QV8Engine *eng) +void ListModel::set(int elementIndex, QV4::Object *object) { if (!object) return; @@ -515,7 +515,7 @@ void ListModel::set(int elementIndex, QV4::Object *object, QV8Engine *eng) int arrayLength = a->getLength(); for (int j=0 ; j < arrayLength ; ++j) { o = a->getIndexed(j); - subModel->append(o, eng); + subModel->append(o); } e->setListPropertyFast(r, subModel); @@ -542,7 +542,7 @@ void ListModel::set(int elementIndex, QV4::Object *object, QV8Engine *eng) } else { const ListLayout::Role &role = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::VariantMap); if (role.type == ListLayout::Role::VariantMap) - e->setVariantMapFast(role, o, eng); + e->setVariantMapFast(role, o); } } else if (propertyValue->isNullOrUndefined()) { const ListLayout::Role *r = m_layout->getExistingRole(propertyName); @@ -572,16 +572,16 @@ void ListModel::remove(int index, int count) updateCacheIndices(); } -void ListModel::insert(int elementIndex, QV4::Object *object, QV8Engine *eng) +void ListModel::insert(int elementIndex, QV4::Object *object) { insertElement(elementIndex); - set(elementIndex, object, eng); + set(elementIndex, object); } -int ListModel::append(QV4::Object *object, QV8Engine *eng) +int ListModel::append(QV4::Object *object) { int elementIndex = appendElement(); - set(elementIndex, object, eng); + set(elementIndex, object); return elementIndex; } @@ -607,7 +607,7 @@ int ListModel::setOrCreateProperty(int elementIndex, const QString &key, const Q return roleIndex; } -int ListModel::setExistingProperty(int elementIndex, const QString &key, const QV4::ValueRef data, QV8Engine *eng) +int ListModel::setExistingProperty(int elementIndex, const QString &key, const QV4::ValueRef data, QV4::ExecutionEngine *eng) { int roleIndex = -1; @@ -701,7 +701,7 @@ ListModel *ListElement::getListProperty(const ListLayout::Role &role) return *value; } -QVariant ListElement::getProperty(const ListLayout::Role &role, const QQmlListModel *owner, QV8Engine *eng) +QVariant ListElement::getProperty(const ListLayout::Role &role, const QQmlListModel *owner, QV4::ExecutionEngine *eng) { char *mem = getPropertyMemory(role); @@ -875,7 +875,7 @@ int ListElement::setQObjectProperty(const ListLayout::Role &role, QObject *o) return roleIndex; } -int ListElement::setVariantMapProperty(const ListLayout::Role &role, QV4::Object *o, QV8Engine *eng) +int ListElement::setVariantMapProperty(const ListLayout::Role &role, QV4::Object *o) { int roleIndex = -1; @@ -885,7 +885,7 @@ int ListElement::setVariantMapProperty(const ListLayout::Role &role, QV4::Object QVariantMap *map = reinterpret_cast<QVariantMap *>(mem); map->~QMap(); } - new (mem) QVariantMap(eng->variantMapFromJS(o)); + new (mem) QVariantMap(QV8Engine::variantMapFromJS(o)); roleIndex = role.index; } @@ -962,11 +962,11 @@ void ListElement::setListPropertyFast(const ListLayout::Role &role, ListModel *m *value = m; } -void ListElement::setVariantMapFast(const ListLayout::Role &role, QV4::Object *o, QV8Engine *eng) +void ListElement::setVariantMapFast(const ListLayout::Role &role, QV4::Object *o) { char *mem = getPropertyMemory(role); QVariantMap *map = new (mem) QVariantMap; - *map = eng->variantMapFromJS(o); + *map = QV8Engine::variantMapFromJS(o); } void ListElement::setDateTimePropertyFast(const ListLayout::Role &role, const QDateTime &dt) @@ -997,7 +997,7 @@ void ListElement::clearProperty(const ListLayout::Role &role) setDateTimeProperty(role, QDateTime()); break; case ListLayout::Role::VariantMap: - setVariantMapProperty(role, 0); + setVariantMapProperty(role, (QVariantMap *)0); break; default: break; @@ -1163,12 +1163,12 @@ int ListElement::setVariantProperty(const ListLayout::Role &role, const QVariant return roleIndex; } -int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV8Engine *eng) +int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV4::ExecutionEngine *eng) { // Check if this key exists yet int roleIndex = -1; - QV4::Scope scope(QV8Engine::getV4(eng)); + QV4::Scope scope(eng); // Add the value now if (d->isString()) { @@ -1186,7 +1186,7 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef int arrayLength = a->getLength(); for (int j=0 ; j < arrayLength ; ++j) { o = a->getIndexed(j); - subModel->append(o, eng); + subModel->append(o); } roleIndex = setListProperty(role, subModel); } else { @@ -1205,7 +1205,7 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef QObject *o = wrapper->object(); roleIndex = setQObjectProperty(role, o); } else if (role.type == ListLayout::Role::VariantMap) { - roleIndex = setVariantMapProperty(role, o, eng); + roleIndex = setVariantMapProperty(role, o); } } else if (d->isNullOrUndefined()) { clearProperty(role); @@ -1258,15 +1258,13 @@ void ModelNodeMetaObject::propertyWritten(int index) if (!m_enabled) return; - QV8Engine *eng = m_obj->m_model->engine(); - QString propName = QString::fromUtf8(name(index)); QVariant value = operator[](index); - QV4::Scope scope(QV8Engine::getV4((eng))); + QV4::Scope scope(m_obj->m_model->engine()); QV4::ScopedValue v(scope, QV8Engine::fromVariant(scope.engine, value)); - int roleIndex = m_obj->m_model->m_listModel->setExistingProperty(m_obj->m_elementIndex, propName, v, eng); + int roleIndex = m_obj->m_model->m_listModel->setExistingProperty(m_obj->m_elementIndex, propName, v, scope.engine); if (roleIndex != -1) { QVector<int> roles; roles << roleIndex; @@ -1542,7 +1540,7 @@ QQmlListModel::QQmlListModel(QObject *parent) m_engine = 0; } -QQmlListModel::QQmlListModel(const QQmlListModel *owner, ListModel *data, QV8Engine *eng, QObject *parent) +QQmlListModel::QQmlListModel(const QQmlListModel *owner, ListModel *data, QV4::ExecutionEngine *engine, QObject *parent) : QAbstractListModel(parent) { m_mainThread = owner->m_mainThread; @@ -1554,7 +1552,7 @@ QQmlListModel::QQmlListModel(const QQmlListModel *owner, ListModel *data, QV8Eng m_layout = 0; m_listModel = data; - m_engine = eng; + m_engine = engine; } QQmlListModel::QQmlListModel(QQmlListModel *orig, QQmlListModelWorkerAgent *agent) @@ -1614,10 +1612,10 @@ QQmlListModel *QQmlListModel::createWithOwner(QQmlListModel *newOwner) return model; } -QV8Engine *QQmlListModel::engine() const +QV4::ExecutionEngine *QQmlListModel::engine() const { if (m_engine == 0) { - m_engine = QQmlEnginePrivate::getV8Engine(qmlEngine(this)); + m_engine = QQmlEnginePrivate::get(qmlEngine(this))->v4engine(); } return m_engine; @@ -1985,9 +1983,9 @@ void QQmlListModel::insert(QQmlV4Function *args) argObject = objectArray->getIndexed(i); if (m_dynamicRoles) { - m_modelObjects.insert(index+i, DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this)); + m_modelObjects.insert(index+i, DynamicRoleModelNode::create(QV8Engine::variantMapFromJS(argObject), this)); } else { - m_listModel->insert(index+i, argObject, args->engine()); + m_listModel->insert(index+i, argObject); } } emitItemsInserted(index, objectArrayLength); @@ -1995,9 +1993,9 @@ void QQmlListModel::insert(QQmlV4Function *args) emitItemsAboutToBeInserted(index, 1); if (m_dynamicRoles) { - m_modelObjects.insert(index, DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this)); + m_modelObjects.insert(index, DynamicRoleModelNode::create(QV8Engine::variantMapFromJS(argObject), this)); } else { - m_listModel->insert(index, argObject, args->engine()); + m_listModel->insert(index, argObject); } emitItemsInserted(index, 1); @@ -2095,9 +2093,9 @@ void QQmlListModel::append(QQmlV4Function *args) argObject = objectArray->getIndexed(i); if (m_dynamicRoles) { - m_modelObjects.append(DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this)); + m_modelObjects.append(DynamicRoleModelNode::create(QV8Engine::variantMapFromJS(argObject), this)); } else { - m_listModel->append(argObject, args->engine()); + m_listModel->append(argObject); } } @@ -2108,11 +2106,11 @@ void QQmlListModel::append(QQmlV4Function *args) if (m_dynamicRoles) { index = m_modelObjects.count(); emitItemsAboutToBeInserted(index, 1); - m_modelObjects.append(DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this)); + m_modelObjects.append(DynamicRoleModelNode::create(QV8Engine::variantMapFromJS(argObject), this)); } else { index = m_listModel->elementCount(); emitItemsAboutToBeInserted(index, 1); - m_listModel->append(argObject, args->engine()); + m_listModel->append(argObject); } emitItemsInserted(index, 1); @@ -2157,18 +2155,17 @@ void QQmlListModel::append(QQmlV4Function *args) */ QQmlV4Handle QQmlListModel::get(int index) const { - QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine()); - QV4::Scope scope(v4); + QV4::Scope scope(engine()); QV4::ScopedValue result(scope, QV4::Primitive::undefinedValue()); if (index >= 0 && index < count()) { if (m_dynamicRoles) { DynamicRoleModelNode *object = m_modelObjects[index]; - result = QV4::QObjectWrapper::wrap(v4, object); + result = QV4::QObjectWrapper::wrap(scope.engine, object); } else { ModelObject *object = m_listModel->getOrCreateModelObject(const_cast<QQmlListModel *>(this), index); - result = QV4::QObjectWrapper::wrap(v4, object); + result = QV4::QObjectWrapper::wrap(scope.engine, object); } } @@ -2193,7 +2190,7 @@ QQmlV4Handle QQmlListModel::get(int index) const */ void QQmlListModel::set(int index, const QQmlV4Handle &handle) { - QV4::Scope scope(QV8Engine::getV4(engine())); + QV4::Scope scope(engine()); QV4::ScopedObject object(scope, handle); if (!object) { @@ -2210,9 +2207,9 @@ void QQmlListModel::set(int index, const QQmlV4Handle &handle) emitItemsAboutToBeInserted(index, 1); if (m_dynamicRoles) { - m_modelObjects.append(DynamicRoleModelNode::create(engine()->variantMapFromJS(object), this)); + m_modelObjects.append(DynamicRoleModelNode::create(QV8Engine::variantMapFromJS(object), this)); } else { - m_listModel->insert(index, object, engine()); + m_listModel->insert(index, object); } emitItemsInserted(index, 1); @@ -2221,9 +2218,9 @@ void QQmlListModel::set(int index, const QQmlV4Handle &handle) QVector<int> roles; if (m_dynamicRoles) { - m_modelObjects[index]->updateValues(engine()->variantMapFromJS(object), roles); + m_modelObjects[index]->updateValues(QV8Engine::variantMapFromJS(object), roles); } else { - m_listModel->set(index, object, &roles, engine()); + m_listModel->set(index, object, &roles); } if (roles.count()) @@ -2414,8 +2411,7 @@ void QQmlListModelParser::applyBindings(QObject *obj, QQmlCompiledData *cdata, c { QQmlListModel *rv = static_cast<QQmlListModel *>(obj); - QV8Engine *engine = QQmlEnginePrivate::getV8Engine(qmlEngine(rv)); - rv->m_engine = engine; + rv->m_engine = QV8Engine::getV4(qmlEngine(rv)); const QV4::CompiledData::Unit *qmlUnit = cdata->compilationUnit->data; diff --git a/src/qml/types/qqmllistmodel_p.h b/src/qml/types/qqmllistmodel_p.h index debe7ee98d..4dfd2028fe 100644 --- a/src/qml/types/qqmllistmodel_p.h +++ b/src/qml/types/qqmllistmodel_p.h @@ -44,7 +44,7 @@ #include <QtCore/QVariant> #include <QtCore/qabstractitemmodel.h> -#include <private/qv8engine_p.h> +#include <private/qv4engine_p.h> #include <private/qpodvector_p.h> QT_BEGIN_NAMESPACE @@ -102,14 +102,14 @@ private: // Constructs a flat list model for a worker agent QQmlListModel(QQmlListModel *orig, QQmlListModelWorkerAgent *agent); - QQmlListModel(const QQmlListModel *owner, ListModel *data, QV8Engine *eng, QObject *parent=0); + QQmlListModel(const QQmlListModel *owner, ListModel *data, QV4::ExecutionEngine *engine, QObject *parent=0); - QV8Engine *engine() const; + QV4::ExecutionEngine *engine() const; inline bool canMove(int from, int to, int n) const { return !(from+n > count() || to+n > count() || from < 0 || to < 0 || n < 0); } QQmlListModelWorkerAgent *m_agent; - mutable QV8Engine *m_engine; + mutable QV4::ExecutionEngine *m_engine; bool m_mainThread; bool m_primary; diff --git a/src/qml/types/qqmllistmodel_p_p.h b/src/qml/types/qqmllistmodel_p_p.h index 9e70e6ad54..36d192f2fa 100644 --- a/src/qml/types/qqmllistmodel_p_p.h +++ b/src/qml/types/qqmllistmodel_p_p.h @@ -245,14 +245,14 @@ private: int setVariantProperty(const ListLayout::Role &role, const QVariant &d); - int setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV8Engine *eng); + int setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV4::ExecutionEngine *eng); int setStringProperty(const ListLayout::Role &role, const QString &s); int setDoubleProperty(const ListLayout::Role &role, double n); int setBoolProperty(const ListLayout::Role &role, bool b); int setListProperty(const ListLayout::Role &role, ListModel *m); int setQObjectProperty(const ListLayout::Role &role, QObject *o); - int setVariantMapProperty(const ListLayout::Role &role, QV4::Object *o, QV8Engine *eng); + int setVariantMapProperty(const ListLayout::Role &role, QV4::Object *o); int setVariantMapProperty(const ListLayout::Role &role, QVariantMap *m); int setDateTimeProperty(const ListLayout::Role &role, const QDateTime &dt); @@ -261,12 +261,12 @@ private: void setBoolPropertyFast(const ListLayout::Role &role, bool b); void setQObjectPropertyFast(const ListLayout::Role &role, QObject *o); void setListPropertyFast(const ListLayout::Role &role, ListModel *m); - void setVariantMapFast(const ListLayout::Role &role, QV4::Object *o, QV8Engine *eng); + void setVariantMapFast(const ListLayout::Role &role, QV4::Object *o); void setDateTimePropertyFast(const ListLayout::Role &role, const QDateTime &dt); void clearProperty(const ListLayout::Role &role); - QVariant getProperty(const ListLayout::Role &role, const QQmlListModel *owner, QV8Engine *eng); + QVariant getProperty(const ListLayout::Role &role, const QQmlListModel *owner, QV4::ExecutionEngine *eng); ListModel *getListProperty(const ListLayout::Role &role); QString *getStringProperty(const ListLayout::Role &role); QObject *getQObjectProperty(const ListLayout::Role &role); @@ -300,9 +300,9 @@ public: void destroy(); int setOrCreateProperty(int elementIndex, const QString &key, const QVariant &data); - int setExistingProperty(int uid, const QString &key, const QV4::ValueRef data, QV8Engine *eng); + int setExistingProperty(int uid, const QString &key, const QV4::ValueRef data, QV4::ExecutionEngine *eng); - QVariant getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV8Engine *eng); + QVariant getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV4::ExecutionEngine *eng); ListModel *getListProperty(int elementIndex, const ListLayout::Role &role); int roleCount() const @@ -325,11 +325,11 @@ public: return elements.count(); } - void set(int elementIndex, QV4::Object *object, QVector<int> *roles, QV8Engine *eng); - void set(int elementIndex, QV4::Object *object, QV8Engine *eng); + void set(int elementIndex, QV4::Object *object, QVector<int> *roles); + void set(int elementIndex, QV4::Object *object); - int append(QV4::Object *object, QV8Engine *eng); - void insert(int elementIndex, QV4::Object *object, QV8Engine *eng); + int append(QV4::Object *object); + void insert(int elementIndex, QV4::Object *object); void clear(); void remove(int index, int count); diff --git a/src/qml/types/qqmllistmodelworkeragent.cpp b/src/qml/types/qqmllistmodelworkeragent.cpp index 35369bfe87..05a5172c35 100644 --- a/src/qml/types/qqmllistmodelworkeragent.cpp +++ b/src/qml/types/qqmllistmodelworkeragent.cpp @@ -91,7 +91,7 @@ QQmlListModelWorkerAgent::~QQmlListModelWorkerAgent() mutex.unlock(); } -void QQmlListModelWorkerAgent::setV8Engine(QV8Engine *eng) +void QQmlListModelWorkerAgent::setEngine(QV4::ExecutionEngine *eng) { m_copy->m_engine = eng; } diff --git a/src/qml/types/qqmllistmodelworkeragent_p.h b/src/qml/types/qqmllistmodelworkeragent_p.h index 7a8f6e6593..ecee48e9bd 100644 --- a/src/qml/types/qqmllistmodelworkeragent_p.h +++ b/src/qml/types/qqmllistmodelworkeragent_p.h @@ -65,7 +65,7 @@ class QQmlListModelWorkerAgent : public QObject public: QQmlListModelWorkerAgent(QQmlListModel *); ~QQmlListModelWorkerAgent(); - void setV8Engine(QV8Engine *eng); + void setEngine(QV4::ExecutionEngine *eng); void addref(); void release(); |