diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index faeb2cf7028..9b8fbc9e121 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -143,9 +143,11 @@ public: return m_project->addFiles(filePaths); } - bool removeFiles(const QStringList &filePaths, QStringList * = nullptr) override + RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList * = nullptr) override { - return m_project->removeFiles(filePaths); + return m_project->removeFiles(filePaths) ? RemovedFilesFromProject::Ok + : RemovedFilesFromProject::Error; } bool renameFile(const QString &filePath, const QString &newFilePath) override diff --git a/src/plugins/nim/project/nimprojectnode.cpp b/src/plugins/nim/project/nimprojectnode.cpp index 6a6385b67ec..85a0d1c4605 100644 --- a/src/plugins/nim/project/nimprojectnode.cpp +++ b/src/plugins/nim/project/nimprojectnode.cpp @@ -56,9 +56,11 @@ bool NimProjectNode::addFiles(const QStringList &filePaths, QStringList *) return m_project.addFiles(filePaths); } -bool NimProjectNode::removeFiles(const QStringList &filePaths, QStringList *) +RemovedFilesFromProject NimProjectNode::removeFiles(const QStringList &filePaths, + QStringList *) { - return m_project.removeFiles(filePaths); + return m_project.removeFiles(filePaths) ? RemovedFilesFromProject::Ok + : RemovedFilesFromProject::Error; } bool NimProjectNode::deleteFiles(const QStringList &) diff --git a/src/plugins/nim/project/nimprojectnode.h b/src/plugins/nim/project/nimprojectnode.h index 6a950bdf4f4..f26285c517a 100644 --- a/src/plugins/nim/project/nimprojectnode.h +++ b/src/plugins/nim/project/nimprojectnode.h @@ -40,7 +40,8 @@ public: bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override; bool addFiles(const QStringList &filePaths, QStringList *) override; - bool removeFiles(const QStringList &filePaths, QStringList *) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *) override; bool deleteFiles(const QStringList &) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index 6ff9c9719ac..817167523ed 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -554,10 +554,9 @@ void FolderNavigationWidget::removeCurrentItem() const QVector folderNodes = removableFolderNodes( Utils::FilePath::fromString(filePath)); const QVector failedNodes = Utils::filtered(folderNodes, - [filePath](FolderNode *folder) { - return !folder->removeFiles( - {filePath}); - }); + [filePath](FolderNode *folder) { + return folder->removeFiles({filePath}) != RemovedFilesFromProject::Ok; + }); Core::FileChangeBlocker changeGuard(filePath); Core::FileUtils::removeFile(filePath, true /*delete from disk*/); if (!failedNodes.isEmpty()) { diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 867e53af13e..a4aa2f0ddb9 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -3642,7 +3642,12 @@ void ProjectExplorerPluginPrivate::removeFile() FolderNode *folderNode = currentNode->asFileNode()->parentFolderNode(); QTC_ASSERT(folderNode, return); - if (!folderNode->removeFiles(QStringList(filePath.toString()))) { + const RemovedFilesFromProject status + = folderNode->removeFiles(QStringList(filePath.toString())); + const bool success = status == RemovedFilesFromProject::Ok + || (status == RemovedFilesFromProject::Wildcard + && removeFileDialog.isDeleteFileChecked()); + if (!success) { QMessageBox::warning(ICore::mainWindow(), tr("Removing File Failed"), tr("Could not remove file %1 from project %2.") .arg(filePath.toUserOutput()) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index c2c02b1d024..839f021f2bf 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -685,7 +685,10 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r if (vcsAddPossible && !targetVcs.vcs->vcsAdd(targetFile)) failedVcsOp << targetFile; } - sourceProjectNode->removeFiles(filesToRemove, &failedRemoveFromProject); + const RemovedFilesFromProject result + = sourceProjectNode->removeFiles(filesToRemove, &failedRemoveFromProject); + if (result == RemovedFilesFromProject::Wildcard) + failedRemoveFromProject.clear(); targetProjectNode->addFiles(filesToAdd, &failedAddToProject); break; } diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index cad8be108b3..9407af7be6a 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -705,12 +705,12 @@ bool FolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) return false; } -bool FolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject FolderNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { - ProjectNode *pn = managingProject(); - if (pn) + if (ProjectNode * const pn = managingProject()) return pn->removeFiles(filePaths, notRemoved); - return false; + return RemovedFilesFromProject::Error; } bool FolderNode::deleteFiles(const QStringList &filePaths) @@ -848,11 +848,12 @@ bool ProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded) return false; } -bool ProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject ProjectNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { Q_UNUSED(filePaths) Q_UNUSED(notRemoved) - return false; + return RemovedFilesFromProject::Error; } bool ProjectNode::deleteFiles(const QStringList &filePaths) diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index e6afdda0384..2d1968affec 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -84,6 +84,8 @@ enum ProjectAction { HideFolderActions, }; +enum class RemovedFilesFromProject { Ok, Wildcard, Error }; + class FileNode; class FolderNode; class ProjectNode; @@ -262,7 +264,8 @@ public: bool supportsAction(ProjectAction action, const Node *node) const override; virtual bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr); - virtual bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr); + virtual RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved = nullptr); virtual bool deleteFiles(const QStringList &filePaths); virtual bool canRenameFile(const QString &filePath, const QString &newFilePath); virtual bool renameFile(const QString &filePath, const QString &newFilePath); @@ -338,7 +341,8 @@ public: bool showInSimpleTree() const override { return true; } bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override; + RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved = nullptr) override; bool deleteFiles(const QStringList &filePaths) override; bool canRenameFile(const QString &filePath, const QString &newFilePath) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index 8dd87ebbdab..bae2a90f7bb 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -123,7 +123,8 @@ public: bool supportsAction(ProjectAction action, const Node *node) const override; bool addFiles(const QStringList &filePaths, QStringList *) override; - bool removeFiles(const QStringList &filePaths, QStringList *) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *) override; bool deleteFiles(const QStringList &) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; @@ -692,9 +693,10 @@ bool PythonProjectNode::addFiles(const QStringList &filePaths, QStringList *) return m_project->addFiles(filePaths); } -bool PythonProjectNode::removeFiles(const QStringList &filePaths, QStringList *) +RemovedFilesFromProject PythonProjectNode::removeFiles(const QStringList &filePaths, QStringList *) { - return m_project->removeFiles(filePaths); + return m_project->removeFiles(filePaths) ? RemovedFilesFromProject::Ok + : RemovedFilesFromProject::Error; } bool PythonProjectNode::deleteFiles(const QStringList &) diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index aff90d75bcf..285ad6710b9 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -276,7 +276,8 @@ bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded) m_qbsGroupData, notAdded); } -bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject QbsGroupNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { QStringList notRemovedDummy; if (!notRemoved) @@ -285,13 +286,13 @@ bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRem const QbsProjectNode *prjNode = parentQbsProjectNode(this); if (!prjNode || !prjNode->qbsProject().isValid()) { *notRemoved += filePaths; - return false; + return RemovedFilesFromProject::Error; } const QbsProductNode *prdNode = parentQbsProductNode(this); if (!prdNode || !prdNode->qbsProductData().isValid()) { *notRemoved += filePaths; - return false; + return RemovedFilesFromProject::Error; } return prjNode->project()->removeFilesFromProduct(filePaths, prdNode->qbsProductData(), @@ -361,7 +362,8 @@ bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdde QTC_ASSERT(false, return false); } -bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject QbsProductNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { QStringList notRemovedDummy; if (!notRemoved) @@ -370,7 +372,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR const QbsProjectNode *prjNode = parentQbsProjectNode(this); if (!prjNode || !prjNode->qbsProject().isValid()) { *notRemoved += filePaths; - return false; + return RemovedFilesFromProject::Error; } qbs::GroupData grp = findMainQbsGroup(m_qbsProductData); @@ -379,7 +381,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR notRemoved); } - QTC_ASSERT(false, return false); + QTC_ASSERT(false, return RemovedFilesFromProject::Error); } bool QbsProductNode::renameFile(const QString &filePath, const QString &newFilePath) diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index 6927c00db24..f01f65a0309 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -47,7 +47,8 @@ public: bool showInSimpleTree() const final { return false; } bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final; bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved = nullptr) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; private: @@ -68,7 +69,8 @@ public: bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final; bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved = nullptr) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; void build() override; QStringList targetApplications() const override; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 788d8bc9f95..9bbbff89126 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -296,31 +296,50 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths, return notAdded->isEmpty(); } -bool QbsProject::removeFilesFromProduct(const QStringList &filePaths, - const qbs::ProductData productData, - const qbs::GroupData groupData, - QStringList *notRemoved) +RemovedFilesFromProject QbsProject::removeFilesFromProduct(const QStringList &filePaths, + const qbs::ProductData &productData, + const qbs::GroupData &groupData, + QStringList *notRemoved) { - QTC_ASSERT(m_qbsProject.isValid(), return false); - QStringList allPaths = groupData.allFilePaths(); + QTC_ASSERT(m_qbsProject.isValid(), return RemovedFilesFromProject::Error); + + const QList allWildcardsInGroup = groupData.sourceArtifactsFromWildcards(); + QStringList wildcardFiles; + QStringList nonWildcardFiles; + for (const QString &filePath : filePaths) { + if (contains(allWildcardsInGroup, [filePath](const qbs::ArtifactData &artifact) { + return artifact.filePath() == filePath; })) { + wildcardFiles << filePath; + } else { + nonWildcardFiles << filePath; + } + } const QString productFilePath = productData.location().filePath(); ChangeExpector expector(productFilePath, m_qbsDocuments); ensureWriteableQbsFile(productFilePath); - foreach (const QString &path, filePaths) { - qbs::ErrorInfo err - = m_qbsProject.removeFiles(productData, groupData, QStringList() << path); + for (const QString &path : qAsConst(nonWildcardFiles)) { + const qbs::ErrorInfo err = m_qbsProject.removeFiles(productData, groupData, {path}); if (err.hasError()) { MessageManager::write(err.toString()); *notRemoved += path; - } else { - allPaths.removeOne(path); } } + if (notRemoved->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); delayedUpdateAfterParse(); } - return notRemoved->isEmpty(); + + const bool success = notRemoved->isEmpty(); + if (!wildcardFiles.isEmpty()) { + *notRemoved += wildcardFiles; + delayParsing(); + } + if (!success) + return RemovedFilesFromProject::Error; + if (!wildcardFiles.isEmpty()) + return RemovedFilesFromProject::Wildcard; + return RemovedFilesFromProject::Ok; } bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newPath, @@ -330,8 +349,10 @@ bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newP if (newPath.isEmpty()) return false; QStringList dummy; - if (!removeFilesFromProduct(QStringList(oldPath), productData, groupData, &dummy)) + if (removeFilesFromProduct(QStringList(oldPath), productData, groupData, &dummy) + != RemovedFilesFromProject::Ok) { return false; + } qbs::ProductData newProductData; foreach (const qbs::ProductData &p, m_projectData.allProducts()) { if (uniqueProductName(p) == uniqueProductName(productData)) { diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index f186bb2c13f..8489cd708a5 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -67,8 +67,8 @@ public: // for shared data. bool addFilesToProduct(const QStringList &filePaths, const qbs::ProductData productData, const qbs::GroupData groupData, QStringList *notAdded); - bool removeFilesFromProduct(const QStringList &filePaths, - const qbs::ProductData productData, const qbs::GroupData groupData, + ProjectExplorer::RemovedFilesFromProject removeFilesFromProduct(const QStringList &filePaths, + const qbs::ProductData &productData, const qbs::GroupData &groupData, QStringList *notRemoved); bool renameFileInProduct(const QString &oldPath, const QString &newPath, const qbs::ProductData productData, diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 984be6e96c7..8c8d5d5d7a6 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -195,10 +195,28 @@ bool QmakePriFileNode::addFiles(const QStringList &filePaths, QStringList *notAd return pri->addFiles(actualFilePaths, notAdded); } -bool QmakePriFileNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject QmakePriFileNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { - QmakePriFile *pri = priFile(); - return pri ? pri->removeFiles(filePaths, notRemoved) : false; + QmakePriFile * const pri = priFile(); + if (!pri) + return RemovedFilesFromProject::Error; + QStringList wildcardFiles; + QStringList nonWildcardFiles; + for (const QString &file : filePaths) { + if (pri->proFile()->isFileFromWildcard(file)) + wildcardFiles << file; + else + nonWildcardFiles << file; + } + const bool success = pri->removeFiles(nonWildcardFiles, notRemoved); + if (notRemoved) + *notRemoved += wildcardFiles; + if (!success) + return RemovedFilesFromProject::Error; + if (!wildcardFiles.isEmpty()) + return RemovedFilesFromProject::Wildcard; + return RemovedFilesFromProject::Ok; } bool QmakePriFileNode::deleteFiles(const QStringList &filePaths) diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 55ae8aaad1e..7d9138615e9 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -56,7 +56,8 @@ public: QStringList subProjectFileNamePatterns() const override; bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved = nullptr) override; bool deleteFiles(const QStringList &filePaths) override; bool canRenameFile(const QString &filePath, const QString &newFilePath) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index c646513e688..b9dd48d49ef 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1255,6 +1255,14 @@ void QmakeProFile::asyncUpdate() m_parseFutureWatcher.setFuture(future); } +bool QmakeProFile::isFileFromWildcard(const QString &filePath) const +{ + const QFileInfo fileInfo(filePath); + const auto directoryIterator = m_wildcardDirectoryContents.constFind(fileInfo.path()); + return (directoryIterator != m_wildcardDirectoryContents.end() + && directoryIterator.value().contains(fileInfo.fileName())); +} + QmakeEvalInput QmakeProFile::evalInput() const { QmakeEvalInput input; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 1387760145d..601400f47bf 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -328,6 +328,8 @@ public: void asyncUpdate(); + bool isFileFromWildcard(const QString &filePath) const; + private: void setParseInProgress(bool b); void setValidParseRecursive(bool b); diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp index 7a5aedc4344..1af724504bd 100644 --- a/src/plugins/resourceeditor/resourceeditorplugin.cpp +++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp @@ -284,7 +284,7 @@ void ResourceEditorPlugin::removeFileContextMenu() QString path = rfn->filePath().toString(); FolderNode *parent = rfn->parentFolderNode(); QTC_ASSERT(parent, return); - if (!parent->removeFiles(QStringList() << path)) + if (parent->removeFiles(QStringList() << path) != RemovedFilesFromProject::Ok) QMessageBox::warning(Core::ICore::mainWindow(), tr("File Removal Failed"), tr("Removing file %1 from the project failed.").arg(path)); diff --git a/src/plugins/resourceeditor/resourcenode.cpp b/src/plugins/resourceeditor/resourcenode.cpp index 0395c607b43..8444b070681 100644 --- a/src/plugins/resourceeditor/resourcenode.cpp +++ b/src/plugins/resourceeditor/resourcenode.cpp @@ -162,7 +162,8 @@ public: bool supportsAction(ProjectAction, const Node *node) const final; bool addFiles(const QStringList &filePaths, QStringList *notAdded) final; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) final; + RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved) final; bool canRenameFile(const QString &filePath, const QString &newFilePath) override; bool renameFile(const QString &filePath, const QString &newFilePath) final; @@ -206,7 +207,8 @@ bool SimpleResourceFolderNode::addFiles(const QStringList &filePaths, QStringLis return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang); } -bool SimpleResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject SimpleResourceFolderNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { return prefixNode()->removeFiles(filePaths, notRemoved); } @@ -373,7 +375,8 @@ bool ResourceTopLevelNode::addFiles(const QStringList &filePaths, QStringList *n return addFilesToResource(filePath(), filePaths, notAdded, QLatin1String("/"), QString()); } -bool ResourceTopLevelNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject ResourceTopLevelNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { return parentFolderNode()->removeFiles(filePaths, notRemoved); } @@ -495,16 +498,17 @@ bool ResourceFolderNode::addFiles(const QStringList &filePaths, QStringList *not return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang); } -bool ResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) +RemovedFilesFromProject ResourceFolderNode::removeFiles(const QStringList &filePaths, + QStringList *notRemoved) { if (notRemoved) *notRemoved = filePaths; ResourceFile file(m_topLevelNode->filePath().toString()); if (file.load() != IDocument::OpenResult::Success) - return false; + return RemovedFilesFromProject::Error; int index = file.indexOfPrefix(m_prefix, m_lang); if (index == -1) - return false; + return RemovedFilesFromProject::Error; for (int j = 0; j < file.fileCount(index); ++j) { QString fileName = file.file(index, j); if (!filePaths.contains(fileName)) @@ -517,7 +521,7 @@ bool ResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList * FileChangeBlocker changeGuard(m_topLevelNode->filePath().toString()); file.save(); - return true; + return RemovedFilesFromProject::Ok; } // QTCREATORBUG-15280 diff --git a/src/plugins/resourceeditor/resourcenode.h b/src/plugins/resourceeditor/resourcenode.h index 181172a7fed..daa0442bd9c 100644 --- a/src/plugins/resourceeditor/resourcenode.h +++ b/src/plugins/resourceeditor/resourcenode.h @@ -43,7 +43,8 @@ public: bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override; bool addFiles(const QStringList &filePaths, QStringList *notAdded) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved) override; bool addPrefix(const QString &prefix, const QString &lang); bool removePrefix(const QString &prefix, const QString &lang); @@ -70,7 +71,8 @@ public: QString displayName() const override; bool addFiles(const QStringList &filePaths, QStringList *notAdded) override; - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, + QStringList *notRemoved) override; bool canRenameFile(const QString &filePath, const QString &newFilePath) override; bool renameFile(const QString &filePath, const QString &newFilePath) override;