aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cpptypehierarchy.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgads@gmail.com>2012-08-09 23:19:09 +0300
committerLeandro Melo <leandro.melo@nokia.com>2012-08-28 15:52:58 +0200
commit8ed9720cd1afa60f3086f9fa3457a15ff963d246 (patch)
treec9dfa6b483fb7f27e39bc739ac0bd4e709db5d08 /src/plugins/cppeditor/cpptypehierarchy.cpp
parentf555c936a440133aa5d537b396af47e4917bd4aa (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.cpp42
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 &current = 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)