diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 1e294f13711..7f446363d23 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2842,21 +2842,22 @@ void ProjectExplorerPlugin::addExistingDirectory() void ProjectExplorerPlugin::addExistingFiles(const QStringList &filePaths) { - addExistingFiles(d->m_currentNode->projectNode(), filePaths); + FolderNode *folderNode = qobject_cast(d->m_currentNode); + addExistingFiles(folderNode, filePaths); } -void ProjectExplorerPlugin::addExistingFiles(ProjectNode *projectNode, const QStringList &filePaths) +void ProjectExplorerPlugin::addExistingFiles(FolderNode *folderNode, const QStringList &filePaths) { - if (!projectNode) // can happen when project is not yet parsed + if (!folderNode) // can happen when project is not yet parsed return; - const QString dir = directoryFor(projectNode); + const QString dir = directoryFor(folderNode); QStringList fileNames = filePaths; QStringList notAdded; - projectNode->addFiles(fileNames, ¬Added); + folderNode->addFiles(fileNames, ¬Added); if (!notAdded.isEmpty()) { - QString message = tr("Could not add following files to project %1:").arg(projectNode->displayName()); + QString message = tr("Could not add following files to project %1:").arg(folderNode->projectNode()->displayName()); message += QLatin1Char('\n'); QString files = notAdded.join(QString(QLatin1Char('\n'))); QMessageBox::warning(ICore::mainWindow(), tr("Adding Files to Project Failed"), @@ -2918,12 +2919,12 @@ void ProjectExplorerPlugin::removeFile() const bool deleteFile = removeFileDialog.isDeleteFileChecked(); // remove from project - ProjectNode *projectNode = fileNode->projectNode(); - Q_ASSERT(projectNode); + FolderNode *folderNode = fileNode->parentFolderNode(); + Q_ASSERT(folderNode); - if (!projectNode->removeFiles(QStringList(filePath))) { + if (!folderNode->removeFiles(QStringList(filePath))) { QMessageBox::warning(ICore::mainWindow(), tr("Removing File Failed"), - tr("Could not remove file %1 from project %2.").arg(filePath).arg(projectNode->displayName())); + tr("Could not remove file %1 from project %2.").arg(filePath).arg(folderNode->projectNode()->displayName())); return; } @@ -2946,10 +2947,10 @@ void ProjectExplorerPlugin::deleteFile() if (button != QMessageBox::Yes) return; - ProjectNode *projectNode = fileNode->projectNode(); - QTC_ASSERT(projectNode, return); + FolderNode *folderNode = fileNode->parentFolderNode(); + QTC_ASSERT(folderNode, return); - projectNode->deleteFiles(QStringList(filePath)); + folderNode->deleteFiles(QStringList(filePath)); DocumentManager::expectFileChange(filePath); if (IVersionControl *vc = @@ -2989,13 +2990,13 @@ void ProjectExplorerPlugin::renameFile(Node *node, const QString &to) if (Core::FileUtils::renameFile(orgFilePath, newFilePath)) { // Tell the project plugin about rename - ProjectNode *projectNode = fileNode->projectNode(); - if (!projectNode->renameFile(orgFilePath, newFilePath)) { + FolderNode *folderNode = fileNode->parentFolderNode(); + if (!folderNode->renameFile(orgFilePath, newFilePath)) { QMessageBox::warning(ICore::mainWindow(), tr("Project Editing Failed"), tr("The file %1 was renamed to %2, but the project file %3 could not be automatically changed.") .arg(orgFilePath) .arg(newFilePath) - .arg(projectNode->displayName())); + .arg(folderNode->projectNode()->displayName())); } else { setCurrent(SessionManager::projectForFile(newFilePath), newFilePath, 0); } diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 9d4a8f0d9e1..73989a662c2 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -55,7 +55,7 @@ class IRunControlFactory; class Project; class Node; class BuildConfiguration; -class ProjectNode; +class FolderNode; class TaskHub; namespace Internal { class ProjectExplorerSettings; } @@ -112,7 +112,7 @@ public: void runRunConfiguration(ProjectExplorer::RunConfiguration *rc, RunMode runMode, const bool forceSkipDeploy = false); - void addExistingFiles(ProjectExplorer::ProjectNode *projectNode, const QStringList &filePaths); + void addExistingFiles(ProjectExplorer::FolderNode *projectNode, const QStringList &filePaths); void addExistingFiles(const QStringList &filePaths); void buildProject(ProjectExplorer::Project *p); diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 942f3e814b3..b40258770a8 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -329,6 +329,34 @@ FolderNode *FolderNode::findSubFolder(const QString &path) return 0; } +bool FolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +{ + if (projectNode()) + return projectNode()->addFiles(filePaths, notAdded); + return false; +} + +bool FolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +{ + if (projectNode()) + return projectNode()->removeFiles(filePaths, notRemoved); + return false; +} + +bool FolderNode::deleteFiles(const QStringList &filePaths) +{ + if (projectNode()) + return projectNode()->deleteFiles(filePaths); + return false; +} + +bool FolderNode::renameFile(const QString &filePath, const QString &newFilePath) +{ + if (projectNode()) + return projectNode()->renameFile(filePath, newFilePath); + return false; +} + /*! \class ProjectExplorer::VirtualFolderNode diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 547bb83d827..1ea49a39aab 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -173,6 +173,11 @@ public: FileNode *findFile(const QString &path); FolderNode *findSubFolder(const QString &path); + virtual bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); + virtual bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); + virtual bool deleteFiles(const QStringList &filePaths); + virtual bool renameFile(const QString &filePath, const QString &newFilePath); + protected: QList m_subFolderNodes; QList m_fileNodes; @@ -219,10 +224,6 @@ public: virtual bool removeSubProjects(const QStringList &proFilePaths) = 0; - virtual bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) = 0; - virtual bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) = 0; - virtual bool deleteFiles(const QStringList &filePaths) = 0; - virtual bool renameFile(const QString &filePath, const QString &newFilePath) = 0; // by default returns false virtual bool deploysFolder(const QString &folder) const;