From 307129bf8fb32ae65a171b9b97fdaeb6ff70c02d Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Thu, 21 Aug 2014 18:08:58 +0200
Subject: [PATCH] CppEditor: Partially move to new editor setup scheme

This needs more reorganization. For now, use a method to
add cpp editor support directly without relying on a fully
set up editor/widget/document combo.

Change-Id: Id8631c75ccd209f418faef31f8b8a4c71e53d87d
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
---
 src/plugins/cppeditor/cppeditor.cpp       | 22 +++++++++++-----------
 src/plugins/cppeditor/cppeditor.h         |  2 +-
 src/plugins/cppeditor/cppeditorplugin.cpp |  8 +++++---
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 438d97ceb5..b1f0df599d 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -127,8 +127,6 @@ public:
     CppEditorWidgetPrivate(CppEditorWidget *q);
 
 public:
-    CppEditorWidget *q;
-
     QPointer<CppTools::CppModelManagerInterface> m_modelManager;
 
     CPPEditorDocument *m_cppEditorDocument;
@@ -160,8 +158,7 @@ public:
 };
 
 CppEditorWidgetPrivate::CppEditorWidgetPrivate(CppEditorWidget *q)
-    : q(q)
-    , m_modelManager(CppModelManagerInterface::instance())
+    : m_modelManager(CppModelManagerInterface::instance())
     , m_cppEditorDocument(qobject_cast<CPPEditorDocument *>(q->textDocument()))
     , m_cppEditorOutline(new CppEditorOutline(q))
     , m_cppDocumentationCommentHelper(q)
@@ -175,9 +172,10 @@ CppEditorWidgetPrivate::CppEditorWidgetPrivate(CppEditorWidget *q)
 {
 }
 
-CppEditorWidget::CppEditorWidget(TextEditor::BaseTextDocumentPtr doc)
-    : TextEditor::BaseTextEditorWidget(0)
+CppEditorWidget::CppEditorWidget(TextEditor::BaseTextDocumentPtr doc, CPPEditor *editor)
 {
+    editor->setEditorWidget(this);
+
     setTextDocument(doc);
     d.reset(new CppEditorWidgetPrivate(this));
     setAutoCompleter(new CppAutoCompleter);
@@ -190,7 +188,7 @@ CppEditorWidget::CppEditorWidget(TextEditor::BaseTextDocumentPtr doc)
     setRevisionsVisible(true);
 
     if (d->m_modelManager) {
-        CppEditorSupport *editorSupport = d->m_modelManager->cppEditorSupport(editor());
+        CppEditorSupport *editorSupport = d->m_modelManager->cppEditorSupport(editor);
         connect(editorSupport, SIGNAL(documentUpdated()),
                 this, SLOT(onDocumentUpdated()));
         connect(editorSupport, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
@@ -262,7 +260,7 @@ CppEditorOutline *CppEditorWidget::outline() const
 
 TextEditor::BaseTextEditor *CppEditorWidget::createEditor()
 {
-    return new CPPEditor;
+    QTC_ASSERT("should not happen anymore" && false, return 0);
 }
 
 void CppEditorWidget::paste()
@@ -743,9 +741,11 @@ void CppEditorWidget::keyPressEvent(QKeyEvent *e)
 
 Core::IEditor *CPPEditor::duplicate()
 {
-    CppEditorWidget *newEditor = new CppEditorWidget(editorWidget()->textDocumentPtr());
-    CppEditorPlugin::instance()->initializeEditor(newEditor);
-    return newEditor->editor();
+    CPPEditor *editor = new CPPEditor;
+    CppEditorWidget *widget = new CppEditorWidget(editorWidget()->textDocumentPtr(), editor);
+    CppEditorPlugin::instance()->initializeEditor(widget);
+    editor->configureCodeAssistant();
+    return editor;
 }
 
 bool CPPEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index 6b24b72443..d7c6df96f3 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -75,7 +75,7 @@ public:
     static Link linkToSymbol(CPlusPlus::Symbol *symbol);
 
 public:
-    CppEditorWidget(TextEditor::BaseTextDocumentPtr doc);
+    CppEditorWidget(TextEditor::BaseTextDocumentPtr doc, CPPEditor *editor);
     ~CppEditorWidget();
 
     CPPEditorDocument *cppEditorDocument() const;
diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp
index a12f542793..81e5e81653 100644
--- a/src/plugins/cppeditor/cppeditorplugin.cpp
+++ b/src/plugins/cppeditor/cppeditorplugin.cpp
@@ -96,9 +96,11 @@ CppEditorFactory::CppEditorFactory(CppEditorPlugin *owner) :
 
 IEditor *CppEditorFactory::createEditor()
 {
-    CppEditorWidget *editor = new CppEditorWidget(BaseTextDocumentPtr(new CPPEditorDocument));
-    m_owner->initializeEditor(editor);
-    return editor->editor();
+    CPPEditor *editor = new CPPEditor;
+    CppEditorWidget *widget = new CppEditorWidget(BaseTextDocumentPtr(new CPPEditorDocument), editor);
+    m_owner->initializeEditor(widget);
+    editor->configureCodeAssistant();
+    return editor;
 }
 
 ///////////////////////////////// CppEditorPlugin //////////////////////////////////
-- 
GitLab