forked from qt-creator/qt-creator
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:
@@ -335,6 +335,38 @@ QIcon FolderNode::icon() const
|
|||||||
return m_icon;
|
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*> FolderNode::fileNodes() const
|
||||||
{
|
{
|
||||||
QList<FileNode *> result;
|
QList<FileNode *> result;
|
||||||
|
|||||||
@@ -194,6 +194,10 @@ public:
|
|||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
QIcon icon() const;
|
QIcon icon() const;
|
||||||
|
|
||||||
|
void forEachNode(const std::function<void(FileNode *)> &fileTask,
|
||||||
|
const std::function<void(FolderNode *)> &folderTask = {},
|
||||||
|
const std::function<bool(const FolderNode *)> &folderFilterTask = {}) const;
|
||||||
|
void forEachGenericNode(const std::function<void(Node *)> &genericTask) const;
|
||||||
const QList<Node *> nodes() const { return m_nodes; }
|
const QList<Node *> nodes() const { return m_nodes; }
|
||||||
QList<FileNode *> fileNodes() const;
|
QList<FileNode *> fileNodes() const;
|
||||||
FileNode *fileNode(const Utils::FileName &file) const;
|
FileNode *fileNode(const Utils::FileName &file) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user