Project Tree: Allow to hide disabled files

Project manager plugins can mark files as disabled, typically meaning
they are not part of the project in the current build configuration.
Let's allow users to hide such files altogether.

Fixes: QTCREATORBUG-22821
Change-Id: Ie92d523d1f895bee8076de1d7eea1d7a739fe11f
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2019-10-22 13:42:21 +02:00
parent d485f9f359
commit b8657ac739
5 changed files with 39 additions and 0 deletions

View File

@@ -145,6 +145,9 @@
\li To hide source files which are automatically generated by the build \li To hide source files which are automatically generated by the build
system, select \uicontrol {Filter Tree > Hide Generated Files}. 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 \li To hide directories that do not contain any files, select
\uicontrol {Filter Tree} > \uicontrol {Hide Empty Directories}. \uicontrol {Filter Tree} > \uicontrol {Hide Empty Directories}.

View File

@@ -425,6 +425,8 @@ void FlatModel::addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet<
for (Node *node : folderNode->nodes()) { for (Node *node : folderNode->nodes()) {
if (m_filterGeneratedFiles && node->isGenerated()) if (m_filterGeneratedFiles && node->isGenerated())
continue; continue;
if (m_filterDisabledFiles && !node->isEnabled())
continue;
if (FolderNode *subFolderNode = node->asFolderNode()) { if (FolderNode *subFolderNode = node->asFolderNode()) {
const bool isHidden = m_filterProjects && !subFolderNode->showInSimpleTree(); const bool isHidden = m_filterProjects && !subFolderNode->showInSimpleTree();
if (!isHidden && !seen->contains(subFolderNode)) { if (!isHidden && !seen->contains(subFolderNode)) {
@@ -810,6 +812,14 @@ void FlatModel::setGeneratedFilesFilterEnabled(bool filter)
rebuildModel(); rebuildModel();
} }
void FlatModel::setDisabledFilesFilterEnabled(bool filter)
{
if (filter == m_filterDisabledFiles)
return;
m_filterDisabledFiles = filter;
rebuildModel();
}
void FlatModel::setTrimEmptyDirectories(bool filter) void FlatModel::setTrimEmptyDirectories(bool filter)
{ {
if (filter == m_trimEmptyDirectories) if (filter == m_trimEmptyDirectories)

View File

@@ -80,9 +80,11 @@ public:
bool projectFilterEnabled(); bool projectFilterEnabled();
bool generatedFilesFilterEnabled(); bool generatedFilesFilterEnabled();
bool disabledFilesFilterEnabled() const { return m_filterDisabledFiles; }
bool trimEmptyDirectoriesEnabled(); bool trimEmptyDirectoriesEnabled();
void setProjectFilterEnabled(bool filter); void setProjectFilterEnabled(bool filter);
void setGeneratedFilesFilterEnabled(bool filter); void setGeneratedFilesFilterEnabled(bool filter);
void setDisabledFilesFilterEnabled(bool filter);
void setTrimEmptyDirectories(bool filter); void setTrimEmptyDirectories(bool filter);
void onExpanded(const QModelIndex &idx); void onExpanded(const QModelIndex &idx);
@@ -95,6 +97,7 @@ signals:
private: private:
bool m_filterProjects = false; bool m_filterProjects = false;
bool m_filterGeneratedFiles = true; bool m_filterGeneratedFiles = true;
bool m_filterDisabledFiles = false;
bool m_trimEmptyDirectories = true; bool m_trimEmptyDirectories = true;
static const QLoggingCategory &logger(); static const QLoggingCategory &logger();

View File

@@ -257,6 +257,12 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) : QWidget(parent)
connect(m_filterGeneratedFilesAction, &QAction::toggled, connect(m_filterGeneratedFilesAction, &QAction::toggled,
this, &ProjectTreeWidget::setGeneratedFilesFilter); 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"; const char focusActionId[] = "ProjectExplorer.FocusDocumentInProjectTree";
if (!ActionManager::command(focusActionId)) { if (!ActionManager::command(focusActionId)) {
auto focusDocumentInProjectTree = new QAction(tr("Focus Document in Project Tree"), this); auto focusDocumentInProjectTree = new QAction(tr("Focus Document in Project Tree"), this);
@@ -560,6 +566,12 @@ void ProjectTreeWidget::setGeneratedFilesFilter(bool filter)
m_filterGeneratedFilesAction->setChecked(filter); m_filterGeneratedFilesAction->setChecked(filter);
} }
void ProjectTreeWidget::setDisabledFilesFilter(bool filter)
{
m_model->setDisabledFilesFilterEnabled(filter);
m_filterDisabledFilesAction->setChecked(filter);
}
void ProjectTreeWidget::setTrimEmptyDirectories(bool filter) void ProjectTreeWidget::setTrimEmptyDirectories(bool filter)
{ {
m_model->setTrimEmptyDirectories(filter); m_model->setTrimEmptyDirectories(filter);
@@ -571,6 +583,11 @@ bool ProjectTreeWidget::generatedFilesFilter()
return m_model->generatedFilesFilterEnabled(); return m_model->generatedFilesFilterEnabled();
} }
bool ProjectTreeWidget::disabledFilesFilter()
{
return m_model->disabledFilesFilterEnabled();
}
bool ProjectTreeWidget::trimEmptyDirectoriesFilter() bool ProjectTreeWidget::trimEmptyDirectoriesFilter()
{ {
return m_model->trimEmptyDirectoriesEnabled(); return m_model->trimEmptyDirectoriesEnabled();
@@ -604,6 +621,7 @@ NavigationView ProjectTreeWidgetFactory::createWidget()
auto filterMenu = new QMenu(filter); auto filterMenu = new QMenu(filter);
filterMenu->addAction(ptw->m_filterProjectsAction); filterMenu->addAction(ptw->m_filterProjectsAction);
filterMenu->addAction(ptw->m_filterGeneratedFilesAction); filterMenu->addAction(ptw->m_filterGeneratedFilesAction);
filterMenu->addAction(ptw->m_filterDisabledFilesAction);
filterMenu->addAction(ptw->m_trimEmptyDirectoriesAction); filterMenu->addAction(ptw->m_trimEmptyDirectoriesAction);
filter->setMenu(filterMenu); filter->setMenu(filterMenu);
@@ -618,6 +636,7 @@ void ProjectTreeWidgetFactory::saveSettings(QSettings *settings, int position, Q
const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position); const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
settings->setValue(baseKey + QLatin1String(".ProjectFilter"), ptw->projectFilter()); settings->setValue(baseKey + QLatin1String(".ProjectFilter"), ptw->projectFilter());
settings->setValue(baseKey + QLatin1String(".GeneratedFilter"), ptw->generatedFilesFilter()); settings->setValue(baseKey + QLatin1String(".GeneratedFilter"), ptw->generatedFilesFilter());
settings->setValue(baseKey + ".DisabledFilesFilter", ptw->disabledFilesFilter());
settings->setValue(baseKey + QLatin1String(".TrimEmptyDirsFilter"), ptw->trimEmptyDirectoriesFilter()); settings->setValue(baseKey + QLatin1String(".TrimEmptyDirsFilter"), ptw->trimEmptyDirectoriesFilter());
settings->setValue(baseKey + QLatin1String(".SyncWithEditor"), ptw->autoSynchronization()); 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); const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
ptw->setProjectFilter(settings->value(baseKey + QLatin1String(".ProjectFilter"), false).toBool()); ptw->setProjectFilter(settings->value(baseKey + QLatin1String(".ProjectFilter"), false).toBool());
ptw->setGeneratedFilesFilter(settings->value(baseKey + QLatin1String(".GeneratedFilter"), true).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->setTrimEmptyDirectories(settings->value(baseKey + QLatin1String(".TrimEmptyDirsFilter"), true).toBool());
ptw->setAutoSynchronization(settings->value(baseKey + QLatin1String(".SyncWithEditor"), true).toBool()); ptw->setAutoSynchronization(settings->value(baseKey + QLatin1String(".SyncWithEditor"), true).toBool());
} }

View File

@@ -56,6 +56,7 @@ public:
void setAutoSynchronization(bool sync); void setAutoSynchronization(bool sync);
bool projectFilter(); bool projectFilter();
bool generatedFilesFilter(); bool generatedFilesFilter();
bool disabledFilesFilter();
bool trimEmptyDirectoriesFilter(); bool trimEmptyDirectoriesFilter();
QToolButton *toggleSync(); QToolButton *toggleSync();
Node *currentNode(); Node *currentNode();
@@ -72,6 +73,7 @@ public:
private: private:
void setProjectFilter(bool filter); void setProjectFilter(bool filter);
void setGeneratedFilesFilter(bool filter); void setGeneratedFilesFilter(bool filter);
void setDisabledFilesFilter(bool filter);
void setTrimEmptyDirectories(bool filter); void setTrimEmptyDirectories(bool filter);
void handleCurrentItemChange(const QModelIndex &current); void handleCurrentItemChange(const QModelIndex &current);
@@ -89,6 +91,7 @@ private:
FlatModel *m_model = nullptr; FlatModel *m_model = nullptr;
QAction *m_filterProjectsAction = nullptr; QAction *m_filterProjectsAction = nullptr;
QAction *m_filterGeneratedFilesAction = nullptr; QAction *m_filterGeneratedFilesAction = nullptr;
QAction *m_filterDisabledFilesAction = nullptr;
QAction *m_trimEmptyDirectoriesAction = nullptr; QAction *m_trimEmptyDirectoriesAction = nullptr;
QToolButton *m_toggleSync = nullptr; QToolButton *m_toggleSync = nullptr;