forked from qt-creator/qt-creator
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:
@@ -598,6 +598,15 @@ void FolderNode::removeFileNodes(const QList<FileNode *> &files)
|
|||||||
ProjectTree::emitDataChanged();
|
ProjectTree::emitDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FolderNode::setFileNodes(const QList<FileNode *> &files)
|
||||||
|
{
|
||||||
|
qDeleteAll(m_fileNodes);
|
||||||
|
m_fileNodes = files;
|
||||||
|
for (FileNode *node : m_fileNodes)
|
||||||
|
node->setParentFolderNode(this);
|
||||||
|
ProjectTree::emitDataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Adds folder nodes specified by \a subFolders to the node hierarchy below
|
Adds folder nodes specified by \a subFolders to the node hierarchy below
|
||||||
\a parentFolder and emits the corresponding signals.
|
\a parentFolder and emits the corresponding signals.
|
||||||
@@ -666,6 +675,15 @@ void FolderNode::removeFolderNodes(const QList<FolderNode*> &subFolders)
|
|||||||
ProjectTree::emitDataChanged();
|
ProjectTree::emitDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FolderNode::setFolderNodes(const QList<FolderNode *> &folders)
|
||||||
|
{
|
||||||
|
qDeleteAll(m_folderNodes);
|
||||||
|
m_folderNodes = folders;
|
||||||
|
for (FolderNode *node : m_folderNodes)
|
||||||
|
node->setParentFolderNode(this);
|
||||||
|
ProjectTree::emitDataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
bool FolderNode::showInSimpleTree() const
|
bool FolderNode::showInSimpleTree() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -251,9 +251,11 @@ public:
|
|||||||
|
|
||||||
void addFileNodes(const QList<FileNode*> &files);
|
void addFileNodes(const QList<FileNode*> &files);
|
||||||
void removeFileNodes(const QList<FileNode*> &files);
|
void removeFileNodes(const QList<FileNode*> &files);
|
||||||
|
void setFileNodes(const QList<FileNode*> &files);
|
||||||
|
|
||||||
void addFolderNodes(const QList<FolderNode*> &subFolders);
|
void addFolderNodes(const QList<FolderNode*> &subFolders);
|
||||||
void removeFolderNodes(const QList<FolderNode*> &subFolders);
|
void removeFolderNodes(const QList<FolderNode*> &subFolders);
|
||||||
|
void setFolderNodes(const QList<FolderNode*> &folders);
|
||||||
|
|
||||||
FolderNode *asFolderNode() override { return this; }
|
FolderNode *asFolderNode() override { return this; }
|
||||||
const FolderNode *asFolderNode() const override { return this; }
|
const FolderNode *asFolderNode() const override { return this; }
|
||||||
|
|||||||
@@ -534,27 +534,12 @@ struct InternalNode
|
|||||||
// Makes the folder's files match this internal node's file list
|
// Makes the folder's files match this internal node's file list
|
||||||
void updateFiles(FolderNode *folder, FileType type)
|
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;
|
SortByPath sortByPath;
|
||||||
Utils::sort(files, sortByPath);
|
Utils::sort(files, sortByPath);
|
||||||
Utils::sort(existingFileNodes, sortByPath);
|
QList<FileNode *> nodes;
|
||||||
|
foreach (const FileName &file, files)
|
||||||
ProjectExplorer::compareSortedLists(existingFileNodes, files, filesToRemove, filesToAdd, sortByPath);
|
nodes << new FileNode(file, type, false);
|
||||||
|
folder->setFileNodes(nodes);
|
||||||
QList<FileNode *> nodesToAdd;
|
|
||||||
foreach (const FileName &file, filesToAdd)
|
|
||||||
nodesToAdd << new FileNode(file, type, false);
|
|
||||||
|
|
||||||
folder->removeFileNodes(filesToRemove);
|
|
||||||
folder->addFileNodes(nodesToAdd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Makes the folder's files match this internal node's file list
|
// Makes the folder's files match this internal node's file list
|
||||||
@@ -2057,9 +2042,9 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// delete files && folders && projects
|
// delete files && folders && projects
|
||||||
removeFileNodes(fileNodes());
|
setFileNodes({});
|
||||||
removeProjectNodes(projectNodes());
|
removeProjectNodes(projectNodes());
|
||||||
removeFolderNodes(folderNodes());
|
setFolderNodes({});
|
||||||
|
|
||||||
m_projectType = InvalidProject;
|
m_projectType = InvalidProject;
|
||||||
}
|
}
|
||||||
@@ -2079,9 +2064,9 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeFileNodes(fileNodes());
|
setFileNodes({});
|
||||||
removeProjectNodes(projectNodes());
|
removeProjectNodes(projectNodes());
|
||||||
removeFolderNodes(folderNodes());
|
setFolderNodes({});
|
||||||
|
|
||||||
m_projectType = result->projectType;
|
m_projectType = result->projectType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,11 +103,6 @@ static bool sortByPrefixAndLang(ProjectExplorer::FolderNode *a, ProjectExplorer:
|
|||||||
return aa->lang() < bb->lang();
|
return aa->lang() < bb->lang();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool sortNodesByPath(ProjectExplorer::Node *a, ProjectExplorer::Node *b)
|
|
||||||
{
|
|
||||||
return a->filePath() < b->filePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
ResourceTopLevelNode::ResourceTopLevelNode(
|
ResourceTopLevelNode::ResourceTopLevelNode(
|
||||||
const Utils::FileName &filePath, const QString &contents,
|
const Utils::FileName &filePath, const QString &contents,
|
||||||
ProjectExplorer::FolderNode *parent)
|
ProjectExplorer::FolderNode *parent)
|
||||||
@@ -226,27 +221,13 @@ void ResourceTopLevelNode::update()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QList<ProjectExplorer::FolderNode *> oldPrefixList = folderNodes();
|
addFolderNodes(newPrefixList);
|
||||||
QList<ProjectExplorer::FolderNode *> prefixesToAdd;
|
|
||||||
QList<ProjectExplorer::FolderNode *> prefixesToRemove;
|
|
||||||
|
|
||||||
Utils::sort(oldPrefixList, sortByPrefixAndLang);
|
|
||||||
Utils::sort(newPrefixList, sortByPrefixAndLang);
|
|
||||||
|
|
||||||
ProjectExplorer::compareSortedLists(oldPrefixList, newPrefixList,
|
|
||||||
prefixesToRemove, prefixesToAdd, sortByPrefixAndLang);
|
|
||||||
|
|
||||||
removeFolderNodes(prefixesToRemove);
|
|
||||||
addFolderNodes(prefixesToAdd);
|
|
||||||
|
|
||||||
// delete nodes that weren't added
|
|
||||||
qDeleteAll(ProjectExplorer::subtractSortedList(newPrefixList, prefixesToAdd, sortByPrefixAndLang));
|
|
||||||
|
|
||||||
foreach (FolderNode *sfn, folderNodes()) {
|
foreach (FolderNode *sfn, folderNodes()) {
|
||||||
ResourceFolderNode *srn = static_cast<ResourceFolderNode *>(sfn);
|
ResourceFolderNode *srn = static_cast<ResourceFolderNode *>(sfn);
|
||||||
PrefixFolderLang folderId(srn->prefix(), QString(), srn->lang());
|
PrefixFolderLang folderId(srn->prefix(), QString(), srn->lang());
|
||||||
srn->updateFiles(filesToAdd[folderId]);
|
srn->setFileNodes(filesToAdd[folderId]);
|
||||||
srn->updateFolders(foldersToAddToPrefix[folderId]);
|
srn->setFolderNodes(foldersToAddToPrefix[folderId]);
|
||||||
foreach (FolderNode* ssfn, sfn->folderNodes()) {
|
foreach (FolderNode* ssfn, sfn->folderNodes()) {
|
||||||
SimpleResourceFolderNode *sssn = static_cast<SimpleResourceFolderNode *>(ssfn);
|
SimpleResourceFolderNode *sssn = static_cast<SimpleResourceFolderNode *>(ssfn);
|
||||||
sssn->addFilesAndSubfolders(filesToAdd, foldersToAddToFolders, srn->prefix(), srn->lang());
|
sssn->addFilesAndSubfolders(filesToAdd, foldersToAddToFolders, srn->prefix(), srn->lang());
|
||||||
@@ -533,40 +514,6 @@ ResourceTopLevelNode *ResourceFolderNode::resourceNode() const
|
|||||||
return m_topLevelNode;
|
return m_topLevelNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceFolderNode::updateFiles(QList<ProjectExplorer::FileNode *> newList)
|
|
||||||
{
|
|
||||||
QList<ProjectExplorer::FileNode *> oldList = fileNodes();
|
|
||||||
QList<ProjectExplorer::FileNode *> filesToAdd;
|
|
||||||
QList<ProjectExplorer::FileNode *> filesToRemove;
|
|
||||||
|
|
||||||
Utils::sort(oldList, sortNodesByPath);
|
|
||||||
Utils::sort(newList, sortNodesByPath);
|
|
||||||
|
|
||||||
ProjectExplorer::compareSortedLists(oldList, newList, filesToRemove, filesToAdd, sortNodesByPath);
|
|
||||||
|
|
||||||
removeFileNodes(filesToRemove);
|
|
||||||
addFileNodes(filesToAdd);
|
|
||||||
|
|
||||||
qDeleteAll(ProjectExplorer::subtractSortedList(newList, filesToAdd, sortNodesByPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ResourceFolderNode::updateFolders(QList<ProjectExplorer::FolderNode *> newList)
|
|
||||||
{
|
|
||||||
QList<ProjectExplorer::FolderNode *> oldList = folderNodes();
|
|
||||||
QList<ProjectExplorer::FolderNode *> foldersToAdd;
|
|
||||||
QList<ProjectExplorer::FolderNode *> foldersToRemove;
|
|
||||||
|
|
||||||
Utils::sort(oldList, sortNodesByPath);
|
|
||||||
Utils::sort(newList, sortNodesByPath);
|
|
||||||
|
|
||||||
ProjectExplorer::compareSortedLists(oldList, newList, foldersToRemove, foldersToAdd, sortNodesByPath);
|
|
||||||
|
|
||||||
removeFolderNodes(foldersToRemove);
|
|
||||||
addFolderNodes(foldersToAdd);
|
|
||||||
|
|
||||||
qDeleteAll(ProjectExplorer::subtractSortedList(newList, foldersToAdd, sortNodesByPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
ResourceFileWatcher::ResourceFileWatcher(ResourceTopLevelNode *node)
|
ResourceFileWatcher::ResourceFileWatcher(ResourceTopLevelNode *node)
|
||||||
: IDocument(0), m_node(node)
|
: IDocument(0), m_node(node)
|
||||||
{
|
{
|
||||||
@@ -718,49 +665,14 @@ ResourceFolderNode *SimpleResourceFolderNode::prefixNode() const
|
|||||||
return m_prefixNode;
|
return m_prefixNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleResourceFolderNode::updateFiles(QList<ProjectExplorer::FileNode *> newList)
|
|
||||||
{
|
|
||||||
QList<ProjectExplorer::FileNode *> oldList = fileNodes();
|
|
||||||
QList<ProjectExplorer::FileNode *> filesToAdd;
|
|
||||||
QList<ProjectExplorer::FileNode *> filesToRemove;
|
|
||||||
|
|
||||||
Utils::sort(oldList, sortNodesByPath);
|
|
||||||
Utils::sort(newList, sortNodesByPath);
|
|
||||||
|
|
||||||
ProjectExplorer::compareSortedLists(oldList, newList, filesToRemove, filesToAdd, sortNodesByPath);
|
|
||||||
|
|
||||||
removeFileNodes(filesToRemove);
|
|
||||||
addFileNodes(filesToAdd);
|
|
||||||
|
|
||||||
qDeleteAll(ProjectExplorer::subtractSortedList(newList, filesToAdd, sortNodesByPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleResourceFolderNode::updateFolders(QList<ProjectExplorer::FolderNode *> newList)
|
|
||||||
{
|
|
||||||
QList<ProjectExplorer::FolderNode *> oldList = folderNodes();
|
|
||||||
QList<ProjectExplorer::FolderNode *> foldersToAdd;
|
|
||||||
QList<ProjectExplorer::FolderNode *> foldersToRemove;
|
|
||||||
|
|
||||||
Utils::sort(oldList, sortNodesByPath);
|
|
||||||
Utils::sort(newList, sortNodesByPath);
|
|
||||||
|
|
||||||
ProjectExplorer::compareSortedLists(oldList, newList, foldersToRemove, foldersToAdd, sortNodesByPath);
|
|
||||||
|
|
||||||
removeFolderNodes(foldersToRemove);
|
|
||||||
addFolderNodes(foldersToAdd);
|
|
||||||
|
|
||||||
qDeleteAll(ProjectExplorer::subtractSortedList(newList, foldersToAdd, sortNodesByPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SimpleResourceFolderNode::addFilesAndSubfolders(QMap<PrefixFolderLang,
|
void SimpleResourceFolderNode::addFilesAndSubfolders(QMap<PrefixFolderLang,
|
||||||
QList<ProjectExplorer::FileNode *>> filesToAdd,
|
QList<ProjectExplorer::FileNode *>> filesToAdd,
|
||||||
QMap<PrefixFolderLang,
|
QMap<PrefixFolderLang,
|
||||||
QList<ProjectExplorer::FolderNode*> > foldersToAdd,
|
QList<ProjectExplorer::FolderNode*> > foldersToAdd,
|
||||||
const QString &prefix, const QString &lang)
|
const QString &prefix, const QString &lang)
|
||||||
{
|
{
|
||||||
updateFiles(filesToAdd.value(PrefixFolderLang(prefix, m_folderName, lang)));
|
setFileNodes(filesToAdd.value(PrefixFolderLang(prefix, m_folderName, lang)));
|
||||||
updateFolders(foldersToAdd.value(PrefixFolderLang(prefix, m_folderName, lang)));
|
setFolderNodes(foldersToAdd.value(PrefixFolderLang(prefix, m_folderName, lang)));
|
||||||
foreach (FolderNode* subNode, folderNodes()) {
|
foreach (FolderNode* subNode, folderNodes()) {
|
||||||
SimpleResourceFolderNode* sn = static_cast<SimpleResourceFolderNode*>(subNode);
|
SimpleResourceFolderNode* sn = static_cast<SimpleResourceFolderNode*>(subNode);
|
||||||
sn->addFilesAndSubfolders(filesToAdd, foldersToAdd, prefix, lang);
|
sn->addFilesAndSubfolders(filesToAdd, foldersToAdd, prefix, lang);
|
||||||
|
|||||||
@@ -112,8 +112,6 @@ public:
|
|||||||
QString lang() const;
|
QString lang() const;
|
||||||
ResourceTopLevelNode *resourceNode() const;
|
ResourceTopLevelNode *resourceNode() const;
|
||||||
private:
|
private:
|
||||||
void updateFolders(QList<ProjectExplorer::FolderNode *> newList);
|
|
||||||
void updateFiles(QList<ProjectExplorer::FileNode *> newList);
|
|
||||||
ResourceTopLevelNode *m_topLevelNode;
|
ResourceTopLevelNode *m_topLevelNode;
|
||||||
QString m_prefix;
|
QString m_prefix;
|
||||||
QString m_lang;
|
QString m_lang;
|
||||||
@@ -140,8 +138,6 @@ public:
|
|||||||
ResourceFolderNode *prefixNode() const;
|
ResourceFolderNode *prefixNode() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateFiles(QList<ProjectExplorer::FileNode *> newList);
|
|
||||||
void updateFolders(QList<ProjectExplorer::FolderNode *> newList);
|
|
||||||
QString m_folderName;
|
QString m_folderName;
|
||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
QString m_prefix;
|
QString m_prefix;
|
||||||
|
|||||||
Reference in New Issue
Block a user