aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/genericprojectmanager
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-07-16 15:55:03 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-07-18 09:17:32 +0000
commit1f81f63b56f8681a97e31d17a15594fbe002dab9 (patch)
tree53530b0064048ab94c265f730830e5d37873ef9e /src/plugins/genericprojectmanager
parentf689f86be5443f1381c741f957e9f0b713994907 (diff)
GenericProjectManager: Allow users to remove directories from a project
... via the project context menu. Fixes: QTCREATORBUG-16575 Change-Id: I02650a8ef70ffe22c6a42a5450588be4506af925 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/genericprojectmanager')
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h3
-rw-r--r--src/plugins/genericprojectmanager/genericprojectplugin.cpp31
2 files changed, 30 insertions, 4 deletions
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index d914ddc1495..213bd60471d 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -26,6 +26,7 @@
#pragma once
#include <projectexplorer/project.h>
+#include <utils/fileutils.h>
namespace CppTools { class CppProjectUpdater; }
namespace Utils { class FileSystemWatcher; }
@@ -46,6 +47,8 @@ public:
bool setFiles(const QStringList &filePaths);
bool renameFile(const QString &filePath, const QString &newFilePath);
+ Utils::FilePath filesFilePath() const { return Utils::FilePath::fromString(m_filesFileName); }
+
enum RefreshOptions {
Files = 0x01,
Configuration = 0x02,
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
index 73183ffb139..668ddd37c4b 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
@@ -39,16 +39,21 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmanager.h>
+#include <projectexplorer/projectnodes.h>
#include <projectexplorer/projecttree.h>
#include <projectexplorer/selectablefilesmodel.h>
+#include <projectexplorer/taskhub.h>
#include <utils/algorithm.h>
#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
#include <QAction>
using namespace Core;
using namespace ProjectExplorer;
+using namespace Utils;
+namespace PEC = ProjectExplorer::Constants;
namespace GenericProjectManager {
namespace Internal {
@@ -85,13 +90,12 @@ GenericProjectPluginPrivate::GenericProjectPluginPrivate()
IWizardFactory::registerFactoryCreator([] { return QList<IWizardFactory *>{new GenericProjectWizard}; });
- ActionContainer *mproject =
- ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT);
+ ActionContainer *mproject = ActionManager::actionContainer(PEC::M_PROJECTCONTEXT);
Command *command = ActionManager::registerAction(&editFilesAction,
"GenericProjectManager.EditFiles", Context(Constants::GENERICPROJECT_ID));
command->setAttribute(Command::CA_Hide);
- mproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_FILES);
+ mproject->addAction(command, PEC::G_PROJECT_FILES);
connect(&editFilesAction, &QAction::triggered, this, [] {
auto genericProject = qobject_cast<GenericProject *>(ProjectTree::currentProject());
@@ -101,7 +105,26 @@ GenericProjectPluginPrivate::GenericProjectPluginPrivate()
genericProject->files(Project::AllFiles),
ICore::mainWindow());
if (sfd.exec() == QDialog::Accepted)
- genericProject->setFiles(Utils::transform(sfd.selectedFiles(), &Utils::FilePath::toString));
+ genericProject->setFiles(transform(sfd.selectedFiles(), &FilePath::toString));
+ });
+
+
+ const auto removeDirAction = new QAction(tr("Remove Directory"), this);
+ Command * const cmd = ActionManager::registerAction(removeDirAction, "GenericProject.RemoveDir",
+ Context(PEC::C_PROJECT_TREE));
+ ActionManager::actionContainer(PEC::M_FOLDERCONTEXT)->addAction(cmd, PEC::G_FOLDER_OTHER);
+ connect(removeDirAction, &QAction::triggered, this, [] {
+ const auto folderNode = ProjectTree::currentNode()->asFolderNode();
+ QTC_ASSERT(folderNode, return);
+ const auto project = qobject_cast<GenericProject *>(folderNode->getProject());
+ QTC_ASSERT(project, return);
+ const QStringList filesToRemove = transform<QStringList>(
+ folderNode->findNodes([](const Node *node) { return node->asFileNode(); }),
+ [](const Node *node) { return node->filePath().toString();});
+ if (!project->removeFiles(filesToRemove)) {
+ TaskHub::addTask(Task::Error, tr("Project files list update failed."),
+ PEC::TASK_CATEGORY_BUILDSYSTEM, project->filesFilePath());
+ }
});
}