From cc7fe5eac6ea6125b063ee36d0763d5cb230e26f Mon Sep 17 00:00:00 2001 From: Daniel Teske <daniel.teske@digia.com> Date: Mon, 1 Jul 2013 16:13:48 +0200 Subject: [PATCH] Project: Simplfy file adding/removing interface The filetype is only relevant for Qt4 projects. But even for Qt4 projects the file type is insufficient to decide where the file should be added. So remove the file type from the interface and let the projectmanagers themselves figure out what they want to do. Also fix Task-number: QTCREATORBUG-9688 Change-Id: I02f7b1cd2e05efaf76e36fb9af34b109d4482f88 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/android/androidmanager.cpp | 2 +- .../autotoolsprojectnode.cpp | 16 +- .../autotoolsprojectnode.h | 16 +- .../cmakeprojectmanager/cmakeprojectnodes.cpp | 12 +- .../cmakeprojectmanager/cmakeprojectnodes.h | 14 +- .../genericprojectnodes.cpp | 17 +- .../genericprojectnodes.h | 17 +- .../projectexplorer/projectexplorer.cpp | 17 +- .../projectfilewizardextension.cpp | 23 +-- src/plugins/projectexplorer/projectnodes.cpp | 24 --- src/plugins/projectexplorer/projectnodes.h | 19 +-- src/plugins/qbsprojectmanager/qbsnodes.cpp | 12 +- src/plugins/qbsprojectmanager/qbsnodes.h | 15 +- .../qmlprojectmanager/qmlprojectnodes.cpp | 12 +- .../qmlprojectmanager/qmlprojectnodes.h | 18 +- src/plugins/qt4projectmanager/qt4nodes.cpp | 156 +++++++++++++----- src/plugins/qt4projectmanager/qt4nodes.h | 17 +- src/plugins/valgrind/suppressiondialog.cpp | 2 +- 18 files changed, 179 insertions(+), 230 deletions(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 38cfe6eece2..e861df42c57 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -515,7 +515,7 @@ bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target * } } if (!androidFiles.isEmpty()) - qt4Project->rootProjectNode()->addFiles(ProjectExplorer::UnknownFileType, androidFiles); + qt4Project->rootProjectNode()->addFiles(androidFiles); int minApiLevel = 4; if (QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(target->kit())) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.cpp index 10df22e2ae8..ac9ae17b284 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.cpp @@ -74,39 +74,31 @@ bool AutotoolsProjectNode::removeSubProjects(const QStringList &proFilePaths) return false; } -bool AutotoolsProjectNode::addFiles(const FileType fileType, - const QStringList &filePaths, +bool AutotoolsProjectNode::addFiles( const QStringList &filePaths, QStringList *notAdded) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); Q_UNUSED(notAdded); return false; } -bool AutotoolsProjectNode::removeFiles(const FileType fileType, - const QStringList &filePaths, +bool AutotoolsProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); Q_UNUSED(notRemoved); return false; } -bool AutotoolsProjectNode::deleteFiles(const FileType fileType, - const QStringList &filePaths) +bool AutotoolsProjectNode::deleteFiles(const QStringList &filePaths) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); return false; } -bool AutotoolsProjectNode::renameFile(const FileType fileType, - const QString &filePath, +bool AutotoolsProjectNode::renameFile(const QString &filePath, const QString &newFilePath) { - Q_UNUSED(fileType); Q_UNUSED(filePath); Q_UNUSED(newFilePath); return false; diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.h b/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.h index a443ad94d39..4257e2ad7fd 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectnode.h @@ -64,17 +64,11 @@ public: bool canAddSubProject(const QString &proFilePath) const; bool addSubProjects(const QStringList &proFilePaths); bool removeSubProjects(const QStringList &proFilePaths); - bool addFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notAdded = 0); - bool removeFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notRemoved = 0); - bool deleteFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths); - bool renameFile(const ProjectExplorer::FileType fileType, - const QString &filePath, - const QString &newFilePath); + bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); + bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); + bool deleteFiles(const QStringList &filePaths); + bool renameFile(const QString &filePath, + const QString &newFilePath); QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node); private: diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index 2d55f001e51..f4f35bd7e64 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -67,32 +67,28 @@ bool CMakeProjectNode::removeSubProjects(const QStringList &proFilePaths) return false; } -bool CMakeProjectNode::addFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notAdded) +bool CMakeProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded) { - Q_UNUSED(fileType) Q_UNUSED(filePaths) Q_UNUSED(notAdded) return false; } -bool CMakeProjectNode::removeFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notRemoved) +bool CMakeProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) { - Q_UNUSED(fileType) Q_UNUSED(filePaths) Q_UNUSED(notRemoved) return false; } -bool CMakeProjectNode::deleteFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths) +bool CMakeProjectNode::deleteFiles(const QStringList &filePaths) { - Q_UNUSED(fileType) Q_UNUSED(filePaths) return false; } -bool CMakeProjectNode::renameFile(const ProjectExplorer::FileType fileType, const QString &filePath, const QString &newFilePath) +bool CMakeProjectNode::renameFile(const QString &filePath, const QString &newFilePath) { - Q_UNUSED(fileType) Q_UNUSED(filePath) Q_UNUSED(newFilePath) return false; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h index 68738baca92..ef81cfae498 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h @@ -48,17 +48,13 @@ public: virtual bool addSubProjects(const QStringList &proFilePaths); virtual bool removeSubProjects(const QStringList &proFilePaths); - virtual bool addFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, + virtual bool addFiles( const QStringList &filePaths, QStringList *notAdded = 0); - virtual bool removeFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, + virtual bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); - virtual bool deleteFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths); - virtual bool renameFile(const ProjectExplorer::FileType fileType, - const QString &filePath, - const QString &newFilePath); + virtual bool deleteFiles(const QStringList &filePaths); + virtual bool renameFile(const QString &filePath, + const QString &newFilePath); virtual QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node); }; diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.cpp b/src/plugins/genericprojectmanager/genericprojectnodes.cpp index 192e1c9f459..687658c326b 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.cpp +++ b/src/plugins/genericprojectmanager/genericprojectnodes.cpp @@ -259,37 +259,28 @@ bool GenericProjectNode::removeSubProjects(const QStringList &proFilePaths) return false; } -bool GenericProjectNode::addFiles(const FileType fileType, - const QStringList &filePaths, QStringList *notAdded) +bool GenericProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded) { - Q_UNUSED(fileType) Q_UNUSED(notAdded) return m_project->addFiles(filePaths); } -bool GenericProjectNode::removeFiles(const FileType fileType, - const QStringList &filePaths, QStringList *notRemoved) +bool GenericProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) { - Q_UNUSED(fileType) Q_UNUSED(notRemoved) return m_project->removeFiles(filePaths); } -bool GenericProjectNode::deleteFiles(const FileType fileType, - const QStringList &filePaths) +bool GenericProjectNode::deleteFiles(const QStringList &filePaths) { - Q_UNUSED(fileType) Q_UNUSED(filePaths) return false; } -bool GenericProjectNode::renameFile(const FileType fileType, - const QString &filePath, const QString &newFilePath) +bool GenericProjectNode::renameFile(const QString &filePath, const QString &newFilePath) { - Q_UNUSED(fileType) - return m_project->renameFile(filePath, newFilePath); } diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.h b/src/plugins/genericprojectmanager/genericprojectnodes.h index 35d2465a5c2..38ed7bdc17e 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.h +++ b/src/plugins/genericprojectmanager/genericprojectnodes.h @@ -62,19 +62,10 @@ public: bool addSubProjects(const QStringList &proFilePaths); bool removeSubProjects(const QStringList &proFilePaths); - bool addFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notAdded = 0); - - bool removeFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notRemoved = 0); - bool deleteFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths); - - bool renameFile(const ProjectExplorer::FileType fileType, - const QString &filePath, - const QString &newFilePath); + bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); + bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); + bool deleteFiles(const QStringList &filePaths); + bool renameFile(const QString &filePath, const QString &newFilePath); QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index d9ce0097843..374e7050775 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2844,16 +2844,9 @@ void ProjectExplorerPlugin::addExistingFiles(ProjectNode *projectNode, const QSt const QString dir = directoryFor(projectNode); QStringList fileNames = filePaths; - QHash<FileType, QString> fileTypeToFiles; - foreach (const QString &fileName, fileNames) { - FileType fileType = typeForFileName(Core::ICore::mimeDatabase(), QFileInfo(fileName)); - fileTypeToFiles.insertMulti(fileType, fileName); - } - QStringList notAdded; - foreach (const FileType type, fileTypeToFiles.uniqueKeys()) { - projectNode->addFiles(type, fileTypeToFiles.values(type), ¬Added); - } + projectNode->addFiles(fileNames, ¬Added); + if (!notAdded.isEmpty()) { QString message = tr("Could not add following files to project %1:\n").arg(projectNode->displayName()); QString files = notAdded.join(QString(QLatin1Char('\n'))); @@ -2919,7 +2912,7 @@ void ProjectExplorerPlugin::removeFile() ProjectNode *projectNode = fileNode->projectNode(); Q_ASSERT(projectNode); - if (!projectNode->removeFiles(fileNode->fileType(), QStringList(filePath))) { + if (!projectNode->removeFiles(QStringList(filePath))) { QMessageBox::warning(Core::ICore::mainWindow(), tr("Removing File Failed"), tr("Could not remove file %1 from project %2.").arg(filePath).arg(projectNode->displayName())); return; @@ -2947,7 +2940,7 @@ void ProjectExplorerPlugin::deleteFile() ProjectNode *projectNode = fileNode->projectNode(); QTC_ASSERT(projectNode, return); - projectNode->deleteFiles(fileNode->fileType(), QStringList(filePath)); + projectNode->deleteFiles(QStringList(filePath)); Core::DocumentManager::expectFileChange(filePath); if (Core::IVersionControl *vc = @@ -2988,7 +2981,7 @@ 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(fileNode->fileType(), orgFilePath, newFilePath)) { + if (!projectNode->renameFile(orgFilePath, newFilePath)) { QMessageBox::warning(Core::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) diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index dca5a2c688b..9db36e72bad 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -472,8 +472,6 @@ bool ProjectFileWizardExtension::processProject( const QList<Core::GeneratedFile> &files, bool *removeOpenProjectAttribute, QString *errorMessage) { - typedef QMultiMap<FileType, QString> TypeFileMap; - *removeOpenProjectAttribute = false; QString generatedProject = generatedProjectFilePath(files); @@ -491,20 +489,13 @@ bool ProjectFileWizardExtension::processProject( } *removeOpenProjectAttribute = true; } else { - // Split into lists by file type and bulk-add them. - TypeFileMap typeFileMap; - const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase(); - foreach (const Core::GeneratedFile &generatedFile, files) { - const QString path = generatedFile.path(); - typeFileMap.insert(typeForFileName(mdb, path), path); - } - foreach (FileType type, typeFileMap.uniqueKeys()) { - const QStringList typeFiles = typeFileMap.values(type); - if (!project->addFiles(type, typeFiles)) { - *errorMessage = tr("Failed to add one or more files to project\n'%1' (%2)."). - arg(project->path(), typeFiles.join(QString(QLatin1Char(',')))); - return false; - } + QStringList filePaths; + foreach (const Core::GeneratedFile &generatedFile, files) + filePaths << generatedFile.path(); + if (!project->addFiles(filePaths)) { + *errorMessage = tr("Failed to add one or more files to project\n'%1' (%2)."). + arg(project->path(), filePaths.join(QString(QLatin1Char(',')))); + return false; } } return true; diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 3b81a0b498f..a84c21e7156 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -837,27 +837,3 @@ NodesWatcher::NodesWatcher(QObject *parent) : QObject(parent) { } - -// TODO Maybe put this in core, so that all can benefit -FileType typeForFileName(const Core::MimeDatabase *db, const QFileInfo &file) -{ - const Core::MimeType mt = db->findByFile(file); - if (!mt) - return UnknownFileType; - - const QString typeName = mt.type(); - if (typeName == QLatin1String(Constants::CPP_SOURCE_MIMETYPE) - || typeName == QLatin1String(Constants::C_SOURCE_MIMETYPE)) - return SourceType; - if (typeName == QLatin1String(Constants::CPP_HEADER_MIMETYPE) - || typeName == QLatin1String(Constants::C_HEADER_MIMETYPE)) - return HeaderType; - if (typeName == QLatin1String(Constants::RESOURCE_MIMETYPE)) - return ResourceType; - if (typeName == QLatin1String(Constants::FORM_MIMETYPE)) - return FormType; - if (mt.subClassesOf().contains(QLatin1String(Constants::QML_MIMETYPE)) - || typeName == QLatin1String(Constants::QML_MIMETYPE)) - return QMLType; - return UnknownFileType; -} diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 90e965ee336..b324dff4eca 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -214,18 +214,10 @@ public: virtual bool removeSubProjects(const QStringList &proFilePaths) = 0; - virtual bool addFiles(const FileType fileType, - const QStringList &filePaths, - QStringList *notAdded = 0) = 0; - // TODO: Maybe remove fileType, can be detected by project - virtual bool removeFiles(const FileType fileType, - const QStringList &filePaths, - QStringList *notRemoved = 0) = 0; - virtual bool deleteFiles(const FileType fileType, - const QStringList &filePaths) = 0; - virtual bool renameFile(const FileType fileType, - const QString &filePath, - const QString &newFilePath) = 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; @@ -343,7 +335,4 @@ private: } // namespace ProjectExplorer -// HACK: THERE SHOULD BE ONE PLACE TO MAKE THE FILE ENDING->FILE TYPE ASSOCIATION -ProjectExplorer::FileType typeForFileName(const Core::MimeDatabase *db, const QFileInfo &file); - #endif // PROJECTNODES_H diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 8606d73646b..7f2493a231f 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -286,32 +286,28 @@ bool QbsBaseProjectNode::removeSubProjects(const QStringList &proFilePaths) return false; } -bool QbsBaseProjectNode::addFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notAdded) +bool QbsBaseProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); Q_UNUSED(notAdded); return false; } -bool QbsBaseProjectNode::removeFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notRemoved) +bool QbsBaseProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); Q_UNUSED(notRemoved); return false; } -bool QbsBaseProjectNode::deleteFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths) +bool QbsBaseProjectNode::deleteFiles(const QStringList &filePaths) { - Q_UNUSED(fileType); Q_UNUSED(filePaths); return false; } -bool QbsBaseProjectNode::renameFile(const ProjectExplorer::FileType fileType, const QString &filePath, const QString &newFilePath) +bool QbsBaseProjectNode::renameFile(const QString &filePath, const QString &newFilePath) { - Q_UNUSED(fileType); Q_UNUSED(filePath); Q_UNUSED(newFilePath); return false; diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index 2070483493b..250793c5272 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -90,17 +90,10 @@ public: bool removeSubProjects(const QStringList &proFilePaths); - bool addFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notAdded = 0); - bool removeFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notRemoved = 0); - bool deleteFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths); - bool renameFile(const ProjectExplorer::FileType fileType, - const QString &filePath, - const QString &newFilePath); + bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); + bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); + bool deleteFiles(const QStringList &filePaths); + bool renameFile(const QString &filePath, const QString &newFilePath); QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node); diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp index 70cd26e8265..01c43d173e5 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp @@ -198,26 +198,22 @@ bool QmlProjectNode::removeSubProjects(const QStringList &proFilePaths) return false; } -bool QmlProjectNode::addFiles(const ProjectExplorer::FileType /*fileType*/, - const QStringList &filePaths, QStringList * /*notAdded*/) +bool QmlProjectNode::addFiles(const QStringList &filePaths, QStringList * /*notAdded*/) { return m_project->addFiles(filePaths); } -bool QmlProjectNode::removeFiles(const ProjectExplorer::FileType /*fileType*/, - const QStringList & /*filePaths*/, QStringList * /*notRemoved*/) +bool QmlProjectNode::removeFiles(const QStringList & /*filePaths*/, QStringList * /*notRemoved*/) { return false; } -bool QmlProjectNode::deleteFiles(const ProjectExplorer::FileType /*fileType*/, - const QStringList & /*filePaths*/) +bool QmlProjectNode::deleteFiles(const QStringList & /*filePaths*/) { return true; } -bool QmlProjectNode::renameFile(const ProjectExplorer::FileType /*fileType*/, - const QString & /*filePath*/, const QString & /*newFilePath*/) +bool QmlProjectNode::renameFile(const QString & /*filePath*/, const QString & /*newFilePath*/) { return true; } diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.h b/src/plugins/qmlprojectmanager/qmlprojectnodes.h index 6796467c5f5..d75d4ece21d 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectnodes.h +++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.h @@ -63,20 +63,10 @@ public: virtual bool addSubProjects(const QStringList &proFilePaths); virtual bool removeSubProjects(const QStringList &proFilePaths); - virtual bool addFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notAdded = 0); - - virtual bool removeFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths, - QStringList *notRemoved = 0); - - virtual bool deleteFiles(const ProjectExplorer::FileType fileType, - const QStringList &filePaths); - - virtual bool renameFile(const ProjectExplorer::FileType fileType, - const QString &filePath, - const QString &newFilePath); + 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); virtual QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node); diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 8d2efbe0ba8..b66cb033e3c 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -52,6 +52,7 @@ #include <qtsupport/qtkitinformation.h> #include <cpptools/cppmodelmanagerinterface.h> +#include <cpptools/cpptoolsconstants.h> #include <utils/hostosinfo.h> #include <utils/stringutils.h> @@ -921,7 +922,7 @@ bool Qt4PriFileNode::addSubProjects(const QStringList &proFilePaths) uniqueProFilePaths.append(simplifyProFilePath(proFile)); QStringList failedFiles; - changeFiles(ProjectExplorer::ProjectFileType, uniqueProFilePaths, &failedFiles, AddToProFile); + changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), uniqueProFilePaths, &failedFiles, AddToProFile); return failedFiles.isEmpty(); } @@ -929,20 +930,19 @@ bool Qt4PriFileNode::addSubProjects(const QStringList &proFilePaths) bool Qt4PriFileNode::removeSubProjects(const QStringList &proFilePaths) { QStringList failedOriginalFiles; - changeFiles(ProjectExplorer::ProjectFileType, proFilePaths, &failedOriginalFiles, RemoveFromProFile); + changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), proFilePaths, &failedOriginalFiles, RemoveFromProFile); QStringList simplifiedProFiles; foreach (const QString &proFile, failedOriginalFiles) simplifiedProFiles.append(simplifyProFilePath(proFile)); QStringList failedSimplifiedFiles; - changeFiles(ProjectExplorer::ProjectFileType, simplifiedProFiles, &failedSimplifiedFiles, RemoveFromProFile); + changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), simplifiedProFiles, &failedSimplifiedFiles, RemoveFromProFile); return failedSimplifiedFiles.isEmpty(); } -bool Qt4PriFileNode::addFiles(const FileType fileType, const QStringList &filePaths, - QStringList *notAdded) +bool Qt4PriFileNode::addFiles(const QStringList &filePaths, QStringList *notAdded) { // If a file is already referenced in the .pro file then we don't add them. // That ignores scopes and which variable was used to reference the file @@ -953,68 +953,103 @@ bool Qt4PriFileNode::addFiles(const FileType fileType, const QStringList &filePa accept(&visitor); const QStringList &allFiles = visitor.filePaths(); - QStringList qrcFiles; // the list of qrc files referenced from ui files - if (fileType == ProjectExplorer::FormType) { - foreach (const QString &formFile, filePaths) { - QStringList resourceFiles = formResources(formFile); - foreach (const QString &resourceFile, resourceFiles) - if (!qrcFiles.contains(resourceFile)) - qrcFiles.append(resourceFile); - } + typedef QMap<QString, QStringList> TypeFileMap; + // Split into lists by file type and bulk-add them. + TypeFileMap typeFileMap; + const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase(); + foreach (const QString file, filePaths) { + const Core::MimeType mt = mdb->findByFile(file); + typeFileMap[mt.type()] << file; } - QStringList uniqueQrcFiles; - foreach (const QString &file, qrcFiles) { - if (!allFiles.contains(file)) - uniqueQrcFiles.append(file); - } + QStringList failedFiles; + foreach (const QString &type, typeFileMap.keys()) { + const QStringList typeFiles = typeFileMap.value(type); + QStringList qrcFiles; // the list of qrc files referenced from ui files + if (type == QLatin1String(ProjectExplorer::Constants::RESOURCE_MIMETYPE)) { + foreach (const QString &formFile, typeFiles) { + QStringList resourceFiles = formResources(formFile); + foreach (const QString &resourceFile, resourceFiles) + if (!qrcFiles.contains(resourceFile)) + qrcFiles.append(resourceFile); + } + } - QStringList uniqueFilePaths; - foreach (const QString &file, filePaths) { - if (!allFiles.contains(file)) - uniqueFilePaths.append(file); - } + QStringList uniqueQrcFiles; + foreach (const QString &file, qrcFiles) { + if (!allFiles.contains(file)) + uniqueQrcFiles.append(file); + } - QStringList failedFiles; - changeFiles(fileType, uniqueFilePaths, &failedFiles, AddToProFile); - if (notAdded) - *notAdded = failedFiles; - changeFiles(ProjectExplorer::ResourceType, uniqueQrcFiles, &failedFiles, AddToProFile); - if (notAdded) - *notAdded += failedFiles; + QStringList uniqueFilePaths; + foreach (const QString &file, typeFiles) { + if (!allFiles.contains(file)) + uniqueFilePaths.append(file); + } + + changeFiles(type, uniqueFilePaths, &failedFiles, AddToProFile); + if (notAdded) + *notAdded += failedFiles; + changeFiles(QLatin1String(ProjectExplorer::Constants::RESOURCE_MIMETYPE), uniqueQrcFiles, &failedFiles, AddToProFile); + if (notAdded) + *notAdded += failedFiles; + } return failedFiles.isEmpty(); } -bool Qt4PriFileNode::removeFiles(const FileType fileType, const QStringList &filePaths, +bool Qt4PriFileNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved) { QStringList failedFiles; - changeFiles(fileType, filePaths, &failedFiles, RemoveFromProFile); - if (notRemoved) - *notRemoved = failedFiles; + typedef QMap<QString, QStringList> TypeFileMap; + // Split into lists by file type and bulk-add them. + TypeFileMap typeFileMap; + const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase(); + foreach (const QString file, filePaths) { + const Core::MimeType mt = mdb->findByFile(file); + typeFileMap[mt.type()] << file; + } + foreach (const QString &type, typeFileMap.keys()) { + const QStringList typeFiles = typeFileMap.value(type); + changeFiles(type, typeFiles, &failedFiles, RemoveFromProFile); + if (notRemoved) + *notRemoved = failedFiles; + } return failedFiles.isEmpty(); } -bool Qt4PriFileNode::deleteFiles(const FileType fileType, const QStringList &filePaths) +bool Qt4PriFileNode::deleteFiles(const QStringList &filePaths) { QStringList failedFiles; - changeFiles(fileType, filePaths, &failedFiles, RemoveFromProFile); + typedef QMap<QString, QStringList> TypeFileMap; + // Split into lists by file type and bulk-add them. + TypeFileMap typeFileMap; + const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase(); + foreach (const QString file, filePaths) { + const Core::MimeType mt = mdb->findByFile(file); + typeFileMap[mt.type()] << file; + } + foreach (const QString &type, typeFileMap.keys()) { + const QStringList typeFiles = typeFileMap.value(type); + changeFiles(type, typeFiles, &failedFiles, RemoveFromProFile); + } return true; } -bool Qt4PriFileNode::renameFile(const FileType fileType, const QString &filePath, - const QString &newFilePath) +bool Qt4PriFileNode::renameFile(const QString &filePath, const QString &newFilePath) { if (newFilePath.isEmpty()) return false; bool changeProFileOptional = deploysFolder(QFileInfo(filePath).absolutePath()); - + const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase(); + const Core::MimeType mt = mdb->findByFile(filePath); QStringList dummy; - changeFiles(fileType, QStringList() << filePath, &dummy, RemoveFromProFile); + + changeFiles(mt.type(), QStringList() << filePath, &dummy, RemoveFromProFile); if (!dummy.isEmpty() && !changeProFileOptional) return false; - changeFiles(fileType, QStringList() << newFilePath, &dummy, AddToProFile); + changeFiles(mt.type(), QStringList() << newFilePath, &dummy, AddToProFile); if (!dummy.isEmpty() && !changeProFileOptional) return false; return true; @@ -1086,7 +1121,7 @@ QStringList Qt4PriFileNode::formResources(const QString &formFile) const return resourceFiles; } -void Qt4PriFileNode::changeFiles(const FileType fileType, +void Qt4PriFileNode::changeFiles(const QString &mimeType, const QStringList &filePaths, QStringList *notChanged, ChangeType change) @@ -1137,12 +1172,11 @@ void Qt4PriFileNode::changeFiles(const FileType fileType, includeFile = parser.parsedProBlock(contents, m_projectFilePath, 1); } - const QStringList vars = varNames(fileType); + const QStringList vars = varNames(mimeType); QDir priFileDir = QDir(m_qt4ProFileNode->m_projectDir); if (change == AddToProFile) { // Use the first variable for adding. - // Yes, that's broken for adding objective c sources or other stuff. ProWriter::addFiles(includeFile, &lines, priFileDir, filePaths, vars.first()); notChanged->clear(); } else { // RemoveFromProFile @@ -1217,6 +1251,40 @@ QStringList Qt4PriFileNode::varNames(ProjectExplorer::FileType type) return vars; } +//! +//! \brief Qt4PriFileNode::varNames +//! \param mimeType +//! \return the qmake variable name for the mime type +//! Note: For adding the first variable in the list is used +//! For removal all variables returned a searched for the file +//! +QStringList Qt4PriFileNode::varNames(const QString &mimeType) +{ + QStringList vars; + if (mimeType == QLatin1String(ProjectExplorer::Constants::CPP_HEADER_MIMETYPE) + || mimeType == QLatin1String(ProjectExplorer::Constants::C_HEADER_MIMETYPE)) { + vars << QLatin1String("HEADERS"); + vars << QLatin1String("OBJECTIVE_HEADERS"); + } else if (mimeType == QLatin1String(ProjectExplorer::Constants::CPP_SOURCE_MIMETYPE) + || mimeType == QLatin1String(ProjectExplorer::Constants::C_SOURCE_MIMETYPE)) { + vars << QLatin1String("SOURCES"); + } else if (mimeType == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)) { + vars << QLatin1String("OBJECTIVE_SOURCES"); + } else if (mimeType == QLatin1String(ProjectExplorer::Constants::RESOURCE_MIMETYPE)) { + vars << QLatin1String("RESOURCES"); + } else if (mimeType == QLatin1String(ProjectExplorer::Constants::FORM_MIMETYPE)) { + vars << QLatin1String("FORMS"); + } else if (mimeType == QLatin1String(ProjectExplorer::Constants::QML_MIMETYPE)) { + vars << QLatin1String("OTHER_FILES"); + } else if (mimeType == QLatin1String(Constants::PROFILE_MIMETYPE)) { + vars << QLatin1String("SUBDIRS"); + } else { + vars << QLatin1String("OTHER_FILES"); + vars << QLatin1String("ICON"); + } + return vars; +} + QStringList Qt4PriFileNode::dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative, QtSupport::BaseQtVersion *qtVersion) diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index 58ba3bdb89e..b2e4967861f 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -153,14 +153,10 @@ public: bool addSubProjects(const QStringList &proFilePaths); bool removeSubProjects(const QStringList &proFilePaths); - bool addFiles(const FileType fileType, const QStringList &filePaths, - QStringList *notAdded = 0); - bool removeFiles(const FileType fileType, const QStringList &filePaths, - QStringList *notRemoved = 0); - bool deleteFiles(const FileType fileType, - const QStringList &filePaths); - bool renameFile(const FileType fileType, - const QString &filePath, const QString &newFilePath); + bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); + bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0); + bool deleteFiles(const QStringList &filePaths); + bool renameFile(const QString &filePath, const QString &newFilePath); bool folderChanged(const QString &changedFolder, const QSet<Utils::FileName> &newFiles); @@ -175,7 +171,8 @@ public: static QSet<Utils::FileName> recursiveEnumerate(const QString &folder); protected: void setIncludedInExactParse(bool b); - static QStringList varNames(FileType type); + static QStringList varNames(ProjectExplorer::FileType type); + static QStringList varNames(const QString &mimeType); static QStringList dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative, QtSupport::BaseQtVersion *qtVersion); static QSet<Utils::FileName> filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files); static QSet<Utils::FileName> filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files); @@ -185,7 +182,7 @@ protected: RemoveFromProFile }; - void changeFiles(const FileType fileType, + void changeFiles(const QString &mimeType, const QStringList &filePaths, QStringList *notChanged, ChangeType change); diff --git a/src/plugins/valgrind/suppressiondialog.cpp b/src/plugins/valgrind/suppressiondialog.cpp index 8e1a4c25a47..e4ff3184e60 100644 --- a/src/plugins/valgrind/suppressiondialog.cpp +++ b/src/plugins/valgrind/suppressiondialog.cpp @@ -216,7 +216,7 @@ void SuppressionDialog::accept() if (!session->projectForFile(path)) { foreach (ProjectExplorer::Project *p, session->projects()) { if (path.startsWith(p->projectDirectory())) { - p->rootProjectNode()->addFiles(ProjectExplorer::UnknownFileType, QStringList() << path); + p->rootProjectNode()->addFiles(QStringList() << path); break; } } -- GitLab