Resource file in project tree

Task-number: QTCREATORBUG-1346
Change-Id: I0cbb5633ef06a4762c48af46d9da551c67259d70
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Daniel Teske
2014-02-18 21:38:03 +01:00
parent 1e9984322b
commit 9310b652eb
13 changed files with 969 additions and 14 deletions

View File

@@ -51,6 +51,8 @@
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/uicodemodelsupport.h>
#include <resourceeditor/resourcenode.h>
#include <cpptools/cppmodelmanagerinterface.h>
#include <cpptools/cpptoolsconstants.h>
@@ -394,12 +396,15 @@ struct InternalNode
// Makes the projectNode's subtree below the given folder match this internal node's subtree
void updateSubFolders(ProjectExplorer::FolderNode *folder)
{
updateFiles(folder, type);
if (type == ProjectExplorer::ResourceType)
updateResourceFiles(folder);
else
updateFiles(folder, type);
// updateFolders
QMultiMap<QString, FolderNode *> existingFolderNodes;
foreach (FolderNode *node, folder->subFolderNodes())
if (node->nodeType() != ProjectNodeType)
if (node->nodeType() != ProjectNodeType && !qobject_cast<ResourceEditor::ResourceTopLevelNode *>(node))
existingFolderNodes.insert(node->path(), node);
QList<FolderNode *> foldersToRemove;
@@ -507,6 +512,37 @@ struct InternalNode
folder->removeFileNodes(filesToRemove);
folder->addFileNodes(nodesToAdd);
}
// Makes the folder's files match this internal node's file list
void updateResourceFiles(FolderNode *folder)
{
QList<ProjectExplorer::FolderNode *> existingResourceNodes; // for resource special handling
foreach (FolderNode *folderNode, folder->subFolderNodes()) {
if (ResourceEditor::ResourceTopLevelNode *rn = qobject_cast<ResourceEditor::ResourceTopLevelNode *>(folderNode))
existingResourceNodes << rn;
}
QList<ProjectExplorer::FolderNode *> resourcesToRemove;
QStringList resourcesToAdd;
SortByPath sortByPath;
qSort(files.begin(), files.end(), sortByPath);
qSort(existingResourceNodes.begin(), existingResourceNodes.end(), sortByPath);
ProjectExplorer::compareSortedLists(existingResourceNodes, files, resourcesToRemove, resourcesToAdd, sortByPath);
QList<FolderNode *> nodesToAdd;
nodesToAdd.reserve(resourcesToAdd.size());
foreach (const QString &file, resourcesToAdd)
nodesToAdd.append(new ResourceEditor::ResourceTopLevelNode(file, folder));
folder->removeFolderNodes(resourcesToRemove);
folder->addFolderNodes(nodesToAdd);
foreach (FolderNode *fn, nodesToAdd)
qobject_cast<ResourceEditor::ResourceTopLevelNode *>(fn)->update();
}
};
}
@@ -866,7 +902,8 @@ QList<ProjectExplorer::ProjectAction> QmakePriFileNode::supportedActions(Node *n
}
ProjectExplorer::FileNode *fileNode = qobject_cast<FileNode *>(node);
if (fileNode && fileNode->fileType() != ProjectExplorer::ProjectFileType)
if ((fileNode && fileNode->fileType() != ProjectExplorer::ProjectFileType)
|| qobject_cast<ResourceEditor::ResourceTopLevelNode *>(node))
actions << ProjectExplorer::Rename;