119 lines
2.6 KiB
C++
119 lines
2.6 KiB
C++
#include "QQuickDetailsViewRow.h"
|
|
#include "QQuickDetailsViewLayoutBuilder.h"
|
|
#include "QQuickDetailsViewMananger.h"
|
|
#include "QQuickDetailsViewModel.h"
|
|
|
|
void IDetailsViewRow::setName(QString inName)
|
|
{
|
|
mName = inName;
|
|
}
|
|
|
|
QString IDetailsViewRow::name()
|
|
{
|
|
return mName;
|
|
}
|
|
|
|
void IDetailsViewRow::addChild(QSharedPointer<IDetailsViewRow> inChild)
|
|
{
|
|
mChildren << inChild;
|
|
inChild->mModel = mModel;
|
|
inChild->mParent = this;
|
|
}
|
|
|
|
void IDetailsViewRow::clear()
|
|
{
|
|
mChildren.clear();
|
|
}
|
|
|
|
QQuickDetailsViewModel* IDetailsViewRow::model()
|
|
{
|
|
return mModel;
|
|
}
|
|
|
|
void IDetailsViewRow::invalidateChildren()
|
|
{
|
|
if (!mModel) {
|
|
mChildren.clear();
|
|
return;
|
|
}
|
|
|
|
QModelIndex parentIndex = mModel->indexForRow(this);
|
|
if (!parentIndex.isValid()) {
|
|
parentIndex = QModelIndex();
|
|
}
|
|
|
|
const int oldChildCount = mChildren.size();
|
|
if (oldChildCount > 0) {
|
|
mModel->beginRemoveRows(parentIndex, 0, oldChildCount - 1);
|
|
mChildren.clear();
|
|
mModel->endRemoveRows();
|
|
}
|
|
|
|
attachChildren();
|
|
|
|
const int newChildCount = mChildren.size();
|
|
if (newChildCount > 0) {
|
|
mModel->beginInsertRows(parentIndex, 0, newChildCount - 1);
|
|
for (auto& child : mChildren) {
|
|
child->mParent = this;
|
|
child->mModel = mModel;
|
|
}
|
|
mModel->endInsertRows();
|
|
}
|
|
}
|
|
|
|
QDetailsViewRow_Property::QDetailsViewRow_Property(QPropertyHandle* inHandle)
|
|
{
|
|
setHandle(inHandle);
|
|
}
|
|
|
|
QDetailsViewRow_Property::~QDetailsViewRow_Property()
|
|
{
|
|
if (mStructureChangedConnection) {
|
|
QObject::disconnect(mStructureChangedConnection);
|
|
}
|
|
}
|
|
|
|
void QDetailsViewRow_Property::setupItem(QQuickItem* inParent)
|
|
{
|
|
QQuickDetailsViewRowBuilder builder(this, inParent);
|
|
if (mPropertyTypeCustomization) {
|
|
mPropertyTypeCustomization->customizeHeaderRow(mHandle, &builder);
|
|
return;
|
|
}
|
|
builder.makePropertyRow(mHandle);
|
|
}
|
|
|
|
void QDetailsViewRow_Property::attachChildren()
|
|
{
|
|
if (mPropertyTypeCustomization){
|
|
QQuickDetailsViewLayoutBuilder builder(this);
|
|
mPropertyTypeCustomization->customizeChildren(mHandle, &builder);
|
|
}
|
|
}
|
|
|
|
void QDetailsViewRow_Property::setHandle(QPropertyHandle* inHandle)
|
|
{
|
|
mHandle = inHandle;
|
|
if (!inHandle)
|
|
return;
|
|
mPropertyTypeCustomization = QQuickDetailsViewManager::Get()->getCustomPropertyType(inHandle);
|
|
mStructureChangedConnection = QObject::connect(inHandle, &QPropertyHandle::asStructureChanged, [this]() {
|
|
invalidateChildren();
|
|
});
|
|
}
|
|
|
|
QDetailsViewRow_Custom::QDetailsViewRow_Custom(std::function<void(QQuickDetailsViewRowBuilder*)> inRowCreator)
|
|
: mRowCreator(inRowCreator)
|
|
{
|
|
|
|
}
|
|
|
|
void QDetailsViewRow_Custom::setupItem(QQuickItem* inParent)
|
|
{
|
|
if (mRowCreator) {
|
|
QQuickDetailsViewRowBuilder builder(this, inParent);
|
|
mRowCreator(&builder);
|
|
}
|
|
}
|