diff options
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 33 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject_p.h | 46 |
3 files changed, 45 insertions, 36 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index fe34207ddc..b09f874ef3 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -709,8 +709,6 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine) static_cast<VariantPrototype *>(variantPrototype())->init(); #if QT_CONFIG(qml_sequence_object) - static const bool registered = QV4::SequencePrototype::registerDefaultTypes(); - Q_UNUSED(registered); sequencePrototype()->cast<SequencePrototype>()->init(); #endif diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 5c7f8289f2..73fa2385fd 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -37,7 +37,6 @@ ** ****************************************************************************/ -#include <QtQml/qqml.h> #include <QtCore/qsequentialiterable.h> #include "qv4sequenceobject_p.h" @@ -51,10 +50,6 @@ #include "qv4objectiterator_p.h" #include <private/qqmlmetatype_p.h> #include <private/qqmltype_p_p.h> -#if QT_CONFIG(qml_itemmodel) -#include <private/qqmlmodelindexvaluetype_p.h> -#include <QtCore/qabstractitemmodel.h> -#endif #include <algorithm> @@ -581,34 +576,6 @@ namespace QV4 { DEFINE_OBJECT_VTABLE(QV4Sequence); } - -template<typename SequenceType> -void registerSequenceType() -{ - qRegisterMetaType<SequenceType>(); - qmlRegisterAnonymousSequentialContainer<SequenceType>("QML", 1); -} - -bool SequencePrototype::registerDefaultTypes() -{ - registerSequenceType<std::vector<int>>(); - registerSequenceType<std::vector<qreal>>(); - registerSequenceType<std::vector<bool>>(); - registerSequenceType<QList<int>>(); - registerSequenceType<QList<qreal>>(); - registerSequenceType<QList<bool>>(); - registerSequenceType<QStringList>(); - registerSequenceType<std::vector<QString>>(); - registerSequenceType<QList<QUrl>>(); - registerSequenceType<std::vector<QUrl>>(); -#if QT_CONFIG(qml_itemmodel) - registerSequenceType<QModelIndexList>(); - registerSequenceType<std::vector<QModelIndex>>(); - registerSequenceType<QItemSelection>(); -#endif - return true; -} - void SequencePrototype::init() { defineDefaultProperty(QStringLiteral("sort"), method_sort, 1); diff --git a/src/qml/jsruntime/qv4sequenceobject_p.h b/src/qml/jsruntime/qv4sequenceobject_p.h index 6229a4b5ec..9143430872 100644 --- a/src/qml/jsruntime/qv4sequenceobject_p.h +++ b/src/qml/jsruntime/qv4sequenceobject_p.h @@ -53,12 +53,18 @@ #include <QtCore/qglobal.h> #include <QtCore/qvariant.h> +#include <QtQml/qqml.h> #include "qv4value_p.h" #include "qv4object_p.h" #include "qv4context_p.h" #include "qv4string_p.h" +#if QT_CONFIG(qml_itemmodel) +#include <private/qqmlmodelindexvaluetype_p.h> +#include <QtCore/qabstractitemmodel.h> +#endif + QT_REQUIRE_CONFIG(qml_sequence_object); QT_BEGIN_NAMESPACE @@ -68,7 +74,6 @@ namespace QV4 { struct Q_QML_PRIVATE_EXPORT SequencePrototype : public QV4::Object { V4_PROTOTYPE(arrayPrototype) - static bool registerDefaultTypes(); void init(); static ReturnedValue method_valueOf(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); @@ -84,6 +89,45 @@ struct Q_QML_PRIVATE_EXPORT SequencePrototype : public QV4::Object } +#define QT_DECLARE_SEQUENTIAL_CONTAINER(LOCAL, FOREIGN, VALUE) \ + struct LOCAL \ + { \ + Q_GADGET \ + QML_ANONYMOUS \ + QML_SEQUENTIAL_CONTAINER(VALUE) \ + QML_FOREIGN(FOREIGN) \ + QML_ADDED_IN_VERSION(2, 0) \ + } + +// We use the original QT_COORD_TYPE name because that will match up with relevant other +// types in plugins.qmltypes (if you use either float or double, that is; otherwise you're +// on your own). +#ifdef QT_COORD_TYPE +QT_DECLARE_SEQUENTIAL_CONTAINER(QStdRealVectorForeign, std::vector<qreal>, QT_COORD_TYPE); +QT_DECLARE_SEQUENTIAL_CONTAINER(QRealListForeign, QList<qreal>, QT_COORD_TYPE); +#else +QT_DECLARE_SEQUENTIAL_CONTAINER(QRealStdVectorForeign, std::vector<qreal>, double); +QT_DECLARE_SEQUENTIAL_CONTAINER(QRealListForeign, QList<qreal>, double); +#endif + +QT_DECLARE_SEQUENTIAL_CONTAINER(QIntStdVectorForeign, std::vector<int>, int); +QT_DECLARE_SEQUENTIAL_CONTAINER(QBoolStdVectorForeign, std::vector<bool>, bool); +QT_DECLARE_SEQUENTIAL_CONTAINER(QStringStdVectorForeign, std::vector<QString>, QString); +QT_DECLARE_SEQUENTIAL_CONTAINER(QUrlStdVectorForeign, std::vector<QUrl>, QUrl); + +QT_DECLARE_SEQUENTIAL_CONTAINER(QIntListForeign, QList<int>, int); +QT_DECLARE_SEQUENTIAL_CONTAINER(QBoolListForeign, QList<bool>, bool); +QT_DECLARE_SEQUENTIAL_CONTAINER(QStringListForeign, QStringList, QString); +QT_DECLARE_SEQUENTIAL_CONTAINER(QUrlListForeign, QList<QUrl>, QUrl); + +#if QT_CONFIG(qml_itemmodel) +QT_DECLARE_SEQUENTIAL_CONTAINER(QModelIndexListForeign, QModelIndexList, QModelIndex); +QT_DECLARE_SEQUENTIAL_CONTAINER(QModelIndexStdVectorForeign, std::vector<QModelIndex>, QModelIndex); +QT_DECLARE_SEQUENTIAL_CONTAINER(QItemSelectionForeign, QItemSelection, QItemSelectionRange); +#endif + +#undef QT_DECLARE_SEQUENTIAL_CONTAINER + QT_END_NAMESPACE #endif // QV4SEQUENCEWRAPPER_P_H |