This commit is contained in:
Filippo Cucchetto 2017-03-22 22:23:17 +01:00
parent 4321a18fa6
commit 3fb5073aff
6 changed files with 150 additions and 60 deletions

View File

@ -431,17 +431,17 @@ DOS_API DosQMetaObject *DOS_CALL dos_qabstracttablemmodel_qmetaobject();
/// \param indexCallback The callback for handling the QAbstractItemModel::index() execution /// \param indexCallback The callback for handling the QAbstractItemModel::index() execution
/// \param parentCallback The callback for handling the QAbstractItemModel::parent() execution /// \param parentCallback The callback for handling the QAbstractItemModel::parent() execution
DOS_API DosQAbstractListModel *DOS_CALL dos_qabstracttablemodel_create(void *callbackObject, DOS_API DosQAbstractListModel *DOS_CALL dos_qabstracttablemodel_create(void *callbackObject,
DosQMetaObject *metaObject, DosQMetaObject *metaObject,
DObjectCallback dObjectCallback, DObjectCallback dObjectCallback,
RowCountCallback rowCountCallback, RowCountCallback rowCountCallback,
ColumnCountCallback columnCountCallback, ColumnCountCallback columnCountCallback,
DataCallback dataCallback, DataCallback dataCallback,
SetDataCallback setDataCallback, SetDataCallback setDataCallback,
RoleNamesCallback roleNamesCallback, RoleNamesCallback roleNamesCallback,
FlagsCallback flagsCallback, FlagsCallback flagsCallback,
HeaderDataCallback headerDataCallback, HeaderDataCallback headerDataCallback,
IndexCallback indexCallback, IndexCallback indexCallback,
ParentCallback parentCallback); ParentCallback parentCallback);
/// @} /// @}
/// \defgroup QAbstractItemModel QAbstractItemModel /// \defgroup QAbstractItemModel QAbstractItemModel
@ -551,6 +551,18 @@ DOS_API void DOS_CALL dos_qabstractitemmodel_dataChanged(DosQAbstractItemModel *
/// \brief Calls the createIndex function /// \brief Calls the createIndex function
DOS_API DosQModelIndex* DOS_CALL dos_qabstractitemmodel_createIndex(DosQAbstractItemModel *vptr, DOS_API DosQModelIndex* DOS_CALL dos_qabstractitemmodel_createIndex(DosQAbstractItemModel *vptr,
int row, int column, void *data = 0); int row, int column, void *data = 0);
DOS_API int DOS_CALL dos_qabstractitemmodel_rowCount(DosQAbstractItemModel *vptr, DosQModelIndex* parent);
DOS_API int DOS_CALL dos_qabstractitemmodel_columnCount(DosQAbstractItemModel *vptr, DosQModelIndex* parent);
DOS_API DosQVariant* DOS_CALL dos_qabstractitemmodel_data(DosQAbstractItemModel *vptr, DosQModelIndex* index, int role);
DOS_API bool DOS_CALL dos_qabstractitemmodel_setData(DosQAbstractItemModel *vptr, DosQModelIndex* index, DosQVariant* value, int role);
DOS_API DosQHashIntQByteArray* DOS_CALL dos_qabstractitemmodel_roleNames(DosQAbstractItemModel *vptr);
DOS_API int DOS_CALL dos_qabstractitemmodel_flags(DosQAbstractItemModel *vptr, DosQModelIndex* index);
DOS_API DosQVariant* DOS_CALL dos_qabstractitemmodel_headerData(DosQAbstractItemModel *vptr, int section, int orienation, int role);
DOS_API DosQModelIndex* DOS_CALL dos_qabstractitemmodel_index(DosQAbstractItemModel *vptr, int row, int column, DosQModelIndex* parent);
DOS_API DosQModelIndex* DOS_CALL dos_qabstractitemmodel_parent(DosQAbstractItemModel *vptr, DosQModelIndex* child);
/// @} /// @}

View File

@ -18,25 +18,25 @@ public:
virtual ~DosIQAbstractItemModelImpl() = default; virtual ~DosIQAbstractItemModelImpl() = default;
/// @see QAbstractListModel::rowCount /// @see QAbstractListModel::rowCount
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; virtual int defaultRowCount(const QModelIndex &parent = QModelIndex()) const = 0;
/// @see QAbstractListModel::columnCount /// @see QAbstractListModel::columnCount
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; virtual int defaultColumnCount(const QModelIndex &parent = QModelIndex()) const = 0;
/// @see QAbstractListModel::data /// @see QAbstractListModel::data
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0; virtual QVariant defaultData(const QModelIndex &index, int role = Qt::DisplayRole) const = 0;
/// @see QAbstractListModel::setData /// @see QAbstractListModel::setData
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) = 0; virtual bool defaultSetData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) = 0;
/// @see QAbstractListModel::flags /// @see QAbstractListModel::flags
virtual Qt::ItemFlags flags(const QModelIndex &index) const = 0; virtual Qt::ItemFlags defaultFlags(const QModelIndex &index) const = 0;
/// @see QAbstractListModel::headerData /// @see QAbstractListModel::headerData
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const = 0; virtual QVariant defaultHeaderData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const = 0;
/// @see QAbstractListModel::roleNames /// @see QAbstractListModel::roleNames
virtual QHash<int, QByteArray> roleNames() const = 0; virtual QHash<int, QByteArray> defaultRoleNames() const = 0;
/// @see QAbstractListModel::beginInsertRows /// @see QAbstractListModel::beginInsertRows
virtual void publicBeginInsertRows(const QModelIndex &index, int first, int last) = 0; virtual void publicBeginInsertRows(const QModelIndex &index, int first, int last) = 0;

View File

@ -104,6 +104,14 @@ public:
/// Expose createIndex /// Expose createIndex
QModelIndex publicCreateIndex(int row, int column, void *data = nullptr) const override; QModelIndex publicCreateIndex(int row, int column, void *data = nullptr) const override;
int defaultRowCount(const QModelIndex &parent) const override;
int defaultColumnCount(const QModelIndex &parent) const override;
QVariant defaultData(const QModelIndex &index, int role) const override;
bool defaultSetData(const QModelIndex &index, const QVariant &value, int role) override;
Qt::ItemFlags defaultFlags(const QModelIndex &index) const override;
QVariant defaultHeaderData(int section, Qt::Orientation orientation, int role) const override;
QHash<int, QByteArray> defaultRoleNames() const override;
private: private:
std::unique_ptr<DosIQObjectImpl> m_impl; std::unique_ptr<DosIQObjectImpl> m_impl;
void *m_modelObject; void *m_modelObject;

View File

@ -102,6 +102,27 @@ public:
/// @see DosIQAbstractItemModelImpl::createIndex /// @see DosIQAbstractItemModelImpl::createIndex
QModelIndex publicCreateIndex(int row, int column, void *data) const override; QModelIndex publicCreateIndex(int row, int column, void *data) const override;
/// @see DosIQAbstractItemModelImpl::defaultRowCount
int defaultRowCount(const QModelIndex &parent) const override;
/// @see DosIQAbstractItemModelImpl::defaultColumnCount
int defaultColumnCount(const QModelIndex &parent) const override;
/// @see DosIQAbstractItemModelImpl::defaultData
QVariant defaultData(const QModelIndex &index, int role) const override;
/// @see DosIQAbstractItemModelImpl::defaultSetData
bool defaultSetData(const QModelIndex &index, const QVariant &value, int role) override;
/// @see DosIQAbstractItemModelImpl::defaultFlags
Qt::ItemFlags defaultFlags(const QModelIndex &index) const override;
/// @see DosIQAbstractItemModelImpl::defaultHeaderData
QVariant defaultHeaderData(int section, Qt::Orientation orientation, int role) const override;
/// @see DosIQAbstractItemModelImpl::defaultRoleNames
QHash<int, QByteArray> defaultRoleNames() const override;
private: private:
void *m_dObject; void *m_dObject;
DosQAbstractItemModel *m_impl; DosQAbstractItemModel *m_impl;
@ -128,23 +149,23 @@ DosQAbstractItemModelWrapper<N, M>::DosQAbstractItemModelWrapper(QObject *parent
m_data.createDObject(m_id, static_cast<QObject *>(this), &m_dObject, &impl); m_data.createDObject(m_id, static_cast<QObject *>(this), &m_dObject, &impl);
beginResetModel(); beginResetModel();
m_impl = dynamic_cast<DosQAbstractItemModel *>(static_cast<QObject *>(impl)); m_impl = dynamic_cast<DosQAbstractItemModel *>(static_cast<QObject *>(impl));
QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeInserted, this, &DosQAbstractItemModelWrapper::beginInsertRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeInserted, this, &DosQAbstractItemModelWrapper<N,M>::beginInsertRows);
QObject::connect(m_impl, &DosQAbstractItemModel::rowsInserted, this, &DosQAbstractItemModelWrapper::endInsertRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsInserted, this, &DosQAbstractItemModelWrapper<N,M>::endInsertRows);
QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeRemoved, this, &DosQAbstractItemModelWrapper::beginRemoveRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeRemoved, this, &DosQAbstractItemModelWrapper<N,M>::beginRemoveRows);
QObject::connect(m_impl, &DosQAbstractItemModel::rowsRemoved, this, &DosQAbstractItemModelWrapper::endRemoveRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsRemoved, this, &DosQAbstractItemModelWrapper<N,M>::endRemoveRows);
QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeMoved, this, &DosQAbstractItemModelWrapper::beginMoveRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsAboutToBeMoved, this, &DosQAbstractItemModelWrapper<N,M>::beginMoveRows);
QObject::connect(m_impl, &DosQAbstractItemModel::rowsMoved, this, &DosQAbstractItemModelWrapper::endMoveRows); QObject::connect(m_impl, &DosQAbstractItemModel::rowsMoved, this, &DosQAbstractItemModelWrapper<N,M>::endMoveRows);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeInserted, this, &DosQAbstractItemModelWrapper::beginInsertColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeInserted, this, &DosQAbstractItemModelWrapper<N,M>::beginInsertColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsInserted, this, &DosQAbstractItemModelWrapper::endInsertColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsInserted, this, &DosQAbstractItemModelWrapper<N,M>::endInsertColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeRemoved, this, &DosQAbstractItemModelWrapper::beginRemoveColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeRemoved, this, &DosQAbstractItemModelWrapper<N,M>::beginRemoveColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsRemoved, this, &DosQAbstractItemModelWrapper::endRemoveColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsRemoved, this, &DosQAbstractItemModelWrapper<N,M>::endRemoveColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeMoved, this, &DosQAbstractItemModelWrapper::beginMoveColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsAboutToBeMoved, this, &DosQAbstractItemModelWrapper<N,M>::beginMoveColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::columnsMoved, this, &DosQAbstractItemModelWrapper::endMoveColumns); QObject::connect(m_impl, &DosQAbstractItemModel::columnsMoved, this, &DosQAbstractItemModelWrapper<N,M>::endMoveColumns);
QObject::connect(m_impl, &DosQAbstractItemModel::modelAboutToBeReset, this, &DosQAbstractItemModelWrapper::beginResetModel); QObject::connect(m_impl, &DosQAbstractItemModel::modelAboutToBeReset, this, &DosQAbstractItemModelWrapper<N,M>::beginResetModel);
QObject::connect(m_impl, &DosQAbstractItemModel::modelReset, this, &DosQAbstractItemModelWrapper::endResetModel); QObject::connect(m_impl, &DosQAbstractItemModel::modelReset, this, &DosQAbstractItemModelWrapper<N,M>::endResetModel);
QObject::connect(m_impl, &DosQAbstractItemModel::dataChanged, this, &DosQAbstractItemModelWrapper::dataChanged); QObject::connect(m_impl, &DosQAbstractItemModel::dataChanged, this, &DosQAbstractItemModelWrapper<N,M>::dataChanged);
QObject::connect(m_impl, &DosQAbstractItemModel::layoutAboutToBeChanged, this, &DosQAbstractItemModelWrapper::layoutAboutToBeChanged); QObject::connect(m_impl, &DosQAbstractItemModel::layoutAboutToBeChanged, this, &DosQAbstractItemModelWrapper<N,M>::layoutAboutToBeChanged);
QObject::connect(m_impl, &DosQAbstractItemModel::layoutChanged, this, &DosQAbstractItemModelWrapper::layoutChanged); QObject::connect(m_impl, &DosQAbstractItemModel::layoutChanged, this, &DosQAbstractItemModelWrapper<N,M>::layoutChanged);
endResetModel(); endResetModel();
Q_ASSERT(m_dObject); Q_ASSERT(m_dObject);
Q_ASSERT(m_impl); Q_ASSERT(m_impl);
@ -333,6 +354,48 @@ QModelIndex DosQAbstractItemModelWrapper<N, M>::publicCreateIndex(int row, int c
return m_impl->publicCreateIndex(row, column, data); return m_impl->publicCreateIndex(row, column, data);
} }
template<int N, int M>
int DosQAbstractItemModelWrapper<N,M>::defaultRowCount(const QModelIndex &parent) const
{
return m_impl->defaultRowCount(parent);
}
template<int N, int M>
int DosQAbstractItemModelWrapper<N,M>::defaultColumnCount(const QModelIndex &parent) const
{
return m_impl->defaultColumnCount(parent);
}
template<int N, int M>
QVariant DosQAbstractItemModelWrapper<N,M>::defaultData(const QModelIndex &index, int role) const
{
return m_impl->defaultData(index, role);
}
template<int N, int M>
bool DosQAbstractItemModelWrapper<N,M>::defaultSetData(const QModelIndex &index, const QVariant &value, int role)
{
return m_impl->defaultSetData(index, value, role);
}
template<int N, int M>
Qt::ItemFlags DosQAbstractItemModelWrapper<N,M>::defaultFlags(const QModelIndex &index) const
{
return m_impl->defaultFlags(index);
}
template<int N, int M>
QVariant DosQAbstractItemModelWrapper<N,M>::defaultHeaderData(int section, Qt::Orientation orientation, int role) const
{
return m_impl->defaultHeaderData(section, orientation, role);
}
template<int N, int M>
QHash<int, QByteArray> DosQAbstractItemModelWrapper<N,M>::defaultRoleNames() const
{
return m_impl->defaultRoleNames();
}
template<int N, int M> template<int N, int M>
const QmlRegisterType &DosQAbstractItemModelWrapper<N, M>::qmlRegisterType() const QmlRegisterType &DosQAbstractItemModelWrapper<N, M>::qmlRegisterType()
{ {

View File

@ -594,31 +594,31 @@ 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, ::RowCountCallback rowCountCallback,
::ColumnCountCallback columnCountCallback, ::ColumnCountCallback columnCountCallback,
::DataCallback dataCallback, ::DataCallback dataCallback,
::SetDataCallback setDataCallback, ::SetDataCallback setDataCallback,
::RoleNamesCallback roleNamesCallaback, ::RoleNamesCallback roleNamesCallaback,
::FlagsCallback flagsCallback, ::FlagsCallback flagsCallback,
::HeaderDataCallback headerDataCallback, ::HeaderDataCallback headerDataCallback,
::IndexCallback indexCallback, ::IndexCallback indexCallback,
::ParentCallback parentCallback) ::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, rowCountCallback,
columnCountCallback, columnCountCallback,
dataCallback, dataCallback,
setDataCallback, setDataCallback,
roleNamesCallaback, roleNamesCallaback,
flagsCallback, flagsCallback,
headerDataCallback, headerDataCallback,
indexCallback, indexCallback,
parentCallback); parentCallback);
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
return static_cast<QObject *>(model); return static_cast<QObject *>(model);
} }
@ -782,13 +782,20 @@ void dos_qabstractitemmodel_dataChanged(::DosQAbstractItemModel *vptr,
} }
DosQModelIndex *dos_qabstractitemmodel_createIndex(::DosQAbstractItemModel *vptr, DosQModelIndex *dos_qabstractitemmodel_createIndex(::DosQAbstractItemModel *vptr,
int row, int column, void *data) int row, int column, void *data)
{ {
auto object = static_cast<QObject *>(vptr); auto object = static_cast<QObject *>(vptr);
auto model = dynamic_cast<DOS::DosIQAbstractItemModelImpl *>(object); auto model = dynamic_cast<DOS::DosIQAbstractItemModelImpl *>(object);
return new QModelIndex(model->publicCreateIndex(row, column, data)); return new QModelIndex(model->publicCreateIndex(row, column, data));
} }
int dos_qabstractitemmodel_rowCount(DosQAbstractItemModel *vptr, DosQModelIndex *parent)
{
auto object = static_cast<QObject *>(vptr);
auto model = dynamic_cast<DOS::DosIQAbstractItemModelImpl *>(object);
return model->defaultRowCount();
}
int dos_qdeclarative_qmlregistertype(const ::QmlRegisterType *cArgs) int dos_qdeclarative_qmlregistertype(const ::QmlRegisterType *cArgs)
{ {
auto holder = static_cast<DOS::DosIQMetaObjectHolder *>(cArgs->staticMetaObject); auto holder = static_cast<DOS::DosIQMetaObjectHolder *>(cArgs->staticMetaObject);

View File

@ -215,5 +215,5 @@ QModelIndex DosQAbstractGenericModel<T>::publicCreateIndex(int row, int column,
// Force instantiation // Force instantiation
template class DOS::DosQAbstractGenericModel<QAbstractItemModel>; template class DOS::DosQAbstractGenericModel<QAbstractItemModel>;
template class DOS::DosQAbstractGenericModel<QAbstractListModel>; //template class DOS::DosQAbstractGenericModel<QAbstractListModel>;
template class DOS::DosQAbstractGenericModel<QAbstractTableModel>; //template class DOS::DosQAbstractGenericModel<QAbstractTableModel>;