ProjectExplorer: Handle project file list globally

Handle the generation of the list of files in a project globally, based
on the project tree.

Creator now has the concept of TreeManagers which can enrich the project
tree with additional data (e.g. the files found in a resource file), which
the project does not necessarily know about. So use that tree to find
the files that belong to a project instead of implementing similar features
in each project.

Change-Id: Ia375a914a1f2c0adaa427f9eda834eec2db07f68
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Marco Benelli <marco.benelli@qt.io>
This commit is contained in:
Tobias Hunger
2017-03-27 12:12:38 +02:00
parent d1a5304564
commit fc5ce1e710
19 changed files with 43 additions and 200 deletions

View File

@@ -476,6 +476,7 @@ void Project::setRootProjectNode(ProjectNode *root)
if (root)
root->setParentFolderNode(&d->m_containerNode);
ProjectTree::emitSubtreeChanged(root);
emit fileListChanged();
delete oldNode;
}
@@ -524,6 +525,25 @@ Project::RestoreResult Project::restoreSettings(QString *errorMessage)
return result;
}
QStringList Project::files(Project::FilesMode fileMode,
const std::function<bool (const FileNode *)> &filter) const
{
QStringList result;
if (!rootProjectNode())
return result;
rootProjectNode()->forEachNode([&](const FileNode *fn) {
if (filter && !filter(fn))
return;
if ((fileMode == AllFiles)
|| (fileMode == SourceFiles && !fn->isGenerated())
|| (fileMode == GeneratedFiles && fn->isGenerated()))
result.append(fn->filePath().toString());
});
return result;
}
/*!
Serializes all data into a QVariantMap.