forked from qt-creator/qt-creator
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:
@@ -93,6 +93,14 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
|
||||
result.version = cmakePresetsData.version;
|
||||
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 &presets,
|
||||
auto &userPresets,
|
||||
|
@@ -30,6 +30,15 @@ CMakeInputsNode::CMakeInputsNode(const FilePath &cmakeLists) :
|
||||
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) :
|
||||
ProjectExplorer::ProjectNode(cmakeListPath)
|
||||
{
|
||||
|
@@ -15,6 +15,12 @@ public:
|
||||
CMakeInputsNode(const Utils::FilePath &cmakeLists);
|
||||
};
|
||||
|
||||
class CMakePresetsNode : public ProjectExplorer::ProjectNode
|
||||
{
|
||||
public:
|
||||
CMakePresetsNode(const Utils::FilePath &projectPath);
|
||||
};
|
||||
|
||||
class CMakeListsNode : public ProjectExplorer::ProjectNode
|
||||
{
|
||||
public:
|
||||
|
@@ -711,6 +711,9 @@ std::unique_ptr<CMakeProjectNode> generateRootProjectNode(
|
||||
std::move(data.cmakeNodesBuild),
|
||||
std::move(data.cmakeNodesOther));
|
||||
|
||||
|
||||
addCMakePresets(result.get(), sourceDirectory);
|
||||
|
||||
data.cmakeNodesSource.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...
|
||||
|
@@ -3,9 +3,11 @@
|
||||
|
||||
#include "projecttreehelper.h"
|
||||
|
||||
#include "cmakeproject.h"
|
||||
#include "cmakeprojectmanagertr.h"
|
||||
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/projectmanager.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/fsengine/fileiconprovider.h>
|
||||
@@ -88,6 +90,34 @@ void addCMakeInputs(FolderNode *root,
|
||||
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(
|
||||
CMakeProjectNode *root, std::vector<std::unique_ptr<FileNode>> &&cmakeLists)
|
||||
{
|
||||
|
@@ -30,6 +30,8 @@ void addCMakeInputs(ProjectExplorer::FolderNode *root,
|
||||
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&buildInputs,
|
||||
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&rootInputs);
|
||||
|
||||
void addCMakePresets(ProjectExplorer::FolderNode *root, const Utils::FilePath &sourceDir);
|
||||
|
||||
QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> addCMakeLists(
|
||||
CMakeProjectNode *root, std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&cmakeLists);
|
||||
|
||||
|
Reference in New Issue
Block a user