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