forked from qt-creator/qt-creator
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:
@@ -37,6 +37,22 @@ inline bool isStudioCollectionModel(const QmlDesigner::ModelNode &node)
|
||||
|| 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 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)
|
||||
{
|
||||
using DataType = CollectionDetails::DataType;
|
||||
executeInTransaction("CollectionView::assignCollectionToNode", [&]() {
|
||||
m_dataStore->assignCollectionToNode(
|
||||
this,
|
||||
node,
|
||||
@@ -247,6 +265,36 @@ void CollectionView::assignCollectionToNode(const QString &collectionName, const
|
||||
const CollectionReference reference{dataStoreNode(), collectionName};
|
||||
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)
|
||||
|
Reference in New Issue
Block a user