diff options
author | Orgad Shaneh <orgads@gmail.com> | 2012-08-09 23:19:09 +0300 |
---|---|---|
committer | Leandro Melo <leandro.melo@nokia.com> | 2012-08-28 15:52:58 +0200 |
commit | 8ed9720cd1afa60f3086f9fa3457a15ff963d246 (patch) | |
tree | c9dfa6b483fb7f27e39bc739ac0bd4e709db5d08 /src/plugins/cppeditor/cpptypehierarchy.cpp | |
parent | f555c936a440133aa5d537b396af47e4917bd4aa (diff) |
TypeHierarchy: Invert bases order
Current display doesn't make sense (to me :))
Active class is the middle one, derived classes should be top-down, but
base classes should be bottom-up. That's easier to understand.
Change-Id: I06693da37c834f5a99fd62ae29a91d958bafe136
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/cppeditor/cpptypehierarchy.cpp')
-rw-r--r-- | src/plugins/cppeditor/cpptypehierarchy.cpp | 42 |
1 files changed, 10 insertions, 32 deletions
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index 2c5c79d5d2..88ca5f8928 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -196,46 +196,24 @@ void CppTypeHierarchyWidget::perform() m_inspectedClass->setup(cppClass); QStandardItem *bases = new QStandardItem(tr("Bases")); m_model->invisibleRootItem()->appendRow(bases); - QVector<CppClass> v; - v.push_back(*cppClass); - buildBaseHierarchy(&v); - m_treeView->expand(m_model->indexFromItem(bases)); + buildHierarchy(*cppClass, bases, true, &CppClass::bases); QStandardItem *derived = new QStandardItem(tr("Derived")); m_model->invisibleRootItem()->appendRow(derived); - foreach (const CppClass &derivedClass, sortClasses(cppClass->derived())) - buildDerivedHierarchy(derivedClass, derived); + buildHierarchy(*cppClass, derived, true, &CppClass::derived); + m_treeView->expandAll(); } } } -void CppTypeHierarchyWidget::buildBaseHierarchy(QVector<CppClass> *s) +void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardItem *parent, bool isRoot, HierarchyFunc func) { - const CppClass ¤t = s->back(); - const QList<CppClass> &bases = sortClasses(current.bases()); - if (!bases.isEmpty()) { - foreach (const CppClass &base, bases) { - s->push_back(base); - buildBaseHierarchy(s); - s->pop_back(); - } - } else { - QStandardItem *parent = m_model->item(0, 0); - 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)); - parent = item; - } + if (!isRoot) { + QStandardItem *item = itemForClass(cppClass); + parent->appendRow(item); + parent = item; } -} - -void CppTypeHierarchyWidget::buildDerivedHierarchy(const CppClass &cppClass, QStandardItem *parent) -{ - QStandardItem *item = itemForClass(cppClass); - parent->appendRow(item); - foreach (const CppClass &derived, sortClasses(cppClass.derived())) - buildDerivedHierarchy(derived, item); - m_treeView->expand(m_model->indexFromItem(parent)); + foreach (const CppClass &klass, sortClasses((cppClass.*func)())) + buildHierarchy(klass, parent, false, func); } void CppTypeHierarchyWidget::onItemClicked(const QModelIndex &index) |