diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index 4afc7b8c728863d25316073640f988ca377f2a56..fb991807161aee52e2971983b039a3c57a644c0a 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -89,6 +89,35 @@ QList<CppClass> sortClasses(const QList<CppClass> &cppClasses) } // Anonymous +namespace CppEditor { +namespace Internal { + +class CppClassLabel : public QLabel +{ +public: + CppClassLabel(CPPEditorWidget *editor, QWidget *parent) + : QLabel(parent), m_editor(editor) + {} + + void setup(CppClass *cppClass) + { + setText(cppClass->name()); + m_link = cppClass->link(); + } + +private: + void mousePressEvent(QMouseEvent *) + { + m_editor->openLink(m_link); + } + + CPPEditorWidget *m_editor; + CPPEditorWidget::Link m_link; +}; + +} // namespace Internal +} // namespace CppEditor + // CppTypeHierarchyWidget CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) : QWidget(0), @@ -104,6 +133,9 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) : if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) { m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget()); + m_inspectedClass = new CppClassLabel(m_cppEditor, this); + m_inspectedClass->setMargin(5); + layout->addWidget(m_inspectedClass); m_model = new QStandardItemModel(this); m_treeView = new NavigationTreeView(this); m_delegate = new AnnotatedItemDelegate(this); @@ -158,6 +190,7 @@ void CppTypeHierarchyWidget::perform() const QSharedPointer<CppElement> &cppElement = evaluator.cppElement(); CppElement *element = cppElement.data(); if (CppClass *cppClass = dynamic_cast<CppClass *>(element)) { + m_inspectedClass->setup(cppClass); QStandardItem *bases = new QStandardItem(tr("Bases")); m_model->invisibleRootItem()->appendRow(bases); QVector<CppClass> v; @@ -166,7 +199,8 @@ void CppTypeHierarchyWidget::perform() m_treeView->expand(m_model->indexFromItem(bases)); QStandardItem *derived = new QStandardItem(tr("Derived")); m_model->invisibleRootItem()->appendRow(derived); - buildDerivedHierarchy(*cppClass, derived); + foreach (const CppClass &derivedClass, sortClasses(cppClass->derived())) + buildDerivedHierarchy(derivedClass, derived); } } } @@ -183,7 +217,7 @@ void CppTypeHierarchyWidget::buildBaseHierarchy(QVector<CppClass> *s) } } else { QStandardItem *parent = m_model->item(0, 0); - for (int i = s->size() - 1; i >= 0; --i) { + for (int i = s->size() - 1; i > 0; --i) { QStandardItem *item = itemForClass(s->at(i)); parent->appendRow(item); m_treeView->expand(m_model->indexFromItem(parent)); diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h index 8e4a1a2ed39b7b21cfcc232ba6dd42b7cb25749d..0bb43f753c20676743e87577406b6655f8d97f8e 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.h +++ b/src/plugins/cppeditor/cpptypehierarchy.h @@ -43,6 +43,7 @@ QT_BEGIN_NAMESPACE class QStandardItemModel; class QStandardItem; class QModelIndex; +class QLabel; template <class> class QVector; QT_END_NAMESPACE @@ -60,6 +61,7 @@ namespace Internal { class CPPEditorWidget; class CppClass; +class CppClassLabel; class CppTypeHierarchyWidget : public QWidget { @@ -84,6 +86,7 @@ private: Utils::NavigationTreeView *m_treeView; QStandardItemModel *m_model; Utils::AnnotatedItemDelegate *m_delegate; + CppClassLabel *m_inspectedClass; }; // @todo: Pretty much the same design as the OutlineWidgetStack. Maybe we can generalize the