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 updateWatcher(const QString &path);
|
||||||
|
|
||||||
void updateRotationBlocks();
|
void updateRotationBlocks();
|
||||||
|
void maybeResetOnPropertyChange(const PropertyName &name, const ModelNode &node,
|
||||||
|
PropertyChangeFlags flags);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHash<QString, ModelNodePreviewImageData> m_imageDataMap;
|
QHash<QString, ModelNodePreviewImageData> m_imageDataMap;
|
||||||
|
@@ -473,8 +473,9 @@ void NodeInstanceView::propertiesAboutToBeRemoved(const QList<AbstractProperty>&
|
|||||||
resetVerticalAnchors(property.parentModelNode());
|
resetVerticalAnchors(property.parentModelNode());
|
||||||
} else if (name == "anchors.baseline") {
|
} else if (name == "anchors.baseline") {
|
||||||
resetVerticalAnchors(property.parentModelNode());
|
resetVerticalAnchors(property.parentModelNode());
|
||||||
} else if (name == "shader" && property.parentModelNode().isSubclassOf("QtQuick3D.Shader")) {
|
} else {
|
||||||
m_resetTimer.start();
|
maybeResetOnPropertyChange(name, property.parentModelNode(),
|
||||||
|
AbstractView::EmptyPropertiesRemoved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,10 +504,14 @@ void NodeInstanceView::nodeTypeChanged(const ModelNode &, const TypeName &, int,
|
|||||||
restartProcess();
|
restartProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags /*propertyChange*/)
|
void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& propertyList,
|
||||||
|
PropertyChangeFlags propertyChange)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_nodeInstanceServer, return);
|
QTC_ASSERT(m_nodeInstanceServer, return);
|
||||||
m_nodeInstanceServer->changePropertyBindings(createChangeBindingCommand(propertyList));
|
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
|
\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);
|
QTC_ASSERT(m_nodeInstanceServer, return);
|
||||||
updatePosition(propertyList);
|
updatePosition(propertyList);
|
||||||
m_nodeInstanceServer->changePropertyValues(createChangeValueCommand(propertyList));
|
m_nodeInstanceServer->changePropertyValues(createChangeValueCommand(propertyList));
|
||||||
|
|
||||||
for (const auto &property : propertyList) {
|
for (const auto &property : propertyList)
|
||||||
if (property.name() == "shader" && property.parentModelNode().isSubclassOf("QtQuick3D.Shader")) {
|
maybeResetOnPropertyChange(property.name(), property.parentModelNode(), propertyChange);
|
||||||
m_resetTimer.start();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*!
|
/*!
|
||||||
Notifies the view that the property parent of the model node \a node has
|
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