diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index f8a18ea64fb54b77e43cd9746271ec9c5e676ac4..c91609c24d2cd44c9b804177e942090b92e4ed6e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -51,6 +51,9 @@ #include <QDir> #include <QAction> #include <zoomaction.h> +#include <nodeabstractproperty.h> +#include <nodelistproperty.h> + namespace QmlDesigner { @@ -264,6 +267,9 @@ void FormEditorView::scriptFunctionsChanged(const ModelNode &node, const QString QmlModelView::scriptFunctionsChanged(node, scriptFunctionList); } +void FormEditorView::propertiesRemoved(const QList<AbstractProperty> &/*propertyList*/) +{ +} AbstractFormEditorTool* FormEditorView::currentTool() const { diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 4123ffdd7e0f68c0aa6af5cfe91efce349d728c7..7363f797430e1b5bc456ea7764570a5f0cbbaff8 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -78,6 +78,7 @@ public: void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void propertiesRemoved(const QList<AbstractProperty> &propertyList); // FormEditorView FormEditorWidget *widget() const; diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp index 9385ef83b73d9fcbb0a63becf0eb0f9bddcdc18c..2f07c5b181127dac4bc9cc56da7ed7eec9024f9e 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp @@ -38,6 +38,7 @@ #include <QGraphicsSceneMouseEvent> #include <QtDebug> #include <QClipboard> +#include <variantproperty.h> namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp index 423e61d8fe314289918734babf5ea56690eab0f6..b02d2e4b4726a94cc656ebdff990dfa6f98b8076 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp @@ -42,6 +42,8 @@ #include <limits> #include <model.h> #include <qmlanchors.h> +#include <variantproperty.h> +#include <nodeabstractproperty.h> namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index af8a9181e8f44318e4e51a04648915525714c02e..4967fe8b3d4d5b8ffeb5fb41c6b1f1fb8952a4a9 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -160,7 +160,7 @@ void ComponentView::variantPropertiesChanged(const QList<VariantProperty>& /*pro void ComponentView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {} void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) {} void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {} - +void ComponentView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) {}; void ComponentView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index b1028b23e2f1c5f09678cba0573d74b4a3bd5bdf..d4612d0a63a8727820dea9c8c43e98b957f747d2 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -67,7 +67,7 @@ public: void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange); void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); - + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp index 71f812400b42c864dac243b8e8658fd981336af6..67daf39827ee6725cb465be6e2bc3c36b60c13d0 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp @@ -50,6 +50,7 @@ #include <rewritingexception.h> #include <nodelistproperty.h> #include <toolbox.h> +#include <variantproperty.h> #include <QtCore/QCoreApplication> #include <QtCore/QDir> @@ -87,6 +88,7 @@ public: QWeakPointer<AllPropertiesBox> allPropertiesBox; QWeakPointer<StatesEditorWidget> statesEditorWidget; QWeakPointer<QStackedWidget> stackedWidget; + QWeakPointer<NodeInstanceView> nodeInstanceView; QWeakPointer<QmlDesigner::Model> model; QWeakPointer<QmlDesigner::Model> subComponentModel; @@ -212,6 +214,11 @@ void DesignDocumentController::setFormEditorView(FormEditorView *formEditorView) m_d->formEditorView = formEditorView; } +void DesignDocumentController::setNodeInstanceView(NodeInstanceView *nodeInstanceView) +{ + m_d->nodeInstanceView = nodeInstanceView; +} + QString DesignDocumentController::displayName() const { if (fileName().isEmpty()) @@ -344,6 +351,7 @@ void DesignDocumentController::loadCurrentModel() Q_ASSERT(m_d->model); m_d->model->setMasterModel(m_d->masterModel.data()); + m_d->model->attachView(m_d->nodeInstanceView.data()); m_d->model->attachView(m_d->navigator.data()); m_d->itemLibrary->setItemLibraryInfo(m_d->model->metaInfo().itemLibraryInfo()); m_d->itemLibrary->setResourcePath(QFileInfo(m_d->fileName).absolutePath()); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h index fc52581f1c0b99998e528c7d621f78a05d3b9bae..76bed22727030362681b827bd1194031369556fa 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h @@ -94,6 +94,7 @@ public: void setAllPropertiesBox(AllPropertiesBox* allPropertiesBox); void setStatesEditorWidget(StatesEditorWidget* statesEditorWidget); void setFormEditorView(FormEditorView *formEditorView); + void setNodeInstanceView(NodeInstanceView *nodeInstanceView); signals: void displayNameChanged(const QString &newFileName); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index e434c55ca57d38455af48b2b269cc19a077953db..6e63157a2b75bf0f43cc2f725b2b213a9f402a18 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -60,6 +60,9 @@ void DesignDocumentControllerView::scriptFunctionsChanged(const ModelNode &/*nod { } +void DesignDocumentControllerView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) +{ +} static QStringList arrayToStringList(const QByteArray &byteArray) { diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h index 9632c3569a22279da2273033a3a906ee6fe75409..6fc0273029531f4e39b84c90185a457495b105b8 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -58,6 +58,8 @@ public: virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); virtual void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); + ModelNode insertModel(const ModelNode &modelNode) { return m_modelMerger.insertModel(modelNode); } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 55281be45b9334ebbe3f53a77fa6f54f3ecd9762..3fe79262014a831b19c37b031d2377c3fe32d341 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -190,6 +190,9 @@ void NavigatorView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStr { } +void NavigatorView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) +{ +} void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &node, int oldIndex) { diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index 27ffbb47bc89c0cddb104f17224eb1bce924ee0d..5b142e18b08ab22dc6e6b4bc17aab48fb2367e27 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -81,7 +81,7 @@ public: const QList<ModelNode> &lastSelectedNodeList); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); - + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); private slots: // void handleChangedItem(QStandardItem * item); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp index bc430d05d9f4ae3eeae93d2e6b422dcae26a350c..47a2aae2c559c91630e24fc8fb974ecb8e064e5f 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp @@ -40,6 +40,10 @@ #include <variantproperty.h> #include <propertymetainfo.h> +#include <bindingproperty.h> + +#include <nodeabstractproperty.h> + #include "propertyeditorvalue.h" #include "basiclayouts.h" #include "basicwidgets.h" diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp index 657e696b33c36eb4cc8ab276de0205554b3320ad..1b3cde6fd5a7f8cf7fefd95023291727ea6e98c3 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp @@ -36,6 +36,9 @@ #include <QDebug> #include <math.h> +#include <variantproperty.h> +#include <nodelistproperty.h> + enum { debug = false }; @@ -434,6 +437,21 @@ void StatesEditorView::scriptFunctionsChanged(const ModelNode &node, const QStri QmlModelView::scriptFunctionsChanged(node, scriptFunctionList); } +void StatesEditorView::nodeIdChanged(const ModelNode &/*node*/, const QString &/*newId*/, const QString &/*oldId*/) +{ + +} + +void StatesEditorView::bindingPropertiesChanged(const QList<BindingProperty> &/*propertyList*/, PropertyChangeFlags /*propertyChange*/) +{ + +} + +void StatesEditorView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) +{ + +} + QPixmap StatesEditorView::renderState(int i) { diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h index dc0acbfd1ca78fb01149d0ed089782ca9f5db9fa..9dd8d8b099cadd3bc33ef21363d297902b568cca 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h @@ -76,6 +76,9 @@ public: void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId); + void bindingPropertiesChanged(const QList<BindingProperty> &propertyList, PropertyChangeFlags propertyChange); + void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); protected: diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 1351f83e9223bbee688d80108b4b2b2967fb287e..118ae560ac984f7a65632c2ec9ef04a111cf0d7f 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -54,6 +54,7 @@ namespace QmlDesigner { namespace QmlDesigner { class QmlModelView; +class NodeInstanceView; class CORESHARED_EXPORT AbstractView : public QObject { @@ -101,6 +102,8 @@ public: void emitCustomNotification(const QString &identifier, const QList<ModelNode> &nodeList); void emitCustomNotification(const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); + void emitInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); + virtual void modelAttached(Model *model); virtual void modelAboutToBeDetached(Model *model); @@ -115,6 +118,8 @@ public: virtual void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) = 0; virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) = 0; + virtual void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) = 0; + virtual void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList) = 0; @@ -135,6 +140,8 @@ public: void changeRootNodeType(const QString &type, int majorVersion, int minorVersion); + NodeInstanceView *nodeInstanceView() const; + protected: void setModel(Model * model); void removeModel(); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 64835fbe36758019de73160525c96c8b3a1b3b80..d2aa710252210d3a30d689e4721e738d7109dbd6 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -85,6 +85,7 @@ public: void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); QList<NodeInstance> instances() const; @@ -100,9 +101,6 @@ public: void notifyPropertyChange(const ModelNode &modelNode, const QString &propertyName); - void setQmlModelView(QmlModelView *qmlModelView); - QmlModelView *qmlModelView() const ; - void setBlockStatePropertyChanges(bool block); NodeInstance activeStateInstance() const; diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index f48f76fc31f53eb1214428b542faa85bdabd976e..c7a752e568b501f60a33e96d4adbd0373404a124 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -31,7 +31,6 @@ #define QMLMODELVIEW_H #include <corelib_global.h> -#include <forwardview.h> #include <abstractview.h> #include "qmlitemnode.h" #include "qmlstate.h" @@ -42,7 +41,7 @@ namespace QmlDesigner { class ItemLibraryEntry; -class CORESHARED_EXPORT QmlModelView : public ForwardView<NodeInstanceView> +class CORESHARED_EXPORT QmlModelView : public AbstractView { Q_OBJECT friend CORESHARED_EXPORT class QmlObjectNode; @@ -90,10 +89,26 @@ public: virtual void nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName); + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); + + void nodeCreated(const ModelNode &createdNode); + void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange); + void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange); + void propertiesAboutToBeRemoved(const QList<AbstractProperty> &propertyList); + void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion); + void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); + void nodeAboutToBeRemoved(const ModelNode &removedNode); + void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId); + void propertiesRemoved(const QList<AbstractProperty>& propertyList); + void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange); + void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange); + void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); + + protected: NodeInstance instanceForModelNode(const ModelNode &modelNode); bool hasInstanceForModelNode(const ModelNode &modelNode); - NodeInstanceView *nodeInstanceView() const; virtual void transformChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName) ; virtual void parentChanged(const QmlObjectNode &qmlObjectNode); virtual void otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName); diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index 77875ff64fbaa3c1adbe7559d1620e5d376efd01..3b40ba0fcb9ee74b95aed631d0cfd6e771a1fd80 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -126,6 +126,8 @@ public: void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); + void importAdded(const Import &import); void importRemoved(const Import &import); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 728d5867a9a7da4224bc4c699aa1928350676554..c058a89bfd559a6ad4b422493517d2cdb1690cb3 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -379,6 +379,12 @@ void NodeInstanceView::scriptFunctionsChanged(const ModelNode &/*node*/, const Q } +void NodeInstanceView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) +{ + +} + + //\} void NodeInstanceView::loadNodes(const QList<ModelNode> &nodeList) @@ -557,21 +563,9 @@ void NodeInstanceView::notifyPropertyChange(const ModelNode &node, const QString if (m_blockStatePropertyChanges) return; - if (qmlModelView()) { - qmlModelView()->nodeInstancePropertyChanged(ModelNode(node,qmlModelView()), propertyName); - } -} - - -void NodeInstanceView::setQmlModelView(QmlModelView *qmlModelView) -{ - m_qmlModelView = qmlModelView; + emitInstancePropertyChange(QList<QPair<ModelNode, QString> >() << qMakePair(node, propertyName)); } -QmlModelView *NodeInstanceView::qmlModelView() const -{ - return m_qmlModelView.data(); -} void NodeInstanceView::setBlockStatePropertyChanges(bool block) { diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index ea979b1ee586781c4d80c2f5ece1bb71cd3dbde9..9fc221a0df149762fc866253e60463ec8b3ac8f7 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -339,6 +339,15 @@ QmlModelView *AbstractView::toQmlModelView() return qobject_cast<QmlModelView*>(this); } +NodeInstanceView *AbstractView::nodeInstanceView() const +{ + if (model()) { + return model()->m_d->nodeInstanceView(); + } else { + return 0; + } +} + QList<ModelNode> AbstractView::allModelNodes() { return toModelNodeList(model()->m_d->allNodes()); @@ -359,6 +368,12 @@ void AbstractView::emitCustomNotification(const QString &identifier, const QList model()->m_d->notifyCustomNotification(this, identifier, nodeList, data); } +void AbstractView::emitInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) +{ + if (model()) + model()->m_d->notifyInstancePropertyChange(propertyList); +} + void AbstractView::changeRootNodeType(const QString &type, int majorVersion, int minorVersion) { Internal::WriteLocker locker(m_model.data()); diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index dc66a9c97055a0030ef534eeeefaa16aa83642fb..181418dbc84609487cd18eaae28e52ffce07a557 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -44,7 +44,7 @@ #include <QPlainTextEdit> #include "abstractview.h" -#include "widgetqueryview.h" +#include "nodeinstanceview.h" #include "metainfo.h" #include "model_p.h" #include "modelutilities.h" @@ -88,14 +88,13 @@ namespace Internal { ModelPrivate::ModelPrivate(Model *model) : m_q(model), - m_rootInternalNode(createNode("Qt/Rectangle", 4, 7, PropertyListType())), m_writeLock(false) { + m_rootInternalNode = createNode("Qt/Item", 4, 7, PropertyListType()); } ModelPrivate::~ModelPrivate() { - detachAllViews(); } @@ -135,16 +134,55 @@ void ModelPrivate::removeImport(const Import &import) notifyImportRemoved(import); } -void ModelPrivate::notifyImportAdded(const Import &import) const +void ModelPrivate::notifyImportAdded(const Import &import) { + bool resetModel = false; + QString description; + + try { + if (rewriterView()) { + rewriterView()->importAdded(import); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + if (rewriterView()) foreach (const QWeakPointer<AbstractView> &view, m_viewList) view->importAdded(import); + + if (nodeInstanceView()) + nodeInstanceView()->importAdded(import); + + if (resetModel) { + resetModelByRewriter(description); + } } -void ModelPrivate::notifyImportRemoved(const Import &import) const +void ModelPrivate::notifyImportRemoved(const Import &import) { + bool resetModel = false; + QString description; + + try { + if (rewriterView()) { + rewriterView()->importRemoved(import); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) view->importRemoved(import); + + if (nodeInstanceView()) + nodeInstanceView()->importRemoved(import); + + if (resetModel) { + resetModelByRewriter(description); + } } QUrl ModelPrivate::fileUrl() const @@ -286,15 +324,26 @@ void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &interna bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode node(internalNode, model(), rewriterView()); + rewriterView()->auxiliaryDataChanged(node, name, data); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); ModelNode node(internalNode, model(), view.data()); - try { - view->auxiliaryDataChanged(node, name, data); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->auxiliaryDataChanged(node, name, data); + + } + + if (nodeInstanceView()) { + ModelNode node(internalNode, model(), nodeInstanceView()); + nodeInstanceView()->auxiliaryDataChanged(node, name, data); } if (resetModel) { @@ -307,35 +356,68 @@ void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersi bool resetModel = false; QString description; + try { + if (rewriterView()) + rewriterView()->rootNodeTypeChanged(type, majorVersion, minorVersion); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); - try { - view->rootNodeTypeChanged(type, majorVersion, minorVersion); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->rootNodeTypeChanged(type, majorVersion, minorVersion); + } + if (nodeInstanceView()) + nodeInstanceView()->rootNodeTypeChanged(type, majorVersion, minorVersion); + if (resetModel) { resetModelByRewriter(description); } } +void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyPairList) +{ + // no need to notify the rewriter or the instance view + + typedef QPair<ModelNode, QString> ModelNodePropertyPair; + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { + Q_ASSERT(view != 0); + + QList<QPair<ModelNode, QString> > adaptedPropertyList; + foreach (const ModelNodePropertyPair &propertyPair, propertyPairList) { + ModelNodePropertyPair newPair(ModelNode(propertyPair.first.internalNode(), model(), view.data()), propertyPair.second); + adaptedPropertyList.append(newPair); + } + + view->instancePropertyChange(adaptedPropertyList); + } +} + void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data) { bool resetModel = false; QString description; QList<Internal::InternalNode::Pointer> internalList(toInternalNodeList(nodeList)); + + try { + if (rewriterView()) + rewriterView()->customNotification(senderView, identifier, toModelNodeList(internalList, rewriterView()), data); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); - try { - view->customNotification(senderView, identifier, toModelNodeList(internalList, view.data()), data); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->customNotification(senderView, identifier, toModelNodeList(internalList, view.data()), data); + } + + if (nodeInstanceView()) { + rewriterView()->customNotification(senderView, identifier, toModelNodeList(internalList, nodeInstanceView()), data); } if (resetModel) { @@ -349,6 +431,33 @@ void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPa bool resetModel = false; QString description; + + + try { + if (rewriterView()) { + QList<AbstractProperty> propertyList; + foreach (const PropertyPair &propertyPair, propertyPairList) { + AbstractProperty newProperty(propertyPair.second, propertyPair.first, model(), rewriterView()); + propertyList.append(newProperty); + } + + rewriterView()->propertiesRemoved(propertyList); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + if (nodeInstanceView()) { + QList<AbstractProperty> propertyList; + foreach (const PropertyPair &propertyPair, propertyPairList) { + AbstractProperty newProperty(propertyPair.second, propertyPair.first, model(), nodeInstanceView()); + propertyList.append(newProperty); + } + + nodeInstanceView()->propertiesRemoved(propertyList); + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { QList<AbstractProperty> propertyList; Q_ASSERT(view != 0); @@ -356,12 +465,8 @@ void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPa AbstractProperty newProperty(propertyPair.second, propertyPair.first, model(), view.data()); propertyList.append(newProperty); } - try { - view->propertiesRemoved(propertyList); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + + view->propertiesRemoved(propertyList); } if (resetModel) { @@ -374,6 +479,23 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty bool resetModel = false; QString description; + + + try { + if (rewriterView()) { + QList<AbstractProperty> propertyList; + foreach (const InternalProperty::Pointer &property, internalPropertyList) { + AbstractProperty newProperty(property->name(), property->propertyOwner(), model(), rewriterView()); + propertyList.append(newProperty); + } + + rewriterView()->propertiesAboutToBeRemoved(propertyList); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { QList<AbstractProperty> propertyList; Q_ASSERT(view != 0); @@ -389,6 +511,16 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty } } + if (nodeInstanceView()) { + QList<AbstractProperty> propertyList; + foreach (const InternalProperty::Pointer &property, internalPropertyList) { + AbstractProperty newProperty(property->name(), property->propertyOwner(), model(), nodeInstanceView()); + propertyList.append(newProperty); + } + + nodeInstanceView()->propertiesAboutToBeRemoved(propertyList); + } + if (resetModel) { resetModelByRewriter(description); } @@ -437,17 +569,28 @@ void ModelPrivate::notifyNodeCreated(const InternalNode::Pointer &newInternalNod bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode createdNode(newInternalNodePointer, model(), rewriterView()); + rewriterView()->nodeCreated(createdNode); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); ModelNode createdNode(newInternalNodePointer, model(), view.data()); + view->nodeCreated(createdNode); + } - try { - view->nodeCreated(createdNode); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + + if (nodeInstanceView()) { + ModelNode createdNode(newInternalNodePointer, model(), nodeInstanceView()); + nodeInstanceView()->nodeCreated(createdNode); } + if (resetModel) { resetModelByRewriter(description); } @@ -458,16 +601,28 @@ void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodeP bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode node(nodePointer, model(), rewriterView()); + rewriterView()->nodeAboutToBeRemoved(node); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + if (nodeInstanceView()) { + ModelNode node(nodePointer, model(), nodeInstanceView()); + nodeInstanceView()->nodeAboutToBeRemoved(node); + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); ModelNode node(nodePointer, model(), view.data()); - try { - view->nodeAboutToBeRemoved(node); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->nodeAboutToBeRemoved(node); } + + if (resetModel) { resetModelByRewriter(description); } @@ -478,17 +633,31 @@ void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, con bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode node(nodePointer, model(), rewriterView()); + NodeAbstractProperty parentProperty(parentPropertyName, parentNodePointer, model(), rewriterView()); + rewriterView()->nodeRemoved(node, parentProperty, propertyChange); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + if (nodeInstanceView()) { + ModelNode node(nodePointer, model(), nodeInstanceView()); + NodeAbstractProperty parentProperty(parentPropertyName, parentNodePointer, model(), nodeInstanceView()); + nodeInstanceView()->nodeRemoved(node, parentProperty, propertyChange); + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); ModelNode node(nodePointer, model(), view.data()); NodeAbstractProperty parentProperty(parentPropertyName, parentNodePointer, model(), view.data()); - try { - view->nodeRemoved(node, parentProperty, propertyChange); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->nodeRemoved(node, parentProperty, propertyChange); + } + if (resetModel) { resetModelByRewriter(description); } @@ -499,16 +668,27 @@ void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& nodePointer, bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode node(nodePointer, model(), rewriterView()); + rewriterView()->nodeIdChanged(node, newId, oldId); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); ModelNode node(nodePointer, model(), view.data()); - try { - view->nodeIdChanged(node, newId, oldId); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->nodeIdChanged(node, newId, oldId); + } + + if (nodeInstanceView()) { + ModelNode node(nodePointer, model(), nodeInstanceView()); + nodeInstanceView()->nodeIdChanged(node, newId, oldId); } + if (resetModel) { resetModelByRewriter(description); } @@ -519,19 +699,37 @@ void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPro bool resetModel = false; QString description; + try { + if (rewriterView()) { + QList<BindingProperty> propertyList; + foreach (const InternalBindingPropertyPointer &bindingProperty, internalBropertyList) { + propertyList.append(BindingProperty(bindingProperty->name(), bindingProperty->propertyOwner(), model(), rewriterView())); + } + rewriterView()->bindingPropertiesChanged(propertyList, propertyChange); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { - QList<BindingProperty> propertyList; Q_ASSERT(view != 0); + QList<BindingProperty> propertyList; foreach (const InternalBindingPropertyPointer &bindingProperty, internalBropertyList) { propertyList.append(BindingProperty(bindingProperty->name(), bindingProperty->propertyOwner(), model(), view.data())); } - try { - view->bindingPropertiesChanged(propertyList, propertyChange); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; + view->bindingPropertiesChanged(propertyList, propertyChange); + + } + + if (nodeInstanceView()) { + QList<BindingProperty> propertyList; + foreach (const InternalBindingPropertyPointer &bindingProperty, internalBropertyList) { + propertyList.append(BindingProperty(bindingProperty->name(), bindingProperty->propertyOwner(), model(), nodeInstanceView())); } + nodeInstanceView()->bindingPropertiesChanged(propertyList, propertyChange); } + if (resetModel) { resetModelByRewriter(description); } @@ -542,18 +740,29 @@ void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &inter bool resetModel = false; QString description; + try { + if (rewriterView()) { + ModelNode node(internalNodePointer, model(), rewriterView()); + rewriterView()->scriptFunctionsChanged(node, scriptFunctionList); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + if (nodeInstanceView()) { + ModelNode node(internalNodePointer, model(), nodeInstanceView()); + nodeInstanceView()->scriptFunctionsChanged(node, scriptFunctionList); + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { Q_ASSERT(view != 0); - ModelNode node(internalNodePointer, model(), view.data()); - try { - view->scriptFunctionsChanged(node, scriptFunctionList); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + view->scriptFunctionsChanged(node, scriptFunctionList); + } + if (resetModel) { resetModelByRewriter(description); } @@ -565,6 +774,25 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int bool resetModel = false; QString description; + try { + if (rewriterView()) { + QList<VariantProperty> propertyList; + foreach (const QString &propertyName, propertyNameList) { + Q_ASSERT(internalNodePointer->hasProperty(propertyName)); + Q_ASSERT(internalNodePointer->property(propertyName)->isVariantProperty()); + VariantProperty property(propertyName, internalNodePointer, model(), rewriterView()); + propertyList.append(property); + } + + ModelNode node(internalNodePointer, model(), rewriterView()); + rewriterView()->variantPropertiesChanged(propertyList, propertyChange); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { QList<VariantProperty> propertyList; Q_ASSERT(view != 0); @@ -575,13 +803,23 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int propertyList.append(property); } ModelNode node(internalNodePointer, model(), view.data()); - try { - view->variantPropertiesChanged(propertyList, propertyChange); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; + view->variantPropertiesChanged(propertyList, propertyChange); + + } + + if (nodeInstanceView()) { + QList<VariantProperty> propertyList; + foreach (const QString &propertyName, propertyNameList) { + Q_ASSERT(internalNodePointer->hasProperty(propertyName)); + Q_ASSERT(internalNodePointer->property(propertyName)->isVariantProperty()); + VariantProperty property(propertyName, internalNodePointer, model(), nodeInstanceView()); + propertyList.append(property); } + + ModelNode node(internalNodePointer, model(), nodeInstanceView()); + nodeInstanceView()->variantPropertiesChanged(propertyList, propertyChange); } + if (resetModel) { resetModelByRewriter(description); } @@ -592,6 +830,24 @@ void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodeP bool resetModel = false; QString description; + try { + if (rewriterView()) { + NodeAbstractProperty newProperty; + NodeAbstractProperty oldProperty; + + if (!oldPropertyName.isEmpty() && oldParent->isValid()) + oldProperty = NodeAbstractProperty(oldPropertyName, oldParent, model(), rewriterView()); + + if (!newPropertyParent.isNull()) + newProperty = NodeAbstractProperty(newPropertyParent, model(), rewriterView()); + ModelNode node(internalNodePointer, model(), rewriterView()); + rewriterView()->nodeReparented(node, newProperty, oldProperty, propertyChange); + } + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { NodeAbstractProperty newProperty; NodeAbstractProperty oldProperty; @@ -603,13 +859,24 @@ void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodeP if (!newPropertyParent.isNull()) newProperty = NodeAbstractProperty(newPropertyParent, model(), view.data()); ModelNode node(internalNodePointer, model(), view.data()); - try { - view->nodeReparented(node, newProperty, oldProperty, propertyChange); - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; - } + + view->nodeReparented(node, newProperty, oldProperty, propertyChange); + + } + + if (nodeInstanceView()) { + NodeAbstractProperty newProperty; + NodeAbstractProperty oldProperty; + + if (!oldPropertyName.isEmpty() && oldParent->isValid()) + oldProperty = NodeAbstractProperty(oldPropertyName, oldParent, model(), nodeInstanceView()); + + if (!newPropertyParent.isNull()) + newProperty = NodeAbstractProperty(newPropertyParent, model(), nodeInstanceView()); + ModelNode node(internalNodePointer, model(), nodeInstanceView()); + nodeInstanceView()->nodeReparented(node, newProperty, oldProperty, propertyChange); } + if (resetModel) { resetModelByRewriter(description); } @@ -895,6 +1162,45 @@ void ModelPrivate::setRootNode(const InternalNode::Pointer& newRootNode) notifyNodeCreated(m_rootInternalNode); } +void ModelPrivate::setRewriterView(RewriterView *rewriterView) +{ + if (rewriterView == m_rewriterView.data()) + return; + + Q_ASSERT(!(rewriterView && m_rewriterView)); + + m_rewriterView = rewriterView; + + if (rewriterView) + rewriterView->modelAttached(model()); + else if (m_rewriterView) + m_rewriterView->modelAboutToBeDetached(model()); +} + +RewriterView *ModelPrivate::rewriterView() const +{ + return m_rewriterView.data(); +} + +void ModelPrivate::setNodeInstanceView(NodeInstanceView *nodeInstanceView) +{ + if (nodeInstanceView == m_nodeInstanceView.data()) + return; + + Q_ASSERT(!(nodeInstanceView && m_nodeInstanceView)); + + m_nodeInstanceView = nodeInstanceView; + + if (nodeInstanceView) + nodeInstanceView->modelAttached(m_q); + else if (m_nodeInstanceView) + m_nodeInstanceView->modelAttached(m_q); +} + +NodeInstanceView *ModelPrivate::nodeInstanceView() const +{ + return m_nodeInstanceView.data(); +} InternalNodePointer ModelPrivate::nodeForId(const QString &id) const { @@ -1144,6 +1450,18 @@ The view is informed that it has been registered within the model by a call to A void Model::attachView(AbstractView *view) { // Internal::WriteLocker locker(m_d); + RewriterView *rewriterView = qobject_cast<RewriterView*>(view); + if (rewriterView) { + m_d->setRewriterView(rewriterView); + return; + } + + NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view); + if (nodeInstanceView) { + m_d->setNodeInstanceView(nodeInstanceView); + return; + } + m_d->attachView(view); } @@ -1159,6 +1477,19 @@ void Model::detachView(AbstractView *view, ViewNotification emitDetachNotify) { // Internal::WriteLocker locker(m_d); bool emitNotify = (emitDetachNotify == NotifyView); + + RewriterView *rewriterView = qobject_cast<RewriterView*>(view); + if (rewriterView) { + m_d->setRewriterView(0); + return; + } + + NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view); + if (nodeInstanceView) { + m_d->setNodeInstanceView(0); + return; + } + m_d->detachView(view, emitNotify); } diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index f678e362db73c894fadcce2d9c2c45f1b001681d..7589f462a811165a61ab28e971373dfb1d3f3418 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -48,7 +48,8 @@ QT_END_NAMESPACE namespace QmlDesigner { class AbstractProperty; - +class RewriterView; +class NodeInstanceView; namespace Internal { @@ -140,6 +141,7 @@ public: void notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion); void notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); + void notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); @@ -160,8 +162,8 @@ public: QList<Import> imports() const { return m_imports; } void addImport(const Import &import); void removeImport(const Import &import); - void notifyImportAdded(const Import &import) const; - void notifyImportRemoved(const Import &import) const; + void notifyImportAdded(const Import &import); + void notifyImportRemoved(const Import &import); //node state property manipulation @@ -190,6 +192,11 @@ public: WriteLocker createWriteLocker() const; + void setRewriterView(RewriterView *rewriterView); + RewriterView *rewriterView() const; + void setNodeInstanceView(NodeInstanceView *nodeInstanceView); + NodeInstanceView *nodeInstanceView() const; + private: //functions void removePropertyWithoutNotification(const InternalPropertyPointer &property); void removeAllSubNodes(const InternalNodePointer &node); @@ -212,8 +219,9 @@ private: QUrl m_fileUrl; QWeakPointer<Model> m_masterModel; - - bool m_writeLock; + QWeakPointer<RewriterView> m_rewriterView; + QWeakPointer<NodeInstanceView> m_nodeInstanceView; + bool m_writeLock; }; } diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index d0885e77df84ddfd616e286ba132c443ffb3f63c..21baa1eabec7ea38f8ae9089e90e675c6a8c75d0 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -38,6 +38,8 @@ #include <QFileInfo> #include <QDebug> #include <QMessageBox> +#include "nodeabstractproperty.h" +#include "variantproperty.h" enum { debug = false @@ -47,11 +49,8 @@ enum { namespace QmlDesigner { QmlModelView::QmlModelView(QObject *parent) - : ForwardView<NodeInstanceView>(parent) + : AbstractView(parent) { - NodeInstanceView *nodeInstanceView = new NodeInstanceView(this); - nodeInstanceView->setQmlModelView(this); - appendView(nodeInstanceView); } void QmlModelView::setCurrentState(const QmlModelState &state) @@ -302,23 +301,18 @@ bool QmlModelView::hasInstanceForModelNode(const ModelNode &modelNode) return nodeInstanceView()->hasInstanceForNode(modelNode); } -NodeInstanceView *QmlModelView::nodeInstanceView() const -{ - return firstView(); -} - void QmlModelView::modelAttached(Model *model) { + AbstractView::modelAttached(model); m_state = QmlModelState(); - ForwardView<NodeInstanceView>::modelAttached(model); m_state = baseState(); Q_ASSERT(m_state.isBaseState()); } void QmlModelView::modelAboutToBeDetached(Model *model) { - ForwardView<NodeInstanceView>::modelAboutToBeDetached(model); m_state = QmlModelState(); + AbstractView::modelAboutToBeDetached(model); } static bool isTransformProperty(const QString &name) @@ -335,6 +329,32 @@ static bool isTransformProperty(const QString &name) return transformProperties.contains(name); } +void QmlModelView::nodeOrderChanged(const NodeListProperty &/*listProperty*/, const ModelNode &/*movedNode*/, int /*oldIndex*/) +{ + +} + +void QmlModelView::nodeCreated(const ModelNode &/*createdNode*/) {} +void QmlModelView::nodeAboutToBeRemoved(const ModelNode &/*removedNode*/) {} +void QmlModelView::nodeRemoved(const ModelNode &/*removedNode*/, const NodeAbstractProperty &/*parentProperty*/, PropertyChangeFlags /*propertyChange*/) {} +void QmlModelView::nodeReparented(const ModelNode &/*node*/, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {} +void QmlModelView::nodeIdChanged(const ModelNode& /*node*/, const QString& /*newId*/, const QString& /*oldId*/) {} +void QmlModelView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& /*propertyList*/) {} +void QmlModelView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {} +void QmlModelView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {} +void QmlModelView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {} +void QmlModelView::rootNodeTypeChanged(const QString &/*type*/, int, int /*minorVersion*/) {} +void QmlModelView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {} +void QmlModelView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) {} + +void QmlModelView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) +{ + typedef QPair<ModelNode, QString> ModelNodePropertyPair; + foreach (const ModelNodePropertyPair &propertyPair, propertyList) { + nodeInstancePropertyChanged(propertyPair.first, propertyPair.second); + } +} + void QmlModelView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName) { if (debug) diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 41ff3507249fa6409ed3e6bb3d627d2800608fac..e237956988fbd3c4a791f2c7437184b7c793d505 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -38,6 +38,8 @@ #include "nodeinstanceview.h" #include "nodeinstance.h" #include "nodemetainfo.h" +#include "bindingproperty.h" +#include "nodelistproperty.h" namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp index 2c21384598da7a117873614ad2d5c60d19a02b3f..bd17f083f17c5861ceced091925fe7ad30d91cc1 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp @@ -33,6 +33,7 @@ #include <variantproperty.h> #include <metainfo.h> #include <invalidmodelnodeexception.h> +#include "bindingproperty.h" namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 7a042b75116ea4b6f632be3d20bedb071aad871c..f610f3f6b307eda2d570a700ba0a3ae95861b6dc 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -356,6 +356,11 @@ void RewriterView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStri { } +void RewriterView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) +{ +} + + void RewriterView::selectedNodesChanged(const QList<ModelNode> & /* selectedNodeList, */, const QList<ModelNode> & /*lastSelectedNodeList */) { } diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp index 9fb44e8e1b36438246ee33c81cb60c9a1a6dd457..dd477e69514813d44aa868d502b005cde4e0ec08 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -195,7 +195,15 @@ void ViewLogger::customNotification(const AbstractView *view, const QString &ide void ViewLogger::scriptFunctionsChanged(const ModelNode &node, const QStringList &/*scriptFunctionList*/) { m_output << time() << indent("function scripts changed:") << node << endl; +} + +void ViewLogger::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) +{ + typedef QPair<ModelNode, QString> PropertyPair; + m_output << time() << indent("instancePropertyChange:") << endl; + foreach(const PropertyPair &propertyPair, propertyList) + m_output << time() << indent("property: ") << propertyPair.first << propertyPair.second << endl; } diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index cdadd6237341023c941e6f09116b8486fbd39389..5bff84bad58df9d924c1bf1a934cc22dc00218f5 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -71,6 +71,7 @@ public: void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); + void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList); protected: QString time() const; diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 4c708a2c0ab6e727415e2d1de5f4b4c34d2b479c..6826e4324d619b1051e0d8387c667744da800e35 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -259,12 +259,14 @@ void DesignModeWidget::showEditor(Core::IEditor *editor) } else { DesignDocumentController *newDocument = new DesignDocumentController(this); + newDocument->setNodeInstanceView(m_nodeInstanceView.data()); newDocument->setAllPropertiesBox(m_allPropertiesBox.data()); newDocument->setNavigator(m_navigator.data()); newDocument->setStatesEditorWidget(m_statesEditorWidget.data()); newDocument->setItemLibrary(m_itemLibrary.data()); newDocument->setFormEditorView(m_formEditorView.data()); + newDocument->setFileName(fileName); document = newDocument; @@ -620,6 +622,7 @@ void DesignModeWidget::setup() } } + m_nodeInstanceView = new NodeInstanceView(this); // Sidebar takes ownership m_navigator = new NavigatorView; m_allPropertiesBox = new AllPropertiesBox; diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h index 9ae1abdadc21f6f99e9f911e4f13f1ff4c8b7734..ad18ece10b1c986c7bf11cc1752909b37347a3c9 100644 --- a/src/plugins/qmldesigner/designmodewidget.h +++ b/src/plugins/qmldesigner/designmodewidget.h @@ -177,6 +177,7 @@ private: QWeakPointer<AllPropertiesBox> m_allPropertiesBox; QWeakPointer<StatesEditorWidget> m_statesEditorWidget; QWeakPointer<FormEditorView> m_formEditorView; + QWeakPointer<NodeInstanceView> m_nodeInstanceView; bool m_syncWithTextEdit;