From 5c459be52694545e9e8bd4e5d61ac5e77a5af8a5 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 25 Feb 2021 09:51:55 +0100 Subject: [PATCH] QmlDesigner: Add Model::bindingPropertiesAboutToBeChanged It is sometime quite useful to know the old value. For example to remove it. We could add add the old values to the bindingPropertiesChanged but this would be a much larger change. Change-Id: I9b4a78602a35766c99092892b61173fc5c439978 Reviewed-by: Thomas Hartmann Reviewed-by: Tim Jenssen --- .../designercore/include/abstractview.h | 1 + .../designercore/model/abstractview.cpp | 2 ++ .../qmldesigner/designercore/model/model.cpp | 17 +++++++++++++++++ .../qmldesigner/designercore/model/model_p.h | 2 ++ 4 files changed, 22 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 8645da77935..95bf66949f5 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -205,6 +205,7 @@ public: virtual void propertiesAboutToBeRemoved(const QList& propertyList); virtual void propertiesRemoved(const QList& propertyList); virtual void variantPropertiesChanged(const QList& propertyList, PropertyChangeFlags propertyChange); + virtual void bindingPropertiesAboutToBeChanged(const QList &propertyList); virtual void bindingPropertiesChanged(const QList& propertyList, PropertyChangeFlags propertyChange); virtual void signalHandlerPropertiesChanged(const QVector& propertyList, PropertyChangeFlags propertyChange); virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion); diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index b6818d2ee67..665562a44a4 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -329,6 +329,8 @@ void AbstractView::variantPropertiesChanged(const QList& /*prop { } +void AbstractView::bindingPropertiesAboutToBeChanged(const QList &) {} + void AbstractView::bindingPropertiesChanged(const QList& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) { } diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 53a1e563d42..d695be92ef2 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -767,6 +767,21 @@ void ModelPrivate::notifyNodeIdChanged(const InternalNodePointer &node, }); } +void ModelPrivate::notifyBindingPropertiesAboutToBeChanged( + const QList &internalPropertyList) +{ + notifyNodeInstanceViewLast([&](AbstractView *view) { + QList propertyList; + for (const InternalBindingPropertyPointer &bindingProperty : internalPropertyList) { + propertyList.append(BindingProperty(bindingProperty->name(), + bindingProperty->propertyOwner(), + m_model, + view)); + } + view->bindingPropertiesAboutToBeChanged(propertyList); + }); +} + void ModelPrivate::notifyBindingPropertiesChanged( const QList &internalPropertyList, AbstractView::PropertyChangeFlags propertyChange) @@ -1030,6 +1045,7 @@ void ModelPrivate::setBindingProperty(const InternalNodePointer &node, const Pro } InternalBindingPropertyPointer bindingProperty = node->bindingProperty(name); + notifyBindingPropertiesAboutToBeChanged({bindingProperty}); bindingProperty->setExpression(expression); notifyBindingPropertiesChanged({bindingProperty}, propertyChange); } @@ -1087,6 +1103,7 @@ void ModelPrivate::setDynamicBindingProperty(const InternalNodePointer &node, } InternalBindingPropertyPointer bindingProperty = node->bindingProperty(name); + notifyBindingPropertiesAboutToBeChanged({bindingProperty}); bindingProperty->setDynamicExpression(dynamicPropertyType, expression); notifyBindingPropertiesChanged({bindingProperty}, propertyChange); } diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index 7a15b73468b..cc15226265e 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -149,6 +149,8 @@ public: void notifyPropertiesRemoved(const QList &propertyList); void notifyPropertiesAboutToBeRemoved(const QList &internalPropertyList); + void notifyBindingPropertiesAboutToBeChanged( + const QList &internalPropertyList); void notifyBindingPropertiesChanged(const QList &internalPropertyList, AbstractView::PropertyChangeFlags propertyChange); void notifySignalHandlerPropertiesChanged(const QVector &propertyList, AbstractView::PropertyChangeFlags propertyChange); void notifyVariantPropertiesChanged(const InternalNodePointer &node, const PropertyNameList &propertyNameList, AbstractView::PropertyChangeFlags propertyChange);