diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2012-09-28 13:43:03 +0200 |
---|---|---|
committer | David Schulz <david.schulz@digia.com> | 2012-10-01 15:40:54 +0200 |
commit | 599e4881c237e449ee0fa90ba3e1c783db7c56f6 (patch) | |
tree | fcf0a49f98550f5554da1aaffcb32341aa1e2a87 /src/plugins/cppeditor/cpptypehierarchy.cpp | |
parent | a17d7d7528a3c291f131fb6d33d70ae6d6e51e42 (diff) |
TypeHierarchy: Make type hierarchy independent of editor
This makes it possible to close all editors and still have
the typehierarchy visible. It used to close for no apparent
reason.
Change-Id: I4d1500b5402905c6a04623ea60247c9d746acab8
Reviewed-by: David Schulz <david.schulz@digia.com>
Diffstat (limited to 'src/plugins/cppeditor/cpptypehierarchy.cpp')
-rw-r--r-- | src/plugins/cppeditor/cpptypehierarchy.cpp | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index 88ca5f8928..d764cce114 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -124,7 +124,6 @@ private: // CppTypeHierarchyWidget CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) : QWidget(0), - m_cppEditor(0), m_treeView(0), m_model(0), m_delegate(0) @@ -133,9 +132,7 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) : layout->setMargin(0); layout->setSpacing(0); - if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) { - m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget()); - + if (qobject_cast<CPPEditor *>(editor)) { m_inspectedClass = new CppClassLabel(this); m_inspectedClass->setMargin(5); layout->addWidget(m_inspectedClass); @@ -165,27 +162,18 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) : CppTypeHierarchyWidget::~CppTypeHierarchyWidget() {} -bool CppTypeHierarchyWidget::handleEditorChange(Core::IEditor *editor) -{ - if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) { - if (m_cppEditor) { - m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget()); - return true; - } - } else if (!m_cppEditor) { - return true; - } - return false; -} - void CppTypeHierarchyWidget::perform() { - if (!m_cppEditor) + CPPEditor *editor = qobject_cast<CPPEditor *>(Core::EditorManager::instance()->currentEditor()); + if (!editor) + return; + CPPEditorWidget *widget = qobject_cast<CPPEditorWidget *>(editor->widget()); + if (!widget) return; m_model->clear(); - CppElementEvaluator evaluator(m_cppEditor); + CppElementEvaluator evaluator(widget); evaluator.setLookupBaseClasses(true); evaluator.setLookupDerivedClasses(true); evaluator.execute(); @@ -218,7 +206,13 @@ void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardI void CppTypeHierarchyWidget::onItemClicked(const QModelIndex &index) { - m_cppEditor->openLink(index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>()); + const TextEditor::BaseTextEditorWidget::Link link + = index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>(); + if (!link.fileName.isEmpty()) + TextEditor::BaseTextEditorWidget::openEditorAt(link.fileName, + link.line, + link.column, + Constants::CPPEDITOR_ID); } // CppTypeHierarchyStackedWidget @@ -227,9 +221,6 @@ CppTypeHierarchyStackedWidget::CppTypeHierarchyStackedWidget(QWidget *parent) : m_typeHiearchyWidgetInstance(new CppTypeHierarchyWidget(Core::EditorManager::currentEditor())) { addWidget(m_typeHiearchyWidgetInstance); - - connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)), - this, SLOT(editorChanged(Core::IEditor*))); } CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget() @@ -237,17 +228,6 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget() delete m_typeHiearchyWidgetInstance; } -void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor) -{ - if (!m_typeHiearchyWidgetInstance->handleEditorChange(editor)) { - CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor); - removeWidget(m_typeHiearchyWidgetInstance); - m_typeHiearchyWidgetInstance->deleteLater(); - m_typeHiearchyWidgetInstance = replacement; - addWidget(m_typeHiearchyWidgetInstance); - } -} - // CppTypeHierarchyFactory CppTypeHierarchyFactory::CppTypeHierarchyFactory() {} |