Simplified the dos_qabstractitemmodel_create interface by using a struct

Removed most of the function parameters by putting them inside a struct
This commit is contained in:
Filippo Cucchetto 2017-04-02 14:47:42 +02:00
parent 0bb4bc8d3c
commit ffd9b493a9
6 changed files with 68 additions and 158 deletions

View File

@ -385,27 +385,11 @@ DOS_API DosQMetaObject *DOS_CALL dos_qabstractlistmodel_qmetaobject();
/// \param callbackObject The pointer of QAbstractListModel in the binded language /// \param callbackObject The pointer of QAbstractListModel in the binded language
/// \param metaObject The QMetaObject for this QAbstractListModel /// \param metaObject The QMetaObject for this QAbstractListModel
/// \param dObjectCallback The callback for handling the properties read/write and slots execution /// \param dObjectCallback The callback for handling the properties read/write and slots execution
/// \param rowCountCallback The callback for handling the QAbstractItemModel::rowCount() execution /// \param callbacks The QAbstractItemModel callbacks
/// \param columnCountCallback The callback for handling the QAbstractItemModel::columnCount() execution
/// \param dataCallback The callback for handling the QAbstractItemModel::data() execution
/// \param setDataCallback The callback for handling the QAbstractItemModel::setData() execution
/// \param roleNamesCallback The callback for handling the QAbstractItemModel::roleNames() execution
/// \param flagsCallback The callback for handling the QAbstractItemModel::flags() execution
/// \param headerDataCallback The callback for handling the QAbstractItemModel::headerData() execution
/// \param indexCallback The callback for handling the QAbstractItemModel::index() execution
/// \param parentCallback The callback for handling the QAbstractItemModel::parent() execution
DOS_API DosQAbstractListModel *DOS_CALL dos_qabstractlistmodel_create(void *callbackObject, DOS_API DosQAbstractListModel *DOS_CALL dos_qabstractlistmodel_create(void *callbackObject,
DosQMetaObject *metaObject, DosQMetaObject *metaObject,
DObjectCallback dObjectCallback, DObjectCallback dObjectCallback,
RowCountCallback rowCountCallback, DosQAbstractItemModelCallbacks* callbacks);
ColumnCountCallback columnCountCallback,
DataCallback dataCallback,
SetDataCallback setDataCallback,
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback,
IndexCallback indexCallback,
ParentCallback parentCallback);
/// \brief Calls the default QAbstractListModel::index() function /// \brief Calls the default QAbstractListModel::index() function
DOS_API DosQModelIndex* DOS_CALL dos_qabstractlistmodel_index(DosQAbstractListModel *vptr, DOS_API DosQModelIndex* DOS_CALL dos_qabstractlistmodel_index(DosQAbstractListModel *vptr,
@ -434,27 +418,11 @@ DOS_API DosQMetaObject *DOS_CALL dos_qabstracttablemodel_qmetaobject();
/// \param callbackObject The pointer of QAbstractTableModel in the binded language /// \param callbackObject The pointer of QAbstractTableModel in the binded language
/// \param metaObject The QMetaObject for this QAbstractTableModel /// \param metaObject The QMetaObject for this QAbstractTableModel
/// \param dObjectCallback The callback for handling the properties read/write and slots execution /// \param dObjectCallback The callback for handling the properties read/write and slots execution
/// \param rowCountCallback The callback for handling the QAbstractItemModel::rowCount() execution /// \param callbacks The QAbstractItemModel callbacks
/// \param columnCountCallback The callback for handling the QAbstractItemModel::columnCount() execution
/// \param dataCallback The callback for handling the QAbstractItemModel::data() execution
/// \param setDataCallback The callback for handling the QAbstractItemModel::setData() execution
/// \param roleNamesCallback The callback for handling the QAbstractItemModel::roleNames() execution
/// \param flagsCallback The callback for handling the QAbstractItemModel::flags() execution
/// \param headerDataCallback The callback for handling the QAbstractItemModel::headerData() execution
/// \param indexCallback The callback for handling the QAbstractItemModel::index() execution
/// \param parentCallback The callback for handling the QAbstractItemModel::parent() execution
DOS_API DosQAbstractTableModel *DOS_CALL dos_qabstracttablemodel_create(void *callbackObject, DOS_API DosQAbstractTableModel *DOS_CALL dos_qabstracttablemodel_create(void *callbackObject,
DosQMetaObject *metaObject, DosQMetaObject *metaObject,
DObjectCallback dObjectCallback, DObjectCallback dObjectCallback,
RowCountCallback rowCountCallback, DosQAbstractItemModelCallbacks* callbacks);
ColumnCountCallback columnCountCallback,
DataCallback dataCallback,
SetDataCallback setDataCallback,
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback,
IndexCallback indexCallback,
ParentCallback parentCallback);
/// \brief Calls the default QAbstractTableModel::index() function /// \brief Calls the default QAbstractTableModel::index() function
DOS_API DosQModelIndex* DOS_CALL dos_qabstracttablemodel_index(DosQAbstractTableModel *vptr, DOS_API DosQModelIndex* DOS_CALL dos_qabstracttablemodel_index(DosQAbstractTableModel *vptr,
@ -475,32 +443,28 @@ DOS_API DosQModelIndex* DOS_CALL dos_qabstracttablemodel_parent(DosQAbstractTabl
/// \note The returned QMetaObject should be freed using dos_qmetaobject_delete(). /// \note The returned QMetaObject should be freed using dos_qmetaobject_delete().
DOS_API DosQMetaObject *DOS_CALL dos_qabstractitemmodel_qmetaobject(); DOS_API DosQMetaObject *DOS_CALL dos_qabstractitemmodel_qmetaobject();
/// \brief Create a new QAbstractItemModel /// \brief Create a new QAbstractItemModel
/// \param callbackObject The pointer of QAbstractItemModel in the binded language /// \param callbackObject The pointer of QAbstractItemModel in the binded language
/// \param metaObject The QMetaObject for this QAbstractItemModel /// \param metaObject The QMetaObject for this QAbstractItemModel
/// \param dObjectCallback The callback for handling the properties read/write and slots execution /// \param dObjectCallback The callback for handling the properties read/write and slots execution
/// \param rowCountCallback The callback for handling the QAbstractItemModel::rowCount() execution /// \param callbacks The QAbstractItemModel callbacks
/// \param columnCountCallback The callback for handling the QAbstractItemModel::columnCount() execution /// \note The callbacks struct is copied so you can freely delete after calling this function
/// \param dataCallback The callback for handling the QAbstractItemModel::data() execution
/// \param setDataCallback The callback for handling the QAbstractItemModel::setData() execution
/// \param roleNamesCallback The callback for handling the QAbstractItemModel::roleNames() execution
/// \param flagsCallback The callback for handling the QAbstractItemModel::flags() execution
/// \param headerDataCallback The callback for handling the QAbstractItemModel::headerData() execution
/// \param indexCallback The callback for handling the QAbstractItemModel::index() execution
/// \param parentCallback The callback for handling the QAbstractItemModel::parent() execution
DOS_API DosQAbstractItemModel *DOS_CALL dos_qabstractitemmodel_create(void *callbackObject, DOS_API DosQAbstractItemModel *DOS_CALL dos_qabstractitemmodel_create(void *callbackObject,
DosQMetaObject *metaObject, DosQMetaObject *metaObject,
DObjectCallback dObjectCallback, DObjectCallback dObjectCallback,
RowCountCallback rowCountCallback, DosQAbstractItemModelCallbacks* callbacks);
ColumnCountCallback columnCountCallback,
DataCallback dataCallback, /// \brief Calls the QAbstractItemModel::setData function
SetDataCallback setDataCallback, bool dos_qabstractitemmodel_setData(DosQAbstractItemModel *vptr, DosQModelIndex* index, DosQVariant* data, int role);
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback, /// \brief Calls the QAbstractItemModel::roleNames function
HeaderDataCallback headerDataCallback, DosQHashIntQByteArray* dos_qabstractitemmodel_roleNames(DosQAbstractItemModel *vptr);
IndexCallback indexCallback,
ParentCallback parentCallback); /// \brief Calls the QAbstractItemModel::flags function
int dos_qabstractitemmodel_flags(DosQAbstractItemModel *vptr, DosQModelIndex* index);
/// \brief Calls the QAbstractItemModel::headerData function
DosQVariant* dos_qabstractitemmodel_headerData(DosQAbstractItemModel *vptr, int section, int orientation, int role);
/// \brief Calls the QAbstractItemModel::beginInsertRows() function /// \brief Calls the QAbstractItemModel::beginInsertRows() function
/// \param vptr The QAbstractItemModel /// \param vptr The QAbstractItemModel

View File

@ -309,6 +309,24 @@ struct PropertyDefinitions {
typedef struct PropertyDefinitions PropertyDefinitions; typedef struct PropertyDefinitions PropertyDefinitions;
#endif #endif
/// Incapsulate all the QAbstractItemModel callbacks
struct DosQAbstractItemModelCallbacks
{
RowCountCallback rowCount;
ColumnCountCallback columnCount;
DataCallback data;
SetDataCallback setData;
RoleNamesCallback roleNames;
FlagsCallback flags;
HeaderDataCallback headerData;
IndexCallback index;
ParentCallback parent;
};
#ifndef __cplusplus
typedef struct DosQAbstractItemModelCallbacks DosQAbstractItemModelCallbacks;
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -20,15 +20,7 @@ public:
DosQAbstractGenericModel(void *modelObject, DosQAbstractGenericModel(void *modelObject,
DosIQMetaObjectPtr metaObject, DosIQMetaObjectPtr metaObject,
OnSlotExecuted onSlotExecuted, OnSlotExecuted onSlotExecuted,
RowCountCallback rowCountCallback, DosQAbstractItemModelCallbacks callbacks);
ColumnCountCallback columnCountCallback,
DataCallback dataCallback,
SetDataCallback setDataCallback,
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback,
IndexCallback indexCallback,
ParentCallback parentCallback);
/// @see IDynamicQObject::emitSignal /// @see IDynamicQObject::emitSignal
bool emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &argumentsValues) override; bool emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &argumentsValues) override;
@ -122,15 +114,7 @@ public:
private: private:
std::unique_ptr<DosIQObjectImpl> m_impl; std::unique_ptr<DosIQObjectImpl> m_impl;
void *m_modelObject; void *m_modelObject;
RowCountCallback m_rowCountCallback; DosQAbstractItemModelCallbacks m_callbacks;
ColumnCountCallback m_columnCountCallback;
DataCallback m_dataCallback;
SetDataCallback m_setDataCallback;
RoleNamesCallback m_roleNamesCallback;
FlagsCallback m_flagsCallback;
HeaderDataCallback m_headerDataCallback;
IndexCallback m_indexCallback;
ParentCallback m_parentCallback;
}; };
class DosQAbstractItemModel : public DosQAbstractGenericModel<QAbstractItemModel> class DosQAbstractItemModel : public DosQAbstractGenericModel<QAbstractItemModel>

View File

@ -596,29 +596,13 @@ void dos_qmetaobject_delete(::DosQMetaObject *vptr)
::DosQAbstractListModel *dos_qabstracttablemodel_create(void *dObjectPointer, ::DosQAbstractListModel *dos_qabstracttablemodel_create(void *dObjectPointer,
::DosQMetaObject *metaObjectPointer, ::DosQMetaObject *metaObjectPointer,
::DObjectCallback dObjectCallback, ::DObjectCallback dObjectCallback,
::RowCountCallback rowCountCallback, ::DosQAbstractItemModelCallbacks* callbacks)
::ColumnCountCallback columnCountCallback,
::DataCallback dataCallback,
::SetDataCallback setDataCallback,
::RoleNamesCallback roleNamesCallaback,
::FlagsCallback flagsCallback,
::HeaderDataCallback headerDataCallback,
::IndexCallback indexCallback,
::ParentCallback parentCallback)
{ {
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer); auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
auto model = new DOS::DosQAbstractTableModel(dObjectPointer, auto model = new DOS::DosQAbstractTableModel(dObjectPointer,
metaObjectHolder->data(), metaObjectHolder->data(),
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback), DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
rowCountCallback, *callbacks);
columnCountCallback,
dataCallback,
setDataCallback,
roleNamesCallaback,
flagsCallback,
headerDataCallback,
indexCallback,
parentCallback);
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
return static_cast<QObject *>(model); return static_cast<QObject *>(model);
} }
@ -649,29 +633,13 @@ DosQModelIndex *dos_qabstracttablemodel_parent(DosQAbstractTableModel *vptr, Dos
::DosQAbstractListModel *dos_qabstractlistmodel_create(void *dObjectPointer, ::DosQAbstractListModel *dos_qabstractlistmodel_create(void *dObjectPointer,
::DosQMetaObject *metaObjectPointer, ::DosQMetaObject *metaObjectPointer,
::DObjectCallback dObjectCallback, ::DObjectCallback dObjectCallback,
::RowCountCallback rowCountCallback, ::DosQAbstractItemModelCallbacks* callbacks)
::ColumnCountCallback columnCountCallback,
::DataCallback dataCallback,
::SetDataCallback setDataCallback,
::RoleNamesCallback roleNamesCallaback,
::FlagsCallback flagsCallback,
::HeaderDataCallback headerDataCallback,
::IndexCallback indexCallback,
::ParentCallback parentCallback)
{ {
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer); auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
auto model = new DOS::DosQAbstractListModel(dObjectPointer, auto model = new DOS::DosQAbstractListModel(dObjectPointer,
metaObjectHolder->data(), metaObjectHolder->data(),
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback), DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
rowCountCallback, *callbacks);
columnCountCallback,
dataCallback,
setDataCallback,
roleNamesCallaback,
flagsCallback,
headerDataCallback,
indexCallback,
parentCallback);
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
return static_cast<QObject *>(model); return static_cast<QObject *>(model);
} }
@ -710,29 +678,13 @@ int dos_qabstractlistmodel_columnCount(DosQAbstractListModel *vptr, DosQModelInd
::DosQAbstractItemModel *dos_qabstractitemmodel_create(void *dObjectPointer, ::DosQAbstractItemModel *dos_qabstractitemmodel_create(void *dObjectPointer,
::DosQMetaObject *metaObjectPointer, ::DosQMetaObject *metaObjectPointer,
::DObjectCallback dObjectCallback, ::DObjectCallback dObjectCallback,
::RowCountCallback rowCountCallback, ::DosQAbstractItemModelCallbacks* callbacks)
::ColumnCountCallback columnCountCallback,
::DataCallback dataCallback,
::SetDataCallback setDataCallback,
::RoleNamesCallback roleNamesCallaback,
::FlagsCallback flagsCallback,
::HeaderDataCallback headerDataCallback,
::IndexCallback indexCallback,
::ParentCallback parentCallback)
{ {
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer); auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
auto model = new DOS::DosQAbstractItemModel(dObjectPointer, auto model = new DOS::DosQAbstractItemModel(dObjectPointer,
metaObjectHolder->data(), metaObjectHolder->data(),
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback), DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
rowCountCallback, *callbacks);
columnCountCallback,
dataCallback,
setDataCallback,
roleNamesCallaback,
flagsCallback,
headerDataCallback,
indexCallback,
parentCallback);
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
return static_cast<QObject *>(model); return static_cast<QObject *>(model);
} }

View File

@ -19,26 +19,10 @@ template<class T>
DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject, DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject,
DosIQMetaObjectPtr metaObject, DosIQMetaObjectPtr metaObject,
OnSlotExecuted onSlotExecuted, OnSlotExecuted onSlotExecuted,
RowCountCallback rowCountCallback, DosQAbstractItemModelCallbacks callbacks)
ColumnCountCallback columnCountCallback,
DataCallback dataCallback,
SetDataCallback setDataCallback,
RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback,
IndexCallback indexCallback,
ParentCallback parentCallback)
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted))) : m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
, m_modelObject(std::move(modelObject)) , m_modelObject(std::move(modelObject))
, m_rowCountCallback(std::move(rowCountCallback)) , m_callbacks(callbacks)
, 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))
, m_indexCallback(std::move(indexCallback))
, m_parentCallback(std::move(parentCallback))
{} {}
template<class T> template<class T>
@ -66,7 +50,7 @@ template<class T>
int DosQAbstractGenericModel<T>::rowCount(const QModelIndex &parent) const int DosQAbstractGenericModel<T>::rowCount(const QModelIndex &parent) const
{ {
int result; int result;
m_rowCountCallback(m_modelObject, &parent, &result); m_callbacks.rowCount(m_modelObject, &parent, &result);
return result; return result;
} }
@ -74,7 +58,7 @@ template<class T>
int DosQAbstractGenericModel<T>::columnCount(const QModelIndex &parent) const int DosQAbstractGenericModel<T>::columnCount(const QModelIndex &parent) const
{ {
int result; int result;
m_columnCountCallback(m_modelObject, &parent, &result); m_callbacks.columnCount(m_modelObject, &parent, &result);
return result; return result;
} }
@ -82,7 +66,7 @@ template<class T>
QVariant DosQAbstractGenericModel<T>::data(const QModelIndex &index, int role) const QVariant DosQAbstractGenericModel<T>::data(const QModelIndex &index, int role) const
{ {
QVariant result; QVariant result;
m_dataCallback(m_modelObject, &index, role, &result); m_callbacks.data(m_modelObject, &index, role, &result);
return result; return result;
} }
@ -90,7 +74,7 @@ template<class T>
bool DosQAbstractGenericModel<T>::setData(const QModelIndex &index, const QVariant &value, int role) bool DosQAbstractGenericModel<T>::setData(const QModelIndex &index, const QVariant &value, int role)
{ {
bool result = false; bool result = false;
m_setDataCallback(m_modelObject, &index, &value, role, &result); m_callbacks.setData(m_modelObject, &index, &value, role, &result);
return result; return result;
} }
@ -98,7 +82,7 @@ template<class T>
Qt::ItemFlags DosQAbstractGenericModel<T>::flags(const QModelIndex &index) const Qt::ItemFlags DosQAbstractGenericModel<T>::flags(const QModelIndex &index) const
{ {
int result; int result;
m_flagsCallback(m_modelObject, &index, &result); m_callbacks.flags(m_modelObject, &index, &result);
return Qt::ItemFlags(result); return Qt::ItemFlags(result);
} }
@ -106,7 +90,7 @@ template<class T>
QVariant DosQAbstractGenericModel<T>::headerData(int section, Qt::Orientation orientation, int role) const QVariant DosQAbstractGenericModel<T>::headerData(int section, Qt::Orientation orientation, int role) const
{ {
QVariant result; QVariant result;
m_headerDataCallback(m_modelObject, section, orientation, role, &result); m_callbacks.headerData(m_modelObject, section, orientation, role, &result);
return result; return result;
} }
@ -114,7 +98,7 @@ template<class T>
QModelIndex DosQAbstractGenericModel<T>::index(int row, int column, const QModelIndex &parent) const QModelIndex DosQAbstractGenericModel<T>::index(int row, int column, const QModelIndex &parent) const
{ {
QModelIndex result; QModelIndex result;
m_indexCallback(m_modelObject, row, column, &parent, &result); m_callbacks.index(m_modelObject, row, column, &parent, &result);
return result; return result;
} }
@ -122,7 +106,7 @@ template<class T>
QModelIndex DosQAbstractGenericModel<T>::parent(const QModelIndex &child) const QModelIndex DosQAbstractGenericModel<T>::parent(const QModelIndex &child) const
{ {
QModelIndex result; QModelIndex result;
m_parentCallback(m_modelObject, &child, &result); m_callbacks.parent(m_modelObject, &child, &result);
return result; return result;
} }
@ -136,7 +120,7 @@ template<class T>
QHash<int, QByteArray> DosQAbstractGenericModel<T>::roleNames() const QHash<int, QByteArray> DosQAbstractGenericModel<T>::roleNames() const
{ {
QHash<int, QByteArray> result; QHash<int, QByteArray> result;
m_roleNamesCallback(m_modelObject, &result); m_callbacks.roleNames(m_modelObject, &result);
return result; return result;
} }

View File

@ -66,13 +66,21 @@ namespace
} }
MockQAbstractItemModel::MockQAbstractItemModel() MockQAbstractItemModel::MockQAbstractItemModel()
: m_vptr(dos_qabstractitemmodel_create(this, metaObject(), &onSlotCalled, &onRowCountCalled, : m_vptr(nullptr, &dos_qobject_delete)
&onColumnCountCalled, &onDataCalled, &onSetDataCalled,
&onRoleNamesCalled, &onFlagsCalled, &onHeaderDataCalled,
&onIndexCalled, &onParentCalled), &dos_qobject_delete)
, m_names({"John", "Mary", "Andy", "Anna"}) , m_names({"John", "Mary", "Andy", "Anna"})
{ {
DosQAbstractItemModelCallbacks callbacks;
callbacks.rowCount = &onRowCountCalled;
callbacks.columnCount = &onColumnCountCalled;
callbacks.data = &onDataCalled;
callbacks.setData = &onSetDataCalled;
callbacks.roleNames = &onRoleNamesCalled;
callbacks.flags = &onFlagsCalled;
callbacks.headerData = &onHeaderDataCalled;
callbacks.index = &onIndexCalled;
callbacks.parent = &onParentCalled;
m_vptr.reset(dos_qabstractitemmodel_create(this, metaObject(), &onSlotCalled, &callbacks));
} }
DosQMetaObject *MockQAbstractItemModel::metaObject() DosQMetaObject *MockQAbstractItemModel::metaObject()