QmlDesigner: Use span for model nodes parameter

So we can support other container like QVarLenghtArray and std::vector.

Change-Id: I2853eddc5b1cc3f1cc65ef1ceacaa6ed4bdea6c6
Reviewed-by: Aleksei German <aleksei.german@qt.io>
This commit is contained in:
Marco Bubke
2025-04-12 22:40:08 +02:00
parent e871146b29
commit 3fb47c674a
4 changed files with 59 additions and 58 deletions

View File

@@ -225,11 +225,11 @@ public:
void changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion); void changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion);
void emitCustomNotification(const QString &identifier, void emitCustomNotification(const QString &identifier,
const QList<ModelNode> &nodeList = {}, Utils::span<const ModelNode> nodes = {},
const QList<QVariant> &data = {}) const QList<QVariant> &data = {})
{ {
if (isAttached()) if (isAttached())
model()->emitCustomNotification(this, identifier, nodeList, data); model()->emitCustomNotification(this, identifier, nodes, data);
} }
const AbstractView *nodeInstanceView() const; const AbstractView *nodeInstanceView() const;

View File

@@ -266,7 +266,7 @@ public:
const QList<DocumentMessage> &warnings); const QList<DocumentMessage> &warnings);
QList<ModelNode> selectedNodes(AbstractView *view) const; QList<ModelNode> selectedNodes(AbstractView *view) const;
void setSelectedModelNodes(const QList<ModelNode> &selectedNodeList); void setSelectedModelNodes(Utils::span<const ModelNode> selectedNodes);
void clearMetaInfoCache(); void clearMetaInfoCache();
@@ -291,14 +291,14 @@ public:
ProjectStorageDependencies projectStorageDependencies() const; ProjectStorageDependencies projectStorageDependencies() const;
void emitInstancePropertyChange(AbstractView *view, void emitInstancePropertyChange(AbstractView *view,
const QList<QPair<ModelNode, PropertyName>> &propertyList); Utils::span<const QPair<ModelNode, PropertyName>> properties);
void emitInstanceErrorChange(AbstractView *view, const QVector<qint32> &instanceIds); void emitInstanceErrorChange(AbstractView *view, Utils::span<const qint32> instanceIds);
void emitInstancesCompleted(AbstractView *view, const QVector<ModelNode> &nodeList); void emitInstancesCompleted(AbstractView *view, Utils::span<const ModelNode> nodes);
void emitInstanceInformationsChange( void emitInstanceInformationsChange(
AbstractView *view, const QMultiHash<ModelNode, InformationName> &informationChangeHash); AbstractView *view, const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void emitInstancesRenderImageChanged(AbstractView *view, const QVector<ModelNode> &nodeList); void emitInstancesRenderImageChanged(AbstractView *view, Utils::span<const ModelNode> nodes);
void emitInstancesPreviewImageChanged(AbstractView *view, const QVector<ModelNode> &nodeList); void emitInstancesPreviewImageChanged(AbstractView *view, Utils::span<const ModelNode> nodes);
void emitInstancesChildrenChanged(AbstractView *view, const QVector<ModelNode> &nodeList); void emitInstancesChildrenChanged(AbstractView *view, Utils::span<const ModelNode> nodes);
void emitInstanceToken(AbstractView *view, void emitInstanceToken(AbstractView *view,
const QString &token, const QString &token,
int number, int number,
@@ -318,7 +318,7 @@ public:
void emitDocumentMessage(const QString &error); void emitDocumentMessage(const QString &error);
void emitCustomNotification(AbstractView *view, void emitCustomNotification(AbstractView *view,
const QString &identifier, const QString &identifier,
const QList<ModelNode> &nodeList = {}, Utils::span<const ModelNode> nodes = {},
const QList<QVariant> &data = {}); const QList<QVariant> &data = {});
void sendCustomNotificationTo(AbstractView *to, const CustomNotificationPackage &package); void sendCustomNotificationTo(AbstractView *to, const CustomNotificationPackage &package);

View File

@@ -664,12 +664,12 @@ void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersi
[&](AbstractView *view) { view->rootNodeTypeChanged(type, majorVersion, minorVersion); }); [&](AbstractView *view) { view->rootNodeTypeChanged(type, majorVersion, minorVersion); });
} }
void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, PropertyName>> &propertyPairList) void ModelPrivate::notifyInstancePropertyChange(Utils::span<const QPair<ModelNode, PropertyName>> properties)
{ {
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
using ModelNodePropertyPair = QPair<ModelNode, PropertyName>; using ModelNodePropertyPair = QPair<ModelNode, PropertyName>;
QList<QPair<ModelNode, PropertyName>> adaptedPropertyList; QList<QPair<ModelNode, PropertyName>> adaptedPropertyList;
for (const ModelNodePropertyPair &propertyPair : propertyPairList) { for (const ModelNodePropertyPair &propertyPair : properties) {
ModelNodePropertyPair newPair(ModelNode{propertyPair.first.internalNode(), m_model, view}, propertyPair.second); ModelNodePropertyPair newPair(ModelNode{propertyPair.first.internalNode(), m_model, view}, propertyPair.second);
adaptedPropertyList.append(newPair); adaptedPropertyList.append(newPair);
} }
@@ -677,20 +677,20 @@ void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, Pro
}); });
} }
void ModelPrivate::notifyInstanceErrorChange(const QVector<qint32> &instanceIds) void ModelPrivate::notifyInstanceErrorChange(Utils::span<const qint32> instanceIds)
{ {
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
QVector<ModelNode> errorNodeList; QVector<ModelNode> errorNodeList;
errorNodeList.reserve(instanceIds.size()); errorNodeList.reserve(std::ssize(instanceIds));
for (qint32 instanceId : instanceIds) for (qint32 instanceId : instanceIds)
errorNodeList.emplace_back(m_model->d->nodeForInternalId(instanceId), m_model, view); errorNodeList.emplace_back(m_model->d->nodeForInternalId(instanceId), m_model, view);
view->instanceErrorChanged(errorNodeList); view->instanceErrorChanged(errorNodeList);
}); });
} }
void ModelPrivate::notifyInstancesCompleted(const QVector<ModelNode> &modelNodeVector) void ModelPrivate::notifyInstancesCompleted(Utils::span<const ModelNode> modelNodes)
{ {
auto internalNodes = toInternalNodeList(modelNodeVector); auto internalNodes = toInternalNodeList(modelNodes);
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
view->instancesCompleted(toModelNodeList(internalNodes, view)); view->instancesCompleted(toModelNodeList(internalNodes, view));
@@ -718,27 +718,27 @@ void ModelPrivate::notifyInstancesInformationsChange(
}); });
} }
void ModelPrivate::notifyInstancesRenderImageChanged(const QVector<ModelNode> &modelNodeVector) void ModelPrivate::notifyInstancesRenderImageChanged(Utils::span<const ModelNode> nodes)
{ {
auto internalNodes = toInternalNodeList(modelNodeVector); auto internalNodes = toInternalNodeList(nodes);
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
view->instancesRenderImageChanged(toModelNodeList(internalNodes, view)); view->instancesRenderImageChanged(toModelNodeList(internalNodes, view));
}); });
} }
void ModelPrivate::notifyInstancesPreviewImageChanged(const QVector<ModelNode> &modelNodeVector) void ModelPrivate::notifyInstancesPreviewImageChanged(Utils::span<const ModelNode> nodes)
{ {
auto internalNodes = toInternalNodeList(modelNodeVector); auto internalNodes = toInternalNodeList(nodes);
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
view->instancesPreviewImageChanged(toModelNodeList(internalNodes, view)); view->instancesPreviewImageChanged(toModelNodeList(internalNodes, view));
}); });
} }
void ModelPrivate::notifyInstancesChildrenChanged(const QVector<ModelNode> &modelNodeVector) void ModelPrivate::notifyInstancesChildrenChanged(Utils::span<const ModelNode> nodes)
{ {
auto internalNodes = toInternalNodeList(modelNodeVector); auto internalNodes = toInternalNodeList(nodes);
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
view->instancesChildrenChanged(toModelNodeList(internalNodes, view)); view->instancesChildrenChanged(toModelNodeList(internalNodes, view));
@@ -812,10 +812,11 @@ void ModelPrivate::notifyRewriterEndTransaction()
notifyNodeInstanceViewLast([&](AbstractView *view) { view->rewriterEndTransaction(); }); notifyNodeInstanceViewLast([&](AbstractView *view) { view->rewriterEndTransaction(); });
} }
void ModelPrivate::notifyInstanceToken(const QString &token, int number, void ModelPrivate::notifyInstanceToken(const QString &token,
const QVector<ModelNode> &modelNodeVector) int number,
Utils::span<const ModelNode> nodes)
{ {
auto internalNodes = toInternalNodeList(modelNodeVector); auto internalNodes = toInternalNodeList(nodes);
notifyInstanceChanges([&](AbstractView *view) { notifyInstanceChanges([&](AbstractView *view) {
view->instancesToken(token, number, toModelNodeList(internalNodes, view)); view->instancesToken(token, number, toModelNodeList(internalNodes, view));
@@ -824,10 +825,10 @@ void ModelPrivate::notifyInstanceToken(const QString &token, int number,
void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, void ModelPrivate::notifyCustomNotification(const AbstractView *senderView,
const QString &identifier, const QString &identifier,
const QList<ModelNode> &modelNodeList, Utils::span<const ModelNode> nodes,
const QList<QVariant> &data) const QList<QVariant> &data)
{ {
auto internalList = toInternalNodeList(modelNodeList); auto internalList = toInternalNodeList(nodes);
notifyNodeInstanceViewLast([&](AbstractView *view) { notifyNodeInstanceViewLast([&](AbstractView *view) {
view->customNotification(senderView, identifier, toModelNodeList(internalList, view), data); view->customNotification(senderView, identifier, toModelNodeList(internalList, view), data);
}); });
@@ -1229,22 +1230,22 @@ void ModelPrivate::removeAuxiliaryData(const InternalNodePointer &node, const Au
notifyAuxiliaryDataChanged(node, key, QVariant()); notifyAuxiliaryDataChanged(node, key, QVariant());
} }
QList<ModelNode> ModelPrivate::toModelNodeList(Utils::span<const InternalNodePointer> nodeList, QList<ModelNode> ModelPrivate::toModelNodeList(Utils::span<const InternalNodePointer> nodes,
AbstractView *view) const AbstractView *view) const
{ {
QList<ModelNode> modelNodeList; QList<ModelNode> modelNodeList;
modelNodeList.reserve(nodeList.size()); modelNodeList.reserve(std::ssize(nodes));
for (const InternalNodePointer &node : nodeList) for (const InternalNodePointer &node : nodes)
modelNodeList.emplace_back(node, m_model, view); modelNodeList.emplace_back(node, m_model, view);
return modelNodeList; return modelNodeList;
} }
ModelPrivate::ManyNodes ModelPrivate::toInternalNodeList(const QList<ModelNode> &modelNodeList) const ModelPrivate::ManyNodes ModelPrivate::toInternalNodeList(Utils::span<const ModelNode> modelNodes) const
{ {
ManyNodes newNodeList; ManyNodes newNodeList;
newNodeList.reserve(modelNodeList.size()); newNodeList.reserve(std::ssize(modelNodes));
for (const ModelNode &modelNode : modelNodeList) for (const ModelNode &modelNode : modelNodes)
newNodeList.append(modelNode.internalNode()); newNodeList.append(modelNode.internalNode());
return newNodeList; return newNodeList;
@@ -1813,7 +1814,7 @@ QmlDesigner::Imports createPossibleFileImports(const Utils::FilePath &path)
bool append = false; bool append = false;
item.iterateDirectory( item.iterateDirectory(
[&](const Utils::FilePath &item) { [&](const Utils::FilePath &) {
append = true; append = true;
return Utils::IterationPolicy::Stop; return Utils::IterationPolicy::Stop;
}, },
@@ -2062,22 +2063,22 @@ ProjectStorageDependencies Model::projectStorageDependencies() const
} }
void Model::emitInstancePropertyChange(AbstractView *view, void Model::emitInstancePropertyChange(AbstractView *view,
const QList<QPair<ModelNode, PropertyName>> &propertyList) Utils::span<const QPair<ModelNode, PropertyName>> properties)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstancePropertyChange(propertyList); d->notifyInstancePropertyChange(properties);
} }
void Model::emitInstanceErrorChange(AbstractView *view, const QVector<qint32> &instanceIds) void Model::emitInstanceErrorChange(AbstractView *view, Utils::span<const qint32> instanceIds)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstanceErrorChange(instanceIds); d->notifyInstanceErrorChange(instanceIds);
} }
void Model::emitInstancesCompleted(AbstractView *view, const QVector<ModelNode> &nodeVector) void Model::emitInstancesCompleted(AbstractView *view, Utils::span<const ModelNode> nodes)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstancesCompleted(nodeVector); d->notifyInstancesCompleted(nodes);
} }
void Model::emitInstanceInformationsChange( void Model::emitInstanceInformationsChange(
@@ -2087,22 +2088,22 @@ void Model::emitInstanceInformationsChange(
d->notifyInstancesInformationsChange(informationChangeHash); d->notifyInstancesInformationsChange(informationChangeHash);
} }
void Model::emitInstancesRenderImageChanged(AbstractView *view, const QVector<ModelNode> &nodeVector) void Model::emitInstancesRenderImageChanged(AbstractView *view, Utils::span<const ModelNode> nodes)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstancesRenderImageChanged(nodeVector); d->notifyInstancesRenderImageChanged(nodes);
} }
void Model::emitInstancesPreviewImageChanged(AbstractView *view, const QVector<ModelNode> &nodeVector) void Model::emitInstancesPreviewImageChanged(AbstractView *view, Utils::span<const ModelNode> nodes)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstancesPreviewImageChanged(nodeVector); d->notifyInstancesPreviewImageChanged(nodes);
} }
void Model::emitInstancesChildrenChanged(AbstractView *view, const QVector<ModelNode> &nodeVector) void Model::emitInstancesChildrenChanged(AbstractView *view, Utils::span<const ModelNode> nodes)
{ {
if (d->nodeInstanceView() == view) // never remove check if (d->nodeInstanceView() == view) // never remove check
d->notifyInstancesChildrenChanged(nodeVector); d->notifyInstancesChildrenChanged(nodes);
} }
void Model::emitInstanceToken(AbstractView *view, void Model::emitInstanceToken(AbstractView *view,
@@ -2165,10 +2166,10 @@ void Model::emitDocumentMessage(const QList<DocumentMessage> &errors,
void Model::emitCustomNotification(AbstractView *view, void Model::emitCustomNotification(AbstractView *view,
const QString &identifier, const QString &identifier,
const QList<ModelNode> &nodeList, Utils::span<const ModelNode> nodes,
const QList<QVariant> &data) const QList<QVariant> &data)
{ {
d->notifyCustomNotification(view, identifier, nodeList, data); d->notifyCustomNotification(view, identifier, nodes, data);
} }
void Model::sendCustomNotificationTo(AbstractView *to, const CustomNotificationPackage &package) void Model::sendCustomNotificationTo(AbstractView *to, const CustomNotificationPackage &package)
@@ -2300,11 +2301,11 @@ QList<ModelNode> Model::selectedNodes(AbstractView *view) const
return d->toModelNodeList(d->selectedNodes(), view); return d->toModelNodeList(d->selectedNodes(), view);
} }
void Model::setSelectedModelNodes(const QList<ModelNode> &selectedNodeList) void Model::setSelectedModelNodes(Utils::span<const ModelNode> selectedNodes)
{ {
QList<ModelNode> unlockedNodes; QList<ModelNode> unlockedNodes;
for (const auto &modelNode : selectedNodeList) { for (const auto &modelNode : selectedNodes) {
if (!ModelUtils::isThisOrAncestorLocked(modelNode)) if (!ModelUtils::isThisOrAncestorLocked(modelNode))
unlockedNodes.push_back(modelNode); unlockedNodes.push_back(modelNode);
} }

View File

@@ -195,17 +195,17 @@ public:
void notifyCustomNotification(const AbstractView *senderView, void notifyCustomNotification(const AbstractView *senderView,
const QString &identifier, const QString &identifier,
const QList<ModelNode> &modelNodeList, Utils::span<const ModelNode> nodes,
const QList<QVariant> &data); const QList<QVariant> &data);
void notifyCustomNotificationTo(AbstractView *view, const CustomNotificationPackage &package); void notifyCustomNotificationTo(AbstractView *view, const CustomNotificationPackage &package);
void notifyInstancePropertyChange(const QList<QPair<ModelNode, PropertyName>> &propertyList); void notifyInstancePropertyChange(Utils::span<const QPair<ModelNode, PropertyName>> properties);
void notifyInstanceErrorChange(const QVector<qint32> &instanceIds); void notifyInstanceErrorChange(Utils::span<const qint32> instanceIds);
void notifyInstancesCompleted(const QVector<ModelNode> &modelNodeVector); void notifyInstancesCompleted(Utils::span<const ModelNode> modelNodes);
void notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash); void notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void notifyInstancesRenderImageChanged(const QVector<ModelNode> &modelNodeVector); void notifyInstancesRenderImageChanged(Utils::span<const ModelNode> nodes);
void notifyInstancesPreviewImageChanged(const QVector<ModelNode> &modelNodeVector); void notifyInstancesPreviewImageChanged(Utils::span<const ModelNode> nodes);
void notifyInstancesChildrenChanged(const QVector<ModelNode> &modelNodeVector); void notifyInstancesChildrenChanged(Utils::span<const ModelNode> nodes);
void notifyInstanceToken(const QString &token, int number, const QVector<ModelNode> &modelNodeVector); void notifyInstanceToken(const QString &token, int number, Utils::span<const ModelNode> nodes);
void notifyCurrentStateChanged(const ModelNode &node); void notifyCurrentStateChanged(const ModelNode &node);
void notifyCurrentTimelineChanged(const ModelNode &node); void notifyCurrentTimelineChanged(const ModelNode &node);
@@ -334,7 +334,7 @@ private:
void removePropertyWithoutNotification(InternalProperty *property); void removePropertyWithoutNotification(InternalProperty *property);
void removeAllSubNodes(const InternalNodePointer &node); void removeAllSubNodes(const InternalNodePointer &node);
void removeNodeFromModel(const InternalNodePointer &node); void removeNodeFromModel(const InternalNodePointer &node);
ManyNodes toInternalNodeList(const QList<ModelNode> &modelNodeList) const; ManyNodes toInternalNodeList(Utils::span<const ModelNode> modelNodes) const;
QList<ModelNode> toModelNodeList(Utils::span<const InternalNodePointer> nodeList, QList<ModelNode> toModelNodeList(Utils::span<const InternalNodePointer> nodeList,
AbstractView *view) const; AbstractView *view) const;
static QList<InternalProperty *> toInternalProperties(const AbstractProperties &properties); static QList<InternalProperty *> toInternalProperties(const AbstractProperties &properties);