aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@nokia.com>2011-06-28 13:41:52 +0200
committerThomas Hartmann <Thomas.Hartmann@nokia.com>2011-06-28 13:47:56 +0200
commit2d4b5fcb65b83e404516f82c53d55a1dd5f05173 (patch)
tree39f85d7e4563e84ac6826b4e90d25d6dd764ba69
parent52f0eae3a439ab746364c90112381102efef1190 (diff)
QmlDesigner: Fix slowness for many items
The information change notifier provided no hint which infotmation changed. So the property editor has updated the anchors for all information changes. Now there is a hint and the update is only happen for a anchor change. Change-Id: I3b6d7546f43bce4c08757662e7af32604a8db56f Reviewed-on: http://codereview.qt.nokia.com/811 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.h2
-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.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.h2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp5
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractview.h5
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstance.h19
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmlmodelview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp197
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp24
-rw-r--r--src/plugins/qmldesigner/designercore/model/model_p.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.cpp10
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.h2
27 files changed, 260 insertions, 59 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h b/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h
index 1983c4eebc..fb2ece6522 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h
@@ -34,12 +34,14 @@
#define COMMONDEFINES_H
#include <QMetaType>
+#include <QPair>
namespace QmlDesigner {
enum InformationName
{
NoName,
+ NoInformationChange = NoName,
Size,
BoundingRect,
Transform,
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 7e29dfb93e..aae97ea6e4 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -468,11 +468,11 @@ void FormEditorView::instancesCompleted(const QVector<ModelNode> &completedNodeL
currentTool()->instancesCompleted(itemNodeList);
}
-void FormEditorView::instanceInformationsChange(const QVector<ModelNode> &nodeList)
+void FormEditorView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
QList<FormEditorItem*> itemNodeList;
- foreach (const ModelNode &node, nodeList) {
+ foreach (const ModelNode &node, informationChangeHash.keys()) {
QmlItemNode qmlItemNode(node);
if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) {
scene()->synchronizeTransformation(qmlItemNode);
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index ade7545d0f..27fbc9df82 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -106,7 +106,7 @@ public:
void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp
index f54cbf3442..a2d818d4dd 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentview.cpp
@@ -208,7 +208,7 @@ void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVers
void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {}
void ComponentView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) {}
void ComponentView::instancesCompleted(const QVector<ModelNode> &/*completedNodeList*/) {}
-void ComponentView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/) {}
+void ComponentView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/) {}
void ComponentView::instancesRenderImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
void ComponentView::instancesPreviewImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
void ComponentView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeList*/) {}
diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h
index 190f6131ab..fef34556b5 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.h
+++ b/src/plugins/qmldesigner/components/integration/componentview.h
@@ -77,7 +77,7 @@ public:
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
index 4129283355..ead2ab44a1 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
@@ -72,7 +72,7 @@ void DesignDocumentControllerView::instancesCompleted(const QVector<ModelNode> &
{
}
-void DesignDocumentControllerView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void DesignDocumentControllerView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/)
{
}
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h
index 4cb1f9d1f0..a915eeb4cd 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h
@@ -64,7 +64,7 @@ public:
virtual void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
index 3271a7d149..611257b27f 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
@@ -155,7 +155,7 @@ void ItemLibraryView::instancesCompleted(const QVector<ModelNode> &)
}
-void ItemLibraryView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void ItemLibraryView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/)
{
}
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
index e316de2c61..3c61139efe 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
@@ -80,7 +80,7 @@ public:
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 54609ff6ab..37f0d8d3ed 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -218,7 +218,7 @@ void NavigatorView::instancesCompleted(const QVector<ModelNode> &/*completedNode
{
}
-void NavigatorView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void NavigatorView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/)
{
}
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h
index 3f1fbd05b4..dc05ac2bb4 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h
@@ -88,7 +88,7 @@ public:
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 8d5e2a8a22..d494e90878 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -882,13 +882,14 @@ void PropertyEditor::bindingPropertiesChanged(const QList<BindingProperty>& prop
}
-void PropertyEditor::instanceInformationsChange(const QVector<ModelNode> &nodeList)
+void PropertyEditor::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
if (!m_selectedNode.isValid())
return;
m_locked = true;
- if (nodeList.contains(m_selectedNode))
+ QList<InformationName> informationNameList = informationChangeHash.values(m_selectedNode);
+ if (informationNameList.contains(Anchor))
m_currentType->m_backendAnchorBinding.setup(QmlItemNode(m_selectedNode));
m_locked = false;
}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
index 42b1d71858..d626b21246 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
@@ -105,7 +105,7 @@ public:
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange);
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId);
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index ca48ad3773..88fc9204c9 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -39,6 +39,7 @@
#include <modelnode.h>
#include <abstractproperty.h>
#include <rewritertransaction.h>
+#include <commondefines.h>
#include <QObject>
@@ -114,7 +115,7 @@ public:
void emitInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void emitInstancesCompleted(const QVector<ModelNode> &nodeList);
- void emitInstanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void emitInstanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void emitInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void emitInstancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void emitInstancesChildrenChanged(const QVector<ModelNode> &nodeList);
@@ -139,7 +140,7 @@ public:
virtual void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) = 0;
virtual void instancesCompleted(const QVector<ModelNode> &completedNodeList) = 0;
- virtual void instanceInformationsChange(const QVector<ModelNode> &nodeList) = 0;
+ virtual void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash) = 0;
virtual void instancesRenderImageChanged(const QVector<ModelNode> &nodeList) = 0;
virtual void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) = 0;
virtual void instancesChildrenChanged(const QVector<ModelNode> &nodeList) = 0;
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index dff3856d45..cb630b4fac 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -85,11 +85,28 @@ public:
protected:
void setProperty(const QString &name, const QVariant &value);
- void setInformation(InformationName name,
+ InformationName setInformation(InformationName name,
const QVariant &information,
const QVariant &secondInformation,
const QVariant &thirdInformation);
+ InformationName setInformationSize(const QSizeF &size);
+ InformationName setInformationBoundingRect(const QRectF &rectangle);
+ InformationName setInformationTransform(const QTransform &transform);
+ InformationName setInformationPenWith(int penWidth);
+ InformationName setInformationPosition(const QPointF &position);
+ InformationName setInformationIsInPositioner(bool isInPositioner);
+ InformationName setInformationSceneTransform(const QTransform &sceneTransform);
+ InformationName setInformationIsResizable(bool isResizable);
+ InformationName setInformationIsMovable(bool isMovable);
+ InformationName setInformationIsAnchoredByChildren(bool isAnchoredByChildren);
+ InformationName setInformationIsAnchoredBySibling(bool isAnchoredBySibling);
+ InformationName setInformationHasContent(bool hasContent);
+ InformationName setInformationHasAnchor(const QString &sourceAnchorLine, bool hasAnchor);
+ InformationName setInformationAnchor(const QString &sourceAnchorLine, const QString &targetAnchorLine, qint32 targetInstanceId);
+ InformationName setInformationInstanceTypeForProperty(const QString &property, const QString &type);
+ InformationName setInformationHasBindingForProperty(const QString &property, bool hasProperty);
+
void setParentId(qint32 instanceId);
void setRenderImage(const QImage &image);
NodeInstance(ProxyNodeInstanceData *d);
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index 0bbfa74225..1cc469b411 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -102,7 +102,7 @@ public:
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
index 67336ed684..4b72f12481 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
@@ -94,7 +94,7 @@ public:
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index b8cb4cd204..2f3bf35e5c 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -139,7 +139,7 @@ public:
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 59c66c2595..cdbb363a9e 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -317,28 +317,191 @@ void NodeInstance::setParentId(qint32 instanceId)
d->parentInstanceId = instanceId;
}
-void NodeInstance::setInformation(InformationName name, const QVariant &information, const QVariant &secondInformation, const QVariant &thirdInformation)
+InformationName NodeInstance::setInformationSize(const QSizeF &size)
+{
+ if (d->size != size) {
+ d->size = size;
+ return Size;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationBoundingRect(const QRectF &rectangle)
+{
+ if (d->boundingRect != rectangle) {
+ d->boundingRect = rectangle;
+ return BoundingRect;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationTransform(const QTransform &transform)
+{
+ if (d->transform != transform) {
+ d->transform = transform;
+ return Transform;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationPenWith(int penWidth)
+{
+ if (d->penWidth != penWidth) {
+ d->penWidth = penWidth;
+ return PenWidth;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationPosition(const QPointF &position)
+{
+ if (d->position != position) {
+ d->position = position;
+ return Position;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationIsInPositioner(bool isInPositioner)
+{
+ if (d->isInPositioner != isInPositioner) {
+ d->isInPositioner = isInPositioner;
+ return IsInPositioner;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationSceneTransform(const QTransform &sceneTransform)
+{
+ if (d->sceneTransform != sceneTransform) {
+ d->sceneTransform = sceneTransform;
+ return SceneTransform;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationIsResizable(bool isResizable)
+{
+ if (d->isResizable != isResizable) {
+ d->isResizable = isResizable;
+ return IsResizable;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationIsMovable(bool isMovable)
+{
+ if (d->isMovable != isMovable) {
+ d->isMovable = isMovable;
+ return IsMovable;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationIsAnchoredByChildren(bool isAnchoredByChildren)
+{
+ if (d->isAnchoredByChildren != isAnchoredByChildren) {
+ d->isAnchoredByChildren = isAnchoredByChildren;
+ return IsAnchoredByChildren;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationIsAnchoredBySibling(bool isAnchoredBySibling)
+{
+ if (d->isAnchoredBySibling != isAnchoredBySibling) {
+ d->isAnchoredBySibling = isAnchoredBySibling;
+ return IsAnchoredBySibling;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationHasContent(bool hasContent)
+{
+ if (d->hasContent != hasContent) {
+ d->hasContent = hasContent;
+ return HasContent;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationHasAnchor(const QString &sourceAnchorLine, bool hasAnchor)
+{
+ if (d->hasAnchors.value(sourceAnchorLine) != hasAnchor) {
+ d->hasAnchors.insert(sourceAnchorLine, hasAnchor);
+ return HasAnchor;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationAnchor(const QString &sourceAnchorLine, const QString &targetAnchorLine, qint32 targetInstanceId)
+{
+ QPair<QString, qint32> anchorPair = QPair<QString, qint32>(targetAnchorLine, targetInstanceId);
+ if (d->anchors.value(sourceAnchorLine) != anchorPair) {
+ d->anchors.insert(sourceAnchorLine, anchorPair);
+ return Anchor;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationInstanceTypeForProperty(const QString &property, const QString &type)
+{
+ if (d->instanceTypes.value(property) != type) {
+ d->instanceTypes.insert(property, type);
+ return InstanceTypeForProperty;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformationHasBindingForProperty(const QString &property, bool hasProperty)
+{
+ if (d->hasBindingForProperty.value(property) != hasProperty) {
+ d->hasBindingForProperty.insert(property, hasProperty);
+ return HasBindingForProperty;
+ }
+
+ return NoInformationChange;
+}
+
+InformationName NodeInstance::setInformation(InformationName name, const QVariant &information, const QVariant &secondInformation, const QVariant &thirdInformation)
{
switch (name) {
- case Size: d->size = information.toSizeF(); break;
- case BoundingRect: d->boundingRect = information.toRectF(); break;
- case Transform: d->transform = information.value<QTransform>(); break;
- case PenWidth: d->penWidth = information.toInt(); break;
- case Position: d->position = information.toPointF(); break;
- case IsInPositioner: d->isInPositioner = information.toBool(); break;
- case SceneTransform: d->sceneTransform = information.value<QTransform>(); break;
- case IsResizable: d->isResizable = information.toBool(); break;
- case IsMovable: d->isMovable = information.toBool(); break;
- case IsAnchoredByChildren: d->isAnchoredByChildren = information.toBool(); break;
- case IsAnchoredBySibling: d->isAnchoredBySibling = information.toBool(); break;
- case HasContent: d->hasContent = information.toBool(); break;
- case HasAnchor: d->hasAnchors.insert(information.toString(), secondInformation.toBool());break;
- case Anchor: d->anchors.insert(information.toString(), qMakePair(secondInformation.toString(), thirdInformation.value<qint32>())); break;
- case InstanceTypeForProperty: d->instanceTypes.insert(information.toString(), secondInformation.toString()); break;
- case HasBindingForProperty: d->hasBindingForProperty.insert(information.toString(), secondInformation.toBool()); break;
+ case Size: return setInformationSize(information.toSizeF()); break;
+ case BoundingRect: return setInformationBoundingRect(information.toRectF()); break;
+ case Transform: return setInformationTransform(information.value<QTransform>()); break;
+ case PenWidth: return setInformationPenWith(information.toInt()); break;
+ case Position: return setInformationPosition(information.toPointF()); break;
+ case IsInPositioner: return setInformationIsInPositioner(information.toBool()); break;
+ case SceneTransform: return setInformationSceneTransform(information.value<QTransform>()); break;
+ case IsResizable: return setInformationIsResizable(information.toBool()); break;
+ case IsMovable: return setInformationIsMovable(information.toBool()); break;
+ case IsAnchoredByChildren: return setInformationIsAnchoredByChildren(information.toBool()); break;
+ case IsAnchoredBySibling: return setInformationIsAnchoredBySibling(information.toBool()); break;
+ case HasContent: return setInformationHasContent(information.toBool()); break;
+ case HasAnchor: return setInformationHasAnchor(information.toString(), secondInformation.toBool());break;
+ case Anchor: return setInformationAnchor(information.toString(), secondInformation.toString(), thirdInformation.value<qint32>()); break;
+ case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toString(), secondInformation.toString()); break;
+ case HasBindingForProperty: return setInformationHasBindingForProperty(information.toString(), secondInformation.toBool()); break;
case NoName:
default: break;
}
+
+ return NoInformationChange;
}
bool operator ==(const NodeInstance &first, const NodeInstance &second)
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 8417c36891..75967a6eb4 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -42,6 +42,7 @@
#include <QGraphicsScene>
#include <QGraphicsObject>
#include <QFileSystemWatcher>
+#include <QMultiHash>
#include <model.h>
#include <modelnode.h>
@@ -462,7 +463,7 @@ void NodeInstanceView::importsChanged(const QList<Import> &/*addedImports*/, con
restartProcess();
}
-void NodeInstanceView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void NodeInstanceView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/)
{
}
@@ -1062,21 +1063,21 @@ void NodeInstanceView::informationChanged(const InformationChangedCommand &comma
if (!model())
return;
- QVector<ModelNode> informationChangedVector;
+ QMultiHash<ModelNode, InformationName> informationChangeHash;
foreach(const InformationContainer &container, command.informations()) {
if (hasInstanceForId(container.instanceId())) {
NodeInstance instance = instanceForId(container.instanceId());
if (instance.isValid()) {
- instance.setInformation(container.name(), container.information(), container.secondInformation(), container.thirdInformation());
- if (!informationChangedVector.contains(instance.modelNode()))
- informationChangedVector.append(instance.modelNode());
+ InformationName informationChange = instance.setInformation(container.name(), container.information(), container.secondInformation(), container.thirdInformation());
+ if (informationChange != NoInformationChange)
+ informationChangeHash.insert(instance.modelNode(), informationChange);
}
}
}
- if (!informationChangedVector.isEmpty())
- emitInstanceInformationsChange(informationChangedVector);
+ if (!informationChangeHash.isEmpty())
+ emitInstanceInformationsChange(informationChangeHash);
}
QImage NodeInstanceView::statePreviewImage(const ModelNode &stateNode) const
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index 6611e1f32b..4117986b1e 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -399,10 +399,10 @@ void AbstractView::emitInstancesCompleted(const QVector<ModelNode> &nodeVector)
model()->m_d->notifyInstancesCompleted(nodeVector);
}
-void AbstractView::emitInstanceInformationsChange(const QVector<ModelNode> &nodeVector)
+void AbstractView::emitInstanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
if (model() && nodeInstanceView() == this)
- model()->m_d->notifyInstancesInformationsChange(nodeVector);
+ model()->m_d->notifyInstancesInformationsChange(informationChangeHash);
}
void AbstractView::emitInstancesRenderImageChanged(const QVector<ModelNode> &nodeVector)
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 0f75621b69..18404c3054 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -45,6 +45,7 @@
#include <QtXml/QXmlStreamReader>
#include <QtCore/QDebug>
#include <QPlainTextEdit>
+#include <QHashIterator>
#include "abstractview.h"
#include "nodeinstanceview.h"
@@ -472,16 +473,27 @@ void ModelPrivate::notifyInstancesCompleted(const QVector<ModelNode> &nodeVector
}
}
-void ModelPrivate::notifyInstancesInformationsChange(const QVector<ModelNode> &nodeVector)
+QMultiHash<ModelNode, InformationName> convertModelNodeInformationHash(const QMultiHash<ModelNode, InformationName> &informationChangeHash, AbstractView *view)
+{
+ QMultiHash<ModelNode, InformationName> convertedModelNodeInformationHash;
+
+ QHashIterator<ModelNode, InformationName> hashIterator(informationChangeHash);
+ while (hashIterator.hasNext()) {
+ hashIterator.next();
+ convertedModelNodeInformationHash.insert(ModelNode(hashIterator.key(), view), hashIterator.value());
+ }
+
+ return convertedModelNodeInformationHash;
+}
+
+void ModelPrivate::notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
bool resetModel = false;
QString description;
- QVector<Internal::InternalNode::Pointer> internalVector(toInternalNodeVector(nodeVector));
-
try {
if (rewriterView())
- rewriterView()->instanceInformationsChange(toModelNodeVector(internalVector, rewriterView()));
+ rewriterView()->instanceInformationsChange(convertModelNodeInformationHash(informationChangeHash, rewriterView()));
} catch (RewritingException &e) {
description = e.description();
resetModel = true;
@@ -489,11 +501,11 @@ void ModelPrivate::notifyInstancesInformationsChange(const QVector<ModelNode> &n
foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
Q_ASSERT(view != 0);
- view->instanceInformationsChange(toModelNodeVector(internalVector, view.data()));
+ view->instanceInformationsChange(convertModelNodeInformationHash(informationChangeHash, view.data()));
}
if (nodeInstanceView()) {
- nodeInstanceView()->instanceInformationsChange(toModelNodeVector(internalVector, nodeInstanceView()));
+ nodeInstanceView()->instanceInformationsChange(convertModelNodeInformationHash(informationChangeHash, nodeInstanceView()));
}
if (resetModel) {
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 23a626a45c..c806b1b82a 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -152,7 +152,7 @@ public:
void notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
void notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void notifyInstancesCompleted(const QVector<ModelNode> &nodeList);
- void notifyInstancesInformationsChange(const QVector<ModelNode> &nodeList);
+ void notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void notifyInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void notifyInstancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void notifyInstancesChildrenChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
index 4252b8f98b..682a6e2d4a 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
@@ -389,7 +389,7 @@ void QmlModelView::instancesCompleted(const QVector<ModelNode> &/*completedNodeL
{
}
-void QmlModelView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void QmlModelView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/)
{
}
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index db6fb1ec0c..e586bbe007 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -387,7 +387,7 @@ void RewriterView::instancesCompleted(const QVector<ModelNode> &/*completedNodeL
{
}
-void RewriterView::instanceInformationsChange(const QVector<ModelNode> &/*nodeList*/)
+void RewriterView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
}
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
index ffbcc334f9..b49a2358a9 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
@@ -224,12 +224,16 @@ void ViewLogger::instancesCompleted(const QVector<ModelNode> &completedNodeList)
}
-void ViewLogger::instanceInformationsChange(const QVector<ModelNode> &nodeList)
+void ViewLogger::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
m_output << time() << indent("instanceInformationsChange:") << endl;
- foreach(const ModelNode &node, nodeList)
- m_output << time() << indent("node: ") << node << endl;
+ QHashIterator<ModelNode, InformationName> informationChangeHashIterator(informationChangeHash);
+
+ while (informationChangeHashIterator.hasNext()) {
+ informationChangeHashIterator.next();
+ m_output << time() << indent("node: ") << informationChangeHashIterator.key() << "\tinformation: " << informationChangeHashIterator.value() << endl;
+ }
}
void ViewLogger::instancesRenderImageChanged(const QVector<ModelNode> &nodeList)
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h
index cd503ea8d5..01fc89ca25 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.h
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h
@@ -77,7 +77,7 @@ public:
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
void instancesCompleted(const QVector<ModelNode> &completedNodeList);
- void instanceInformationsChange(const QVector<ModelNode> &nodeList);
+ void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);