ProjectExplorer: Merge FolderNode's m_{file,folder}Node fields

One step closer to direct use of Utils::TreeNode.

Change-Id: Icd0dfd2fa4d12c2572a68f61ae43c5e906956a0e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2017-02-08 14:50:43 +01:00
parent 719ff7047b
commit 04a525877b
9 changed files with 105 additions and 147 deletions

View File

@@ -286,7 +286,7 @@ void BuildDirManager::generateProjectTree(CMakeListsNode *root, const QList<cons
// Make sure the top level CMakeLists.txt is always visible: // Make sure the top level CMakeLists.txt is always visible:
if (root->isEmpty()) if (root->isEmpty())
root->addFileNode(new FileNode(projectFile, FileType::Project, false)); root->addNode(new FileNode(projectFile, FileType::Project, false));
} }
QSet<Core::Id> BuildDirManager::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) QSet<Core::Id> BuildDirManager::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder)

View File

@@ -224,7 +224,7 @@ static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, i
return; return;
auto folder = new VirtualFolderNode(basePath, priority); auto folder = new VirtualFolderNode(basePath, priority);
folder->setDisplayName(displayName); folder->setDisplayName(displayName);
base->addFolderNode(folder); base->addNode(folder);
folder->buildTree(files); folder->buildTree(files);
} }
@@ -236,7 +236,7 @@ static void addCMakeInputs(CMakeListsNode *root,
QList<FileNode *> &rootInputs) QList<FileNode *> &rootInputs)
{ {
ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath()); ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath());
root->addProjectNode(cmakeVFolder); root->addNode(cmakeVFolder);
addCMakeVFolder(cmakeVFolder, sourceDir, 1000, addCMakeVFolder(cmakeVFolder, sourceDir, 1000,
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Source Directory>"), QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Source Directory>"),
@@ -550,14 +550,14 @@ void ServerModeReader::addCMakeLists(CMakeListsNode *root, const QList<FileNode
cmln = static_cast<CMakeListsNode *>(parentNode->projectNode(fn->filePath())); cmln = static_cast<CMakeListsNode *>(parentNode->projectNode(fn->filePath()));
if (!cmln) { if (!cmln) {
cmln = new CMakeListsNode(fn->filePath()); cmln = new CMakeListsNode(fn->filePath());
parentNode->addProjectNode(cmln); parentNode->addNode(cmln);
} }
// Find or create CMakeLists.txt filenode below CMakeListsNode: // Find or create CMakeLists.txt filenode below CMakeListsNode:
FileNode *cmFn = cmln->fileNode(fn->filePath()); FileNode *cmFn = cmln->fileNode(fn->filePath());
if (!cmFn) { if (!cmFn) {
cmFn = fn; cmFn = fn;
cmln->addFileNode(cmFn); cmln->addNode(cmFn);
} }
// Update displayName of CMakeListsNode: // Update displayName of CMakeListsNode:
const QString dn = prefix.isEmpty() ? k : k.mid(prefix.count() + 1); const QString dn = prefix.isEmpty() ? k : k.mid(prefix.count() + 1);
@@ -601,7 +601,7 @@ static CMakeProjectNode *findOrCreateProjectNode(CMakeListsNode *root, const Uti
CMakeProjectNode *pn = static_cast<CMakeProjectNode *>(cmln->projectNode(projectName)); CMakeProjectNode *pn = static_cast<CMakeProjectNode *>(cmln->projectNode(projectName));
if (!pn) { if (!pn) {
pn = new CMakeProjectNode(projectName); pn = new CMakeProjectNode(projectName);
cmln->addProjectNode(pn); cmln->addNode(pn);
} }
pn->setDisplayName(displayName); pn->setDisplayName(displayName);
return pn; return pn;
@@ -637,7 +637,7 @@ static CMakeTargetNode *findOrCreateTargetNode(CMakeListsNode *root, const Utils
CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(cmln->projectNode(targetName)); CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(cmln->projectNode(targetName));
if (!tn) { if (!tn) {
tn = new CMakeTargetNode(targetName); tn = new CMakeTargetNode(targetName);
cmln->addProjectNode(tn); cmln->addNode(tn);
} }
tn->setDisplayName(displayName); tn->setDisplayName(displayName);
return tn; return tn;

View File

@@ -307,8 +307,7 @@ FolderNode::FolderNode(const Utils::FileName &folderPath, NodeType nodeType, con
FolderNode::~FolderNode() FolderNode::~FolderNode()
{ {
qDeleteAll(m_folderNodes); qDeleteAll(m_nodes);
qDeleteAll(m_fileNodes);
} }
/*! /*!
@@ -336,14 +335,20 @@ QIcon FolderNode::icon() const
QList<FileNode*> FolderNode::fileNodes() const QList<FileNode*> FolderNode::fileNodes() const
{ {
return m_fileNodes; QList<FileNode *> result;
for (Node *n : m_nodes) {
if (FileNode *fn = n->asFileNode())
result.append(fn);
}
return result;
} }
FileNode *FolderNode::fileNode(const Utils::FileName &file) const FileNode *FolderNode::fileNode(const Utils::FileName &file) const
{ {
return Utils::findOrDefault(m_fileNodes, [&file](const FileNode *fn) { return static_cast<FileNode *>(Utils::findOrDefault(m_nodes, [&file](const Node *n) {
return fn->filePath() == file; const FileNode *fn = n->asFileNode();
}); return fn && fn->filePath() == file;
}));
} }
FileNode *FolderNode::recursiveFileNode(const Utils::FileName &file) const FileNode *FolderNode::recursiveFileNode(const Utils::FileName &file) const
@@ -359,9 +364,10 @@ FileNode *FolderNode::recursiveFileNode(const Utils::FileName &file) const
foreach (const QString &part, parts) { foreach (const QString &part, parts) {
dir.appendPath(part); dir.appendPath(part);
// Find folder in subFolders // Find folder in subFolders
parent = Utils::findOrDefault(parent->folderNodes(), [&dir](const FolderNode *fn) { parent = static_cast<FolderNode *>(Utils::findOrDefault(parent->nodes(), [&dir](const Node *n) {
return fn->filePath() == dir; const FolderNode *fn = n->asFolderNode();
}); return fn && fn->filePath() == dir;
}));
if (!parent) if (!parent)
return nullptr; return nullptr;
} }
@@ -378,14 +384,21 @@ QList<FileNode *> FolderNode::recursiveFileNodes() const
QList<FolderNode*> FolderNode::folderNodes() const QList<FolderNode*> FolderNode::folderNodes() const
{ {
return m_folderNodes; QList<FolderNode *> result;
for (Node *n : m_nodes) {
if (FolderNode *fn = n->asFolderNode())
result.append(fn);
}
return result;
} }
FolderNode *FolderNode::folderNode(const Utils::FileName &directory) const FolderNode *FolderNode::folderNode(const Utils::FileName &directory) const
{ {
return Utils::findOrDefault(m_folderNodes, [&directory](const FolderNode *fn) { return static_cast<FolderNode *>(Utils::findOrDefault(m_nodes, [&directory](const Node *n) {
return fn->filePath() == directory; const FolderNode *fn = n->asFolderNode();
}); return fn && fn->filePath() == directory;
}));
} }
FolderNode *FolderNode::recursiveFindOrCreateFolderNode(const QString &directory, FolderNode *FolderNode::recursiveFindOrCreateFolderNode(const QString &directory,
@@ -412,7 +425,7 @@ FolderNode *FolderNode::recursiveFindOrCreateFolderNode(const QString &directory
// No FolderNode yet, so create it // No FolderNode yet, so create it
auto tmp = new ProjectExplorer::FolderNode(path); auto tmp = new ProjectExplorer::FolderNode(path);
tmp->setDisplayName(part); tmp->setDisplayName(part);
parent->addFolderNode(tmp); parent->addNode(tmp);
next = tmp; next = tmp;
} }
parent = next; parent = next;
@@ -428,7 +441,7 @@ void FolderNode::buildTree(QList<FileNode *> &files, const Utils::FileName &over
// Get relative path to rootNode // Get relative path to rootNode
QString parentDir = fn->filePath().toFileInfo().absolutePath(); QString parentDir = fn->filePath().toFileInfo().absolutePath();
ProjectExplorer::FolderNode *folder = recursiveFindOrCreateFolderNode(parentDir, overrideBaseDir); ProjectExplorer::FolderNode *folder = recursiveFindOrCreateFolderNode(parentDir, overrideBaseDir);
folder->addFileNode(fn); folder->addNode(fn);
} }
emitTreeChanged(); emitTreeChanged();
@@ -437,8 +450,10 @@ void FolderNode::buildTree(QList<FileNode *> &files, const Utils::FileName &over
void FolderNode::accept(NodesVisitor *visitor) void FolderNode::accept(NodesVisitor *visitor)
{ {
visitor->visitFolderNode(this); visitor->visitFolderNode(this);
foreach (FolderNode *subFolder, m_folderNodes) for (Node *n : m_nodes) {
if (FolderNode *subFolder = n->asFolderNode())
subFolder->accept(visitor); subFolder->accept(visitor);
}
} }
void FolderNode::setDisplayName(const QString &name) void FolderNode::setDisplayName(const QString &name)
@@ -506,22 +521,24 @@ FolderNode::AddNewInformation FolderNode::addNewInformation(const QStringList &f
} }
/*! /*!
Adds a file node specified by \a file to the internal list of the folder Adds a node specified by \a node to the internal list of nodes.
and emits the corresponding signals from the projectNode.
This function should be called within an implementation of the public function
addFiles.
*/ */
void FolderNode::addFileNode(FileNode *file) void FolderNode::addNode(Node *node)
{ {
Q_ASSERT(managingProject()); QTC_ASSERT(!node->parentFolderNode(), qDebug("File node has already a parent folder"));
node->setParentFolderNode(this);
m_nodes.append(node);
}
QTC_ASSERT(!file->parentFolderNode(), /*!
qDebug("File node has already a parent folder")); Removes a node specified by \a node from the internal list of nodes.
The node object itself is not deleted.
*/
file->setParentFolderNode(this); void FolderNode::removeNode(Node *node)
m_fileNodes.append(file); {
m_nodes.removeOne(node);
} }
/*! /*!
@@ -529,40 +546,20 @@ void FolderNode::addFileNode(FileNode *file)
and emits the corresponding signals from the projectNode. and emits the corresponding signals from the projectNode.
*/ */
void FolderNode::setFileNodes(const QList<FileNode *> &files) void FolderNode::setNodes(const QList<Node *> &nodes)
{ {
qDeleteAll(m_fileNodes); qDeleteAll(m_nodes);
m_fileNodes = files; m_nodes = nodes;
for (FileNode *node : m_fileNodes) for (Node *node : m_nodes)
node->setParentFolderNode(this); node->setParentFolderNode(this);
} }
/*! /*!
Adds a folder node specified by \a folder to the node hierarchy below Removes all files and subfolders from this folder node.
\a parentFolder and emits the corresponding signals.
*/ */
void FolderNode::addFolderNode(FolderNode *folder)
{
Q_ASSERT(managingProject());
QTC_ASSERT(!folder->parentFolderNode(),
qDebug("Project node has already a parent folder"));
folder->setParentFolderNode(this);
m_folderNodes.append(folder);
}
void FolderNode::setFolderNodes(const QList<FolderNode *> &folders)
{
qDeleteAll(m_folderNodes);
m_folderNodes = folders;
for (FolderNode *node : m_folderNodes)
node->setParentFolderNode(this);
}
void FolderNode::makeEmpty() void FolderNode::makeEmpty()
{ {
setFolderNodes({}); setNodes({});
setFileNodes({});
} }
bool FolderNode::showInSimpleTree() const bool FolderNode::showInSimpleTree() const
@@ -688,7 +685,7 @@ QList<RunConfiguration *> ProjectNode::runConfigurations() const
ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const
{ {
for (FolderNode *node : m_folderNodes) { for (Node *node : m_nodes) {
if (ProjectNode *pnode = node->asProjectNode()) if (ProjectNode *pnode = node->asProjectNode())
if (pnode->filePath() == file) if (pnode->filePath() == file)
return pnode; return pnode;
@@ -699,31 +696,16 @@ ProjectNode *ProjectNode::projectNode(const Utils::FileName &file) const
QList<ProjectNode*> FolderNode::projectNodes() const QList<ProjectNode*> FolderNode::projectNodes() const
{ {
QList<ProjectNode *> nodes; QList<ProjectNode *> nodes;
for (FolderNode *node : m_folderNodes) { for (Node *node : m_nodes) {
if (ProjectNode *pnode = node->asProjectNode()) if (ProjectNode *pnode = node->asProjectNode())
nodes.append(pnode); nodes.append(pnode);
} }
return nodes; return nodes;
} }
/*!
Adds project nodes specified by \a subProjects to the node hierarchy and
emits the corresponding signals.
*/
void ProjectNode::addProjectNode(ProjectNode *subProject)
{
QTC_ASSERT(subProject, return);
QTC_ASSERT(!subProject->parentFolderNode(), return);
subProject->setParentFolderNode(this);
m_folderNodes.append(subProject);
Utils::sort(m_folderNodes);
}
bool FolderNode::isEmpty() const bool FolderNode::isEmpty() const
{ {
return m_fileNodes.isEmpty() && m_folderNodes.isEmpty(); return m_nodes.isEmpty();
} }
/*! /*!
@@ -750,18 +732,4 @@ QString SessionNode::addFileFilter() const
return QString::fromLatin1("*.c; *.cc; *.cpp; *.cp; *.cxx; *.c++; *.h; *.hh; *.hpp; *.hxx;"); return QString::fromLatin1("*.c; *.cc; *.cpp; *.cp; *.cxx; *.c++; *.h; *.hh; *.hpp; *.hxx;");
} }
void SessionNode::addProjectNode(ProjectNode *projectNode)
{
QTC_ASSERT(!projectNode->parentFolderNode(),
qDebug("Project node has already a parent folder"));
projectNode->setParentFolderNode(this);
m_folderNodes.append(projectNode);
Utils::sort(m_folderNodes);
}
void SessionNode::removeProjectNode(ProjectNode *projectNode)
{
m_folderNodes.removeOne(projectNode);
}
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -154,12 +154,12 @@ public:
virtual const SessionNode *asSessionNode() const { return nullptr; } virtual const SessionNode *asSessionNode() const { return nullptr; }
static bool sortByPath(const Node *a, const Node *b); static bool sortByPath(const Node *a, const Node *b);
void setParentFolderNode(FolderNode *parentFolder);
protected: protected:
Node(NodeType nodeType, const Utils::FileName &filePath, int line = -1); Node(NodeType nodeType, const Utils::FileName &filePath, int line = -1);
void setPriority(int priority); void setPriority(int priority);
void setParentFolderNode(FolderNode *parentFolder);
private: private:
FolderNode *m_parentFolderNode = nullptr; FolderNode *m_parentFolderNode = nullptr;
@@ -206,6 +206,7 @@ public:
QString displayName() const override; QString displayName() const override;
QIcon icon() const; QIcon icon() const;
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;
FileNode *recursiveFileNode(const Utils::FileName &file) const; FileNode *recursiveFileNode(const Utils::FileName &file) const;
@@ -245,11 +246,9 @@ public:
// determines if node will be shown in the flat view, by default folder and projects aren't shown // determines if node will be shown in the flat view, by default folder and projects aren't shown
virtual bool showInSimpleTree() const; virtual bool showInSimpleTree() const;
void addFileNode(FileNode *file); void addNode(Node *node);
void setFileNodes(const QList<FileNode*> &files); void removeNode(Node *node);
void setNodes(const QList<Node *> &nodes);
void addFolderNode(FolderNode *subFolder);
void setFolderNodes(const QList<FolderNode*> &folders);
// all subFolders that are projects // all subFolders that are projects
QList<ProjectNode*> projectNodes() const; QList<ProjectNode*> projectNodes() const;
@@ -261,8 +260,7 @@ public:
const FolderNode *asFolderNode() const override { return this; } const FolderNode *asFolderNode() const override { return this; }
protected: protected:
QList<FolderNode*> m_folderNodes; QList<Node *> m_nodes;
QList<FileNode*> m_fileNodes;
private: private:
QString m_displayName; QString m_displayName;
@@ -300,7 +298,6 @@ public:
virtual QList<RunConfiguration *> runConfigurations() const; virtual QList<RunConfiguration *> runConfigurations() const;
ProjectNode *projectNode(const Utils::FileName &file) const; ProjectNode *projectNode(const Utils::FileName &file) const;
void addProjectNode(ProjectNode *subProject);
ProjectNode *asProjectNode() final { return this; } ProjectNode *asProjectNode() final { return this; }
const ProjectNode *asProjectNode() const final { return this; } const ProjectNode *asProjectNode() const final { return this; }
@@ -330,10 +327,6 @@ private:
SessionNode *asSessionNode() final { return this; } SessionNode *asSessionNode() final { return this; }
const SessionNode *asSessionNode() const final { return this; } const SessionNode *asSessionNode() const final { return this; }
friend class SessionManager;
void addProjectNode(ProjectNode *projectNode);
void removeProjectNode(ProjectNode *projectNode);
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -381,7 +381,7 @@ void SessionManager::addProject(Project *pro)
QTC_ASSERT(!d->m_projects.contains(pro), return); QTC_ASSERT(!d->m_projects.contains(pro), return);
d->m_projects.append(pro); d->m_projects.append(pro);
d->m_sessionNode.addProjectNode(pro->rootProjectNode()); d->m_sessionNode.addNode(pro->rootProjectNode());
connect(pro, &Project::fileListChanged, connect(pro, &Project::fileListChanged,
m_instance, &SessionManager::clearProjectFileCache); m_instance, &SessionManager::clearProjectFileCache);
@@ -738,7 +738,7 @@ void SessionManager::removeProjects(QList<Project *> remove)
m_instance, &SessionManager::clearProjectFileCache); m_instance, &SessionManager::clearProjectFileCache);
d->m_projectFileCache.remove(pro); d->m_projectFileCache.remove(pro);
d->m_sessionNode.removeProjectNode(pro->rootProjectNode()); d->m_sessionNode.removeNode(pro->rootProjectNode());
emit m_instance->projectRemoved(pro); emit m_instance->projectRemoved(pro);
delete pro; delete pro;
} }

View File

@@ -322,7 +322,7 @@ QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath
setIcon(m_groupIcon); setIcon(m_groupIcon);
addFileNode(new QbsFileNode(Utils::FileName::fromString(grp.location().filePath()), addNode(new QbsFileNode(Utils::FileName::fromString(grp.location().filePath()),
ProjectExplorer::FileType::Project, false, ProjectExplorer::FileType::Project, false,
grp.location().line())); grp.location().line()));
@@ -472,7 +472,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
} }
if (!fn) { if (!fn) {
fn = new ProjectExplorer::FileNode(path, newFileType, generated); fn = new ProjectExplorer::FileNode(path, newFileType, generated);
root->addFileNode(fn); root->addNode(fn);
} }
continue; continue;
} else { } else {
@@ -493,7 +493,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
ProjectExplorer::NodeType::Folder, ProjectExplorer::NodeType::Folder,
displayNameFromPath(c->path(), baseDir), false); displayNameFromPath(c->path(), baseDir), false);
} }
root->addFolderNode(fn); root->addNode(fn);
} else { } else {
fn->setDisplayName(displayNameFromPath(c->path(), baseDir)); fn->setDisplayName(displayNameFromPath(c->path(), baseDir));
} }
@@ -542,8 +542,8 @@ QbsProductNode::QbsProductNode(const qbs::Project &project, const qbs::ProductDa
setIcon(m_productIcon); setIcon(m_productIcon);
addFolderNode(m_generatedFilesNode); addNode(m_generatedFilesNode);
addFileNode(new QbsFileNode(Utils::FileName::fromString(prd.location().filePath()), addNode(new QbsFileNode(Utils::FileName::fromString(prd.location().filePath()),
ProjectExplorer::FileType::Project, false, ProjectExplorer::FileType::Project, false,
prd.location().line())); prd.location().line()));
@@ -641,7 +641,7 @@ void QbsProductNode::setQbsProductData(const qbs::Project &project, const qbs::P
QbsGroupNode::setupFiles(this, grp, grp.allFilePaths(), productPath, false); QbsGroupNode::setupFiles(this, grp, grp.allFilePaths(), productPath, false);
continue; continue;
} }
addProjectNode(new QbsGroupNode(grp, productPath)); addNode(new QbsGroupNode(grp, productPath));
} }
if (prd.isEnabled()) { if (prd.isEnabled()) {
@@ -703,11 +703,11 @@ void QbsProjectNode::update(const qbs::Project &qbsProject, const qbs::ProjectDa
auto subProject = auto subProject =
new QbsProjectNode(Utils::FileName::fromString(subData.location().filePath())); new QbsProjectNode(Utils::FileName::fromString(subData.location().filePath()));
subProject->update(qbsProject, subData); subProject->update(qbsProject, subData);
addProjectNode(subProject); addNode(subProject);
} }
foreach (const qbs::ProductData &prd, prjData.products()) foreach (const qbs::ProductData &prd, prjData.products())
addProjectNode(new QbsProductNode(qbsProject, prd)); addNode(new QbsProductNode(qbsProject, prd));
if (!prjData.name().isEmpty()) if (!prjData.name().isEmpty())
setDisplayName(prjData.name()); setDisplayName(prjData.name());
@@ -738,7 +738,7 @@ void QbsProjectNode::ctor()
m_projectIcon = generateIcon(QString::fromLatin1(ProjectExplorer::Constants::FILEOVERLAY_QT)); m_projectIcon = generateIcon(QString::fromLatin1(ProjectExplorer::Constants::FILEOVERLAY_QT));
setIcon(m_projectIcon); setIcon(m_projectIcon);
addFileNode(new ProjectExplorer::FileNode(filePath(), ProjectExplorer::FileType::Project, false)); addNode(new ProjectExplorer::FileNode(filePath(), ProjectExplorer::FileType::Project, false));
} }
QbsProductNode *QbsProjectNode::findProductNode(const QString &uniqueName) QbsProductNode *QbsProjectNode::findProductNode(const QString &uniqueName)
@@ -772,7 +772,7 @@ QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) :
ProjectExplorer::NodeType::Folder, ProjectExplorer::NodeType::Folder,
QCoreApplication::translate("QbsRootProjectNode", "Qbs files"))) QCoreApplication::translate("QbsRootProjectNode", "Qbs files")))
{ {
addFolderNode(m_buildSystemFiles); addNode(m_buildSystemFiles);
} }
void QbsRootProjectNode::update() void QbsRootProjectNode::update()

View File

@@ -405,19 +405,19 @@ struct InternalNode
if (contents.isEmpty()) if (contents.isEmpty())
vfs->readVirtualFile(file.toString(), QMakeVfs::VfsExact, &contents); vfs->readVirtualFile(file.toString(), QMakeVfs::VfsExact, &contents);
auto resourceNode = new ResourceEditor::ResourceTopLevelNode(file, contents, folder); auto resourceNode = new ResourceEditor::ResourceTopLevelNode(file, contents, folder);
folder->addFolderNode(resourceNode); folder->addNode(resourceNode);
resourceNode->addInternalNodes(); resourceNode->addInternalNodes();
} }
} else { } else {
for (const FileName &file : files) for (const FileName &file : files)
folder->addFileNode(new FileNode(file, type, false)); folder->addNode(new FileNode(file, type, false));
} }
// Virtual // Virtual
{ {
for (InternalNode *node : virtualfolders) { for (InternalNode *node : virtualfolders) {
FolderNode *newNode = createFolderNode(node); FolderNode *newNode = createFolderNode(node);
folder->addFolderNode(newNode); folder->addNode(newNode);
node->addSubFolderContents(newNode); node->addSubFolderContents(newNode);
} }
} }
@@ -427,7 +427,7 @@ struct InternalNode
QMap<QString, InternalNode *>::const_iterator end = subnodes.constEnd(); QMap<QString, InternalNode *>::const_iterator end = subnodes.constEnd();
for ( ; it != end; ++it) { for ( ; it != end; ++it) {
FolderNode *newNode = createFolderNode(it.value()); FolderNode *newNode = createFolderNode(it.value());
folder->addFolderNode(newNode); folder->addNode(newNode);
it.value()->addSubFolderContents(newNode); it.value()->addSubFolderContents(newNode);
} }
} }
@@ -591,8 +591,8 @@ void QmakePriFileNode::processValues(PriFileEvalResult &result)
void QmakePriFileNode::update(const Internal::PriFileEvalResult &result) void QmakePriFileNode::update(const Internal::PriFileEvalResult &result)
{ {
// add project file node // add project file node
if (m_fileNodes.isEmpty()) if (m_nodes.isEmpty())
addFileNode(new FileNode(m_projectFilePath, FileType::Project, false)); addNode(new FileNode(m_projectFilePath, FileType::Project, false));
m_recursiveEnumerateFiles = result.recursiveEnumerateFiles; m_recursiveEnumerateFiles = result.recursiveEnumerateFiles;
watchFolders(result.folders.toSet()); watchFolders(result.folders.toSet());
@@ -1979,14 +1979,14 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult)
if (priFile->proFile) { if (priFile->proFile) {
QmakePriFileNode *qmakePriFileNode = new QmakePriFileNode(m_project, this, priFile->name); QmakePriFileNode *qmakePriFileNode = new QmakePriFileNode(m_project, this, priFile->name);
pn->addProjectNode(qmakePriFileNode); pn->addNode(qmakePriFileNode);
qmakePriFileNode->setIncludedInExactParse( qmakePriFileNode->setIncludedInExactParse(
(result->state == EvalResult::EvalOk) && pn->includedInExactParse()); (result->state == EvalResult::EvalOk) && pn->includedInExactParse());
qmakePriFileNode->update(priFile->result); qmakePriFileNode->update(priFile->result);
toCompare.append(qMakePair(qmakePriFileNode, priFile)); toCompare.append(qMakePair(qmakePriFileNode, priFile));
} else { } else {
QmakeProFileNode *qmakeProFileNode = new QmakeProFileNode(m_project, priFile->name); QmakeProFileNode *qmakeProFileNode = new QmakeProFileNode(m_project, priFile->name);
pn->addProjectNode(qmakeProFileNode); pn->addNode(qmakeProFileNode);
qmakeProFileNode->setIncludedInExactParse( qmakeProFileNode->setIncludedInExactParse(
result->exactSubdirs.contains(qmakeProFileNode->filePath()) result->exactSubdirs.contains(qmakeProFileNode->filePath())
&& pn->includedInExactParse()); && pn->includedInExactParse());

View File

@@ -121,7 +121,7 @@ ResourceTopLevelNode::~ResourceTopLevelNode()
void ResourceTopLevelNode::addInternalNodes() void ResourceTopLevelNode::addInternalNodes()
{ {
QMap<PrefixFolderLang, QList<ProjectExplorer::FileNode *>> filesToAdd; QMap<PrefixFolderLang, QList<ProjectExplorer::Node *>> nodesToAdd;
QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAddToFolders; QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAddToFolders;
QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAddToPrefix; QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAddToPrefix;
@@ -138,7 +138,7 @@ void ResourceTopLevelNode::addInternalNodes()
PrefixFolderLang prefixId(prefix, QString(), lang); PrefixFolderLang prefixId(prefix, QString(), lang);
if (!prefixNodes.contains(prefixId)) { if (!prefixNodes.contains(prefixId)) {
ProjectExplorer::FolderNode *fn = new ResourceFolderNode(file.prefix(i), file.lang(i), this); ProjectExplorer::FolderNode *fn = new ResourceFolderNode(file.prefix(i), file.lang(i), this);
addFolderNode(fn); addNode(fn);
prefixNodes.insert(prefixId, fn); prefixNodes.insert(prefixId, fn);
} }
ResourceFolderNode *currentPrefixNode = static_cast<ResourceFolderNode*>(prefixNodes[prefixId]); ResourceFolderNode *currentPrefixNode = static_cast<ResourceFolderNode*>(prefixNodes[prefixId]);
@@ -189,6 +189,7 @@ void ResourceTopLevelNode::addInternalNodes()
} else { } else {
PrefixFolderLang parentFolderId(prefix, parentFolderName, lang); PrefixFolderLang parentFolderId(prefix, parentFolderName, lang);
foldersToAddToFolders[parentFolderId] << newNode; foldersToAddToFolders[parentFolderId] << newNode;
nodesToAdd[parentFolderId] << newNode;
} }
folderNodes.insert(folderId, newNode); folderNodes.insert(folderId, newNode);
} }
@@ -198,9 +199,9 @@ void ResourceTopLevelNode::addInternalNodes()
const QString qrcPath = QDir::cleanPath(prefixWithSlash + alias); const QString qrcPath = QDir::cleanPath(prefixWithSlash + alias);
fileNames.insert(fileName); fileNames.insert(fileName);
filesToAdd[folderId] auto rn = new ResourceFileNode(Utils::FileName::fromString(fileName),
<< new ResourceFileNode(Utils::FileName::fromString(fileName),
qrcPath, displayName); qrcPath, displayName);
nodesToAdd[folderId] << rn;
} }
} }
} }
@@ -209,11 +210,10 @@ void ResourceTopLevelNode::addInternalNodes()
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->setFileNodes(filesToAdd[folderId]); srn->setNodes(nodesToAdd[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(foldersToAddToFolders, nodesToAdd, srn->prefix(), srn->lang());
} }
} }
} }
@@ -649,16 +649,13 @@ ResourceFolderNode *SimpleResourceFolderNode::prefixNode() const
return m_prefixNode; return m_prefixNode;
} }
void SimpleResourceFolderNode::addFilesAndSubfolders(QMap<PrefixFolderLang, void SimpleResourceFolderNode::addFilesAndSubfolders(QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode*> > foldersToAdd,
QList<ProjectExplorer::FileNode *>> filesToAdd, QMap<PrefixFolderLang, QList<ProjectExplorer::Node*> > nodesToAdd,
QMap<PrefixFolderLang,
QList<ProjectExplorer::FolderNode*> > foldersToAdd,
const QString &prefix, const QString &lang) const QString &prefix, const QString &lang)
{ {
setFileNodes(filesToAdd.value(PrefixFolderLang(prefix, m_folderName, lang))); setNodes(nodesToAdd.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(foldersToAdd, nodesToAdd, prefix, lang);
} }
} }

View File

@@ -122,8 +122,8 @@ public:
const QString &prefix, const QString &lang, Utils::FileName absolutePath, const QString &prefix, const QString &lang, Utils::FileName absolutePath,
ResourceTopLevelNode *topLevel, ResourceFolderNode *prefixNode); ResourceTopLevelNode *topLevel, ResourceFolderNode *prefixNode);
QList<ProjectExplorer::ProjectAction> supportedActions(ProjectExplorer::Node *node) const; QList<ProjectExplorer::ProjectAction> supportedActions(ProjectExplorer::Node *node) const;
void addFilesAndSubfolders(QMap<PrefixFolderLang, QList<ProjectExplorer::FileNode *>> filesToAdd, void addFilesAndSubfolders(QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAdd,
QMap<PrefixFolderLang, QList<ProjectExplorer::FolderNode *>> foldersToAdd, QMap<PrefixFolderLang, QList<ProjectExplorer::Node *>> nodesToAdd,
const QString &prefix, const QString &lang); const QString &prefix, const QString &lang);
bool addFiles(const QStringList &filePaths, QStringList *notAdded); bool addFiles(const QStringList &filePaths, QStringList *notAdded);
bool removeFiles(const QStringList &filePaths, QStringList *notRemoved); bool removeFiles(const QStringList &filePaths, QStringList *notRemoved);