diff --git a/doc/src/howto/creator-sidebar-views.qdoc b/doc/src/howto/creator-sidebar-views.qdoc index 444a6018421..19662247758 100644 --- a/doc/src/howto/creator-sidebar-views.qdoc +++ b/doc/src/howto/creator-sidebar-views.qdoc @@ -145,6 +145,9 @@ \li To hide source files which are automatically generated by the build system, select \uicontrol {Filter Tree > Hide Generated Files}. + \li To hide source files which are not enabled for the current target, + select \uicontrol {Filter Tree} > \uicontrol {Hide Disabled Files}. + \li To hide directories that do not contain any files, select \uicontrol {Filter Tree} > \uicontrol {Hide Empty Directories}. diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 9714c1aa09e..ce393006005 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -425,6 +425,8 @@ void FlatModel::addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet< for (Node *node : folderNode->nodes()) { if (m_filterGeneratedFiles && node->isGenerated()) continue; + if (m_filterDisabledFiles && !node->isEnabled()) + continue; if (FolderNode *subFolderNode = node->asFolderNode()) { const bool isHidden = m_filterProjects && !subFolderNode->showInSimpleTree(); if (!isHidden && !seen->contains(subFolderNode)) { @@ -810,6 +812,14 @@ void FlatModel::setGeneratedFilesFilterEnabled(bool filter) rebuildModel(); } +void FlatModel::setDisabledFilesFilterEnabled(bool filter) +{ + if (filter == m_filterDisabledFiles) + return; + m_filterDisabledFiles = filter; + rebuildModel(); +} + void FlatModel::setTrimEmptyDirectories(bool filter) { if (filter == m_trimEmptyDirectories) diff --git a/src/plugins/projectexplorer/projectmodels.h b/src/plugins/projectexplorer/projectmodels.h index f4412eae281..835e28993d6 100644 --- a/src/plugins/projectexplorer/projectmodels.h +++ b/src/plugins/projectexplorer/projectmodels.h @@ -80,9 +80,11 @@ public: bool projectFilterEnabled(); bool generatedFilesFilterEnabled(); + bool disabledFilesFilterEnabled() const { return m_filterDisabledFiles; } bool trimEmptyDirectoriesEnabled(); void setProjectFilterEnabled(bool filter); void setGeneratedFilesFilterEnabled(bool filter); + void setDisabledFilesFilterEnabled(bool filter); void setTrimEmptyDirectories(bool filter); void onExpanded(const QModelIndex &idx); @@ -95,6 +97,7 @@ signals: private: bool m_filterProjects = false; bool m_filterGeneratedFiles = true; + bool m_filterDisabledFiles = false; bool m_trimEmptyDirectories = true; static const QLoggingCategory &logger(); diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index f18b21a9be2..8f4d5adef7a 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -257,6 +257,12 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) : QWidget(parent) connect(m_filterGeneratedFilesAction, &QAction::toggled, this, &ProjectTreeWidget::setGeneratedFilesFilter); + m_filterDisabledFilesAction = new QAction(tr("Hide Disabled Files"), this); + m_filterDisabledFilesAction->setCheckable(true); + m_filterDisabledFilesAction->setChecked(false); + connect(m_filterDisabledFilesAction, &QAction::toggled, + this, &ProjectTreeWidget::setDisabledFilesFilter); + const char focusActionId[] = "ProjectExplorer.FocusDocumentInProjectTree"; if (!ActionManager::command(focusActionId)) { auto focusDocumentInProjectTree = new QAction(tr("Focus Document in Project Tree"), this); @@ -560,6 +566,12 @@ void ProjectTreeWidget::setGeneratedFilesFilter(bool filter) m_filterGeneratedFilesAction->setChecked(filter); } +void ProjectTreeWidget::setDisabledFilesFilter(bool filter) +{ + m_model->setDisabledFilesFilterEnabled(filter); + m_filterDisabledFilesAction->setChecked(filter); +} + void ProjectTreeWidget::setTrimEmptyDirectories(bool filter) { m_model->setTrimEmptyDirectories(filter); @@ -571,6 +583,11 @@ bool ProjectTreeWidget::generatedFilesFilter() return m_model->generatedFilesFilterEnabled(); } +bool ProjectTreeWidget::disabledFilesFilter() +{ + return m_model->disabledFilesFilterEnabled(); +} + bool ProjectTreeWidget::trimEmptyDirectoriesFilter() { return m_model->trimEmptyDirectoriesEnabled(); @@ -604,6 +621,7 @@ NavigationView ProjectTreeWidgetFactory::createWidget() auto filterMenu = new QMenu(filter); filterMenu->addAction(ptw->m_filterProjectsAction); filterMenu->addAction(ptw->m_filterGeneratedFilesAction); + filterMenu->addAction(ptw->m_filterDisabledFilesAction); filterMenu->addAction(ptw->m_trimEmptyDirectoriesAction); filter->setMenu(filterMenu); @@ -618,6 +636,7 @@ void ProjectTreeWidgetFactory::saveSettings(QSettings *settings, int position, Q const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position); settings->setValue(baseKey + QLatin1String(".ProjectFilter"), ptw->projectFilter()); settings->setValue(baseKey + QLatin1String(".GeneratedFilter"), ptw->generatedFilesFilter()); + settings->setValue(baseKey + ".DisabledFilesFilter", ptw->disabledFilesFilter()); settings->setValue(baseKey + QLatin1String(".TrimEmptyDirsFilter"), ptw->trimEmptyDirectoriesFilter()); settings->setValue(baseKey + QLatin1String(".SyncWithEditor"), ptw->autoSynchronization()); } @@ -629,6 +648,7 @@ void ProjectTreeWidgetFactory::restoreSettings(QSettings *settings, int position const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position); ptw->setProjectFilter(settings->value(baseKey + QLatin1String(".ProjectFilter"), false).toBool()); ptw->setGeneratedFilesFilter(settings->value(baseKey + QLatin1String(".GeneratedFilter"), true).toBool()); + ptw->setDisabledFilesFilter(settings->value(baseKey + ".DisabledFilesFilter", false).toBool()); ptw->setTrimEmptyDirectories(settings->value(baseKey + QLatin1String(".TrimEmptyDirsFilter"), true).toBool()); ptw->setAutoSynchronization(settings->value(baseKey + QLatin1String(".SyncWithEditor"), true).toBool()); } diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h index 74b301e93bd..e53396c4b9a 100644 --- a/src/plugins/projectexplorer/projecttreewidget.h +++ b/src/plugins/projectexplorer/projecttreewidget.h @@ -56,6 +56,7 @@ public: void setAutoSynchronization(bool sync); bool projectFilter(); bool generatedFilesFilter(); + bool disabledFilesFilter(); bool trimEmptyDirectoriesFilter(); QToolButton *toggleSync(); Node *currentNode(); @@ -72,6 +73,7 @@ public: private: void setProjectFilter(bool filter); void setGeneratedFilesFilter(bool filter); + void setDisabledFilesFilter(bool filter); void setTrimEmptyDirectories(bool filter); void handleCurrentItemChange(const QModelIndex ¤t); @@ -89,6 +91,7 @@ private: FlatModel *m_model = nullptr; QAction *m_filterProjectsAction = nullptr; QAction *m_filterGeneratedFilesAction = nullptr; + QAction *m_filterDisabledFilesAction = nullptr; QAction *m_trimEmptyDirectoriesAction = nullptr; QToolButton *m_toggleSync = nullptr;