diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-07-16 15:55:03 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-07-18 09:17:32 +0000 |
commit | 1f81f63b56f8681a97e31d17a15594fbe002dab9 (patch) | |
tree | 53530b0064048ab94c265f730830e5d37873ef9e /src/plugins/genericprojectmanager | |
parent | f689f86be5443f1381c741f957e9f0b713994907 (diff) | |
download | qt-creator-1f81f63b56f8681a97e31d17a15594fbe002dab9.tar.gz |
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.h | 3 | ||||
-rw-r--r-- | src/plugins/genericprojectmanager/genericprojectplugin.cpp | 31 |
2 files changed, 30 insertions, 4 deletions
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index d914ddc149..213bd60471 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 73183ffb13..668ddd37c4 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()); + } }); } |