QmlDesigner: Remove dangling PropertyChanges and KeyFrameGroups

This removes dangling PropertyChanges and KeyFrameGroups when removing
a dynamic property.

Change-Id: I333b6a61bec34a0bcde1d19372166b3cfaea195b
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Thomas Hartmann
2022-09-14 16:18:07 +02:00
parent 696b02ee28
commit 3ce5af7a79

View File

@@ -458,16 +458,35 @@ QStringList DynamicPropertiesModel::possibleSourceProperties(const BindingProper
void DynamicPropertiesModel::deleteDynamicPropertyByRow(int rowNumber)
{
m_view->executeInTransaction("DynamicPropertiesModel::deleteDynamicPropertyByRow", [this, rowNumber]() {
BindingProperty bindingProperty = bindingPropertyForRow(rowNumber);
if (bindingProperty.isValid()) {
bindingProperty.parentModelNode().removeProperty(bindingProperty.name());
} else {
VariantProperty variantProperty = variantPropertyForRow(rowNumber);
if (variantProperty.isValid())
variantProperty.parentModelNode().removeProperty(variantProperty.name());
}
});
m_view->executeInTransaction(
"DynamicPropertiesModel::deleteDynamicPropertyByRow", [this, rowNumber]() {
const AbstractProperty property = abstractPropertyForRow(rowNumber);
const PropertyName propertyName = property.name();
BindingProperty bindingProperty = bindingPropertyForRow(rowNumber);
if (bindingProperty.isValid()) {
bindingProperty.parentModelNode().removeProperty(bindingProperty.name());
} else {
VariantProperty variantProperty = variantPropertyForRow(rowNumber);
if (variantProperty.isValid())
variantProperty.parentModelNode().removeProperty(variantProperty.name());
}
if (property.isValid()) {
QmlObjectNode objectNode = QmlObjectNode(property.parentModelNode());
const auto stateOperations = objectNode.allAffectingStatesOperations();
for (const QmlModelStateOperation &stateOperation : stateOperations) {
if (stateOperation.modelNode().hasProperty(propertyName))
stateOperation.modelNode().removeProperty(propertyName);
}
const auto timelineNodes = objectNode.allTimelines();
for (auto &timelineNode : timelineNodes) {
QmlTimeline timeline(timelineNode);
timeline.removeKeyframesForTargetAndProperty(objectNode.modelNode(),
propertyName);
}
}
});
resetModel();
}