2016-01-07 11:04:40 +00:00
|
|
|
#include "DOtherSide/DosQAbstractListModel.h"
|
2016-01-07 16:16:37 +00:00
|
|
|
#include "DOtherSide/DosQObjectImpl.h"
|
2016-01-04 22:03:57 +00:00
|
|
|
|
2016-01-16 10:29:35 +00:00
|
|
|
namespace
|
|
|
|
{
|
|
|
|
DOS::DosQObjectImpl::ParentMetaCall createParentMetaCall(QAbstractListModel* parent)
|
|
|
|
{
|
|
|
|
return [parent](QMetaObject::Call callType, int index, void** args)->int {
|
|
|
|
return parent->QAbstractListModel::qt_metacall(callType, index, args);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-04 22:03:57 +00:00
|
|
|
namespace DOS
|
|
|
|
{
|
|
|
|
|
2016-01-07 16:16:37 +00:00
|
|
|
DosQAbstractListModel::DosQAbstractListModel(void *modelObject,
|
2016-01-23 17:40:17 +00:00
|
|
|
DosIQMetaObjectPtr metaObject,
|
2016-01-07 16:16:37 +00:00
|
|
|
OnSlotExecuted onSlotExecuted,
|
|
|
|
RowCountCallback rowCountCallback,
|
|
|
|
ColumnCountCallback columnCountCallback,
|
|
|
|
DataCallback dataCallback,
|
|
|
|
SetDataCallback setDataCallback,
|
|
|
|
RoleNamesCallback roleNamesCallback,
|
|
|
|
FlagsCallback flagsCallback,
|
|
|
|
HeaderDataCallback headerDataCallback)
|
2016-01-23 16:50:44 +00:00
|
|
|
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
|
2016-01-07 16:16:37 +00:00
|
|
|
, 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))
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
bool DosQAbstractListModel::emitSignal(const QString &name, const std::vector<QVariant> &argumentsValues)
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
2016-01-16 19:19:48 +00:00
|
|
|
Q_ASSERT(m_impl);
|
2016-01-04 22:03:57 +00:00
|
|
|
return m_impl->emitSignal(name, argumentsValues);
|
|
|
|
}
|
|
|
|
|
2016-01-16 19:19:48 +00:00
|
|
|
const QMetaObject *DosQAbstractListModel::metaObject() const
|
|
|
|
{
|
|
|
|
Q_ASSERT(m_impl);
|
|
|
|
return m_impl->metaObject();
|
|
|
|
}
|
|
|
|
|
|
|
|
int DosQAbstractListModel::qt_metacall(QMetaObject::Call call, int index, void** args)
|
|
|
|
{
|
|
|
|
Q_ASSERT(m_impl);
|
|
|
|
return m_impl->qt_metacall(call, index, args);
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
int DosQAbstractListModel::rowCount(const QModelIndex &parent) const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
auto parentIndex = new QModelIndex();
|
|
|
|
*parentIndex = parent;
|
|
|
|
int result;
|
|
|
|
m_rowCountCallback(m_modelObject, parentIndex, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
int DosQAbstractListModel::columnCount(const QModelIndex &parent) const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
auto parentIndex = new QModelIndex();
|
|
|
|
*parentIndex = parent;
|
|
|
|
int result;
|
|
|
|
m_columnCountCallback(m_modelObject, parentIndex, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
QVariant DosQAbstractListModel::data(const QModelIndex &index, int role) const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
auto newIndex = new QModelIndex();
|
|
|
|
*newIndex = index;
|
|
|
|
QVariant result;
|
|
|
|
m_dataCallback(m_modelObject, newIndex, role, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
bool DosQAbstractListModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
auto newIndex = new QModelIndex(index);
|
|
|
|
*newIndex = index;
|
|
|
|
auto newValue = new QVariant();
|
|
|
|
*newValue = value;
|
|
|
|
bool result = false;
|
|
|
|
m_setDataCallback(m_modelObject, newIndex, newValue, role, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
Qt::ItemFlags DosQAbstractListModel::flags(const QModelIndex &index) const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
auto newIndex = new QModelIndex(index);
|
|
|
|
*newIndex = index;
|
|
|
|
int result;
|
|
|
|
m_flagsCallback(m_modelObject, newIndex, &result);
|
|
|
|
return Qt::ItemFlags(result);
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
QVariant DosQAbstractListModel::headerData(int section, Qt::Orientation orientation, int role) const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
QVariant result;
|
|
|
|
m_headerDataCallback(m_modelObject, section, orientation, role, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void *DosQAbstractListModel::modelObject()
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
return m_modelObject;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
QHash<int, QByteArray> DosQAbstractListModel::roleNames() const
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
QHash<int, QByteArray> result;
|
|
|
|
m_roleNamesCallback(m_modelObject, &result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicBeginInsertRows(const QModelIndex &index, int first, int last)
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
beginInsertRows(index, first, last);
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicEndInsertRows()
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
return endInsertRows();
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicBeginRemoveRows(const QModelIndex &index, int first, int last)
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
beginRemoveRows(index, first, last);
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicEndRemoveRows()
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
return endRemoveRows();
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicBeginResetModel()
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
beginResetModel();
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicEndResetModel()
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
endResetModel();
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
void DosQAbstractListModel::publicDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
|
2016-01-04 22:03:57 +00:00
|
|
|
{
|
|
|
|
emit dataChanged(topLeft, bottomRight, roles);
|
|
|
|
}
|
|
|
|
|
2016-01-07 11:04:40 +00:00
|
|
|
} // namespace DOS
|