diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 47708b89088..568675786e8 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -217,6 +217,7 @@ const char DELETEFILE[] = "ProjectExplorer.DeleteFile"; const char DIFFFILE[] = "ProjectExplorer.DiffFile"; const char SETSTARTUP[] = "ProjectExplorer.SetStartup"; const char PROJECTTREE_COLLAPSE_ALL[] = "ProjectExplorer.CollapseAll"; +const char PROJECTTREE_EXPAND_ALL[] = "ProjectExplorer.ExpandAll"; const char SELECTTARGET[] = "ProjectExplorer.SelectTarget"; const char SELECTTARGETQUICK[] = "ProjectExplorer.SelectTargetQuick"; @@ -439,6 +440,7 @@ public: QAction *m_diffFileAction; QAction *m_openFileAction; QAction *m_projectTreeCollapseAllAction; + QAction *m_projectTreeExpandAllAction; QAction *m_searchOnFileSystem; QAction *m_showInGraphicalShell; QAction *m_openTerminalHere; @@ -1197,21 +1199,22 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er cmd->setDescription(dd->m_setStartupProjectAction->text()); mprojectContextMenu->addAction(cmd, Constants::G_PROJECT_FIRST); - // Collapse All. - dd->m_projectTreeCollapseAllAction = new QAction(tr("Collapse All"), this); - cmd = ActionManager::registerAction(dd->m_projectTreeCollapseAllAction, Constants::PROJECTTREE_COLLAPSE_ALL, - projecTreeContext); + // Collapse & Expand. const Id treeGroup = Constants::G_PROJECT_TREE; - mfileContextMenu->addSeparator(treeGroup); - mfileContextMenu->addAction(cmd, treeGroup); - msubProjectContextMenu->addSeparator(treeGroup); - msubProjectContextMenu->addAction(cmd, treeGroup); - mfolderContextMenu->addSeparator(treeGroup); - mfolderContextMenu->addAction(cmd, treeGroup); - mprojectContextMenu->addSeparator(treeGroup); - mprojectContextMenu->addAction(cmd, treeGroup); - msessionContextMenu->addSeparator(treeGroup); - msessionContextMenu->addAction(cmd, treeGroup); + dd->m_projectTreeCollapseAllAction = new QAction(tr("Collapse All"), this); + Command * const collapseCmd = ActionManager::registerAction( + dd->m_projectTreeCollapseAllAction, Constants::PROJECTTREE_COLLAPSE_ALL, + projecTreeContext); + dd->m_projectTreeExpandAllAction = new QAction(tr("Expand All"), this); + Command * const expandCmd = ActionManager::registerAction( + dd->m_projectTreeExpandAllAction, Constants::PROJECTTREE_EXPAND_ALL, + projecTreeContext); + for (Core::ActionContainer * const ac : {mfileContextMenu, msubProjectContextMenu, + mfolderContextMenu, mprojectContextMenu, msessionContextMenu}) { + ac->addSeparator(treeGroup); + ac->addAction(collapseCmd, treeGroup); + ac->addAction(expandCmd, treeGroup); + } // target selector dd->m_projectSelectorAction = new QAction(this); @@ -1441,6 +1444,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er dd, &ProjectExplorerPluginPrivate::handleSetStartupProject); connect(dd->m_projectTreeCollapseAllAction, &QAction::triggered, ProjectTree::instance(), &ProjectTree::collapseAll); + connect(dd->m_projectTreeExpandAllAction, &QAction::triggered, + ProjectTree::instance(), &ProjectTree::expandAll); connect(this, &ProjectExplorerPlugin::updateRunActions, dd, &ProjectExplorerPluginPrivate::slotUpdateRunActions); diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp index cdaf68b3bbf..27344989c27 100644 --- a/src/plugins/projectexplorer/projecttree.cpp +++ b/src/plugins/projectexplorer/projecttree.cpp @@ -277,6 +277,12 @@ void ProjectTree::collapseAll() w->collapseAll(); } +void ProjectTree::expandAll() +{ + if (auto w = Utils::findOrDefault(s_instance->m_projectTreeWidgets, &ProjectTree::hasFocus)) + w->expandAll(); +} + void ProjectTree::updateExternalFileWarning() { auto document = qobject_cast(sender()); diff --git a/src/plugins/projectexplorer/projecttree.h b/src/plugins/projectexplorer/projecttree.h index e29c50797d0..238c55a9109 100644 --- a/src/plugins/projectexplorer/projecttree.h +++ b/src/plugins/projectexplorer/projecttree.h @@ -79,6 +79,7 @@ public: static Node *nodeForFile(const Utils::FileName &fileName); void collapseAll(); + void expandAll(); // for nodes to emit signals, do not call unless you are a node static void emitSubtreeChanged(FolderNode *node); diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index c14de0494e1..641c1de40e4 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -413,6 +413,11 @@ void ProjectTreeWidget::collapseAll() m_view->collapseAll(); } +void ProjectTreeWidget::expandAll() +{ + m_view->expandAll(); +} + void ProjectTreeWidget::editCurrentItem() { m_delayedRename.clear(); diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h index ab9dd7a3b7d..fb2abfc7026 100644 --- a/src/plugins/projectexplorer/projecttreewidget.h +++ b/src/plugins/projectexplorer/projecttreewidget.h @@ -66,6 +66,7 @@ public: void toggleAutoSynchronization(); void editCurrentItem(); void collapseAll(); + void expandAll(); private: void setProjectFilter(bool filter);