aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2024-01-22 11:07:15 +0100
committerhjk <hjk@qt.io>2024-01-24 16:48:08 +0000
commitee4d2587761d87992d742373dcb15ec4a09c9eea (patch)
treec27829439620b06cedd5d4c11354c7ed8d8402a4
parent8b86fe239bd67100984bc63d40e2ea38a08045ea (diff)
CppEditor: Reduce visible CppTypeHierarchy interface
... and remove related helpers from the plugin class itself. Change-Id: Ibc6af7518a2c90da93e619dde05edbd1eb7948f0 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.cpp20
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.h2
-rw-r--r--src/plugins/cppeditor/cpptypehierarchy.cpp72
-rw-r--r--src/plugins/cppeditor/cpptypehierarchy.h11
-rw-r--r--src/plugins/cppeditor/fileandtokenactions_test.cpp3
5 files changed, 63 insertions, 45 deletions
diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp
index 73a64d3b08..398b810f90 100644
--- a/src/plugins/cppeditor/cppeditorplugin.cpp
+++ b/src/plugins/cppeditor/cppeditorplugin.cpp
@@ -166,7 +166,6 @@ public:
QAction *m_reparseExternallyChangedFiles = nullptr;
QAction *m_findRefsCategorizedAction = nullptr;
- QAction *m_openTypeHierarchyAction = nullptr;
QAction *m_openIncludeHierarchyAction = nullptr;
CppQuickFixSettingsPage m_quickFixSettingsPage;
@@ -174,7 +173,6 @@ public:
QPointer<CppCodeModelInspectorDialog> m_cppCodeModelInspectorDialog;
CppOutlineWidgetFactory m_cppOutlineWidgetFactory;
- CppTypeHierarchyFactory m_cppTypeHierarchyFactory;
CppIncludeHierarchyFactory m_cppIncludeHierarchyFactory;
CppEditorFactory m_cppEditorFactory;
@@ -353,13 +351,7 @@ void CppEditorPlugin::addPerSymbolActions()
addSymbolActionToMenus(TextEditor::Constants::RENAME_SYMBOL);
- ActionBuilder openTypeHierarchy(this, Constants::OPEN_TYPE_HIERARCHY);
- openTypeHierarchy.setText(Tr::tr("Open Type Hierarchy"));
- openTypeHierarchy.setContext(context);
- openTypeHierarchy.bindContextAction(&d->m_openTypeHierarchyAction);
- openTypeHierarchy.setDefaultKeySequence(Tr::tr("Meta+Shift+T"), Tr::tr("Ctrl+Shift+T"));
- openTypeHierarchy.addToContainers(menus, Constants::G_SYMBOL);
- openTypeHierarchy.addOnTriggered(this, &CppEditorPlugin::openTypeHierarchy);
+ setupCppTypeHierarchy();
addSymbolActionToMenus(TextEditor::Constants::OPEN_CALL_HIERARCHY);
@@ -551,7 +543,6 @@ void CppEditorPluginPrivate::onTaskStarted(Id type)
ActionManager::command(TextEditor::Constants::FIND_USAGES)->action()->setEnabled(false);
ActionManager::command(TextEditor::Constants::RENAME_SYMBOL)->action()->setEnabled(false);
m_reparseExternallyChangedFiles->setEnabled(false);
- m_openTypeHierarchyAction->setEnabled(false);
m_openIncludeHierarchyAction->setEnabled(false);
}
}
@@ -562,7 +553,6 @@ void CppEditorPluginPrivate::onAllTasksFinished(Id type)
ActionManager::command(TextEditor::Constants::FIND_USAGES)->action()->setEnabled(true);
ActionManager::command(TextEditor::Constants::RENAME_SYMBOL)->action()->setEnabled(true);
m_reparseExternallyChangedFiles->setEnabled(true);
- m_openTypeHierarchyAction->setEnabled(true);
m_openIncludeHierarchyAction->setEnabled(true);
}
}
@@ -578,14 +568,6 @@ void CppEditorPluginPrivate::inspectCppCodeModel()
}
}
-void CppEditorPlugin::openTypeHierarchy()
-{
- if (currentCppEditorWidget()) {
- emit typeHierarchyRequested();
- NavigationWidget::activateSubWidget(Constants::TYPE_HIERARCHY_ID, Side::Left);
- }
-}
-
void CppEditorPlugin::openIncludeHierarchy()
{
if (currentCppEditorWidget()) {
diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h
index d208a5cd1a..e2cce3b2f7 100644
--- a/src/plugins/cppeditor/cppeditorplugin.h
+++ b/src/plugins/cppeditor/cppeditorplugin.h
@@ -26,14 +26,12 @@ public:
static void clearHeaderSourceCache();
void openDeclarationDefinitionInNextSplit();
- void openTypeHierarchy();
void openIncludeHierarchy();
void showPreProcessorDialog();
void renameSymbolUnderCursor();
void switchDeclarationDefinition();
signals:
- void typeHierarchyRequested();
void includeHierarchyRequested();
private:
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index a46eafd98b..bb49e60aa4 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -6,11 +6,13 @@
#include "cppeditorconstants.h"
#include "cppeditortr.h"
#include "cppeditorwidget.h"
-#include "cppeditorplugin.h"
#include "cppelementevaluator.h"
-#include <coreplugin/find/itemviewfind.h>
+#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/find/itemviewfind.h>
+#include <coreplugin/inavigationwidgetfactory.h>
+#include <coreplugin/navigationwidget.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <texteditor/texteditor.h>
@@ -25,15 +27,14 @@
#include <QFuture>
#include <QFutureWatcher>
#include <QLabel>
-#include <QLatin1String>
#include <QMenu>
#include <QModelIndex>
#include <QSharedPointer>
#include <QStackedLayout>
-#include <QStackedWidget>
#include <QStandardItemModel>
#include <QVBoxLayout>
+using namespace Core;
using namespace Utils;
namespace CppEditor::Internal {
@@ -195,8 +196,6 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget()
showNoTypeHierarchyLabel();
setLayout(m_stackLayout);
- connect(CppEditorPlugin::instance(), &CppEditorPlugin::typeHierarchyRequested,
- this, &CppTypeHierarchyWidget::perform);
connect(&m_futureWatcher, &QFutureWatcher<void>::finished,
this, &CppTypeHierarchyWidget::displayHierarchy);
}
@@ -399,18 +398,63 @@ QMimeData *CppTypeHierarchyModel::mimeData(const QModelIndexList &indexes) const
// CppTypeHierarchyFactory
-CppTypeHierarchyFactory::CppTypeHierarchyFactory()
+class CppTypeHierarchyFactory final : public INavigationWidgetFactory
+{
+public:
+ CppTypeHierarchyFactory()
+ {
+ setDisplayName(Tr::tr("Type Hierarchy"));
+ setPriority(700);
+ setId(Constants::TYPE_HIERARCHY_ID);
+
+ ActionBuilder openTypeHierarchy(this, Constants::OPEN_TYPE_HIERARCHY);
+ openTypeHierarchy.setText(Tr::tr("Open Type Hierarchy"));
+ openTypeHierarchy.setContext(Context(Constants::CPPEDITOR_ID));
+ openTypeHierarchy.bindContextAction(&m_openTypeHierarchyAction);
+ openTypeHierarchy.setDefaultKeySequence(Tr::tr("Meta+Shift+T"), Tr::tr("Ctrl+Shift+T"));
+ openTypeHierarchy.addToContainers({Constants::M_TOOLS_CPP, Constants::M_CONTEXT},
+ Constants::G_SYMBOL);
+
+ connect(m_openTypeHierarchyAction, &QAction::triggered, this, [] {
+ NavigationWidget::activateSubWidget(Constants::TYPE_HIERARCHY_ID, Side::Left);
+ });
+
+ connect(ProgressManager::instance(), &ProgressManager::taskStarted, [this](Id type) {
+ if (type == Constants::TASK_INDEX)
+ m_openTypeHierarchyAction->setEnabled(false);
+ });
+ connect(ProgressManager::instance(), &ProgressManager::allTasksFinished, [this](Id type) {
+ if (type == Constants::TASK_INDEX)
+ m_openTypeHierarchyAction->setEnabled(true);
+ });
+ }
+
+ NavigationView createWidget() final
+ {
+ auto w = new CppTypeHierarchyWidget;
+ connect(m_openTypeHierarchyAction, &QAction::triggered, w, &CppTypeHierarchyWidget::perform);
+ w->perform();
+
+ return {w, {}};
+ }
+
+ QAction *m_openTypeHierarchyAction = nullptr;
+};
+
+static CppTypeHierarchyFactory &cppTypeHierarchyFactory()
+{
+ static CppTypeHierarchyFactory theCppTypeHierarchyFactory;
+ return theCppTypeHierarchyFactory;
+}
+
+void openCppTypeHierarchy()
{
- setDisplayName(Tr::tr("Type Hierarchy"));
- setPriority(700);
- setId(Constants::TYPE_HIERARCHY_ID);
+ cppTypeHierarchyFactory().m_openTypeHierarchyAction->trigger();
}
-Core::NavigationView CppTypeHierarchyFactory::createWidget()
+void setupCppTypeHierarchy()
{
- auto w = new CppTypeHierarchyWidget;
- w->perform();
- return {w, {}};
+ (void) cppTypeHierarchyFactory(); // Trigger instantiation
}
} // CppEditor::Internal
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 37eaec2a78..c6c99f214f 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -3,16 +3,9 @@
#pragma once
-#include <coreplugin/inavigationwidgetfactory.h>
-
namespace CppEditor::Internal {
-class CppTypeHierarchyFactory : public Core::INavigationWidgetFactory
-{
-public:
- CppTypeHierarchyFactory();
-
- Core::NavigationView createWidget() override;
-};
+void openCppTypeHierarchy();
+void setupCppTypeHierarchy();
} // CppEditor::Internal
diff --git a/src/plugins/cppeditor/fileandtokenactions_test.cpp b/src/plugins/cppeditor/fileandtokenactions_test.cpp
index ed6b80cecc..66f9e5d31e 100644
--- a/src/plugins/cppeditor/fileandtokenactions_test.cpp
+++ b/src/plugins/cppeditor/fileandtokenactions_test.cpp
@@ -12,6 +12,7 @@
#include "cppmodelmanager.h"
#include "cpptoolsreuse.h"
#include "cpptoolstestcase.h"
+#include "cpptypehierarchy.h"
#include "cppworkingcopy.h"
#include "projectinfo.h"
@@ -382,7 +383,7 @@ public:
void OpenTypeHierarchyTokenAction::run(CppEditorWidget *)
{
- CppEditorPlugin::instance()->openTypeHierarchy();
+ openCppTypeHierarchy();
QApplication::processEvents();
}