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())
|
if (m_future.isRunning())
|
||||||
m_future.cancel();
|
m_future.cancel();
|
||||||
|
|
||||||
|
m_showOldClass = false;
|
||||||
|
|
||||||
updateSynchronizer();
|
updateSynchronizer();
|
||||||
|
|
||||||
auto editor = qobject_cast<CppEditor *>(Core::EditorManager::currentEditor());
|
auto editor = qobject_cast<CppEditor *>(Core::EditorManager::currentEditor());
|
||||||
@@ -230,6 +232,8 @@ void CppTypeHierarchyWidget::performFromExpression(const QString &expression, co
|
|||||||
if (m_future.isRunning())
|
if (m_future.isRunning())
|
||||||
m_future.cancel();
|
m_future.cancel();
|
||||||
|
|
||||||
|
m_showOldClass = true;
|
||||||
|
|
||||||
updateSynchronizer();
|
updateSynchronizer();
|
||||||
|
|
||||||
showProgress();
|
showProgress();
|
||||||
@@ -270,25 +274,37 @@ void CppTypeHierarchyWidget::displayHierarchy()
|
|||||||
m_inspectedClass->setLink(cppClass->link);
|
m_inspectedClass->setLink(cppClass->link);
|
||||||
QStandardItem *bases = new QStandardItem(tr("Bases"));
|
QStandardItem *bases = new QStandardItem(tr("Bases"));
|
||||||
m_model->invisibleRootItem()->appendRow(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"));
|
QStandardItem *derived = new QStandardItem(tr("Derived"));
|
||||||
m_model->invisibleRootItem()->appendRow(derived);
|
m_model->invisibleRootItem()->appendRow(derived);
|
||||||
buildHierarchy(*cppClass, derived, true, &CppClass::derived);
|
QStandardItem *selectedItem2 = buildHierarchy(*cppClass, derived, true, &CppClass::derived);
|
||||||
m_treeView->expandAll();
|
m_treeView->expandAll();
|
||||||
|
m_oldClass = cppClass->qualifiedName;
|
||||||
|
|
||||||
|
QStandardItem *selectedItem = selectedItem1 ? selectedItem1 : selectedItem2;
|
||||||
|
if (selectedItem)
|
||||||
|
m_treeView->setCurrentIndex(m_model->indexFromItem(selectedItem));
|
||||||
|
|
||||||
showTypeHierarchy();
|
showTypeHierarchy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardItem *parent,
|
QStandardItem *CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardItem *parent,
|
||||||
bool isRoot, const HierarchyMember member)
|
bool isRoot, const HierarchyMember member)
|
||||||
{
|
{
|
||||||
|
QStandardItem *selectedItem = nullptr;
|
||||||
if (!isRoot) {
|
if (!isRoot) {
|
||||||
QStandardItem *item = itemForClass(cppClass);
|
QStandardItem *item = itemForClass(cppClass);
|
||||||
parent->appendRow(item);
|
parent->appendRow(item);
|
||||||
parent = item;
|
parent = item;
|
||||||
|
if (m_showOldClass && cppClass.qualifiedName == m_oldClass)
|
||||||
|
selectedItem = item;
|
||||||
}
|
}
|
||||||
foreach (const CppClass &klass, sortClasses(cppClass.*member))
|
foreach (const CppClass &klass, sortClasses(cppClass.*member)) {
|
||||||
buildHierarchy(klass, parent, false, member);
|
QStandardItem *item = buildHierarchy(klass, parent, false, member);
|
||||||
|
if (!selectedItem)
|
||||||
|
selectedItem = item;
|
||||||
|
}
|
||||||
|
return selectedItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppTypeHierarchyWidget::showNoTypeHierarchyLabel()
|
void CppTypeHierarchyWidget::showNoTypeHierarchyLabel()
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
typedef QList<CppTools::CppClass> CppTools::CppClass::*HierarchyMember;
|
typedef QList<CppTools::CppClass> CppTools::CppClass::*HierarchyMember;
|
||||||
void performFromExpression(const QString &expression, const QString &fileName);
|
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);
|
bool isRoot, HierarchyMember member);
|
||||||
void showNoTypeHierarchyLabel();
|
void showNoTypeHierarchyLabel();
|
||||||
void showTypeHierarchy();
|
void showTypeHierarchy();
|
||||||
void showProgress();
|
void showProgress();
|
||||||
@@ -108,6 +108,8 @@ private:
|
|||||||
QFutureWatcher<void> m_futureWatcher;
|
QFutureWatcher<void> m_futureWatcher;
|
||||||
QFutureSynchronizer<void> m_synchronizer;
|
QFutureSynchronizer<void> m_synchronizer;
|
||||||
Utils::ProgressIndicator *m_progressIndicator = nullptr;
|
Utils::ProgressIndicator *m_progressIndicator = nullptr;
|
||||||
|
QString m_oldClass;
|
||||||
|
bool m_showOldClass = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CppTypeHierarchyFactory : public Core::INavigationWidgetFactory
|
class CppTypeHierarchyFactory : public Core::INavigationWidgetFactory
|
||||||
|
|||||||
Reference in New Issue
Block a user