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

View File

@ -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<QVariant>& arguments) override;

View File

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

View File

@ -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<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);
}
void DosQAbstractListModel::setImpl(std::unique_ptr<IDosQObject> impl)
{
m_impl = std::move(impl);
}
} // namespace DOS

View File

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