Add support for more sequence types
authorChris Adams <christopher.adams@nokia.com>
Mon, 3 Oct 2011 00:52:38 +0000 (10:52 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 2 Nov 2011 00:17:09 +0000 (01:17 +0100)
commitc177691118e4e2bace9b5c1f4f57343190e6ad64
treeb177efd1493e33dc28c57b5a2980fd020b3c9395
parent9dd6d4e9b8f7c2df6369c336b429bc965a2697d4
Add support for more sequence types

This commit adds support for more sequence types by adding a sequence
wrapper.  This class enables conversion between v8::Array and C++
sequences of various types (currently just QList<int>, QList<qreal>,
QList<bool>, QList<QString>, QList<QUrl> and QStringList), but more
types can be added later if required).

When a JavaScript object is created from such a sequence, its
prototype object is set to the v8::Array prototype object.  The
indexed setter, indexed getter, length and toString methods are
implemented directly or in terms of the underlying sequence resource.

Note that currently, sequences of ValueTypes are NOT supported, due to
the fact that operations like:
     someObj.someValueTypeSequence[i].x = 5;
would not behave as required.

Task-number: QTBUG-20826
Task-number: QTBUG-21770
Change-Id: I36deb448fb0e87a32084a900e70a2604ff369309
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
24 files changed:
doc/src/declarative/extending.qdoc
src/declarative/qml/qdeclarativevaluetype.cpp
src/declarative/qml/v8/qv8engine.cpp
src/declarative/qml/v8/qv8engine_p.h
src/declarative/qml/v8/qv8qobjectwrapper.cpp
src/declarative/qml/v8/qv8sequencewrapper.cpp [new file with mode: 0644]
src/declarative/qml/v8/qv8sequencewrapper_p.h [new file with mode: 0644]
src/declarative/qml/v8/qv8sequencewrapper_p_p.h [new file with mode: 0644]
src/declarative/qml/v8/qv8worker.cpp
src/declarative/qml/v8/v8.pri
tests/auto/declarative/qdeclarativeecmascript/data/SequenceConversionComponent.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.array.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.bindings.error.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.bindings.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.copy.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.read.error.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.read.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.threads.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.write.error.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/sequenceConversion.write.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/data/threadScript.js [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
tests/auto/declarative/qdeclarativeecmascript/testtypes.h
tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp