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;
|
|| 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)
|
||||||
|
Reference in New Issue
Block a user