Make type hierarchy widget reusable accross editors.

This commit is contained in:
Leandro Melo
2010-08-16 11:37:47 +02:00
parent 2d683cd2c3
commit 878bb9f95d
2 changed files with 22 additions and 5 deletions

View File

@@ -168,6 +168,19 @@ CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
delete m_delegate; 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() void CppTypeHierarchyWidget::perform()
{ {
if (!m_cppEditor) if (!m_cppEditor)
@@ -228,11 +241,13 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor) void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor)
{ {
CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor); if (!m_typeHiearchyWidgetInstance->handleReplacement(editor)) {
removeWidget(m_typeHiearchyWidgetInstance); CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
m_typeHiearchyWidgetInstance->deleteLater(); removeWidget(m_typeHiearchyWidgetInstance);
m_typeHiearchyWidgetInstance = replacement; m_typeHiearchyWidgetInstance->deleteLater();
addWidget(m_typeHiearchyWidgetInstance); m_typeHiearchyWidgetInstance = replacement;
addWidget(m_typeHiearchyWidgetInstance);
}
} }
// CppTypeHierarchyFactory // CppTypeHierarchyFactory

View File

@@ -92,6 +92,8 @@ public:
CppTypeHierarchyWidget(Core::IEditor *editor); CppTypeHierarchyWidget(Core::IEditor *editor);
virtual ~CppTypeHierarchyWidget(); virtual ~CppTypeHierarchyWidget();
bool handleReplacement(Core::IEditor *editor);
public slots: public slots:
void perform(); void perform();