From 2b159ac9c9d39b6465d207c636cb8a8098a3ab5e Mon Sep 17 00:00:00 2001 From: Filippo Cucchetto Date: Sat, 3 Dec 2016 13:34:01 +0100 Subject: [PATCH] Nim: Fixed missing update of project files on add and remove Change-Id: Iadbd5b9b04dcb16f53a16263f94f8f44835e5793 Reviewed-by: Tobias Hunger --- src/plugins/nim/nimconstants.h | 2 + src/plugins/nim/project/nimproject.cpp | 44 ++++++++++++++++++++-- src/plugins/nim/project/nimproject.h | 12 +++++- src/plugins/nim/project/nimprojectnode.cpp | 19 ++++------ src/plugins/nim/project/nimprojectnode.h | 6 +-- 5 files changed, 64 insertions(+), 19 deletions(-) diff --git a/src/plugins/nim/nimconstants.h b/src/plugins/nim/nimconstants.h index 65fbeb611f3..e3f734ccfc2 100644 --- a/src/plugins/nim/nimconstants.h +++ b/src/plugins/nim/nimconstants.h @@ -48,6 +48,8 @@ const QString C_NIMRUNCONFIGURATION_WORKINGDIRECTORYASPECT_ID = QStringLiteral(" const QString C_NIMRUNCONFIGURATION_ARGUMENTASPECT_ID = QStringLiteral("Nim.NimRunConfiguration.ArgumentAspect"); const QString C_NIMRUNCONFIGURATION_TERMINALASPECT_ID = QStringLiteral("Nim.NimRunConfiguration.TerminalAspect"); +// NimProject +const char C_NIMPROJECT_EXCLUDEDFILES[] = "Nim.NimProjectExcludedFiles"; // NimBuildConfiguration const char C_NIMBUILDCONFIGURATION_ID[] = "Nim.NimBuildConfiguration"; diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index 94e17b553c8..578ab847e84 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -98,6 +98,29 @@ void NimProject::scheduleProjectScan() } } +bool NimProject::addFiles(const QStringList &filePaths) +{ + m_excludedFiles = Utils::filtered(m_excludedFiles, [&](const QString &f) { return !filePaths.contains(f); }); + scheduleProjectScan(); + return true; +} + +bool NimProject::removeFiles(const QStringList &filePaths) +{ + m_excludedFiles.append(filePaths); + m_excludedFiles = Utils::filteredUnique(m_excludedFiles); + scheduleProjectScan(); + return true; +} + +bool NimProject::renameFile(const QString &filePath, const QString &newFilePath) +{ + Q_UNUSED(filePath) + m_excludedFiles.removeOne(newFilePath); + scheduleProjectScan(); + return true; +} + void NimProject::collectProjectFiles() { m_lastProjectScan.start(); @@ -116,9 +139,11 @@ void NimProject::updateProject() m_files.clear(); QList fileNodes = Utils::filtered(m_futureWatcher.future().result(), - [](const FileNode *fn) { - const QString fileName = fn->filePath().fileName(); - const bool keep = !fileName.endsWith(".nimproject", HostOsInfo::fileNameCaseSensitivity()) + [&](const FileNode *fn) { + const FileName path = fn->filePath(); + const QString fileName = path.fileName(); + const bool keep = !m_excludedFiles.contains(path.toString()) + && !fileName.endsWith(".nimproject", HostOsInfo::fileNameCaseSensitivity()) && !fileName.contains(".nimproject.user", HostOsInfo::fileNameCaseSensitivity()); if (!keep) delete fn; @@ -162,4 +187,17 @@ FileNameList NimProject::nimFiles() const return result; } +QVariantMap NimProject::toMap() const +{ + QVariantMap result = Project::toMap(); + result[Constants::C_NIMPROJECT_EXCLUDEDFILES] = m_excludedFiles; + return result; +} + +Project::RestoreResult NimProject::fromMap(const QVariantMap &map, QString *errorMessage) +{ + m_excludedFiles = map.value(Constants::C_NIMPROJECT_EXCLUDEDFILES).toStringList(); + return Project::fromMap(map, errorMessage); +} + } diff --git a/src/plugins/nim/project/nimproject.h b/src/plugins/nim/project/nimproject.h index 1b99ba7877a..0e8b99f0722 100644 --- a/src/plugins/nim/project/nimproject.h +++ b/src/plugins/nim/project/nimproject.h @@ -52,15 +52,23 @@ public: bool needsConfiguration() const override; bool supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const override; Utils::FileNameList nimFiles() const; - void scheduleProjectScan(); + QVariantMap toMap() const override; + + bool addFiles(const QStringList &filePaths); + bool removeFiles(const QStringList &filePaths); + bool renameFile(const QString &filePath, const QString &newFilePath); + +protected: + RestoreResult fromMap(const QVariantMap &map, QString *errorMessage) override; private: + void scheduleProjectScan(); void collectProjectFiles(); void updateProject(); QStringList m_files; + QStringList m_excludedFiles; QFutureWatcher> m_futureWatcher; - QElapsedTimer m_lastProjectScan; QTimer m_projectScanTimer; }; diff --git a/src/plugins/nim/project/nimprojectnode.cpp b/src/plugins/nim/project/nimprojectnode.cpp index f35e6c17fb6..096c90c63c6 100644 --- a/src/plugins/nim/project/nimprojectnode.cpp +++ b/src/plugins/nim/project/nimprojectnode.cpp @@ -43,7 +43,8 @@ QList NimProjectNode::supportedActions(Node *node) const ProjectAction::RemoveFile }; static const QList folderActions = { ProjectAction::AddNewFile, - ProjectAction::RemoveFile + ProjectAction::RemoveFile, + ProjectAction::AddExistingFile }; switch (node->nodeType()) { case NodeType::File: @@ -71,28 +72,24 @@ bool NimProjectNode::removeSubProjects(const QStringList &) return false; } -bool NimProjectNode::addFiles(const QStringList &, QStringList *) +bool NimProjectNode::addFiles(const QStringList &filePaths, QStringList *) { - m_project.scheduleProjectScan(); - return true; + return m_project.addFiles(filePaths); } -bool NimProjectNode::removeFiles(const QStringList &, QStringList *) +bool NimProjectNode::removeFiles(const QStringList &filePaths, QStringList *) { - m_project.scheduleProjectScan(); - return true; + return m_project.removeFiles(filePaths); } bool NimProjectNode::deleteFiles(const QStringList &) { - m_project.scheduleProjectScan(); return true; } -bool NimProjectNode::renameFile(const QString &, const QString &) +bool NimProjectNode::renameFile(const QString &filePath, const QString &newFilePath) { - m_project.scheduleProjectScan(); - return true; + return m_project.renameFile(filePath, newFilePath); } } diff --git a/src/plugins/nim/project/nimprojectnode.h b/src/plugins/nim/project/nimprojectnode.h index 358edeff309..9c124824fba 100644 --- a/src/plugins/nim/project/nimprojectnode.h +++ b/src/plugins/nim/project/nimprojectnode.h @@ -42,10 +42,10 @@ public: bool canAddSubProject(const QString &) const override; bool addSubProjects(const QStringList &) override; bool removeSubProjects(const QStringList &) override; - bool addFiles(const QStringList &, QStringList *) override; - bool removeFiles(const QStringList &, QStringList *) override; + bool addFiles(const QStringList &filePaths, QStringList *) override; + bool removeFiles(const QStringList &filePaths, QStringList *) override; bool deleteFiles(const QStringList &) override; - bool renameFile(const QString &, const QString &) override; + bool renameFile(const QString &filePath, const QString &newFilePath) override; private: NimProject &m_project;