forked from qt-creator/qt-creator
ProjectExplorer: Add FolderNode::compress
Add a method to FolderNode that compresses a tree of folders like A/B/C/file.txt into one FolderNode (A/B/C) and a FileNode (file.txt) Change-Id: I5efa038c33b91ea01017269daa048ba101085d01 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -226,6 +226,8 @@ static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, i
|
||||
folder->setDisplayName(displayName);
|
||||
base->addNode(folder);
|
||||
folder->buildTree(files);
|
||||
for (FolderNode *fn : folder->folderNodes())
|
||||
fn->compress();
|
||||
}
|
||||
|
||||
static void addCMakeInputs(CMakeListsNode *root,
|
||||
|
||||
@@ -459,6 +459,33 @@ void FolderNode::buildTree(QList<FileNode *> &files, const Utils::FileName &over
|
||||
emitTreeChanged();
|
||||
}
|
||||
|
||||
// "Compress" a tree of foldernodes such that foldernodes with exactly one foldernode as a child
|
||||
// are merged into one. This e.g. turns a sequence of FolderNodes "foo" "bar" "baz" into one
|
||||
// FolderNode named "foo/bar/baz", saving a lot of clicks in the Project View to get to the actual
|
||||
// files.
|
||||
void FolderNode::compress()
|
||||
{
|
||||
QList<Node *> children = nodes();
|
||||
if (auto subFolder = children.count() == 1 ? children.at(0)->asFolderNode() : nullptr) {
|
||||
// Only one subfolder: Compress!
|
||||
setDisplayName(QDir::toNativeSeparators(displayName() + "/" + subFolder->displayName()));
|
||||
for (Node *n : subFolder->nodes()) {
|
||||
subFolder->removeNode(n);
|
||||
n->setParentFolderNode(nullptr);
|
||||
addNode(n);
|
||||
}
|
||||
setAbsoluteFilePathAndLine(subFolder->filePath(), -1);
|
||||
|
||||
removeNode(subFolder);
|
||||
delete subFolder;
|
||||
|
||||
compress();
|
||||
} else {
|
||||
for (FolderNode *fn : folderNodes())
|
||||
fn->compress();
|
||||
}
|
||||
}
|
||||
|
||||
void FolderNode::accept(NodesVisitor *visitor)
|
||||
{
|
||||
visitor->visitFolderNode(this);
|
||||
|
||||
@@ -204,6 +204,7 @@ public:
|
||||
FolderNode *recursiveFindOrCreateFolderNode(const Utils::FileName &directory,
|
||||
const Utils::FileName &overrideBaseDir = Utils::FileName());
|
||||
void buildTree(QList<FileNode *> &files, const Utils::FileName &overrideBaseDir = Utils::FileName());
|
||||
void compress();
|
||||
|
||||
virtual void accept(NodesVisitor *visitor);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user