diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h index b9028aad3db..316164f4c29 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h @@ -44,6 +44,7 @@ class CollapseButton; class PropertyEditorWidget; class PropertyEditorView; class PropertyEditorQmlBackend; +class ModelNode; class PropertyEditorView: public AbstractView { @@ -66,8 +67,6 @@ public: void modelAboutToBeDetached(Model *model) override; - ModelState modelState() const; - void variantPropertiesChanged(const QList& propertyList, PropertyChangeFlags propertyChange) override; void bindingPropertiesChanged(const QList& propertyList, PropertyChangeFlags propertyChange) override; diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h index 231f4bfb431..8455ec63100 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h @@ -35,8 +35,6 @@ QT_END_NAMESPACE namespace QmlDesigner { -class Model; -class ModelState; class StatesEditorModel; class StatesEditorView; class NodeInstanceView; diff --git a/src/plugins/qmldesigner/designercore/include/abstractproperty.h b/src/plugins/qmldesigner/designercore/include/abstractproperty.h index b3e1c164130..65f3f666beb 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractproperty.h +++ b/src/plugins/qmldesigner/designercore/include/abstractproperty.h @@ -108,6 +108,7 @@ protected: AbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view); AbstractProperty(const Internal::InternalPropertyPointer &property, Model* model, AbstractView *view); Internal::InternalNodePointer internalNode() const; + Internal::ModelPrivate *privateModel() const; private: PropertyName m_propertyName; diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index b3a146b1746..d5f16be0ed4 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -40,7 +40,10 @@ QT_END_NAMESPACE namespace QmlDesigner { -namespace Internal { class ModelPrivate; } +namespace Internal { +class ModelPrivate; +class WriteLocker; +} //Internal class AnchorLine; class ModelNode; @@ -61,12 +64,10 @@ typedef QList > PropertyListType; class QMLDESIGNERCORE_EXPORT Model : public QObject { friend class QmlDesigner::ModelNode; - friend class QmlDesigner::NodeState; - friend class QmlDesigner::ModelState; - friend class QmlDesigner::NodeAnchors; friend class QmlDesigner::AbstractProperty; friend class QmlDesigner::AbstractView; friend class Internal::ModelPrivate; + friend class Internal::WriteLocker; Q_OBJECT @@ -116,7 +117,7 @@ public: protected: Model(); -public: +private: Internal::ModelPrivate *d; }; diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp index fa5595a4203..40a9d757766 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp @@ -106,6 +106,11 @@ Internal::InternalNodePointer AbstractProperty::internalNode() const return m_internalNode; } +Internal::ModelPrivate *AbstractProperty::privateModel() const +{ + return m_model ? m_model->d : nullptr; +} + Model *AbstractProperty::model() const { return m_model.data(); diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp index 018075da663..dfea640fd57 100644 --- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp @@ -84,9 +84,9 @@ void BindingProperty::setExpression(const QString &expression) } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isBindingProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->setBindingProperty(internalNode(), name(), expression); + privateModel()->setBindingProperty(internalNode(), name(), expression); } QString BindingProperty::expression() const @@ -239,9 +239,9 @@ void BindingProperty::setDynamicTypeNameAndExpression(const TypeName &typeName, } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isBindingProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->setDynamicBindingProperty(internalNode(), name(), typeName, expression); + privateModel()->setDynamicBindingProperty(internalNode(), name(), typeName, expression); } QDebug operator<<(QDebug debug, const BindingProperty &property) diff --git a/src/plugins/qmldesigner/designercore/model/internalnode_p.h b/src/plugins/qmldesigner/designercore/model/internalnode_p.h index 9f70fe1e94f..0997c5a4ff4 100644 --- a/src/plugins/qmldesigner/designercore/model/internalnode_p.h +++ b/src/plugins/qmldesigner/designercore/model/internalnode_p.h @@ -40,8 +40,6 @@ namespace QmlDesigner { -class Model; - namespace Internal { class InternalProperty; diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp index 488988bbeb3..27b5a5c7469 100644 --- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp @@ -86,18 +86,18 @@ void NodeAbstractProperty::reparentHere(const ModelNode &modelNode, bool isNode throw InvalidReparentingException(__LINE__, __FUNCTION__, __FILE__); if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeAbstractProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); if (modelNode.hasParentProperty()) { Internal::InternalNodeAbstractProperty::Pointer oldParentProperty = modelNode.internalNode()->parentProperty(); - model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName); + privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName); Q_ASSERT(!oldParentProperty.isNull()); } else { - model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName); + privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName); } } diff --git a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp index 1d03c894181..d4735160c50 100644 --- a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp @@ -99,7 +99,7 @@ void NodeListProperty::slide(int from, int to) const if (to > count() - 1) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, ""); - model()->d->changeNodeOrder(internalNode(), name(), from, to); + privateModel()->changeNodeOrder(internalNode(), name(), from, to); } void NodeListProperty::reparentHere(const ModelNode &modelNode) diff --git a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp index 6d9bcfd1de3..2d262c2ab63 100644 --- a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp @@ -59,9 +59,9 @@ void NodeProperty::setModelNode(const ModelNode &modelNode) } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), false); //### we have to add a flag that this is not a list + privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), false); //### we have to add a flag that this is not a list } ModelNode NodeProperty::modelNode() const diff --git a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp index 21659a37e2f..3ad9280e7ad 100644 --- a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp @@ -71,9 +71,9 @@ void SignalHandlerProperty::setSource(const QString &source) } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isSignalHandlerProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->setSignalHandlerProperty(internalNode(), name(), source); + privateModel()->setSignalHandlerProperty(internalNode(), name(), source); } QString SignalHandlerProperty::source() const diff --git a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp index 259a6900ee2..dbdf1bb74e0 100644 --- a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp @@ -71,9 +71,9 @@ void VariantProperty::setValue(const QVariant &value) } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->setVariantProperty(internalNode(), name(), value); + privateModel()->setVariantProperty(internalNode(), name(), value); } QVariant VariantProperty::value() const @@ -120,9 +120,9 @@ void VariantProperty::setDynamicTypeNameAndValue(const TypeName &type, const QVa } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty()) - model()->d->removeProperty(internalNode()->property(name())); + privateModel()->removeProperty(internalNode()->property(name())); - model()->d->setDynamicVariantProperty(internalNode(), name(), type, value); + privateModel()->setDynamicVariantProperty(internalNode(), name(), type, value); } void VariantProperty::setDynamicTypeNameAndEnumeration(const TypeName &type, const EnumerationName &enumerationName)