diff options
author | Marco Bubke <marco.bubke@nokia.com> | 2011-02-02 21:52:15 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@nokia.com> | 2011-02-02 21:52:15 +0100 |
commit | 14a5d57572bb9e31620b1d81eb684767a7f579ea (patch) | |
tree | 88e9ca2000ec226f9caef195846b34d5a6c9a36b /src | |
parent | 7c6a13b3bf0e694351664f99794cad6703a073ef (diff) | |
download | qt-creator-14a5d57572bb9e31620b1d81eb684767a7f579ea.tar.gz |
QmlDesigner: Add notifier for state change
Diffstat (limited to 'src')
20 files changed, 96 insertions, 43 deletions
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index 26dfa099c1..fd1c4b132e 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -173,7 +173,7 @@ void ComponentView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeLis void ComponentView::rewriterBeginTransaction() {} void ComponentView::rewriterEndTransaction() {} - +void ComponentView::actualStateChanged(const ModelNode &/*node*/) {} void ComponentView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) {} diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index 3f74f647a2..cb542ed172 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -82,6 +82,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index cbccc62e30..38e3b3c2a2 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -101,9 +101,11 @@ void DesignDocumentControllerView::rewriterBeginTransaction() void DesignDocumentControllerView::rewriterEndTransaction() { - } +void DesignDocumentControllerView::actualStateChanged(const ModelNode &/*node*/) +{ +} 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 273fe33407..586c196a0b 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -73,6 +73,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + ModelNode insertModel(const ModelNode &modelNode) { return m_modelMerger.insertModel(modelNode); } void replaceModel(const ModelNode &modelNode) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 4ff1c33664..d7dc82e8a3 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -153,6 +153,10 @@ void ItemLibraryView::rewriterEndTransaction() { } +void ItemLibraryView::actualStateChanged(const ModelNode &/*node*/) +{ +} + void ItemLibraryView::updateImports() { m_widget->updateModel(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index 69747a9d1a..7bc936c97d 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -90,6 +90,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + protected: void updateImports(); diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 46621161f3..65ebb49e7d 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -245,6 +245,10 @@ void NavigatorView::rewriterEndTransaction() { } +void NavigatorView::actualStateChanged(const ModelNode &/*node*/) +{ +} + void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &node, int oldIndex) { if (m_treeModel->isInTree(node)) diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index 825c00e1f0..c39a6f74ef 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -98,6 +98,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + private slots: // void handleChangedItem(QStandardItem * item); void changeSelection(const QItemSelection &selected, const QItemSelection &deselected); diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index c9101bf6dc..188f7e36af 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -118,6 +118,7 @@ public: void emitInstancesChildrenChanged(const QVector<ModelNode> &nodeList); void emitRewriterBeginTransaction(); void emitRewriterEndTransaction(); + void emitActualStateChanged(const ModelNode &node); virtual void modelAttached(Model *model); virtual void modelAboutToBeDetached(Model *model); @@ -144,6 +145,8 @@ public: virtual void rewriterBeginTransaction() = 0; virtual void rewriterEndTransaction() = 0; + virtual void actualStateChanged(const ModelNode &node) = 0; // base state is a invalid model node + virtual void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList) = 0; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index b5bd98744e..9430a19026 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -113,6 +113,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + QList<NodeInstance> instances() const; NodeInstance instanceForNode(const ModelNode &node) const ; bool hasInstanceForNode(const ModelNode &node) const; diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index fad1d8ed01..2fe58761cd 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -87,8 +87,6 @@ public: QmlObjectNode fxObjectNodeForId(const QString &id); - void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); - void modelAttached(Model *model); void modelAboutToBeDetached(Model *model); @@ -104,6 +102,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + void nodeCreated(const ModelNode &createdNode); void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange); void nodeAboutToBeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange); @@ -129,7 +129,6 @@ protected: virtual void stateChanged(const QmlModelState &newQmlModelState, const QmlModelState &oldQmlModelState); void activateState(const QmlModelState &state); - void changeToState(const ModelNode &node, const QString &stateName); private: QmlModelState m_state; diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index 3e1f2c565d..2ae356ebef 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -148,6 +148,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + 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 556ce7faa1..6f50f7a243 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -474,6 +474,11 @@ void NodeInstanceView::rewriterEndTransaction() } +void NodeInstanceView::actualStateChanged(const ModelNode &/*node*/) +{ +} + + //\} diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 154d8ffb8c..b002c7c7e6 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -439,6 +439,12 @@ void AbstractView::emitRewriterEndTransaction() model()->m_d->notifyRewriterEndTransaction(); } +void AbstractView::emitActualStateChanged(const ModelNode &node) +{ + if (model()) + model()->m_d->notifyActualStateChanged(node); +} + 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 b95f6b08ed..5e8a1721bd 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -567,6 +567,33 @@ void ModelPrivate::notifyInstancesChildrenChanged(const QVector<ModelNode> &node } } +void ModelPrivate::notifyActualStateChanged(const ModelNode &node) +{ + bool resetModel = false; + QString description; + + try { + if (rewriterView()) + rewriterView()->actualStateChanged(ModelNode(node.internalNode(), model(), rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer<AbstractView> &view, m_viewList) { + Q_ASSERT(view != 0); + view->actualStateChanged(ModelNode(node.internalNode(), model(), view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->actualStateChanged(ModelNode(node.internalNode(), model(), nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + void ModelPrivate::notifyRewriterBeginTransaction() { bool resetModel = false; diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index b5d88a9ba3..8e4df9947a 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -153,6 +153,7 @@ public: void notifyInstancesRenderImageChanged(const QVector<ModelNode> &nodeList); void notifyInstancesPreviewImageChanged(const QVector<ModelNode> &nodeList); void notifyInstancesChildrenChanged(const QVector<ModelNode> &nodeList); + void notifyActualStateChanged(const ModelNode &node); void notifyRewriterBeginTransaction(); void notifyRewriterEndTransaction(); diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index f7ee844066..469172cc4e 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -57,7 +57,7 @@ void QmlModelView::setCurrentState(const QmlModelState &state) if (!state.isValid()) return; - emitCustomNotification("__state changed__", QList<ModelNode>() << state.modelNode()); + emitActualStateChanged(state.modelNode()); } QmlModelState QmlModelView::currentState() const @@ -281,24 +281,6 @@ QmlObjectNode QmlModelView::fxObjectNodeForId(const QString &id) return QmlObjectNode(modelNodeForId(id)); } -void QmlModelView::customNotification(const AbstractView * /* view */, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> & /* data */) -{ - if (identifier == "__state changed__") { // TODO: Is this still needed? - QmlModelState newState(nodeList.first()); - QmlModelState oldState = currentState(); - - if (!newState.isValid()) - newState = baseState(); - - activateState(newState); - - m_state = newState; - - if (newState != oldState) - stateChanged(newState, oldState); - } -} - NodeInstance QmlModelView::instanceForModelNode(const ModelNode &modelNode) { return nodeInstanceView()->instanceForNode(modelNode); @@ -401,6 +383,23 @@ void QmlModelView::rewriterEndTransaction() } +void QmlModelView::actualStateChanged(const ModelNode &node) +{ + QmlModelState newState(node); + QmlModelState oldState = currentState(); + + if (!newState.isValid()) + newState = baseState(); + + activateState(newState); + + m_state = newState; + + if (newState != oldState) + stateChanged(newState, oldState); + +} + void QmlModelView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName) { QmlObjectNode qmlObjectNode(node); @@ -438,25 +437,6 @@ void QmlModelView::activateState(const QmlModelState &state) } } -void QmlModelView::changeToState(const ModelNode &node, const QString &stateName) -{ - QmlItemNode itemNode(node); - - QmlModelState newState; - if (stateName.isEmpty()) - newState = baseState(); - else - newState = itemNode.states().state(stateName); - - QmlModelState oldState = m_state; - - if (newState.isValid() && oldState != newState) { - m_state = newState; - stateChanged(newState, oldState); - } -} - - void QmlModelView::transformChanged(const QmlObjectNode &/*qmlObjectNode*/, const QString &/*propertyName*/) { } diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 7a9ea083cb..278907047f 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -415,6 +415,10 @@ void RewriterView::rewriterEndTransaction() } } +void RewriterView::actualStateChanged(const ModelNode &/*node*/) +{ +} + 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 26d55dd392..0ed9e9d442 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -267,5 +267,9 @@ void ViewLogger::rewriterEndTransaction() m_output << time() << indent("rewriterEndTransaction:") << endl; } +void ViewLogger::actualStateChanged(const ModelNode &node) +{ + m_output << time() << indent("actualStateChanged:") << node << endl; +} } // namespace Internal } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index 7d82962c2c..2841e03c3b 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -86,6 +86,8 @@ public: void rewriterBeginTransaction(); void rewriterEndTransaction(); + void actualStateChanged(const ModelNode &node); + protected: QString time() const; |