forked from qt-creator/qt-creator
Highlight old item after activating new class in type hierarchy
Highlight the old visible class after double click on a new class in type hierarchy editor. Don't do that when opening type hierarchy from cpp editor. Change-Id: Ie9a1131cba9b5a35ab826909b994555188aaceb7 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -199,6 +199,8 @@ void CppTypeHierarchyWidget::perform()
|
||||
if (m_future.isRunning())
|
||||
m_future.cancel();
|
||||
|
||||
m_showOldClass = false;
|
||||
|
||||
updateSynchronizer();
|
||||
|
||||
auto editor = qobject_cast<CppEditor *>(Core::EditorManager::currentEditor());
|
||||
@@ -230,6 +232,8 @@ void CppTypeHierarchyWidget::performFromExpression(const QString &expression, co
|
||||
if (m_future.isRunning())
|
||||
m_future.cancel();
|
||||
|
||||
m_showOldClass = true;
|
||||
|
||||
updateSynchronizer();
|
||||
|
||||
showProgress();
|
||||
@@ -270,25 +274,37 @@ void CppTypeHierarchyWidget::displayHierarchy()
|
||||
m_inspectedClass->setLink(cppClass->link);
|
||||
QStandardItem *bases = new QStandardItem(tr("Bases"));
|
||||
m_model->invisibleRootItem()->appendRow(bases);
|
||||
buildHierarchy(*cppClass, bases, true, &CppClass::bases);
|
||||
QStandardItem *selectedItem1 = buildHierarchy(*cppClass, bases, true, &CppClass::bases);
|
||||
QStandardItem *derived = new QStandardItem(tr("Derived"));
|
||||
m_model->invisibleRootItem()->appendRow(derived);
|
||||
buildHierarchy(*cppClass, derived, true, &CppClass::derived);
|
||||
QStandardItem *selectedItem2 = buildHierarchy(*cppClass, derived, true, &CppClass::derived);
|
||||
m_treeView->expandAll();
|
||||
m_oldClass = cppClass->qualifiedName;
|
||||
|
||||
QStandardItem *selectedItem = selectedItem1 ? selectedItem1 : selectedItem2;
|
||||
if (selectedItem)
|
||||
m_treeView->setCurrentIndex(m_model->indexFromItem(selectedItem));
|
||||
|
||||
showTypeHierarchy();
|
||||
}
|
||||
|
||||
void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardItem *parent,
|
||||
QStandardItem *CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardItem *parent,
|
||||
bool isRoot, const HierarchyMember member)
|
||||
{
|
||||
QStandardItem *selectedItem = nullptr;
|
||||
if (!isRoot) {
|
||||
QStandardItem *item = itemForClass(cppClass);
|
||||
parent->appendRow(item);
|
||||
parent = item;
|
||||
if (m_showOldClass && cppClass.qualifiedName == m_oldClass)
|
||||
selectedItem = item;
|
||||
}
|
||||
foreach (const CppClass &klass, sortClasses(cppClass.*member))
|
||||
buildHierarchy(klass, parent, false, member);
|
||||
foreach (const CppClass &klass, sortClasses(cppClass.*member)) {
|
||||
QStandardItem *item = buildHierarchy(klass, parent, false, member);
|
||||
if (!selectedItem)
|
||||
selectedItem = item;
|
||||
}
|
||||
return selectedItem;
|
||||
}
|
||||
|
||||
void CppTypeHierarchyWidget::showNoTypeHierarchyLabel()
|
||||
|
||||
@@ -85,7 +85,7 @@ private slots:
|
||||
private:
|
||||
typedef QList<CppTools::CppClass> CppTools::CppClass::*HierarchyMember;
|
||||
void performFromExpression(const QString &expression, const QString &fileName);
|
||||
void buildHierarchy(const CppTools::CppClass &cppClass, QStandardItem *parent,
|
||||
QStandardItem *buildHierarchy(const CppTools::CppClass &cppClass, QStandardItem *parent,
|
||||
bool isRoot, HierarchyMember member);
|
||||
void showNoTypeHierarchyLabel();
|
||||
void showTypeHierarchy();
|
||||
@@ -108,6 +108,8 @@ private:
|
||||
QFutureWatcher<void> m_futureWatcher;
|
||||
QFutureSynchronizer<void> m_synchronizer;
|
||||
Utils::ProgressIndicator *m_progressIndicator = nullptr;
|
||||
QString m_oldClass;
|
||||
bool m_showOldClass = false;
|
||||
};
|
||||
|
||||
class CppTypeHierarchyFactory : public Core::INavigationWidgetFactory
|
||||
|
||||
Reference in New Issue
Block a user