diff options
author | hjk <hjk@qt.io> | 2024-01-22 11:07:15 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2024-01-24 16:48:08 +0000 |
commit | ee4d2587761d87992d742373dcb15ec4a09c9eea (patch) | |
tree | c27829439620b06cedd5d4c11354c7ed8d8402a4 | |
parent | 8b86fe239bd67100984bc63d40e2ea38a08045ea (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.cpp | 20 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppeditorplugin.h | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cpptypehierarchy.cpp | 72 | ||||
-rw-r--r-- | src/plugins/cppeditor/cpptypehierarchy.h | 11 | ||||
-rw-r--r-- | src/plugins/cppeditor/fileandtokenactions_test.cpp | 3 |
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(); } |