forked from qt-creator/qt-creator
QmlDesigner: Reset puppet on repeater model change when necessary
This is a workaround for Qt bugs QTBUG-97583 and QTBUG-97586. Fixes: QDS-5235 Change-Id: I37de4829fea63b0c488815975ae2dd58ceb36b71 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io>
This commit is contained in:
@@ -225,6 +225,8 @@ private: // functions
|
||||
void updateWatcher(const QString &path);
|
||||
|
||||
void updateRotationBlocks();
|
||||
void maybeResetOnPropertyChange(const PropertyName &name, const ModelNode &node,
|
||||
PropertyChangeFlags flags);
|
||||
|
||||
private:
|
||||
QHash<QString, ModelNodePreviewImageData> m_imageDataMap;
|
||||
|
@@ -473,8 +473,9 @@ void NodeInstanceView::propertiesAboutToBeRemoved(const QList<AbstractProperty>&
|
||||
resetVerticalAnchors(property.parentModelNode());
|
||||
} else if (name == "anchors.baseline") {
|
||||
resetVerticalAnchors(property.parentModelNode());
|
||||
} else if (name == "shader" && property.parentModelNode().isSubclassOf("QtQuick3D.Shader")) {
|
||||
m_resetTimer.start();
|
||||
} else {
|
||||
maybeResetOnPropertyChange(name, property.parentModelNode(),
|
||||
AbstractView::EmptyPropertiesRemoved);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,10 +504,14 @@ void NodeInstanceView::nodeTypeChanged(const ModelNode &, const TypeName &, int,
|
||||
restartProcess();
|
||||
}
|
||||
|
||||
void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags /*propertyChange*/)
|
||||
void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& propertyList,
|
||||
PropertyChangeFlags propertyChange)
|
||||
{
|
||||
QTC_ASSERT(m_nodeInstanceServer, return);
|
||||
m_nodeInstanceServer->changePropertyBindings(createChangeBindingCommand(propertyList));
|
||||
|
||||
for (const auto &property : propertyList)
|
||||
maybeResetOnPropertyChange(property.name(), property.parentModelNode(), propertyChange);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -518,18 +523,15 @@ void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& pr
|
||||
\sa AbstractProperty, NodeInstance, ModelNode
|
||||
*/
|
||||
|
||||
void NodeInstanceView::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags /*propertyChange*/)
|
||||
void NodeInstanceView::variantPropertiesChanged(const QList<VariantProperty>& propertyList,
|
||||
PropertyChangeFlags propertyChange)
|
||||
{
|
||||
QTC_ASSERT(m_nodeInstanceServer, return);
|
||||
updatePosition(propertyList);
|
||||
m_nodeInstanceServer->changePropertyValues(createChangeValueCommand(propertyList));
|
||||
|
||||
for (const auto &property : propertyList) {
|
||||
if (property.name() == "shader" && property.parentModelNode().isSubclassOf("QtQuick3D.Shader")) {
|
||||
m_resetTimer.start();
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (const auto &property : propertyList)
|
||||
maybeResetOnPropertyChange(property.name(), property.parentModelNode(), propertyChange);
|
||||
}
|
||||
/*!
|
||||
Notifies the view that the property parent of the model node \a node has
|
||||
@@ -1908,4 +1910,22 @@ void NodeInstanceView::updateRotationBlocks()
|
||||
}
|
||||
}
|
||||
|
||||
void NodeInstanceView::maybeResetOnPropertyChange(const PropertyName &name, const ModelNode &node,
|
||||
PropertyChangeFlags flags)
|
||||
{
|
||||
bool reset = false;
|
||||
if (flags & AbstractView::PropertiesAdded
|
||||
&& name == "model" && (node.isSubclassOf("QtQuick.Repeater")
|
||||
|| node.isSubclassOf("QtQuick3D.Repeater3D"))) {
|
||||
// TODO: This is a workaround for QTBUG-97583 (2D) and QTBUG-97586 (3D):
|
||||
// Reset puppet when repeater model is first added, if there is already a delegate
|
||||
if (node.hasProperty("delegate"))
|
||||
reset = true;
|
||||
} else if (name == "shader" && node.isSubclassOf("QtQuick3D.Shader")) {
|
||||
reset = true;
|
||||
}
|
||||
if (reset)
|
||||
resetPuppet();
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user