CppEditor: Properly group the menu actions

Introduce four groups of actions (symbol, selection, file and global) and
arrange them accordingly in the UI, with separators between them.

Change-Id: If2468c8e88036c83c8ab7f040c5998f7ec8ffed6
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Christian Kandeler
2023-09-21 15:33:58 +02:00
parent b0300ee48d
commit 8f27d2f79f
5 changed files with 197 additions and 147 deletions

View File

@@ -138,6 +138,20 @@ void ClangToolsPlugin::onCurrentEditorChanged()
void ClangToolsPlugin::registerAnalyzeActions() void ClangToolsPlugin::registerAnalyzeActions()
{ {
const char * const menuGroupId = "ClangToolsCppGroup";
ActionContainer * const mtoolscpp
= ActionManager::actionContainer(CppEditor::Constants::M_TOOLS_CPP);
if (mtoolscpp) {
mtoolscpp->insertGroup(CppEditor::Constants::G_GLOBAL, menuGroupId);
mtoolscpp->addSeparator(menuGroupId);
}
Core::ActionContainer * const mcontext = Core::ActionManager::actionContainer(
CppEditor::Constants::M_CONTEXT);
if (mcontext) {
mcontext->insertGroup(CppEditor::Constants::G_GLOBAL, menuGroupId);
mcontext->addSeparator(menuGroupId);
}
for (const auto &toolInfo : {std::make_tuple(ClangTidyTool::instance(), for (const auto &toolInfo : {std::make_tuple(ClangTidyTool::instance(),
Constants::RUN_CLANGTIDY_ON_PROJECT, Constants::RUN_CLANGTIDY_ON_PROJECT,
Constants::RUN_CLANGTIDY_ON_CURRENT_FILE), Constants::RUN_CLANGTIDY_ON_CURRENT_FILE),
@@ -148,14 +162,10 @@ void ClangToolsPlugin::registerAnalyzeActions()
ActionManager::registerAction(tool->startAction(), std::get<1>(toolInfo)); ActionManager::registerAction(tool->startAction(), std::get<1>(toolInfo));
Command *cmd = ActionManager::registerAction(tool->startOnCurrentFileAction(), Command *cmd = ActionManager::registerAction(tool->startOnCurrentFileAction(),
std::get<2>(toolInfo)); std::get<2>(toolInfo));
ActionContainer *mtoolscpp = ActionManager::actionContainer(CppEditor::Constants::M_TOOLS_CPP);
if (mtoolscpp) if (mtoolscpp)
mtoolscpp->addAction(cmd); mtoolscpp->addAction(cmd, menuGroupId);
Core::ActionContainer *mcontext = Core::ActionManager::actionContainer(
CppEditor::Constants::M_CONTEXT);
if (mcontext) if (mcontext)
mcontext->addAction(cmd, CppEditor::Constants::G_CONTEXT_FIRST); mcontext->addAction(cmd, menuGroupId);
} }
// add button to tool bar of C++ source files // add button to tool bar of C++ source files

View File

@@ -9,7 +9,10 @@ namespace CppEditor {
namespace Constants { namespace Constants {
const char M_CONTEXT[] = "CppEditor.ContextMenu"; const char M_CONTEXT[] = "CppEditor.ContextMenu";
const char G_CONTEXT_FIRST[] = "CppEditor.GFirst"; const char G_SYMBOL[] = "CppEditor.GSymbol";
const char G_SELECTION[] = "CppEditor.GSelection";
const char G_FILE[] = "CppEditor.GFile";
const char G_GLOBAL[] = "CppEditor.GGlobal";
const char CPPEDITOR_ID[] = "CppEditor.C++Editor"; const char CPPEDITOR_ID[] = "CppEditor.C++Editor";
const char SWITCH_DECLARATION_DEFINITION[] = "CppEditor.SwitchDeclarationDefinition"; const char SWITCH_DECLARATION_DEFINITION[] = "CppEditor.SwitchDeclarationDefinition";
const char OPEN_DECLARATION_DEFINITION_IN_NEXT_SPLIT[] = "CppEditor.OpenDeclarationDefinitionInNextSplit"; const char OPEN_DECLARATION_DEFINITION_IN_NEXT_SPLIT[] = "CppEditor.OpenDeclarationDefinitionInNextSplit";

View File

@@ -275,82 +275,52 @@ void CppEditorPlugin::extensionsInitialized()
void CppEditorPlugin::setupMenus() void CppEditorPlugin::setupMenus()
{ {
ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); ActionContainer * const cppToolsMenu = ActionManager::createMenu(Constants::M_TOOLS_CPP);
ActionContainer *mcpptools = ActionManager::createMenu(Constants::M_TOOLS_CPP); cppToolsMenu->menu()->setTitle(Tr::tr("&C++"));
QMenu *menu = mcpptools->menu(); cppToolsMenu->menu()->setEnabled(true);
menu->setTitle(Tr::tr("&C++")); ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(cppToolsMenu);
menu->setEnabled(true); ActionContainer * const contextMenu = ActionManager::createMenu(Constants::M_CONTEXT);
mtools->addMenu(mcpptools);
Context context(Constants::CPPEDITOR_ID); for (ActionContainer * const menu : {cppToolsMenu, contextMenu}) {
ActionContainer *contextMenu = ActionManager::createMenu(Constants::M_CONTEXT); menu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_SYMBOL);
contextMenu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_CONTEXT_FIRST); menu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_SELECTION);
ActionContainer *touchBar = ActionManager::actionContainer(Core::Constants::TOUCH_BAR); menu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_FILE);
menu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_GLOBAL);
menu->addSeparator(Constants::G_SELECTION);
menu->addSeparator(Constants::G_FILE);
menu->addSeparator(Constants::G_GLOBAL);
}
QAction *switchAction = new QAction(Tr::tr("Switch Header/Source"), this); addPerSymbolActions();
Command *cmd = ActionManager::registerAction(switchAction, Constants::SWITCH_HEADER_SOURCE, addActionsForSelections();
context, true); addPerFileActions();
cmd->setTouchBarText(Tr::tr("Header/Source", "text on macOS touch bar")); addGlobalActions();
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F4));
mcpptools->addAction(cmd);
connect(switchAction, &QAction::triggered,
this, [] { CppModelManager::switchHeaderSource(false); });
QAction *openInNextSplitAction ActionContainer * const toolsDebug
= new QAction(Tr::tr("Open Corresponding Header/Source in Next Split"), this); = ActionManager::actionContainer(Core::Constants::M_TOOLS_DEBUG);
cmd = ActionManager::registerAction( QAction * const inspectCppCodeModel = new QAction(Tr::tr("Inspect C++ Code Model..."), this);
openInNextSplitAction, Constants::OPEN_HEADER_SOURCE_IN_NEXT_SPLIT, context, true); Command * const cmd = ActionManager::registerAction(inspectCppCodeModel,
cmd->setDefaultKeySequence(QKeySequence(HostOsInfo::isMacHost() Constants::INSPECT_CPP_CODEMODEL);
? Tr::tr("Meta+E, F4") cmd->setDefaultKeySequence({useMacShortcuts ? Tr::tr("Meta+Shift+F12")
: Tr::tr("Ctrl+E, F4"))); : Tr::tr("Ctrl+Shift+F12")});
mcpptools->addAction(cmd); connect(inspectCppCodeModel, &QAction::triggered,
connect(openInNextSplitAction, &QAction::triggered, d, &CppEditorPluginPrivate::inspectCppCodeModel);
this, [] { CppModelManager::switchHeaderSource(true); }); toolsDebug->addAction(cmd);
}
cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR); void CppEditorPlugin::addPerSymbolActions()
{
ActionContainer * const cppToolsMenu = ActionManager::actionContainer(Constants::M_TOOLS_CPP);
ActionContainer * const contextMenu = ActionManager::actionContainer(Constants::M_CONTEXT);
ActionContainer * const touchBar = ActionManager::actionContainer(Core::Constants::TOUCH_BAR);
const Context context(Constants::CPPEDITOR_ID);
Command *cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR);
cmd->setTouchBarText(Tr::tr("Follow", "text on macOS touch bar")); cmd->setTouchBarText(Tr::tr("Follow", "text on macOS touch bar"));
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_SYMBOL);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION); touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
QAction *openPreprocessorDialog = new QAction(Tr::tr("Additional Preprocessor Directives..."),
this);
cmd = ActionManager::registerAction(openPreprocessorDialog,
Constants::OPEN_PREPROCESSOR_DIALOG, context);
cmd->setDefaultKeySequence(QKeySequence());
connect(openPreprocessorDialog, &QAction::triggered,
this, &CppEditorPlugin::showPreProcessorDialog);
mcpptools->addAction(cmd);
QAction *switchDeclarationDefinition
= new QAction(Tr::tr("Switch Between Function Declaration/Definition"), this);
cmd = ActionManager::registerAction(switchDeclarationDefinition,
Constants::SWITCH_DECLARATION_DEFINITION, context, true);
cmd->setDefaultKeySequence(QKeySequence(Tr::tr("Shift+F2")));
cmd->setTouchBarText(Tr::tr("Decl/Def", "text on macOS touch bar"));
connect(switchDeclarationDefinition, &QAction::triggered,
this, &CppEditorPlugin::switchDeclarationDefinition);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
mcpptools->addAction(cmd);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT);
mcpptools->addAction(cmd);
QAction *openDeclarationDefinitionInNextSplit =
new QAction(Tr::tr("Open Function Declaration/Definition in Next Split"), this);
cmd = ActionManager::registerAction(openDeclarationDefinitionInNextSplit,
Constants::OPEN_DECLARATION_DEFINITION_IN_NEXT_SPLIT,
context, true);
cmd->setDefaultKeySequence(QKeySequence(HostOsInfo::isMacHost()
? Tr::tr("Meta+E, Shift+F2")
: Tr::tr("Ctrl+E, Shift+F2")));
connect(openDeclarationDefinitionInNextSplit, &QAction::triggered,
this, &CppEditorPlugin::openDeclarationDefinitionInNextSplit);
mcpptools->addAction(cmd);
QAction * const followSymbolToType = new QAction(Tr::tr("Follow Symbol Under Cursor to Type"), QAction * const followSymbolToType = new QAction(Tr::tr("Follow Symbol Under Cursor to Type"),
this); this);
cmd = ActionManager::registerAction(followSymbolToType, Constants::FOLLOW_SYMBOL_TO_TYPE, cmd = ActionManager::registerAction(followSymbolToType, Constants::FOLLOW_SYMBOL_TO_TYPE,
@@ -360,8 +330,9 @@ void CppEditorPlugin::setupMenus()
if (CppEditorWidget *editorWidget = currentCppEditorWidget()) if (CppEditorWidget *editorWidget = currentCppEditorWidget())
editorWidget->followSymbolToType(false); editorWidget->followSymbolToType(false);
}); });
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_SYMBOL);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
QAction * const followSymbolToTypeInNextSplit = QAction * const followSymbolToTypeInNextSplit =
new QAction(Tr::tr("Follow Symbol to Type in Next Split"), this); new QAction(Tr::tr("Follow Symbol to Type in Next Split"), this);
cmd = ActionManager::registerAction(followSymbolToTypeInNextSplit, cmd = ActionManager::registerAction(followSymbolToTypeInNextSplit,
@@ -374,11 +345,38 @@ void CppEditorPlugin::setupMenus()
if (CppEditorWidget *editorWidget = currentCppEditorWidget()) if (CppEditorWidget *editorWidget = currentCppEditorWidget())
editorWidget->followSymbolToType(true); editorWidget->followSymbolToType(true);
}); });
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
QAction * const switchDeclarationDefinition
= new QAction(Tr::tr("Switch Between Function Declaration/Definition"), this);
cmd = ActionManager::registerAction(switchDeclarationDefinition,
Constants::SWITCH_DECLARATION_DEFINITION, context, true);
cmd->setDefaultKeySequence(QKeySequence(Tr::tr("Shift+F2")));
cmd->setTouchBarText(Tr::tr("Decl/Def", "text on macOS touch bar"));
connect(switchDeclarationDefinition, &QAction::triggered,
this, &CppEditorPlugin::switchDeclarationDefinition);
contextMenu->addAction(cmd, Constants::G_SYMBOL);
cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT);
cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
QAction * const openDeclarationDefinitionInNextSplit =
new QAction(Tr::tr("Open Function Declaration/Definition in Next Split"), this);
cmd = ActionManager::registerAction(openDeclarationDefinitionInNextSplit,
Constants::OPEN_DECLARATION_DEFINITION_IN_NEXT_SPLIT,
context, true);
cmd->setDefaultKeySequence(QKeySequence(HostOsInfo::isMacHost()
? Tr::tr("Meta+E, Shift+F2")
: Tr::tr("Ctrl+E, Shift+F2")));
connect(openDeclarationDefinitionInNextSplit, &QAction::triggered,
this, &CppEditorPlugin::openDeclarationDefinitionInNextSplit);
cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
cmd = ActionManager::command(TextEditor::Constants::FIND_USAGES); cmd = ActionManager::command(TextEditor::Constants::FIND_USAGES);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_SYMBOL);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
d->m_findRefsCategorizedAction = new QAction(Tr::tr("Find References With Access Type"), this); d->m_findRefsCategorizedAction = new QAction(Tr::tr("Find References With Access Type"), this);
cmd = ActionManager::registerAction(d->m_findRefsCategorizedAction, cmd = ActionManager::registerAction(d->m_findRefsCategorizedAction,
@@ -390,18 +388,84 @@ void CppEditorPlugin::setupMenus()
codeModelSettings()->setCategorizeFindReferences(false); codeModelSettings()->setCategorizeFindReferences(false);
} }
}); });
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_SYMBOL);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
cmd = ActionManager::command(TextEditor::Constants::RENAME_SYMBOL); cmd = ActionManager::command(TextEditor::Constants::RENAME_SYMBOL);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_SYMBOL);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
d->m_openTypeHierarchyAction = new QAction(Tr::tr("Open Type Hierarchy"), this);
cmd = ActionManager::registerAction(d->m_openTypeHierarchyAction,
Constants::OPEN_TYPE_HIERARCHY, context);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts
? Tr::tr("Meta+Shift+T") : Tr::tr("Ctrl+Shift+T")));
connect(d->m_openTypeHierarchyAction, &QAction::triggered,
this, &CppEditorPlugin::openTypeHierarchy);
contextMenu->addAction(cmd, Constants::G_SYMBOL);
cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
cmd = ActionManager::command(TextEditor::Constants::OPEN_CALL_HIERARCHY);
contextMenu->addAction(cmd, Constants::G_SYMBOL);
cppToolsMenu->addAction(cmd, Constants::G_SYMBOL);
// Refactoring sub-menu
Command *sep = contextMenu->addSeparator(Constants::G_SYMBOL);
sep->action()->setObjectName(QLatin1String(Constants::M_REFACTORING_MENU_INSERTION_POINT));
}
void CppEditorPlugin::addActionsForSelections()
{
ActionContainer * const contextMenu = ActionManager::actionContainer(Constants::M_CONTEXT);
contextMenu->addAction(ActionManager::command(TextEditor::Constants::AUTO_INDENT_SELECTION),
Constants::G_SELECTION);
contextMenu->addAction(ActionManager::command(TextEditor::Constants::UN_COMMENT_SELECTION),
Constants::G_SELECTION);
}
void CppEditorPlugin::addPerFileActions()
{
ActionContainer * const cppToolsMenu = ActionManager::actionContainer(Constants::M_TOOLS_CPP);
ActionContainer * const contextMenu = ActionManager::actionContainer(Constants::M_CONTEXT);
ActionContainer * const touchBar = ActionManager::actionContainer(Core::Constants::TOUCH_BAR);
const Context context(Constants::CPPEDITOR_ID);
QAction * const switchAction = new QAction(Tr::tr("Switch Header/Source"), this);
Command *cmd = ActionManager::registerAction(switchAction, Constants::SWITCH_HEADER_SOURCE,
context, true);
cmd->setTouchBarText(Tr::tr("Header/Source", "text on macOS touch bar"));
contextMenu->addAction(cmd, Constants::G_FILE);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F4));
cppToolsMenu->addAction(cmd, Constants::G_FILE);
connect(switchAction, &QAction::triggered,
this, [] { CppModelManager::switchHeaderSource(false); });
QAction * const switchInNextSplitAction
= new QAction(Tr::tr("Open Corresponding Header/Source in Next Split"), this);
cmd = ActionManager::registerAction(
switchInNextSplitAction, Constants::OPEN_HEADER_SOURCE_IN_NEXT_SPLIT, context, true);
cmd->setDefaultKeySequence(QKeySequence(HostOsInfo::isMacHost()
? Tr::tr("Meta+E, F4")
: Tr::tr("Ctrl+E, F4")));
cppToolsMenu->addAction(cmd, Constants::G_FILE);
connect(switchInNextSplitAction, &QAction::triggered,
this, [] { CppModelManager::switchHeaderSource(true); });
QAction * const openPreprocessorDialog
= new QAction(Tr::tr("Additional Preprocessor Directives..."), this);
cmd = ActionManager::registerAction(openPreprocessorDialog,
Constants::OPEN_PREPROCESSOR_DIALOG, context);
cmd->setDefaultKeySequence(QKeySequence());
connect(openPreprocessorDialog, &QAction::triggered,
this, &CppEditorPlugin::showPreProcessorDialog);
cppToolsMenu->addAction(cmd, Constants::G_FILE);
QAction * const showPreprocessedAction = new QAction(Tr::tr("Show Preprocessed Source"), this); QAction * const showPreprocessedAction = new QAction(Tr::tr("Show Preprocessed Source"), this);
cmd = ActionManager::registerAction(showPreprocessedAction, cmd = ActionManager::registerAction(showPreprocessedAction,
Constants::SHOW_PREPROCESSED_FILE, context); Constants::SHOW_PREPROCESSED_FILE, context);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_FILE);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_FILE);
connect(showPreprocessedAction, &QAction::triggered, connect(showPreprocessedAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(false); }); this, [] { CppModelManager::showPreprocessedFile(false); });
@@ -409,32 +473,48 @@ void CppEditorPlugin::setupMenus()
(Tr::tr("Show Preprocessed Source in Next Split"), this); (Tr::tr("Show Preprocessed Source in Next Split"), this);
cmd = ActionManager::registerAction(showPreprocessedInSplitAction, cmd = ActionManager::registerAction(showPreprocessedInSplitAction,
Constants::SHOW_PREPROCESSED_FILE_SPLIT, context); Constants::SHOW_PREPROCESSED_FILE_SPLIT, context);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_FILE);
connect(showPreprocessedInSplitAction, &QAction::triggered, connect(showPreprocessedInSplitAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(true); }); this, [] { CppModelManager::showPreprocessedFile(true); });
QAction * const foldCommentsAction = new QAction(Tr::tr("Fold All Comment Blocks"), this); QAction * const foldCommentsAction = new QAction(Tr::tr("Fold All Comment Blocks"), this);
cmd = ActionManager::registerAction(foldCommentsAction, cmd = ActionManager::registerAction(foldCommentsAction,
"CppTools.FoldCommentBlocks", context); "CppTools.FoldCommentBlocks", context);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_FILE);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_FILE);
connect(foldCommentsAction, &QAction::triggered, this, [] { CppModelManager::foldComments(); }); connect(foldCommentsAction, &QAction::triggered, this, [] { CppModelManager::foldComments(); });
QAction * const unfoldCommentsAction = new QAction(Tr::tr("Unfold All Comment Blocks"), this); QAction * const unfoldCommentsAction = new QAction(Tr::tr("Unfold All Comment Blocks"), this);
cmd = ActionManager::registerAction(unfoldCommentsAction, cmd = ActionManager::registerAction(unfoldCommentsAction,
"CppTools.UnfoldCommentBlocks", context); "CppTools.UnfoldCommentBlocks", context);
mcpptools->addAction(cmd); cppToolsMenu->addAction(cmd, Constants::G_FILE);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); contextMenu->addAction(cmd, Constants::G_FILE);
connect(unfoldCommentsAction, &QAction::triggered, connect(unfoldCommentsAction, &QAction::triggered,
this, [] { CppModelManager::unfoldComments(); }); this, [] { CppModelManager::unfoldComments(); });
QAction *const findUnusedFunctionsAction = new QAction(Tr::tr("Find Unused Functions"), this); d->m_openIncludeHierarchyAction = new QAction(Tr::tr("Open Include Hierarchy"), this);
cmd = ActionManager::registerAction(findUnusedFunctionsAction, cmd = ActionManager::registerAction(d->m_openIncludeHierarchyAction,
"CppTools.FindUnusedFunctions"); Constants::OPEN_INCLUDE_HIERARCHY, context);
mcpptools->addAction(cmd); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts
? Tr::tr("Meta+Shift+I") : Tr::tr("Ctrl+Shift+I")));
connect(d->m_openIncludeHierarchyAction, &QAction::triggered,
this, &CppEditorPlugin::openIncludeHierarchy);
contextMenu->addAction(cmd, Constants::G_FILE);
cppToolsMenu->addAction(cmd, Constants::G_FILE);
}
void CppEditorPlugin::addGlobalActions()
{
ActionContainer * const cppToolsMenu = ActionManager::actionContainer(Constants::M_TOOLS_CPP);
QAction * const findUnusedFunctionsAction = new QAction(Tr::tr("Find Unused Functions"), this);
Command *cmd = ActionManager::registerAction(findUnusedFunctionsAction,
"CppTools.FindUnusedFunctions");
cppToolsMenu->addAction(cmd, Constants::G_GLOBAL);
connect(findUnusedFunctionsAction, &QAction::triggered, this, [] { connect(findUnusedFunctionsAction, &QAction::triggered, this, [] {
CppModelManager::findUnusedFunctions({}); CppModelManager::findUnusedFunctions({});
}); });
QAction *const findUnusedFunctionsInSubProjectAction
QAction * const findUnusedFunctionsInSubProjectAction
= new QAction(Tr::tr("Find Unused C/C++ Functions"), this); = new QAction(Tr::tr("Find Unused C/C++ Functions"), this);
cmd = ActionManager::registerAction(findUnusedFunctionsInSubProjectAction, cmd = ActionManager::registerAction(findUnusedFunctionsInSubProjectAction,
"CppTools.FindUnusedFunctionsInSubProject"); "CppTools.FindUnusedFunctionsInSubProject");
@@ -449,61 +529,13 @@ void CppEditorPlugin::setupMenus()
CppModelManager::findUnusedFunctions(node->directory()); CppModelManager::findUnusedFunctions(node->directory());
}); });
d->m_openTypeHierarchyAction = new QAction(Tr::tr("Open Type Hierarchy"), this);
cmd = ActionManager::registerAction(d->m_openTypeHierarchyAction,
Constants::OPEN_TYPE_HIERARCHY, context);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts
? Tr::tr("Meta+Shift+T") : Tr::tr("Ctrl+Shift+T")));
connect(d->m_openTypeHierarchyAction, &QAction::triggered,
this, &CppEditorPlugin::openTypeHierarchy);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
mcpptools->addAction(cmd);
d->m_openIncludeHierarchyAction = new QAction(Tr::tr("Open Include Hierarchy"), this);
cmd = ActionManager::registerAction(d->m_openIncludeHierarchyAction,
Constants::OPEN_INCLUDE_HIERARCHY, context);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts
? Tr::tr("Meta+Shift+I") : Tr::tr("Ctrl+Shift+I")));
connect(d->m_openIncludeHierarchyAction, &QAction::triggered,
this, &CppEditorPlugin::openIncludeHierarchy);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
mcpptools->addAction(cmd);
cmd = ActionManager::command(TextEditor::Constants::OPEN_CALL_HIERARCHY);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
mcpptools->addAction(cmd);
// Refactoring sub-menu
Command *sep = contextMenu->addSeparator();
sep->action()->setObjectName(QLatin1String(Constants::M_REFACTORING_MENU_INSERTION_POINT));
contextMenu->addSeparator();
// Update context in global context
mcpptools->addSeparator(Core::Constants::G_DEFAULT_THREE);
d->m_reparseExternallyChangedFiles = new QAction(Tr::tr("Reparse Externally Changed Files"), d->m_reparseExternallyChangedFiles = new QAction(Tr::tr("Reparse Externally Changed Files"),
this); this);
cmd = ActionManager::registerAction(d->m_reparseExternallyChangedFiles, cmd = ActionManager::registerAction(d->m_reparseExternallyChangedFiles,
Constants::UPDATE_CODEMODEL); Constants::UPDATE_CODEMODEL);
connect(d->m_reparseExternallyChangedFiles, &QAction::triggered, connect(d->m_reparseExternallyChangedFiles, &QAction::triggered,
CppModelManager::instance(), &CppModelManager::updateModifiedSourceFiles); CppModelManager::instance(), &CppModelManager::updateModifiedSourceFiles);
mcpptools->addAction(cmd, Core::Constants::G_DEFAULT_THREE); cppToolsMenu->addAction(cmd, Constants::G_GLOBAL);
ActionContainer *toolsDebug = ActionManager::actionContainer(Core::Constants::M_TOOLS_DEBUG);
QAction *inspectCppCodeModel = new QAction(Tr::tr("Inspect C++ Code Model..."), this);
cmd = ActionManager::registerAction(inspectCppCodeModel, Constants::INSPECT_CPP_CODEMODEL);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts
? Tr::tr("Meta+Shift+F12") : Tr::tr("Ctrl+Shift+F12")));
connect(inspectCppCodeModel, &QAction::triggered,
d, &CppEditorPluginPrivate::inspectCppCodeModel);
toolsDebug->addAction(cmd);
contextMenu->addSeparator(context);
cmd = ActionManager::command(TextEditor::Constants::AUTO_INDENT_SELECTION);
contextMenu->addAction(cmd);
cmd = ActionManager::command(TextEditor::Constants::UN_COMMENT_SELECTION);
contextMenu->addAction(cmd);
} }
void CppEditorPlugin::setupProjectPanels() void CppEditorPlugin::setupProjectPanels()

View File

@@ -57,6 +57,10 @@ private:
void extensionsInitialized() override; void extensionsInitialized() override;
void setupMenus(); void setupMenus();
void addPerSymbolActions();
void addActionsForSelections();
void addPerFileActions();
void addGlobalActions();
void setupProjectPanels(); void setupProjectPanels();
void registerVariables(); void registerVariables();
void registerTests(); void registerTests();

View File

@@ -1132,10 +1132,11 @@ static void appendCustomContextMenuActionsAndMenus(QMenu *menu, QMenu *refactorM
bool isRefactoringMenuAdded = false; bool isRefactoringMenuAdded = false;
const QMenu *contextMenu = ActionManager::actionContainer(Constants::M_CONTEXT)->menu(); const QMenu *contextMenu = ActionManager::actionContainer(Constants::M_CONTEXT)->menu();
for (QAction *action : contextMenu->actions()) { for (QAction *action : contextMenu->actions()) {
menu->addAction(action);
if (action->objectName() == QLatin1String(Constants::M_REFACTORING_MENU_INSERTION_POINT)) { if (action->objectName() == QLatin1String(Constants::M_REFACTORING_MENU_INSERTION_POINT)) {
isRefactoringMenuAdded = true; isRefactoringMenuAdded = true;
menu->addMenu(refactorMenu); menu->addMenu(refactorMenu);
} else {
menu->addAction(action);
} }
} }