diff options
-rw-r--r-- | src/qml/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/qml/qml/qqml.h | 98 | ||||
-rw-r--r-- | src/qml/qml/qqmlregistration.h | 140 |
3 files changed, 143 insertions, 96 deletions
diff --git a/src/qml/CMakeLists.txt b/src/qml/CMakeLists.txt index 2b8c132cba..05f9360c26 100644 --- a/src/qml/CMakeLists.txt +++ b/src/qml/CMakeLists.txt @@ -219,6 +219,7 @@ qt_internal_add_module(Qml qml/ftw/qrecursionwatcher_p.h qml/ftw/qrecyclepool_p.h qml/ftw/qstringhash_p.h + qml/qqmlregistration.h qml/qqml.cpp qml/qqml.h qml/qqmlabstractbinding.cpp qml/qqmlabstractbinding_p.h qml/qqmlabstracturlinterceptor.cpp qml/qqmlabstracturlinterceptor.h diff --git a/src/qml/qml/qqml.h b/src/qml/qml/qqml.h index 078bd93d25..d485b5367d 100644 --- a/src/qml/qml/qqml.h +++ b/src/qml/qml/qqml.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQml module of the Qt Toolkit. @@ -42,6 +42,7 @@ #include <QtQml/qqmlprivate.h> #include <QtQml/qjsvalue.h> +#include <QtQml/qqmlregistration.h> #include <QtCore/qbytearray.h> #include <QtCore/qmetaobject.h> @@ -51,12 +52,6 @@ #define QML_VERSION 0x020000 #define QML_VERSION_STR "2.0" -#define QML_PRIVATE_NAMESPACE \ - QT_PREPEND_NAMESPACE(QQmlPrivate) - -#define QML_REGISTER_TYPES_AND_REVISIONS \ - QT_PREPEND_NAMESPACE(qmlRegisterTypesAndRevisions) - #define QML_DECLARE_TYPE(TYPE) \ Q_DECLARE_METATYPE(TYPE *) \ Q_DECLARE_METATYPE(QQmlListProperty<TYPE>) @@ -70,95 +65,6 @@ #define QML_DECLARE_INTERFACE_HASMETATYPE(INTERFACE) \ QML_DECLARE_TYPE_HASMETATYPE(INTERFACE) -#define QML_ELEMENT \ - Q_CLASSINFO("QML.Element", "auto") - -#define QML_ANONYMOUS \ - Q_CLASSINFO("QML.Element", "anonymous") - -#define QML_NAMED_ELEMENT(NAME) \ - Q_CLASSINFO("QML.Element", #NAME) - -#define QML_VALUE_TYPE(NAME) \ - Q_CLASSINFO("QML.Element", #NAME) \ - QML_UNCREATABLE("Value types cannot be created.") - -#define QML_UNCREATABLE(REASON) \ - Q_CLASSINFO("QML.Creatable", "false") \ - Q_CLASSINFO("QML.UncreatableReason", REASON) - -#define QML_SINGLETON \ - Q_CLASSINFO("QML.Singleton", "true") \ - enum class QmlIsSingleton {yes = true}; \ - template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSingleton; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_SEQUENTIAL_CONTAINER(VALUE_TYPE) \ - Q_CLASSINFO("QML.Sequence", #VALUE_TYPE) \ - using QmlSequenceValueType = VALUE_TYPE; \ - enum class QmlIsSequence {yes = true}; \ - template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSequence; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_ADDED_IN_MINOR_VERSION(VERSION) \ - Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(VERSION)) - -#define QML_ADDED_IN_VERSION(MAJOR, MINOR) \ - Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(MAJOR, MINOR)) - -#define QML_REMOVED_IN_MINOR_VERSION(VERSION) \ - Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(VERSION)) - -#define QML_REMOVED_IN_VERSION(MAJOR, MINOR) \ - Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(MAJOR, MINOR)) - -#define QML_ATTACHED(ATTACHED_TYPE) \ - Q_CLASSINFO("QML.Attached", #ATTACHED_TYPE) \ - using QmlAttachedType = ATTACHED_TYPE; \ - template<class, class, bool> friend struct QML_PRIVATE_NAMESPACE::QmlAttached; \ - template<class> friend struct QML_PRIVATE_NAMESPACE::QmlAttachedAccessor; - -#define QML_EXTENDED(EXTENDED_TYPE) \ - Q_CLASSINFO("QML.Extended", #EXTENDED_TYPE) \ - using QmlExtendedType = EXTENDED_TYPE; \ - template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtended; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE) \ - Q_CLASSINFO("QML.Extended", #EXTENDED_NAMESPACE) \ - static constexpr const QMetaObject *qmlExtendedNamespace() { return &EXTENDED_NAMESPACE::staticMetaObject; } \ - template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtendedNamespace; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_FOREIGN(FOREIGN_TYPE) \ - Q_CLASSINFO("QML.Foreign", #FOREIGN_TYPE) \ - using QmlForeignType = FOREIGN_TYPE; \ - template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlResolved; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_FOREIGN_NAMESPACE(FOREIGN_NAMESPACE) \ - Q_CLASSINFO("QML.Foreign", #FOREIGN_NAMESPACE) - -#define QML_INTERFACE \ - Q_CLASSINFO("QML.Element", "anonymous") \ - enum class QmlIsInterface {yes = true}; \ - template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; \ - template<typename T, typename... Args> \ - friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); - -#define QML_IMPLEMENTS_INTERFACES(INTERFACES) \ - Q_INTERFACES(INTERFACES) \ - enum class QmlIsInterface {yes = false}; \ - template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; - -#define QML_UNAVAILABLE \ - QML_FOREIGN(QQmlTypeNotAvailable) - enum { /* TYPEINFO flags */ QML_HAS_ATTACHED_PROPERTIES = 0x01 }; diff --git a/src/qml/qml/qqmlregistration.h b/src/qml/qml/qqmlregistration.h new file mode 100644 index 0000000000..5df8f4badf --- /dev/null +++ b/src/qml/qml/qqmlregistration.h @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLREGISTRATION_H +#define QQMLREGISTRATION_H + +#include <QtCore/qglobal.h> + +#define QML_PRIVATE_NAMESPACE \ + QT_PREPEND_NAMESPACE(QQmlPrivate) + +#define QML_REGISTER_TYPES_AND_REVISIONS \ + QT_PREPEND_NAMESPACE(qmlRegisterTypesAndRevisions) + +#define QML_ELEMENT \ + Q_CLASSINFO("QML.Element", "auto") + +#define QML_ANONYMOUS \ + Q_CLASSINFO("QML.Element", "anonymous") + +#define QML_NAMED_ELEMENT(NAME) \ + Q_CLASSINFO("QML.Element", #NAME) + +#define QML_VALUE_TYPE(NAME) \ + Q_CLASSINFO("QML.Element", #NAME) \ + QML_UNCREATABLE("Value types cannot be created.") + +#define QML_UNCREATABLE(REASON) \ + Q_CLASSINFO("QML.Creatable", "false") \ + Q_CLASSINFO("QML.UncreatableReason", REASON) + +#define QML_SINGLETON \ + Q_CLASSINFO("QML.Singleton", "true") \ + enum class QmlIsSingleton {yes = true}; \ + template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSingleton; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_SEQUENTIAL_CONTAINER(VALUE_TYPE) \ + Q_CLASSINFO("QML.Sequence", #VALUE_TYPE) \ + using QmlSequenceValueType = VALUE_TYPE; \ + enum class QmlIsSequence {yes = true}; \ + template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSequence; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_ADDED_IN_MINOR_VERSION(VERSION) \ + Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(VERSION)) + +#define QML_ADDED_IN_VERSION(MAJOR, MINOR) \ + Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(MAJOR, MINOR)) + +#define QML_REMOVED_IN_MINOR_VERSION(VERSION) \ + Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(VERSION)) + +#define QML_REMOVED_IN_VERSION(MAJOR, MINOR) \ + Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(MAJOR, MINOR)) + +#define QML_ATTACHED(ATTACHED_TYPE) \ + Q_CLASSINFO("QML.Attached", #ATTACHED_TYPE) \ + using QmlAttachedType = ATTACHED_TYPE; \ + template<class, class, bool> friend struct QML_PRIVATE_NAMESPACE::QmlAttached; \ + template<class> friend struct QML_PRIVATE_NAMESPACE::QmlAttachedAccessor; + +#define QML_EXTENDED(EXTENDED_TYPE) \ + Q_CLASSINFO("QML.Extended", #EXTENDED_TYPE) \ + using QmlExtendedType = EXTENDED_TYPE; \ + template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtended; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE) \ + Q_CLASSINFO("QML.Extended", #EXTENDED_NAMESPACE) \ + static constexpr const QMetaObject *qmlExtendedNamespace() { return &EXTENDED_NAMESPACE::staticMetaObject; } \ + template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtendedNamespace; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_FOREIGN(FOREIGN_TYPE) \ + Q_CLASSINFO("QML.Foreign", #FOREIGN_TYPE) \ + using QmlForeignType = FOREIGN_TYPE; \ + template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlResolved; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_FOREIGN_NAMESPACE(FOREIGN_NAMESPACE) \ + Q_CLASSINFO("QML.Foreign", #FOREIGN_NAMESPACE) + +#define QML_INTERFACE \ + Q_CLASSINFO("QML.Element", "anonymous") \ + enum class QmlIsInterface {yes = true}; \ + template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; \ + template<typename T, typename... Args> \ + friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); + +#define QML_IMPLEMENTS_INTERFACES(INTERFACES) \ + Q_INTERFACES(INTERFACES) \ + enum class QmlIsInterface {yes = false}; \ + template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; + +#define QML_UNAVAILABLE \ + QML_FOREIGN(QQmlTypeNotAvailable) + +#endif // QQMLREGISTRATION_H |