QmlDesigner: Create proper ListView delegate for assigned model

Task-number: QDS-11776
Change-Id: I210a9803725b59a7cfe7887908922c38d969bc2d
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
This commit is contained in:
Ali Kianian
2024-02-13 17:00:50 +02:00
parent bb63198f8a
commit cae86d6977

View File

@@ -37,6 +37,22 @@ inline bool isStudioCollectionModel(const QmlDesigner::ModelNode &node)
|| node.metaInfo().typeName() == CSVCOLLECTIONMODEL_TYPENAME; || node.metaInfo().typeName() == CSVCOLLECTIONMODEL_TYPENAME;
} }
inline void setVariantPropertyValue(const QmlDesigner::ModelNode &node,
const QmlDesigner::PropertyName &propertyName,
const QVariant &value)
{
QmlDesigner::VariantProperty property = node.variantProperty(propertyName);
property.setValue(value);
}
inline void setBindingPropertyExpression(const QmlDesigner::ModelNode &node,
const QmlDesigner::PropertyName &propertyName,
const QString &expression)
{
QmlDesigner::BindingProperty property = node.bindingProperty(propertyName);
property.setExpression(expression);
}
} // namespace } // namespace
namespace QmlDesigner { namespace QmlDesigner {
@@ -235,6 +251,8 @@ void CollectionView::addResource(const QUrl &url, const QString &name, const QSt
void CollectionView::assignCollectionToNode(const QString &collectionName, const ModelNode &node) void CollectionView::assignCollectionToNode(const QString &collectionName, const ModelNode &node)
{ {
using DataType = CollectionDetails::DataType;
executeInTransaction("CollectionView::assignCollectionToNode", [&]() {
m_dataStore->assignCollectionToNode( m_dataStore->assignCollectionToNode(
this, this,
node, node,
@@ -247,6 +265,36 @@ void CollectionView::assignCollectionToNode(const QString &collectionName, const
const CollectionReference reference{dataStoreNode(), collectionName}; const CollectionReference reference{dataStoreNode(), collectionName};
return m_widget->collectionDetailsModel()->getFirstColumnName(reference); return m_widget->collectionDetailsModel()->getFirstColumnName(reference);
}); });
// Create and assign a delegate to the list view item
if (node.metaInfo().isQtQuickListView()) {
CollectionDetails collection = m_widget->collectionDetailsModel()->upToDateConstCollection(
{dataStoreNode(), collectionName});
ModelNode rowItem(createModelNode("QtQuick.Row"));
::setVariantPropertyValue(rowItem, "spacing", 5);
const int columnsCount = collection.columns();
for (int column = 0; column < columnsCount; ++column) {
const DataType dataType = collection.typeAt(column);
const QString columnName = collection.propertyAt(column);
ModelNode cellItem;
if (dataType == DataType::Color) {
cellItem = createModelNode("QtQuick.Rectangle");
::setBindingPropertyExpression(cellItem, "color", columnName);
::setVariantPropertyValue(cellItem, "height", 20);
} else {
cellItem = createModelNode("QtQuick.Text");
::setBindingPropertyExpression(cellItem, "text", columnName);
}
::setVariantPropertyValue(cellItem, "width", 100);
rowItem.defaultNodeAbstractProperty().reparentHere(cellItem);
}
NodeProperty delegateProperty = node.nodeProperty("delegate");
delegateProperty.setModelNode(rowItem);
}
});
} }
void CollectionView::assignCollectionToSelectedNode(const QString &collectionName) void CollectionView::assignCollectionToSelectedNode(const QString &collectionName)