From 613529b39e08b96f1742e2c6c64b68e7dba34f51 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
Date: Wed, 10 Jul 2013 17:54:49 +0200
Subject: [PATCH] QmlDesigner.Model: Allowing the model to hold a TextModifer

We have a one to one relationship between models and TextModifiers.
With this patch the model keeps track of its own TextModifer and
does set it to the rewriter if attached.

The model does not take ownership, since it does also not take
ownership of its views.

Change-Id: Ied02666debf6aad76666b0d9d22e8ba2f72be666
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
---
 src/plugins/qmldesigner/designercore/include/model.h  |  4 ++++
 src/plugins/qmldesigner/designercore/model/model.cpp  | 11 +++++++++++
 src/plugins/qmldesigner/designercore/model/model_p.h  |  1 +
 .../qmldesigner/designercore/model/rewriterview.cpp   |  3 +++
 4 files changed, 19 insertions(+)

diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h
index e799907a190..6af6ffacf57 100644
--- a/src/plugins/qmldesigner/designercore/include/model.h
+++ b/src/plugins/qmldesigner/designercore/include/model.h
@@ -58,6 +58,7 @@ class NodeAnchors;
 class AbstractProperty;
 class RewriterView;
 class NodeInstanceView;
+class TextModifier;
 
 typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
 
@@ -107,6 +108,9 @@ public:
 
     Model *metaInfoProxyModel();
 
+    TextModifier *textModifier() const;
+    void setTextModifier(TextModifier *textModifier);
+
 protected:
     Model();
 
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index b35d0a5e2d1..660855bc99f 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -57,6 +57,7 @@
 #include "rewriterview.h"
 #include "rewritingexception.h"
 #include "invalididexception.h"
+#include "textmodifier.h"
 
 /*!
 \defgroup CoreModel
@@ -1798,6 +1799,16 @@ Model *Model::metaInfoProxyModel()
         return this;
 }
 
+TextModifier *Model::textModifier() const
+{
+    return d->m_textModifier.data();
+}
+
+void Model::setTextModifier(TextModifier *textModifier)
+{
+    d->m_textModifier = textModifier;
+}
+
 #if 0
 /*!
  \brief Creates a new empty model
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index ae0f156eb56..0b797a419c6 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -246,6 +246,7 @@ private:
     QUrl m_fileUrl;
     QWeakPointer<RewriterView> m_rewriterView;
     QWeakPointer<NodeInstanceView> m_nodeInstanceView;
+    QWeakPointer<TextModifier> m_textModifier;
     QWeakPointer<Model> m_metaInfoProxyModel;
     bool m_writeLock;
     qint32 m_internalIdCounter;
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 5e84c216fbd..7d113c3f4dc 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -149,6 +149,9 @@ Internal::TextToModelMerger *RewriterView::textToModelMerger() const
 
 void RewriterView::modelAttached(Model *model)
 {
+    if (model && model->textModifier())
+        setTextModifier(model->textModifier());
+
     AbstractView::modelAttached(model);
 
     ModelAmender differenceHandler(m_textToModelMerger.data());
-- 
GitLab