summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@nokia.com>2011-02-02 21:52:15 +0100
committerMarco Bubke <marco.bubke@nokia.com>2011-02-02 21:52:15 +0100
commit14a5d57572bb9e31620b1d81eb684767a7f579ea (patch)
tree88e9ca2000ec226f9caef195846b34d5a6c9a36b /src
parent7c6a13b3bf0e694351664f99794cad6703a073ef (diff)
downloadqt-creator-14a5d57572bb9e31620b1d81eb684767a7f579ea.tar.gz
QmlDesigner: Add notifier for state change
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.h2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractview.h3
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmlmodelview.h5
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp27
-rw-r--r--src/plugins/qmldesigner/designercore/model/model_p.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp56
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.h2
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;