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

@@ -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)
{