aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/util
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-06-07 13:10:29 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-06-07 19:12:39 +0200
commitd3243caf5a181855f6344c072f8dddea193d48fa (patch)
tree1fcd8c624546f5145b890b043ab2bb4504372afe /src/qml/util
parent3011eb517e352faa614107fcf7cc756991dbf16c (diff)
Remove the last v8 dependency from the delegate model
Don't use a qv8objectresource for the items anymore. Change-Id: I5aadd58bf432e0a8984234c03a369aaea92c5f9e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/util')
-rw-r--r--src/qml/util/qqmladaptormodel.cpp69
1 files changed, 33 insertions, 36 deletions
diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp
index bf93c78322..96a780f1df 100644
--- a/src/qml/util/qqmladaptormodel.cpp
+++ b/src/qml/util/qqmladaptormodel.cpp
@@ -65,11 +65,11 @@ V8_DEFINE_EXTENSION(QQmlAdaptorModelEngineData, engineData)
static QV4::Value get_index(QV4::SimpleCallContext *ctx)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
- return QV4::Value::fromInt32(data->index);
+ return QV4::Value::fromInt32(o->item->index);
}
template <typename T, typename M> static void setModelDataType(QMetaObjectBuilder *builder, M *metaType)
@@ -196,14 +196,14 @@ public:
static QV4::Value get_hasModelChildren(QV4::SimpleCallContext *ctx)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
- const QQmlAdaptorModel *const model = static_cast<QQmlDMCachedModelData *>(data)->type->model;
- if (data->index >= 0 && *model) {
+ const QQmlAdaptorModel *const model = static_cast<QQmlDMCachedModelData *>(o->item)->type->model;
+ if (o->item->index >= 0 && *model) {
const QAbstractItemModel * const aim = model->aim();
- return QV4::Value::fromBoolean(aim->hasChildren(aim->index(data->index, 0, model->rootIndex)));
+ return QV4::Value::fromBoolean(aim->hasChildren(aim->index(o->item->index, 0, model->rootIndex)));
} else {
return QV4::Value::fromBoolean(false);
}
@@ -343,18 +343,18 @@ bool QQmlDMCachedModelData::resolveIndex(const QQmlAdaptorModel &, int idx)
QV4::Value QQmlDMCachedModelData::get_property(QV4::SimpleCallContext *ctx, uint propertyId)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
- QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(data);
- if (data->index == -1) {
+ QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(o->item);
+ if (o->item->index == -1) {
if (!modelData->cachedData.isEmpty()) {
- return data->engine->fromVariant(
+ return ctx->engine->v8Engine->fromVariant(
modelData->cachedData.at(modelData->type->hasModelData ? 0 : propertyId));
}
} else if (*modelData->type->model) {
- return data->engine->fromVariant(
+ return ctx->engine->v8Engine->fromVariant(
modelData->value(modelData->type->propertyRoles.at(propertyId)));
}
return QV4::Value::undefinedValue();
@@ -362,22 +362,22 @@ QV4::Value QQmlDMCachedModelData::get_property(QV4::SimpleCallContext *ctx, uint
QV4::Value QQmlDMCachedModelData::set_property(QV4::SimpleCallContext *ctx, uint propertyId)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
if (!ctx->argumentCount)
ctx->throwTypeError();
- if (data->index == -1) {
- QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(data);
+ if (o->item->index == -1) {
+ QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(o->item);
if (!modelData->cachedData.isEmpty()) {
if (modelData->cachedData.count() > 1) {
- modelData->cachedData[propertyId] = data->engine->toVariant(ctx->arguments[0], QVariant::Invalid);
- QMetaObject::activate(data, data->metaObject(), propertyId, 0);
+ modelData->cachedData[propertyId] = ctx->engine->v8Engine->toVariant(ctx->arguments[0], QVariant::Invalid);
+ QMetaObject::activate(o->item, o->item->metaObject(), propertyId, 0);
} else if (modelData->cachedData.count() == 1) {
- modelData->cachedData[0] = data->engine->toVariant(ctx->arguments[0], QVariant::Invalid);
- QMetaObject::activate(data, data->metaObject(), 0, 0);
- QMetaObject::activate(data, data->metaObject(), 1, 0);
+ modelData->cachedData[0] = ctx->engine->v8Engine->toVariant(ctx->arguments[0], QVariant::Invalid);
+ QMetaObject::activate(o->item, o->item->metaObject(), 0, 0);
+ QMetaObject::activate(o->item, o->item->metaObject(), 1, 0);
}
}
}
@@ -424,14 +424,13 @@ public:
QV4::Value get()
{
if (type->prototype.isEmpty()) {
- QQmlAdaptorModelEngineData * const data = engineData(engine);
+ QQmlAdaptorModelEngineData * const data = engineData(v4->v8Engine);
type->initializeConstructor(data);
}
QV4::Object *proto = type->prototype.value().asObject();
- QV4::Object *o = proto->engine()->newObject();
+ QV4::Object *o = new (proto->engine()->memoryManager) QQmlDelegateModelItemObject(proto->engine(), this);
o->prototype = proto;
QV4::Value data = QV4::Value::fromObject(o);
- v8::Handle<v8::Object>(data)->SetExternalResource(this);
++scriptRef;
return data;
}
@@ -581,32 +580,30 @@ public:
static QV4::Value get_modelData(QV4::SimpleCallContext *ctx)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
- return data->engine->fromVariant(static_cast<QQmlDMListAccessorData *>(data)->cachedData);
+ return ctx->engine->v8Engine->fromVariant(static_cast<QQmlDMListAccessorData *>(o->item)->cachedData);
}
static QV4::Value set_modelData(QV4::SimpleCallContext *ctx)
{
- QQmlDelegateModelItem *data = v8_resource_cast<QQmlDelegateModelItem>(ctx->thisObject);
- if (!data)
+ QQmlDelegateModelItemObject *o = ctx->thisObject.as<QQmlDelegateModelItemObject>();
+ if (!o)
ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
if (!ctx->argumentCount)
ctx->throwTypeError();
-
- static_cast<QQmlDMListAccessorData *>(data)->setModelData(data->engine->toVariant(ctx->arguments[0], QVariant::Invalid));
+ static_cast<QQmlDMListAccessorData *>(o->item)->setModelData(ctx->engine->v8Engine->toVariant(ctx->arguments[0], QVariant::Invalid));
}
QV4::Value get()
{
- QQmlAdaptorModelEngineData *data = engineData(engine);
- QV4::Object *o = data->v4->newObject();
+ QQmlAdaptorModelEngineData *data = engineData(v4->v8Engine);
+ QV4::Object *o = new (v4->memoryManager) QQmlDelegateModelItemObject(v4, this);
o->prototype = data->listItemProto.value().asObject();
QV4::Value val = QV4::Value::fromObject(o);
- v8::Handle<v8::Object>(val)->SetExternalResource(this);
++scriptRef;
return val;
}