mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-12 04:26:43 +00:00
Add a battery of 20 qml registration slots
This commit is contained in:
parent
8d62c449be
commit
0506920c4b
@ -5,30 +5,9 @@
|
||||
#include <QtCore/QObject>
|
||||
|
||||
namespace DOS {
|
||||
class DosIQObjectImpl;
|
||||
class DosQObject;
|
||||
|
||||
class DosQObjectWrapper : public QObject
|
||||
{
|
||||
public:
|
||||
static const QMetaObject staticMetaObject;
|
||||
|
||||
DosQObjectWrapper(QObject *parent = nullptr);
|
||||
~DosQObjectWrapper();
|
||||
|
||||
const QMetaObject* metaObject() const override;
|
||||
int qt_metacall(QMetaObject::Call, int, void **) override;
|
||||
|
||||
static CreateDObject createDObject();
|
||||
static DeleteDObject deleteDObject();
|
||||
static void setCreateDObject(CreateDObject createDObject);
|
||||
static void setDeleteDObject(DeleteDObject deleteDObject);
|
||||
static void setStaticMetaObject(const QMetaObject& metaObject);
|
||||
|
||||
private:
|
||||
void* m_dObject;
|
||||
DosQObject* m_impl;
|
||||
static CreateDObject m_createDObject;
|
||||
static DeleteDObject m_deleteDObject;
|
||||
};
|
||||
int dosQmlRegisterType(const char* uri, int major, int minor,
|
||||
const char* qmlName,
|
||||
const QMetaObject& staticMetaObject,
|
||||
CreateDObject createDObject,
|
||||
DeleteDObject deleteDObject);
|
||||
}
|
||||
|
@ -654,16 +654,6 @@ void dos_qdeclarative_qmlregistertype(const char *uri, int major, int minor,
|
||||
CreateDObject createDObject,
|
||||
DeleteDObject deleteDObject)
|
||||
{
|
||||
static int i = 0;
|
||||
|
||||
auto holder = static_cast<DosIQMetaObjectHolder*>(staticMetaObject);
|
||||
|
||||
if (i == 0) {
|
||||
DosQObjectWrapper::setCreateDObject(createDObject);
|
||||
DosQObjectWrapper::setDeleteDObject(deleteDObject);
|
||||
DosQObjectWrapper::setStaticMetaObject(*(holder->data()->metaObject()));
|
||||
*result = qmlRegisterType<DosQObjectWrapper>(uri, major, minor, qml);
|
||||
}
|
||||
|
||||
++i;
|
||||
dosQmlRegisterType(uri, major, minor, qml, *(holder->data()->metaObject()), createDObject, deleteDObject);
|
||||
}
|
||||
|
@ -2,14 +2,46 @@
|
||||
#include "DOtherSide/DosIQObjectImpl.h"
|
||||
#include "DOtherSide/DosQObject.h"
|
||||
#include <QDebug>
|
||||
#include <QtQml>
|
||||
|
||||
namespace DOS {
|
||||
|
||||
const QMetaObject DosQObjectWrapper::staticMetaObject = QObject::staticMetaObject;
|
||||
CreateDObject DosQObjectWrapper::m_createDObject;
|
||||
DeleteDObject DosQObjectWrapper::m_deleteDObject;
|
||||
template<int>
|
||||
class DosQObjectWrapper : public QObject
|
||||
{
|
||||
public:
|
||||
static const QMetaObject staticMetaObject;
|
||||
|
||||
DosQObjectWrapper::DosQObjectWrapper(QObject *parent)
|
||||
DosQObjectWrapper(QObject *parent = nullptr);
|
||||
~DosQObjectWrapper();
|
||||
|
||||
const QMetaObject* metaObject() const override;
|
||||
int qt_metacall(QMetaObject::Call, int, void **) override;
|
||||
|
||||
static CreateDObject createDObject();
|
||||
static DeleteDObject deleteDObject();
|
||||
static void setCreateDObject(CreateDObject createDObject);
|
||||
static void setDeleteDObject(DeleteDObject deleteDObject);
|
||||
static void setStaticMetaObject(const QMetaObject& metaObject);
|
||||
|
||||
private:
|
||||
void* m_dObject;
|
||||
DosQObject* m_impl;
|
||||
static CreateDObject m_createDObject;
|
||||
static DeleteDObject m_deleteDObject;
|
||||
};
|
||||
|
||||
template<int N>
|
||||
const QMetaObject DosQObjectWrapper<N>::staticMetaObject = QObject::staticMetaObject;
|
||||
|
||||
template<int N>
|
||||
CreateDObject DosQObjectWrapper<N>::m_createDObject;
|
||||
|
||||
template<int N>
|
||||
DeleteDObject DosQObjectWrapper<N>::m_deleteDObject;
|
||||
|
||||
template<int N>
|
||||
DosQObjectWrapper<N>::DosQObjectWrapper(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_dObject(nullptr)
|
||||
, m_impl(nullptr)
|
||||
@ -21,36 +53,92 @@ DosQObjectWrapper::DosQObjectWrapper(QObject *parent)
|
||||
Q_ASSERT(m_impl);
|
||||
}
|
||||
|
||||
DosQObjectWrapper::~DosQObjectWrapper()
|
||||
template<int N>
|
||||
DosQObjectWrapper<N>::~DosQObjectWrapper()
|
||||
{
|
||||
m_deleteDObject(m_dObject);
|
||||
m_dObject = nullptr;
|
||||
m_impl = nullptr;
|
||||
}
|
||||
|
||||
const QMetaObject *DosQObjectWrapper::metaObject() const
|
||||
template<int N>
|
||||
const QMetaObject *DosQObjectWrapper<N>::metaObject() const
|
||||
{
|
||||
Q_ASSERT(m_impl);
|
||||
return m_impl->metaObject();
|
||||
}
|
||||
|
||||
int DosQObjectWrapper::qt_metacall(QMetaObject::Call call, int index, void **args)
|
||||
template<int N>
|
||||
int DosQObjectWrapper<N>::qt_metacall(QMetaObject::Call call, int index, void **args)
|
||||
{
|
||||
Q_ASSERT(m_impl);
|
||||
return m_impl->qt_metacall(call, index, args);
|
||||
}
|
||||
|
||||
CreateDObject DosQObjectWrapper::createDObject() { return m_createDObject; }
|
||||
template<int N>
|
||||
CreateDObject DosQObjectWrapper<N>::createDObject() { return m_createDObject; }
|
||||
|
||||
DeleteDObject DosQObjectWrapper::deleteDObject() { return m_deleteDObject; }
|
||||
template<int N>
|
||||
DeleteDObject DosQObjectWrapper<N>::deleteDObject() { return m_deleteDObject; }
|
||||
|
||||
void DosQObjectWrapper::setCreateDObject(CreateDObject createDObject) { m_createDObject = createDObject; }
|
||||
template<int N>
|
||||
void DosQObjectWrapper<N>::setCreateDObject(CreateDObject createDObject) { m_createDObject = createDObject; }
|
||||
|
||||
void DosQObjectWrapper::setDeleteDObject(DeleteDObject deleteDObject) { m_deleteDObject = deleteDObject; }
|
||||
template<int N>
|
||||
void DosQObjectWrapper<N>::setDeleteDObject(DeleteDObject deleteDObject) { m_deleteDObject = deleteDObject; }
|
||||
|
||||
void DosQObjectWrapper::setStaticMetaObject(const QMetaObject &metaObject)
|
||||
template<int N>
|
||||
void DosQObjectWrapper<N>::setStaticMetaObject(const QMetaObject &metaObject)
|
||||
{
|
||||
*(const_cast<QMetaObject*>(&staticMetaObject)) = metaObject;
|
||||
}
|
||||
|
||||
template<int N>
|
||||
int dosQmlRegisterType(const char *uri, int major, int minor,
|
||||
const char *qmlName, const QMetaObject& staticMetaObject,
|
||||
CreateDObject createDObject,
|
||||
DeleteDObject deleteDObject)
|
||||
{
|
||||
DosQObjectWrapper<N>::setCreateDObject(std::move(createDObject));
|
||||
DosQObjectWrapper<N>::setDeleteDObject(std::move(deleteDObject));
|
||||
DosQObjectWrapper<N>::setStaticMetaObject(staticMetaObject);
|
||||
return qmlRegisterType<DosQObjectWrapper<N>>(uri, major, minor, qmlName);
|
||||
}
|
||||
|
||||
int dosQmlRegisterType(const char *uri, int major, int minor,
|
||||
const char *qmlName, const QMetaObject& staticMetaObject,
|
||||
CreateDObject createDObject,
|
||||
DeleteDObject deleteDObject)
|
||||
{
|
||||
static int i = 0;
|
||||
|
||||
switch (i++)
|
||||
{
|
||||
case 0: return dosQmlRegisterType<0>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 1: return dosQmlRegisterType<1>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 2: return dosQmlRegisterType<2>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 3: return dosQmlRegisterType<3>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 4: return dosQmlRegisterType<4>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 5: return dosQmlRegisterType<5>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 6: return dosQmlRegisterType<6>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 7: return dosQmlRegisterType<7>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 8: return dosQmlRegisterType<8>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 9: return dosQmlRegisterType<9>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 10: return dosQmlRegisterType<10>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 11: return dosQmlRegisterType<11>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 12: return dosQmlRegisterType<12>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 13: return dosQmlRegisterType<13>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 14: return dosQmlRegisterType<14>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 15: return dosQmlRegisterType<15>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 16: return dosQmlRegisterType<16>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 17: return dosQmlRegisterType<17>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 18: return dosQmlRegisterType<18>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 19: return dosQmlRegisterType<19>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
case 20: return dosQmlRegisterType<20>(uri, major, minor, qmlName, staticMetaObject, createDObject, deleteDObject);
|
||||
default: return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user