diff --git a/lib/include/DOtherSide/DosQAbstractListModel.h b/lib/include/DOtherSide/DosQAbstractListModel.h index d433310..dda0cf1 100644 --- a/lib/include/DOtherSide/DosQAbstractListModel.h +++ b/lib/include/DOtherSide/DosQAbstractListModel.h @@ -14,6 +14,8 @@ class DosQAbstractListModel : public QAbstractListModel, public IDosQObject public: /// Constructor DosQAbstractListModel(void* modelObject, + OnMetaObject onMetaObject, + OnSlotExecuted onSlotExecuted, RowCountCallback rowCountCallback, ColumnCountCallback columnCountCallback, DataCallback dataCallback, @@ -78,9 +80,6 @@ public: const QModelIndex& bottomRight, const QVector& roles = QVector()); - /// Set the implementation - void setImpl(std::unique_ptr impl); - private: std::unique_ptr m_impl; void* m_modelObject; diff --git a/lib/include/DOtherSide/DosQObject.h b/lib/include/DOtherSide/DosQObject.h index f274186..f00aa68 100644 --- a/lib/include/DOtherSide/DosQObject.h +++ b/lib/include/DOtherSide/DosQObject.h @@ -15,7 +15,8 @@ class DosQObject : public QObject, public IDosQObject { public: /// Constructor - DosQObject(); + DosQObject(OnMetaObject onMetaObject, + OnSlotExecuted onSlotExecuted); /// Emit a signal bool emitSignal(const QString& name, const std::vector& arguments) override; diff --git a/lib/src/DOtherSide.cpp b/lib/src/DOtherSide.cpp index b7ed250..778f5df 100644 --- a/lib/src/DOtherSide.cpp +++ b/lib/src/DOtherSide.cpp @@ -364,13 +364,10 @@ void dos_qobject_create(void** vptr, void* dObjectPointer, DObjectCallback dObjectCallback) { - auto dynamicQObject = new DosQObject(); - auto impl = std::make_unique(dynamicQObject, - OnMetaObjectHandler(dObjectPointer, dMetaObjectCallback), - OnSlotExecutedHandler(dObjectPointer, dObjectCallback)); - dynamicQObject->setImpl(std::move(impl)); - QQmlEngine::setObjectOwnership(dynamicQObject, QQmlEngine::CppOwnership); - *vptr = dynamicQObject; + auto dosQObject = new DosQObject(OnMetaObjectHandler(dObjectPointer, dMetaObjectCallback), + OnSlotExecutedHandler(dObjectPointer, dObjectCallback)); + QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership); + *vptr = dosQObject; } void dos_qobject_delete(void* vptr) diff --git a/lib/src/DosQAbstractListModel.cpp b/lib/src/DosQAbstractListModel.cpp index d101aa6..d420ecd 100644 --- a/lib/src/DosQAbstractListModel.cpp +++ b/lib/src/DosQAbstractListModel.cpp @@ -1,18 +1,28 @@ #include "DOtherSide/DosQAbstractListModel.h" +#include "DOtherSide/DosQObjectImpl.h" namespace DOS { -DosQAbstractListModel::DosQAbstractListModel(void *modelObject, RowCountCallback rowCountCallback, ColumnCountCallback columnCountCallback, DataCallback dataCallback, SetDataCallback setDataCallback, RoleNamesCallback roleNamesCallback, FlagsCallback flagsCallback, HeaderDataCallback headerDataCallback) - : m_impl(nullptr) - , m_modelObject(modelObject) - , m_rowCountCallback(rowCountCallback) - , m_columnCountCallback(columnCountCallback) - , m_dataCallback(dataCallback) - , m_setDataCallback(setDataCallback) - , m_roleNamesCallback(roleNamesCallback) - , m_flagsCallback(flagsCallback) - , m_headerDataCallback(headerDataCallback) +DosQAbstractListModel::DosQAbstractListModel(void *modelObject, + OnMetaObject onMetaObject, + OnSlotExecuted onSlotExecuted, + RowCountCallback rowCountCallback, + ColumnCountCallback columnCountCallback, + DataCallback dataCallback, + SetDataCallback setDataCallback, + RoleNamesCallback roleNamesCallback, + FlagsCallback flagsCallback, + HeaderDataCallback headerDataCallback) + : m_impl(std::make_unique(this, std::move(onMetaObject), std::move(onSlotExecuted))) + , m_modelObject(std::move(modelObject)) + , m_rowCountCallback(std::move(rowCountCallback)) + , m_columnCountCallback(std::move(columnCountCallback)) + , m_dataCallback(std::move(dataCallback)) + , m_setDataCallback(std::move(setDataCallback)) + , m_roleNamesCallback(std::move(roleNamesCallback)) + , m_flagsCallback(std::move(flagsCallback)) + , m_headerDataCallback(std::move(headerDataCallback)) { } @@ -132,9 +142,4 @@ void DosQAbstractListModel::publicDataChanged(const QModelIndex &topLeft, const emit dataChanged(topLeft, bottomRight, roles); } -void DosQAbstractListModel::setImpl(std::unique_ptr impl) -{ - m_impl = std::move(impl); -} - } // namespace DOS diff --git a/lib/src/DosQObject.cpp b/lib/src/DosQObject.cpp index 2118431..374d77b 100644 --- a/lib/src/DosQObject.cpp +++ b/lib/src/DosQObject.cpp @@ -1,13 +1,14 @@ #include "DOtherSide/DosQObject.h" #include "DOtherSide/DosQMetaObject.h" +#include "DOtherSide/DosQObjectImpl.h" #include #include namespace DOS { -DosQObject::DosQObject() - : m_impl(nullptr) +DosQObject::DosQObject(OnMetaObject onMetaObject, OnSlotExecuted onSlotExecuted) + : m_impl(std::make_unique(this, std::move(onMetaObject), std::move(onSlotExecuted))) { } @@ -29,9 +30,4 @@ int DosQObject::qt_metacall(QMetaObject::Call callType, int index, void** args) return m_impl->qt_metacall(callType, index, args); } -void DosQObject::setImpl(std::unique_ptr impl) -{ - m_impl = std::move(impl); -} - } // namespace DOS