Refactored the creation of the DosQObjectImpl

This commit is contained in:
Filippo Cucchetto 2016-01-07 17:16:37 +01:00
parent 1804071311
commit cc965c69b8
5 changed files with 31 additions and 33 deletions

View File

@ -14,6 +14,8 @@ class DosQAbstractListModel : public QAbstractListModel, public IDosQObject
public: public:
/// Constructor /// Constructor
DosQAbstractListModel(void* modelObject, DosQAbstractListModel(void* modelObject,
OnMetaObject onMetaObject,
OnSlotExecuted onSlotExecuted,
RowCountCallback rowCountCallback, RowCountCallback rowCountCallback,
ColumnCountCallback columnCountCallback, ColumnCountCallback columnCountCallback,
DataCallback dataCallback, DataCallback dataCallback,
@ -78,9 +80,6 @@ public:
const QModelIndex& bottomRight, const QModelIndex& bottomRight,
const QVector<int>& roles = QVector<int>()); const QVector<int>& roles = QVector<int>());
/// Set the implementation
void setImpl(std::unique_ptr<IDosQObject> impl);
private: private:
std::unique_ptr<IDosQObject> m_impl; std::unique_ptr<IDosQObject> m_impl;
void* m_modelObject; void* m_modelObject;

View File

@ -15,7 +15,8 @@ class DosQObject : public QObject, public IDosQObject
{ {
public: public:
/// Constructor /// Constructor
DosQObject(); DosQObject(OnMetaObject onMetaObject,
OnSlotExecuted onSlotExecuted);
/// Emit a signal /// Emit a signal
bool emitSignal(const QString& name, const std::vector<QVariant>& arguments) override; bool emitSignal(const QString& name, const std::vector<QVariant>& arguments) override;

View File

@ -364,13 +364,10 @@ void dos_qobject_create(void** vptr, void* dObjectPointer,
DObjectCallback dObjectCallback) DObjectCallback dObjectCallback)
{ {
auto dynamicQObject = new DosQObject(); auto dosQObject = new DosQObject(OnMetaObjectHandler(dObjectPointer, dMetaObjectCallback),
auto impl = std::make_unique<DosQObjectImpl>(dynamicQObject,
OnMetaObjectHandler(dObjectPointer, dMetaObjectCallback),
OnSlotExecutedHandler(dObjectPointer, dObjectCallback)); OnSlotExecutedHandler(dObjectPointer, dObjectCallback));
dynamicQObject->setImpl(std::move(impl)); QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership);
QQmlEngine::setObjectOwnership(dynamicQObject, QQmlEngine::CppOwnership); *vptr = dosQObject;
*vptr = dynamicQObject;
} }
void dos_qobject_delete(void* vptr) void dos_qobject_delete(void* vptr)

View File

@ -1,18 +1,28 @@
#include "DOtherSide/DosQAbstractListModel.h" #include "DOtherSide/DosQAbstractListModel.h"
#include "DOtherSide/DosQObjectImpl.h"
namespace DOS namespace DOS
{ {
DosQAbstractListModel::DosQAbstractListModel(void *modelObject, RowCountCallback rowCountCallback, ColumnCountCallback columnCountCallback, DataCallback dataCallback, SetDataCallback setDataCallback, RoleNamesCallback roleNamesCallback, FlagsCallback flagsCallback, HeaderDataCallback headerDataCallback) DosQAbstractListModel::DosQAbstractListModel(void *modelObject,
: m_impl(nullptr) OnMetaObject onMetaObject,
, m_modelObject(modelObject) OnSlotExecuted onSlotExecuted,
, m_rowCountCallback(rowCountCallback) RowCountCallback rowCountCallback,
, m_columnCountCallback(columnCountCallback) ColumnCountCallback columnCountCallback,
, m_dataCallback(dataCallback) DataCallback dataCallback,
, m_setDataCallback(setDataCallback) SetDataCallback setDataCallback,
, m_roleNamesCallback(roleNamesCallback) RoleNamesCallback roleNamesCallback,
, m_flagsCallback(flagsCallback) FlagsCallback flagsCallback,
, m_headerDataCallback(headerDataCallback) HeaderDataCallback headerDataCallback)
: m_impl(std::make_unique<DosQObjectImpl>(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); emit dataChanged(topLeft, bottomRight, roles);
} }
void DosQAbstractListModel::setImpl(std::unique_ptr<IDosQObject> impl)
{
m_impl = std::move(impl);
}
} // namespace DOS } // namespace DOS

View File

@ -1,13 +1,14 @@
#include "DOtherSide/DosQObject.h" #include "DOtherSide/DosQObject.h"
#include "DOtherSide/DosQMetaObject.h" #include "DOtherSide/DosQMetaObject.h"
#include "DOtherSide/DosQObjectImpl.h"
#include <QtCore/QMetaMethod> #include <QtCore/QMetaMethod>
#include <QtCore/QDebug> #include <QtCore/QDebug>
namespace DOS namespace DOS
{ {
DosQObject::DosQObject() DosQObject::DosQObject(OnMetaObject onMetaObject, OnSlotExecuted onSlotExecuted)
: m_impl(nullptr) : m_impl(std::make_unique<DosQObjectImpl>(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); return m_impl->qt_metacall(callType, index, args);
} }
void DosQObject::setImpl(std::unique_ptr<IDosQObject> impl)
{
m_impl = std::move(impl);
}
} // namespace DOS } // namespace DOS