From b170e3ba87f1eb1dc77ea00707542fe140239a80 Mon Sep 17 00:00:00 2001 From: Kevin Michel <knx.corp@gmail.com> Date: Tue, 30 Jun 2009 14:07:07 +0200 Subject: [PATCH] Enable 'Remove file...' on Generic project MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 783 Reviewed-by: Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> --- .../genericprojectmanager/genericproject.cpp | 25 +++++++++++++++---- .../genericprojectmanager/genericproject.h | 2 ++ .../genericprojectnodes.cpp | 7 +++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 7a0a2c41cb1..24c87616708 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -168,19 +168,16 @@ static QStringList readLines(const QString &absoluteFileName) return lines; } -bool GenericProject::addFiles(const QStringList &filePaths) +bool GenericProject::setFiles(const QStringList &filePaths) { // Make sure we can open the file for writing QFile file(filesFileName()); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; - QStringList newFileList = m_files; - newFileList.append(filePaths); - QTextStream stream(&file); QDir baseDir(QFileInfo(m_fileName).dir()); - foreach (const QString &filePath, newFileList) + foreach (const QString &filePath, filePaths) stream << baseDir.relativeFilePath(filePath) << QLatin1Char('\n'); file.close(); @@ -188,6 +185,24 @@ bool GenericProject::addFiles(const QStringList &filePaths) return true; } +bool GenericProject::addFiles(const QStringList &filePaths) +{ + QStringList newFileList = m_files; + newFileList.append(filePaths); + + return setFiles(newFileList); +} + +bool GenericProject::removeFiles(const QStringList &filePaths) +{ + // Removing using set allows O(n.log(n)) behavior + QSet<QString> newFileSet = m_files.toSet(); + newFileSet.subtract(filePaths.toSet()); + QStringList newFileList = newFileSet.toList(); + + return setFiles(newFileList); +} + void GenericProject::parseProject(RefreshOptions options) { if (options & Files) diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index a22f2abda0a..cf9565644ac 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -94,7 +94,9 @@ public: QString buildParser(const QString &buildConfiguration) const; ProjectExplorer::ToolChain *toolChain() const; + bool setFiles(const QStringList &filePaths); bool addFiles(const QStringList &filePaths); + bool removeFiles(const QStringList &filePaths); enum RefreshOptions { Files = 0x01, diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.cpp b/src/plugins/genericprojectmanager/genericprojectnodes.cpp index 26e1eb81256..e8668a0d7c1 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.cpp +++ b/src/plugins/genericprojectmanager/genericprojectnodes.cpp @@ -167,7 +167,8 @@ bool GenericProjectNode::hasTargets() const QList<ProjectExplorer::ProjectNode::ProjectAction> GenericProjectNode::supportedActions() const { return QList<ProjectAction>() - << AddFile; + << AddFile + << RemoveFile; } bool GenericProjectNode::addSubProjects(const QStringList &proFilePaths) @@ -195,9 +196,9 @@ bool GenericProjectNode::removeFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notRemoved) { Q_UNUSED(fileType); - Q_UNUSED(filePaths); Q_UNUSED(notRemoved); - return false; + + return m_project->removeFiles(filePaths); } bool GenericProjectNode::renameFile(const ProjectExplorer::FileType fileType, -- GitLab