diff options
author | Tasuku Suzuki <tasuku.suzuki@qbc.io> | 2019-07-05 06:54:38 +0900 |
---|---|---|
committer | Tasuku Suzuki <tasuku.suzuki@qbc.io> | 2019-07-08 18:42:26 +0900 |
commit | 89c9418621990961ced6add0e218eaaf63a1656e (patch) | |
tree | 801a1da00351f18f1513304881eb2a56d280b19d | |
parent | 84ec8fa02629e348e2bc49e62db2e2c5cb744437 (diff) |
Fix build without features.itemmodel
Change-Id: Ia4304644a2a365c359eed31c55c2ca9d7d42f10c
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | src/imports/imports.pro | 4 | ||||
-rw-r--r-- | src/qml/configure.json | 7 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 13 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 25 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetype.cpp | 8 | ||||
-rw-r--r-- | src/qml/types/types.pri | 13 | ||||
-rw-r--r-- | src/qmlmodels/configure.json | 4 |
7 files changed, 62 insertions, 12 deletions
diff --git a/src/imports/imports.pro b/src/imports/imports.pro index 2ed839a6e0..a87b0a59f6 100644 --- a/src/imports/imports.pro +++ b/src/imports/imports.pro @@ -5,9 +5,9 @@ SUBDIRS += \ builtins \ qtqml \ models \ - labsmodels \ - folderlistmodel + labsmodels +qtConfig(qml-itemmodel): SUBDIRS += folderlistmodel qtConfig(qml-worker-script): SUBDIRS += workerscript qtHaveModule(sql): SUBDIRS += localstorage qtConfig(settings): SUBDIRS += settings diff --git a/src/qml/configure.json b/src/qml/configure.json index 9313e4594b..3fc1fd528b 100644 --- a/src/qml/configure.json +++ b/src/qml/configure.json @@ -178,6 +178,13 @@ "section": "QML", "condition": "features.thread", "output": [ "privateFeature" ] + }, + "qml-itemmodel": { + "label": "QML Item Model", + "purpose": "Provides the item model for item views in QML", + "section": "QML", + "condition": "features.itemmodel", + "output": [ "privateFeature" ] } }, diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 8a4adfe69a..fa229cc062 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -80,7 +80,9 @@ #include <QtCore/qtimer.h> #include <QtCore/qatomic.h> #include <QtCore/qmetaobject.h> +#if QT_CONFIG(qml_itemmodel) #include <QtCore/qabstractitemmodel.h> +#endif #include <QtCore/qloggingcategory.h> #include <vector> @@ -1233,7 +1235,9 @@ private: std::vector<bool> *stdVectorBoolPtr; std::vector<QString> *stdVectorQStringPtr; std::vector<QUrl> *stdVectorQUrlPtr; +#if QT_CONFIG(qml_itemmodel) std::vector<QModelIndex> *stdVectorQModelIndexPtr; +#endif char allocData[MaxSizeOf7<QVariant, QString, @@ -1693,8 +1697,10 @@ void *CallArgument::dataPtr() return stdVectorQStringPtr; else if (type == qMetaTypeId<std::vector<QUrl>>()) return stdVectorQUrlPtr; +#if QT_CONFIG(qml_itemmodel) else if (type == qMetaTypeId<std::vector<QModelIndex>>()) return stdVectorQModelIndexPtr; +#endif else if (type != 0) return (void *)&allocData; return nullptr; @@ -1845,7 +1851,10 @@ bool CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const Q || callType == qMetaTypeId<std::vector<bool>>() || callType == qMetaTypeId<std::vector<QString>>() || callType == qMetaTypeId<std::vector<QUrl>>() - || callType == qMetaTypeId<std::vector<QModelIndex>>()) { +#if QT_CONFIG(qml_itemmodel) + || callType == qMetaTypeId<std::vector<QModelIndex>>() +#endif + ) { queryEngine = true; const QV4::Object* object = value.as<QV4::Object>(); if (callType == qMetaTypeId<std::vector<int>>()) { @@ -1863,9 +1872,11 @@ bool CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const Q } else if (callType == qMetaTypeId<std::vector<QUrl>>()) { stdVectorQUrlPtr = nullptr; fromContainerValue<std::vector<QUrl>>(object, callType, &CallArgument::stdVectorQUrlPtr, queryEngine); +#if QT_CONFIG(qml_itemmodel) } else if (callType == qMetaTypeId<std::vector<QModelIndex>>()) { stdVectorQModelIndexPtr = nullptr; fromContainerValue<std::vector<QModelIndex>>(object, callType, &CallArgument::stdVectorQModelIndexPtr, queryEngine); +#endif } #endif } else if (QMetaType::typeFlags(callType) diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 1eef12a491..77a98247ac 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -49,8 +49,10 @@ #include "qv4runtime_p.h" #include "qv4objectiterator_p.h" #include <private/qqmlvaluetypewrapper_p.h> +#if QT_CONFIG(qml_itemmodel) #include <private/qqmlmodelindexvaluetype_p.h> #include <QtCore/qabstractitemmodel.h> +#endif #include <algorithm> @@ -75,6 +77,16 @@ static void generateWarning(QV4::ExecutionEngine *v4, const QString& description } // F(elementType, elementTypeName, sequenceType, defaultValue) +#if QT_CONFIG(qml_itemmodel) +#define FOREACH_QML_SEQUENCE_TYPE_FOR_ITEMMODEL(F) \ + F(QModelIndex, QModelIndex, QModelIndexList, QModelIndex()) \ + F(QModelIndex, QModelIndexVector, QVector<QModelIndex>, QModelIndex()) \ + F(QModelIndex, QModelIndexStdVector, std::vector<QModelIndex>, QModelIndex()) \ + F(QItemSelectionRange, QItemSelectionRange, QItemSelection, QItemSelectionRange()) +#else +#define FOREACH_QML_SEQUENCE_TYPE_FOR_ITEMMODEL(F) +#endif + #define FOREACH_QML_SEQUENCE_TYPE(F) \ F(int, IntVector, QVector<int>, 0) \ F(qreal, RealVector, QVector<qreal>, 0.0) \ @@ -92,10 +104,7 @@ static void generateWarning(QV4::ExecutionEngine *v4, const QString& description F(QUrl, Url, QList<QUrl>, QUrl()) \ F(QUrl, UrlVector, QVector<QUrl>, QUrl()) \ F(QUrl, UrlStdVector, std::vector<QUrl>, QUrl()) \ - F(QModelIndex, QModelIndex, QModelIndexList, QModelIndex()) \ - F(QModelIndex, QModelIndexVector, QVector<QModelIndex>, QModelIndex()) \ - F(QModelIndex, QModelIndexStdVector, std::vector<QModelIndex>, QModelIndex()) \ - F(QItemSelectionRange, QItemSelectionRange, QItemSelection, QItemSelectionRange()) + FOREACH_QML_SEQUENCE_TYPE_FOR_ITEMMODEL(F) static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, const QString &element) { @@ -112,6 +121,7 @@ static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, co return engine->newString(element.toString())->asReturnedValue(); } +#if QT_CONFIG(qml_itemmodel) static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, const QModelIndex &element) { const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(QMetaType::QModelIndex); @@ -124,6 +134,7 @@ static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, co const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(metaTypeId); return QV4::QQmlValueTypeWrapper::create(engine, QVariant::fromValue(element), vtmo, metaTypeId); } +#endif static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *, qreal element) { @@ -150,6 +161,7 @@ static QString convertElementToString(const QUrl &element) return element.toString(); } +#if QT_CONFIG(qml_itemmodel) static QString convertElementToString(const QModelIndex &element) { return reinterpret_cast<const QQmlModelIndexValueType *>(&element)->toString(); @@ -159,6 +171,7 @@ static QString convertElementToString(const QItemSelectionRange &element) { return reinterpret_cast<const QQmlItemSelectionRangeValueType *>(&element)->toString(); } +#endif static QString convertElementToString(qreal element) { @@ -192,6 +205,7 @@ template <> QUrl convertValueToElement(const Value &value) return QUrl(value.toQString()); } +#if QT_CONFIG(qml_itemmodel) template <> QModelIndex convertValueToElement(const Value &value) { const QQmlValueTypeWrapper *v = value.as<QQmlValueTypeWrapper>(); @@ -207,6 +221,7 @@ template <> QItemSelectionRange convertValueToElement(const Value &value) return v->toVariant().value<QItemSelectionRange>(); return QItemSelectionRange(); } +#endif template <> qreal convertValueToElement(const Value &value) { @@ -667,6 +682,7 @@ typedef QQmlSequence<QVector<QUrl> > QQmlUrlVectorList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlUrlVectorList); typedef QQmlSequence<std::vector<QUrl> > QQmlUrlStdVectorList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlUrlStdVectorList); +#if QT_CONFIG(qml_itemmodel) typedef QQmlSequence<QModelIndexList> QQmlQModelIndexList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlQModelIndexList); typedef QQmlSequence<QVector<QModelIndex> > QQmlQModelIndexVectorList; @@ -675,6 +691,7 @@ typedef QQmlSequence<std::vector<QModelIndex> > QQmlQModelIndexStdVectorList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlQModelIndexStdVectorList); typedef QQmlSequence<QItemSelection> QQmlQItemSelectionRangeList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlQItemSelectionRangeList); +#endif typedef QQmlSequence<QList<bool> > QQmlBoolList; DEFINE_OBJECT_TEMPLATE_VTABLE(QQmlBoolList); typedef QQmlSequence<QList<qreal> > QQmlRealList; diff --git a/src/qml/qml/qqmlvaluetype.cpp b/src/qml/qml/qqmlvaluetype.cpp index fce753cd26..88f7b69dc2 100644 --- a/src/qml/qml/qqmlvaluetype.cpp +++ b/src/qml/qml/qqmlvaluetype.cpp @@ -43,7 +43,9 @@ #include <private/qqmlglobal_p.h> #include <QtCore/qdebug.h> #include <private/qmetaobjectbuilder_p.h> +#if QT_CONFIG(qml_itemmodel) #include <private/qqmlmodelindexvaluetype_p.h> +#endif #include <private/qmetatype_p.h> QT_BEGIN_NAMESPACE @@ -69,8 +71,10 @@ QQmlValueTypeFactoryImpl::QQmlValueTypeFactoryImpl() { std::fill_n(valueTypes, int(QVariant::UserType), nullptr); +#if QT_CONFIG(qml_itemmodel) // See types wrapped in qqmlmodelindexvaluetype_p.h qRegisterMetaType<QItemSelectionRange>(); +#endif } QQmlValueTypeFactoryImpl::~QQmlValueTypeFactoryImpl() @@ -120,13 +124,17 @@ const QMetaObject *QQmlValueTypeFactoryImpl::metaObjectForMetaType(int t) return &QQmlRectFValueType::staticMetaObject; case QVariant::EasingCurve: return &QQmlEasingValueType::staticMetaObject; +#if QT_CONFIG(qml_itemmodel) case QVariant::ModelIndex: return &QQmlModelIndexValueType::staticMetaObject; case QVariant::PersistentModelIndex: return &QQmlPersistentModelIndexValueType::staticMetaObject; +#endif default: +#if QT_CONFIG(qml_itemmodel) if (t == qMetaTypeId<QItemSelectionRange>()) return &QQmlItemSelectionRangeValueType::staticMetaObject; +#endif if (const QMetaObject *mo = QQml_valueTypeProvider()->metaObjectForMetaType(t)) return mo; diff --git a/src/qml/types/types.pri b/src/qml/types/types.pri index c50273071b..54cd8710b6 100644 --- a/src/qml/types/types.pri +++ b/src/qml/types/types.pri @@ -1,12 +1,17 @@ SOURCES += \ $$PWD/qqmlbind.cpp \ - $$PWD/qqmlconnections.cpp \ - $$PWD/qqmlmodelindexvaluetype.cpp + $$PWD/qqmlconnections.cpp HEADERS += \ $$PWD/qqmlbind_p.h \ - $$PWD/qqmlconnections_p.h \ - $$PWD/qqmlmodelindexvaluetype_p.h + $$PWD/qqmlconnections_p.h + +qtConfig(qml-itemmodel) { + SOURCES += \ + $$PWD/qqmlmodelindexvaluetype.cpp + HEADERS += \ + $$PWD/qqmlmodelindexvaluetype_p.h +} qtConfig(qml-animation) { SOURCES += \ diff --git a/src/qmlmodels/configure.json b/src/qmlmodels/configure.json index bfe7d538ec..2b4fa4f6e2 100644 --- a/src/qmlmodels/configure.json +++ b/src/qmlmodels/configure.json @@ -16,19 +16,21 @@ "label": "QML list model", "purpose": "Provides the ListModel QML type.", "section": "QML", + "condition": "features.qml-itemmodel", "output": [ "privateFeature" ] }, "qml-delegate-model": { "label": "QML delegate model", "purpose": "Provides the DelegateModel QML type.", "section": "QML", - "condition": "features.qml-object-model", + "condition": "features.qml-object-model && features.qml-itemmodel", "output": [ "privateFeature" ] }, "qml-table-model": { "label": "QML table model", "purpose": "Provides the TableModel QML type.", "section": "QML", + "condition": "features.qml-itemmodel", "output": [ "privateFeature" ] } }, |