forked from qt-creator/qt-creator
Project Tree: Add functionality to expand a single node recursively
From time to time, I find myself wanting to fully expand a specific sub-tree. Change-Id: Ie49b76a7a7a6fae3684bbdfb5735638bbc41b301 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -522,6 +522,7 @@ public:
|
||||
QAction *m_openFileAction;
|
||||
QAction *m_projectTreeCollapseAllAction;
|
||||
QAction *m_projectTreeExpandAllAction;
|
||||
QAction *m_projectTreeExpandNodeAction = nullptr;
|
||||
Utils::ParameterAction *m_closeProjectFilesActionFileMenu;
|
||||
Utils::ParameterAction *m_closeProjectFilesActionContextMenu;
|
||||
QAction *m_searchOnFileSystem;
|
||||
@@ -1416,6 +1417,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
|
||||
// Collapse & Expand.
|
||||
const Id treeGroup = Constants::G_PROJECT_TREE;
|
||||
|
||||
dd->m_projectTreeExpandNodeAction = new QAction(tr("Expand"), this);
|
||||
connect(dd->m_projectTreeExpandNodeAction, &QAction::triggered,
|
||||
ProjectTree::instance(), &ProjectTree::expandCurrentNodeRecursively);
|
||||
Command * const expandNodeCmd = ActionManager::registerAction(
|
||||
dd->m_projectTreeExpandNodeAction, "ProjectExplorer.ExpandNode",
|
||||
projectTreeContext);
|
||||
dd->m_projectTreeCollapseAllAction = new QAction(tr("Collapse All"), this);
|
||||
Command * const collapseCmd = ActionManager::registerAction(
|
||||
dd->m_projectTreeCollapseAllAction, Constants::PROJECTTREE_COLLAPSE_ALL,
|
||||
@@ -1427,6 +1435,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
for (Core::ActionContainer * const ac : {mfileContextMenu, msubProjectContextMenu,
|
||||
mfolderContextMenu, mprojectContextMenu, msessionContextMenu}) {
|
||||
ac->addSeparator(treeGroup);
|
||||
ac->addAction(expandNodeCmd, treeGroup);
|
||||
ac->addAction(collapseCmd, treeGroup);
|
||||
ac->addAction(expandCmd, treeGroup);
|
||||
}
|
||||
|
@@ -154,7 +154,7 @@ void ProjectTree::update()
|
||||
ProjectTreeWidget *focus = m_focusForContextMenu;
|
||||
static QPointer<ProjectTreeWidget> lastFocusedProjectTreeWidget;
|
||||
if (!focus) {
|
||||
focus = Utils::findOrDefault(m_projectTreeWidgets, &ProjectTree::hasFocus);
|
||||
focus = currentWidget();
|
||||
lastFocusedProjectTreeWidget = focus;
|
||||
}
|
||||
if (!focus)
|
||||
@@ -284,15 +284,21 @@ void ProjectTree::sessionAndTreeChanged()
|
||||
emit treeChanged();
|
||||
}
|
||||
|
||||
void ProjectTree::expandCurrentNodeRecursively()
|
||||
{
|
||||
if (const auto w = currentWidget())
|
||||
w->expandCurrentNodeRecursively();
|
||||
}
|
||||
|
||||
void ProjectTree::collapseAll()
|
||||
{
|
||||
if (auto w = Utils::findOrDefault(s_instance->m_projectTreeWidgets, &ProjectTree::hasFocus))
|
||||
if (const auto w = currentWidget())
|
||||
w->collapseAll();
|
||||
}
|
||||
|
||||
void ProjectTree::expandAll()
|
||||
{
|
||||
if (auto w = Utils::findOrDefault(s_instance->m_projectTreeWidgets, &ProjectTree::hasFocus))
|
||||
if (const auto w = currentWidget())
|
||||
w->expandAll();
|
||||
}
|
||||
|
||||
@@ -344,6 +350,11 @@ bool ProjectTree::hasFocus(ProjectTreeWidget *widget)
|
||||
|| s_instance->m_focusForContextMenu == widget);
|
||||
}
|
||||
|
||||
ProjectTreeWidget *ProjectTree::currentWidget() const
|
||||
{
|
||||
return findOrDefault(m_projectTreeWidgets, &ProjectTree::hasFocus);
|
||||
}
|
||||
|
||||
void ProjectTree::showContextMenu(ProjectTreeWidget *focus, const QPoint &globalPos, Node *node)
|
||||
{
|
||||
QMenu *contextMenu = nullptr;
|
||||
|
@@ -82,6 +82,8 @@ public:
|
||||
static Project *projectForNode(const Node *node);
|
||||
static Node *nodeForFile(const Utils::FilePath &fileName);
|
||||
|
||||
void expandCurrentNodeRecursively();
|
||||
|
||||
void collapseAll();
|
||||
void expandAll();
|
||||
|
||||
@@ -117,6 +119,7 @@ private:
|
||||
|
||||
void updateExternalFileWarning();
|
||||
static bool hasFocus(Internal::ProjectTreeWidget *widget);
|
||||
Internal::ProjectTreeWidget *currentWidget() const;
|
||||
void hideContextMenu();
|
||||
|
||||
private:
|
||||
|
@@ -432,6 +432,20 @@ void ProjectTreeWidget::setAutoSynchronization(bool sync)
|
||||
syncFromDocumentManager();
|
||||
}
|
||||
|
||||
void ProjectTreeWidget::expandNodeRecursively(const QModelIndex &index)
|
||||
{
|
||||
const int rc = index.model()->rowCount(index);
|
||||
for (int i = 0; i < rc; ++i)
|
||||
expandNodeRecursively(index.model()->index(i, index.column(), index));
|
||||
if (rc > 0)
|
||||
m_view->expand(index);
|
||||
}
|
||||
|
||||
void ProjectTreeWidget::expandCurrentNodeRecursively()
|
||||
{
|
||||
expandNodeRecursively(m_view->currentIndex());
|
||||
}
|
||||
|
||||
void ProjectTreeWidget::collapseAll()
|
||||
{
|
||||
m_view->collapseAll();
|
||||
|
@@ -67,6 +67,7 @@ public:
|
||||
|
||||
void toggleAutoSynchronization();
|
||||
void editCurrentItem();
|
||||
void expandCurrentNodeRecursively();
|
||||
void collapseAll();
|
||||
void expandAll();
|
||||
|
||||
@@ -87,6 +88,8 @@ private:
|
||||
|
||||
void syncFromDocumentManager();
|
||||
|
||||
void expandNodeRecursively(const QModelIndex &index);
|
||||
|
||||
QTreeView *m_view = nullptr;
|
||||
FlatModel *m_model = nullptr;
|
||||
QAction *m_filterProjectsAction = nullptr;
|
||||
|
Reference in New Issue
Block a user