aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cpptypehierarchy.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2012-09-28 13:43:03 +0200
committerDavid Schulz <david.schulz@digia.com>2012-10-01 15:40:54 +0200
commit599e4881c237e449ee0fa90ba3e1c783db7c56f6 (patch)
treefcf0a49f98550f5554da1aaffcb32341aa1e2a87 /src/plugins/cppeditor/cpptypehierarchy.cpp
parenta17d7d7528a3c291f131fb6d33d70ae6d6e51e42 (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.cpp48
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()
{}