CMakePM: Display presets as part of the project outline

Fixes: QTCREATORBUG-28966
Change-Id: Iae0f77956bf6f4682ea8a25e08d05de3331c7420
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Cristian Adam
2023-05-09 13:49:50 +02:00
parent aca8e5906b
commit dc18d4b9ee
6 changed files with 58 additions and 0 deletions

View File

@@ -93,6 +93,14 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
result.version = cmakePresetsData.version; result.version = cmakePresetsData.version;
result.cmakeMinimimRequired = cmakePresetsData.cmakeMinimimRequired; result.cmakeMinimimRequired = cmakePresetsData.cmakeMinimimRequired;
result.include = cmakePresetsData.include;
if (result.include) {
if (cmakeUserPresetsData.include)
result.include->append(cmakeUserPresetsData.include.value());
} else {
result.include = cmakeUserPresetsData.include;
}
auto combinePresetsInternal = [](auto &presetsHash, auto combinePresetsInternal = [](auto &presetsHash,
auto &presets, auto &presets,
auto &userPresets, auto &userPresets,

View File

@@ -30,6 +30,15 @@ CMakeInputsNode::CMakeInputsNode(const FilePath &cmakeLists) :
setListInProject(false); setListInProject(false);
} }
CMakePresetsNode::CMakePresetsNode(const FilePath &projectPath) :
ProjectExplorer::ProjectNode(projectPath)
{
setPriority(Node::DefaultPriority - 9);
setDisplayName(Tr::tr("CMake Presets"));
setIcon(DirectoryIcon(ProjectExplorer::Constants::FILEOVERLAY_PRODUCT));
setListInProject(false);
}
CMakeListsNode::CMakeListsNode(const FilePath &cmakeListPath) : CMakeListsNode::CMakeListsNode(const FilePath &cmakeListPath) :
ProjectExplorer::ProjectNode(cmakeListPath) ProjectExplorer::ProjectNode(cmakeListPath)
{ {

View File

@@ -15,6 +15,12 @@ public:
CMakeInputsNode(const Utils::FilePath &cmakeLists); CMakeInputsNode(const Utils::FilePath &cmakeLists);
}; };
class CMakePresetsNode : public ProjectExplorer::ProjectNode
{
public:
CMakePresetsNode(const Utils::FilePath &projectPath);
};
class CMakeListsNode : public ProjectExplorer::ProjectNode class CMakeListsNode : public ProjectExplorer::ProjectNode
{ {
public: public:

View File

@@ -711,6 +711,9 @@ std::unique_ptr<CMakeProjectNode> generateRootProjectNode(
std::move(data.cmakeNodesBuild), std::move(data.cmakeNodesBuild),
std::move(data.cmakeNodesOther)); std::move(data.cmakeNodesOther));
addCMakePresets(result.get(), sourceDirectory);
data.cmakeNodesSource.clear(); // Remove all the nullptr in the vector... data.cmakeNodesSource.clear(); // Remove all the nullptr in the vector...
data.cmakeNodesBuild.clear(); // Remove all the nullptr in the vector... data.cmakeNodesBuild.clear(); // Remove all the nullptr in the vector...
data.cmakeNodesOther.clear(); // Remove all the nullptr in the vector... data.cmakeNodesOther.clear(); // Remove all the nullptr in the vector...

View File

@@ -3,9 +3,11 @@
#include "projecttreehelper.h" #include "projecttreehelper.h"
#include "cmakeproject.h"
#include "cmakeprojectmanagertr.h" #include "cmakeprojectmanagertr.h"
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/fsengine/fileiconprovider.h> #include <utils/fsengine/fileiconprovider.h>
@@ -88,6 +90,34 @@ void addCMakeInputs(FolderNode *root,
root->addNode(std::move(cmakeVFolder)); root->addNode(std::move(cmakeVFolder));
} }
void addCMakePresets(FolderNode *root, const Utils::FilePath &sourceDir)
{
QStringList presetFileNames;
presetFileNames << "CMakePresets.json";
presetFileNames << "CMakeUserPresets.json";
const CMakeProject *cp = static_cast<const CMakeProject *>(
ProjectManager::projectForFile(sourceDir.pathAppended("CMakeLists.txt")));
if (cp && cp->presetsData().include)
presetFileNames.append(cp->presetsData().include.value());
std::vector<std::unique_ptr<FileNode>> presets;
for (const auto &fileName : presetFileNames) {
Utils::FilePath file = sourceDir.pathAppended(fileName);
if (file.exists())
presets.push_back(std::make_unique<FileNode>(file, Node::fileTypeForFileName(file)));
}
if (presets.empty())
return;
std::unique_ptr<ProjectNode> cmakeVFolder = std::make_unique<CMakePresetsNode>(root->filePath());
addCMakeVFolder(cmakeVFolder.get(), sourceDir, 1000, QString(), std::move(presets));
root->addNode(std::move(cmakeVFolder));
}
QHash<Utils::FilePath, ProjectNode *> addCMakeLists( QHash<Utils::FilePath, ProjectNode *> addCMakeLists(
CMakeProjectNode *root, std::vector<std::unique_ptr<FileNode>> &&cmakeLists) CMakeProjectNode *root, std::vector<std::unique_ptr<FileNode>> &&cmakeLists)
{ {

View File

@@ -30,6 +30,8 @@ void addCMakeInputs(ProjectExplorer::FolderNode *root,
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&buildInputs, std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&buildInputs,
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&rootInputs); std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&rootInputs);
void addCMakePresets(ProjectExplorer::FolderNode *root, const Utils::FilePath &sourceDir);
QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> addCMakeLists( QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> addCMakeLists(
CMakeProjectNode *root, std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&cmakeLists); CMakeProjectNode *root, std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&cmakeLists);