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.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,
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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:
|
||||||
|
@@ -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...
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user