ProjectExplorer: Add a way to iterate over the node tree

Similar to what is used in Utils::TreeModel: Use lambdas
as "visitor".

Change-Id: Ia6e1a7ec022b61f94b01e1e8476bb932d22fd161
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2017-02-13 12:45:23 +01:00
parent 59def6fcf3
commit bccda22cce
2 changed files with 36 additions and 0 deletions

View File

@@ -335,6 +335,38 @@ QIcon FolderNode::icon() const
return m_icon;
}
void FolderNode::forEachNode(const std::function<void(FileNode *)> &fileTask,
const std::function<void(FolderNode *)> &folderTask,
const std::function<bool(const FolderNode *)> &folderFilterTask) const
{
if (folderFilterTask) {
if (!folderFilterTask(this))
return;
}
if (fileTask) {
for (Node *n : m_nodes) {
if (FileNode *fn = n->asFileNode())
fileTask(fn);
}
}
for (Node *n : m_nodes) {
if (FolderNode *fn = n->asFolderNode()) {
if (folderTask)
folderTask(fn);
fn->forEachNode(fileTask, folderTask, folderFilterTask);
}
}
}
void FolderNode::forEachGenericNode(const std::function<void(Node *)> &genericTask) const
{
for (Node *n : m_nodes) {
genericTask(n);
if (FolderNode *fn = n->asFolderNode())
fn->forEachNode(genericTask);
}
}
QList<FileNode*> FolderNode::fileNodes() const
{
QList<FileNode *> result;