ProjectManager: Add function to set a list of files in folder nodes

... instead of having to remove/add. Use it in some places
in QmakeProjectManager and the ResourceEditor where the
(sub)tree is rebuild anyway.

Change-Id: I46b3c078c576b72dba6e87432570d030b7572026
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2017-01-19 11:32:53 +01:00
parent 4012611aab
commit e20549d295
5 changed files with 33 additions and 120 deletions

View File

@@ -534,27 +534,12 @@ struct InternalNode
// Makes the folder's files match this internal node's file list
void updateFiles(FolderNode *folder, FileType type)
{
QList<FileNode*> existingFileNodes;
foreach (FileNode *fileNode, folder->fileNodes()) {
if (fileNode->fileType() == type && !fileNode->isGenerated())
existingFileNodes << fileNode;
}
QList<FileNode*> filesToRemove;
FileNameList filesToAdd;
SortByPath sortByPath;
Utils::sort(files, sortByPath);
Utils::sort(existingFileNodes, sortByPath);
ProjectExplorer::compareSortedLists(existingFileNodes, files, filesToRemove, filesToAdd, sortByPath);
QList<FileNode *> nodesToAdd;
foreach (const FileName &file, filesToAdd)
nodesToAdd << new FileNode(file, type, false);
folder->removeFileNodes(filesToRemove);
folder->addFileNodes(nodesToAdd);
QList<FileNode *> nodes;
foreach (const FileName &file, files)
nodes << new FileNode(file, type, false);
folder->setFileNodes(nodes);
}
// Makes the folder's files match this internal node's file list
@@ -2057,9 +2042,9 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult)
return;
// delete files && folders && projects
removeFileNodes(fileNodes());
setFileNodes({});
removeProjectNodes(projectNodes());
removeFolderNodes(folderNodes());
setFolderNodes({});
m_projectType = InvalidProject;
}
@@ -2079,9 +2064,9 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult)
}
}
removeFileNodes(fileNodes());
setFileNodes({});
removeProjectNodes(projectNodes());
removeFolderNodes(folderNodes());
setFolderNodes({});
m_projectType = result->projectType;
}