From 878bb9f95d84900cba455f7318cb6ed671913e28 Mon Sep 17 00:00:00 2001
From: Leandro Melo <leandro.melo@nokia.com>
Date: Mon, 16 Aug 2010 11:37:47 +0200
Subject: [PATCH] Make type hierarchy widget reusable accross editors.

---
 src/plugins/cppeditor/cpptypehierarchy.cpp | 25 +++++++++++++++++-----
 src/plugins/cppeditor/cpptypehierarchy.h   |  2 ++
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index a1326541522..404c91c2acb 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -168,6 +168,19 @@ CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
     delete m_delegate;
 }
 
+bool CppTypeHierarchyWidget::handleReplacement(Core::IEditor *editor)
+{
+    if (CPPEditorEditable *cppEditable = qobject_cast<CPPEditorEditable *>(editor)) {
+        if (m_cppEditor) {
+            m_cppEditor = static_cast<CPPEditor *>(cppEditable->widget());
+            return true;
+        }
+    } else if (!m_cppEditor) {
+        return true;
+    }
+    return false;
+}
+
 void CppTypeHierarchyWidget::perform()
 {
     if (!m_cppEditor)
@@ -228,11 +241,13 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
 
 void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor)
 {
-    CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
-    removeWidget(m_typeHiearchyWidgetInstance);
-    m_typeHiearchyWidgetInstance->deleteLater();
-    m_typeHiearchyWidgetInstance = replacement;
-    addWidget(m_typeHiearchyWidgetInstance);
+    if (!m_typeHiearchyWidgetInstance->handleReplacement(editor)) {
+        CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
+        removeWidget(m_typeHiearchyWidgetInstance);
+        m_typeHiearchyWidgetInstance->deleteLater();
+        m_typeHiearchyWidgetInstance = replacement;
+        addWidget(m_typeHiearchyWidgetInstance);
+    }
 }
 
 // CppTypeHierarchyFactory
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 8bc2c192a51..d3c07b9bee9 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -92,6 +92,8 @@ public:
     CppTypeHierarchyWidget(Core::IEditor *editor);
     virtual ~CppTypeHierarchyWidget();
 
+    bool handleReplacement(Core::IEditor *editor);
+
 public slots:
     void perform();
 
-- 
GitLab