1 // This is the implementation of the qml_register_type() helper.
2 //
3 // Copyright (c) 2021 Riverbank Computing Limited <info@riverbankcomputing.com>
4 //
5 // This file is part of PyQt5.
6 //
7 // This file may be used under the terms of the GNU General Public License
8 // version 3.0 as published by the Free Software Foundation and appearing in
9 // the file LICENSE included in the packaging of this file. Please review the
10 // following information to ensure the GNU General Public License version 3.0
11 // requirements will be met: http://www.gnu.org/copyleft/gpl.html.
12 //
13 // If you do not wish to use this file under the terms of the GPL version 3.0
14 // then you may purchase a commercial license. For more information contact
15 // info@riverbankcomputing.com.
16 //
17 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19
20
21 #include "qpyquick_register_type.h"
22 #include "qpyquickframebufferobject.h"
23 #include "qpyquickitem.h"
24 #include "qpyquickpainteditem.h"
25 #include "qpyquickview.h"
26 #include "qpyquickwindow.h"
27
28 #include "sipAPIQtQuick.h"
29
30
qpyquick_register_type(PyTypeObject * py_type,const QMetaObject * mo,const QByteArray & ptr_name,const QByteArray & list_name,QQmlPrivate::RegisterType ** rtp)31 sipErrorState qpyquick_register_type(PyTypeObject *py_type,
32 const QMetaObject *mo, const QByteArray &ptr_name,
33 const QByteArray &list_name, QQmlPrivate::RegisterType **rtp)
34 {
35 // Make sure the types are tested in the right order (ie. more specific
36 // types first).
37
38 #if QT_VERSION >= 0x050200
39 if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickFramebufferObject)))
40 return ((*rtp = QPyQuickFramebufferObject::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
41 #endif
42
43 if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickPaintedItem)))
44 return ((*rtp = QPyQuickPaintedItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
45
46 if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickItem)))
47 return ((*rtp = QPyQuickItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
48
49 if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickView)))
50 return ((*rtp = QPyQuickView::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
51
52 if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickWindow)))
53 return ((*rtp = QPyQuickWindow::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
54
55 // We don't recognise the type.
56 return sipErrorContinue;
57 }
58