dotherside/lib/src/DosQAbstractItemModel.cpp

322 lines
9.0 KiB
C++
Raw Normal View History

#include "DOtherSide/DosQAbstractItemModel.h"
#include "DOtherSide/DosQObjectImpl.h"
2016-01-23 18:08:58 +00:00
namespace {
2017-03-22 20:21:57 +00:00
template<class T>
DOS::DosQObjectImpl::ParentMetaCall createParentMetaCall(DOS::DosQAbstractGenericModel<T> *parent)
2016-01-16 10:29:35 +00:00
{
2016-01-23 18:08:58 +00:00
return [parent](QMetaObject::Call callType, int index, void **args)->int {
2017-03-22 20:21:57 +00:00
return parent->T::qt_metacall(callType, index, args);
2016-01-23 18:08:58 +00:00
};
}
2017-03-22 20:21:57 +00:00
2016-01-16 10:29:35 +00:00
}
2016-01-23 18:08:58 +00:00
namespace DOS {
2017-03-22 20:21:57 +00:00
template<class T>
DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject,
DosIQMetaObjectPtr metaObject,
OnSlotExecuted onSlotExecuted,
DosQAbstractItemModelCallbacks callbacks)
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
, m_modelObject(std::move(modelObject))
, m_callbacks(callbacks)
{}
2017-03-22 20:21:57 +00:00
template<class T>
bool DosQAbstractGenericModel<T>::emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &argumentsValues)
{
Q_ASSERT(m_impl);
2016-02-27 17:10:07 +00:00
return m_impl->emitSignal(emitter, name, argumentsValues);
}
2017-03-22 20:21:57 +00:00
template<class T>
const QMetaObject *DosQAbstractGenericModel<T>::metaObject() const
{
Q_ASSERT(m_impl);
return m_impl->metaObject();
}
2017-03-22 20:21:57 +00:00
template<class T>
int DosQAbstractGenericModel<T>::qt_metacall(QMetaObject::Call call, int index, void **args)
{
Q_ASSERT(m_impl);
return m_impl->qt_metacall(call, index, args);
}
2017-03-22 20:21:57 +00:00
template<class T>
int DosQAbstractGenericModel<T>::rowCount(const QModelIndex &parent) const
{
int result;
m_callbacks.rowCount(m_modelObject, &parent, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
int DosQAbstractGenericModel<T>::columnCount(const QModelIndex &parent) const
{
int result;
m_callbacks.columnCount(m_modelObject, &parent, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
QVariant DosQAbstractGenericModel<T>::data(const QModelIndex &index, int role) const
{
QVariant result;
m_callbacks.data(m_modelObject, &index, role, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
bool DosQAbstractGenericModel<T>::setData(const QModelIndex &index, const QVariant &value, int role)
{
bool result = false;
m_callbacks.setData(m_modelObject, &index, &value, role, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
Qt::ItemFlags DosQAbstractGenericModel<T>::flags(const QModelIndex &index) const
{
int result;
m_callbacks.flags(m_modelObject, &index, &result);
return Qt::ItemFlags(result);
}
2017-03-22 20:21:57 +00:00
template<class T>
QVariant DosQAbstractGenericModel<T>::headerData(int section, Qt::Orientation orientation, int role) const
{
QVariant result;
m_callbacks.headerData(m_modelObject, section, orientation, role, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
QModelIndex DosQAbstractGenericModel<T>::index(int row, int column, const QModelIndex &parent) const
{
2017-03-05 18:06:07 +00:00
QModelIndex result;
m_callbacks.index(m_modelObject, row, column, &parent, &result);
2017-03-05 18:06:07 +00:00
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
QModelIndex DosQAbstractGenericModel<T>::parent(const QModelIndex &child) const
{
2017-03-05 18:06:07 +00:00
QModelIndex result;
m_callbacks.parent(m_modelObject, &child, &result);
2017-03-05 18:06:07 +00:00
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
void *DosQAbstractGenericModel<T>::modelObject()
{
return m_modelObject;
}
2017-03-22 20:21:57 +00:00
template<class T>
QHash<int, QByteArray> DosQAbstractGenericModel<T>::roleNames() const
{
QHash<int, QByteArray> result;
m_callbacks.roleNames(m_modelObject, &result);
return result;
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicBeginInsertColumns(const QModelIndex &index, int first, int last)
{
2017-03-22 20:21:57 +00:00
T::beginInsertColumns(index, first, last);
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicEndInsertColumns()
{
2017-03-22 20:21:57 +00:00
T::endInsertColumns();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicBeginRemoveColumns(const QModelIndex &index, int first, int last)
{
2017-03-22 20:21:57 +00:00
T::beginRemoveColumns(index, first, last);
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicEndRemoveColumns()
{
2017-03-22 20:21:57 +00:00
T::endRemoveColumns();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicBeginInsertRows(const QModelIndex &index, int first, int last)
{
2017-03-22 20:21:57 +00:00
T::beginInsertRows(index, first, last);
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicEndInsertRows()
{
2017-03-22 20:21:57 +00:00
T::endInsertRows();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicBeginRemoveRows(const QModelIndex &index, int first, int last)
{
2017-03-22 20:21:57 +00:00
T::beginRemoveRows(index, first, last);
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicEndRemoveRows()
{
2017-03-22 20:21:57 +00:00
T::endRemoveRows();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicBeginResetModel()
{
2017-03-22 20:21:57 +00:00
T::beginResetModel();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicEndResetModel()
{
2017-03-22 20:21:57 +00:00
T::endResetModel();
}
2017-03-22 20:21:57 +00:00
template<class T>
void DosQAbstractGenericModel<T>::publicDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
{
2017-03-22 20:21:57 +00:00
emit T::dataChanged(topLeft, bottomRight, roles);
}
2017-03-22 20:21:57 +00:00
template<class T>
QModelIndex DosQAbstractGenericModel<T>::publicCreateIndex(int row, int column, void *data) const
2017-03-05 18:06:07 +00:00
{
2017-03-22 20:21:57 +00:00
return T::createIndex(row, column, data);
2017-03-05 18:06:07 +00:00
}
template<class T>
Qt::ItemFlags DosQAbstractGenericModel<T>::defaultFlags(const QModelIndex &index) const
{
return T::flags(index);
}
template<class T>
QVariant DosQAbstractGenericModel<T>::defaultHeaderData(int section, Qt::Orientation orientation, int role) const
{
return T::headerData(section, orientation, role);
}
template<class T>
QHash<int, QByteArray> DosQAbstractGenericModel<T>::defaultRoleNames() const
{
return T::roleNames();
}
template<class T>
bool DosQAbstractGenericModel<T>::defaultSetData(const QModelIndex &index, const QVariant &value, int role)
{
return T::setData(index, value, role);
}
template<class T>
bool DosQAbstractGenericModel<T>::hasChildren(const QModelIndex &parent) const
{
bool result = false;
m_callbacks.hasChildren(m_modelObject, &parent, &result);
return result;
}
template<class T>
bool DosQAbstractGenericModel<T>::canFetchMore(const QModelIndex &parent) const
{
bool result = false;
m_callbacks.canFetchMore(m_modelObject, &parent, &result);
return result;
}
template<class T>
bool DosQAbstractGenericModel<T>::defaultCanFetchMore(const QModelIndex &parent) const
{
return this->T::canFetchMore(parent);
}
template<class T>
void DosQAbstractGenericModel<T>::fetchMore(const QModelIndex &parent)
{
m_callbacks.fetchMore(m_modelObject, &parent);
}
template<class T>
void DosQAbstractGenericModel<T>::defaultFetchMore(const QModelIndex &parent)
{
this->T::fetchMore(parent);
}
QModelIndex DosQAbstractListModel::defaultIndex(int row, int column, const QModelIndex &parent) const
{
return QAbstractListModel::index(row, column, parent);
}
int DosQAbstractListModel::defaultColumnCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : 1;
}
bool DosQAbstractListModel::defaultHasChildren(const QModelIndex &parent) const
{
return parent.isValid() ? false : (rowCount() > 0);
}
DosQAbstractListModel::DosQAbstractListModel(void *modelObject,
DosIQMetaObjectPtr metaObject,
OnSlotExecuted onSlotExecuted,
DosQAbstractItemModelCallbacks callbacks)
: DosQAbstractGenericModel(modelObject, metaObject, onSlotExecuted, callbacks)
{}
QModelIndex DosQAbstractListModel::defaultParent(const QModelIndex &child) const
{
return QModelIndex();
}
QModelIndex DosQAbstractTableModel::defaultIndex(int row, int column, const QModelIndex &parent) const
{
return hasIndex(row, column, parent) ? createIndex(row, column) : QModelIndex();
}
bool DosQAbstractTableModel::defaultHasChildren(const QModelIndex &parent) const
{
if (parent.model() == this || !parent.isValid())
return rowCount(parent) > 0 && columnCount(parent) > 0;
return false;
}
DosQAbstractTableModel::DosQAbstractTableModel(void *modelObject, DosIQMetaObjectPtr metaObject, OnSlotExecuted onSlotExecuted, DosQAbstractItemModelCallbacks callbacks)
: DosQAbstractGenericModel(modelObject, metaObject, onSlotExecuted, callbacks)
{}
QModelIndex DosQAbstractTableModel::defaultParent(const QModelIndex &child) const
{
return QModelIndex();
}
DosQAbstractItemModel::DosQAbstractItemModel(void *modelObject,
DosIQMetaObjectPtr metaObject,
OnSlotExecuted onSlotExecuted,
DosQAbstractItemModelCallbacks callbacks)
: DosQAbstractGenericModel(modelObject, metaObject, onSlotExecuted, callbacks)
{}
bool DosQAbstractItemModel::defaultHasChildren(const QModelIndex &parent) const
{
return QAbstractItemModel::hasChildren(parent);
}
} // namespace DOS
2017-03-22 20:21:57 +00:00
// Force instantiation
template class DOS::DosQAbstractGenericModel<QAbstractItemModel>;
template class DOS::DosQAbstractGenericModel<QAbstractListModel>;
template class DOS::DosQAbstractGenericModel<QAbstractTableModel>;