forked from qt-creator/qt-creator
CMake: Get rid of <Source Directory> in server-mode
Change-Id: Ifa4f813d577ab64351d25eb4be1dc7981687da23 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -37,18 +37,16 @@ using namespace CMakeProjectManager;
|
|||||||
using namespace CMakeProjectManager::Internal;
|
using namespace CMakeProjectManager::Internal;
|
||||||
|
|
||||||
CMakeInputsNode::CMakeInputsNode(const Utils::FileName &cmakeLists) :
|
CMakeInputsNode::CMakeInputsNode(const Utils::FileName &cmakeLists) :
|
||||||
ProjectExplorer::ProjectNode(CMakeInputsNode::inputsPathFromCMakeListsPath(cmakeLists))
|
ProjectExplorer::ProjectNode(cmakeLists, generateId(cmakeLists))
|
||||||
{
|
{
|
||||||
setPriority(Node::DefaultPriority - 10); // Bottom most!
|
setPriority(Node::DefaultPriority - 10); // Bottom most!
|
||||||
setDisplayName(QCoreApplication::translate("CMakeFilesProjectNode", "CMake Modules"));
|
setDisplayName(QCoreApplication::translate("CMakeFilesProjectNode", "CMake Modules"));
|
||||||
setIcon(QIcon(":/projectexplorer/images/session.png")); // TODO: Use a better icon!
|
setIcon(QIcon(":/projectexplorer/images/session.png")); // TODO: Use a better icon!
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::FileName CMakeInputsNode::inputsPathFromCMakeListsPath(const Utils::FileName &cmakeLists)
|
QByteArray CMakeInputsNode::generateId(const Utils::FileName &inputFile)
|
||||||
{
|
{
|
||||||
Utils::FileName result = cmakeLists;
|
return inputFile.toString().toUtf8() + "/cmakeInputs";
|
||||||
result.appendPath("cmakeInputs"); // cmakeLists is a file, so this can not exist on disk
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CMakeInputsNode::showInSimpleTree() const
|
bool CMakeInputsNode::showInSimpleTree() const
|
||||||
@@ -91,13 +89,18 @@ QString CMakeProjectNode::tooltip() const
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
CMakeTargetNode::CMakeTargetNode(const Utils::FileName &directory) :
|
CMakeTargetNode::CMakeTargetNode(const Utils::FileName &directory, const QString &target) :
|
||||||
ProjectExplorer::ProjectNode(directory)
|
ProjectExplorer::ProjectNode(directory, generateId(directory, target))
|
||||||
{
|
{
|
||||||
setPriority(Node::DefaultProjectPriority + 900);
|
setPriority(Node::DefaultProjectPriority + 900);
|
||||||
setIcon(QIcon(":/projectexplorer/images/build.png")); // TODO: Use proper icon!
|
setIcon(QIcon(":/projectexplorer/images/build.png")); // TODO: Use proper icon!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray CMakeTargetNode::generateId(const Utils::FileName &directory, const QString &target)
|
||||||
|
{
|
||||||
|
return directory.toString().toUtf8() + "///::///" + target.toUtf8();
|
||||||
|
}
|
||||||
|
|
||||||
bool CMakeTargetNode::showInSimpleTree() const
|
bool CMakeTargetNode::showInSimpleTree() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class CMakeInputsNode : public ProjectExplorer::ProjectNode
|
|||||||
public:
|
public:
|
||||||
CMakeInputsNode(const Utils::FileName &cmakeLists);
|
CMakeInputsNode(const Utils::FileName &cmakeLists);
|
||||||
|
|
||||||
static Utils::FileName inputsPathFromCMakeListsPath(const Utils::FileName &cmakeLists);
|
static QByteArray generateId(const Utils::FileName &inputFile);
|
||||||
|
|
||||||
bool showInSimpleTree() const final;
|
bool showInSimpleTree() const final;
|
||||||
};
|
};
|
||||||
@@ -60,7 +60,9 @@ public:
|
|||||||
class CMakeTargetNode : public ProjectExplorer::ProjectNode
|
class CMakeTargetNode : public ProjectExplorer::ProjectNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CMakeTargetNode(const Utils::FileName &directory);
|
CMakeTargetNode(const Utils::FileName &directory, const QString &target);
|
||||||
|
|
||||||
|
static QByteArray generateId(const Utils::FileName &directory, const QString &target);
|
||||||
|
|
||||||
void setTargetInformation(const QList<Utils::FileName> &artifacts, const QString &type);
|
void setTargetInformation(const QList<Utils::FileName> &artifacts, const QString &type);
|
||||||
|
|
||||||
|
|||||||
@@ -247,9 +247,12 @@ static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, i
|
|||||||
{
|
{
|
||||||
if (files.isEmpty())
|
if (files.isEmpty())
|
||||||
return;
|
return;
|
||||||
auto folder = new VirtualFolderNode(basePath, priority);
|
FolderNode *folder = base;
|
||||||
folder->setDisplayName(displayName);
|
if (!displayName.isEmpty()) {
|
||||||
base->addNode(folder);
|
folder = new VirtualFolderNode(basePath, priority);
|
||||||
|
folder->setDisplayName(displayName);
|
||||||
|
base->addNode(folder);
|
||||||
|
}
|
||||||
folder->addNestedNodes(files);
|
folder->addNestedNodes(files);
|
||||||
for (FolderNode *fn : folder->folderNodes())
|
for (FolderNode *fn : folder->folderNodes())
|
||||||
fn->compress();
|
fn->compress();
|
||||||
@@ -265,9 +268,7 @@ static void addCMakeInputs(FolderNode *root,
|
|||||||
ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath());
|
ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath());
|
||||||
root->addNode(cmakeVFolder);
|
root->addNode(cmakeVFolder);
|
||||||
|
|
||||||
addCMakeVFolder(cmakeVFolder, sourceDir, 1000,
|
addCMakeVFolder(cmakeVFolder, sourceDir, 1000, QString(), sourceInputs);
|
||||||
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Source Directory>"),
|
|
||||||
sourceInputs);
|
|
||||||
addCMakeVFolder(cmakeVFolder, buildDir, 100,
|
addCMakeVFolder(cmakeVFolder, buildDir, 100,
|
||||||
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Build Directory>"),
|
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Build Directory>"),
|
||||||
buildInputs);
|
buildInputs);
|
||||||
@@ -686,12 +687,13 @@ static CMakeTargetNode *createTargetNode(const QHash<Utils::FileName, ProjectNod
|
|||||||
ProjectNode *cmln = cmakeListsNodes.value(dir);
|
ProjectNode *cmln = cmakeListsNodes.value(dir);
|
||||||
QTC_ASSERT(cmln, return nullptr);
|
QTC_ASSERT(cmln, return nullptr);
|
||||||
|
|
||||||
Utils::FileName targetName = dir;
|
QByteArray targetId = CMakeTargetNode::generateId(dir, displayName);
|
||||||
targetName.appendPath(".target::" + displayName);
|
|
||||||
|
|
||||||
CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(cmln->projectNode(targetName));
|
CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(cmln->findNode([&targetId](const Node *n) {
|
||||||
|
return n->id() == targetId;
|
||||||
|
}));
|
||||||
if (!tn) {
|
if (!tn) {
|
||||||
tn = new CMakeTargetNode(targetName);
|
tn = new CMakeTargetNode(dir, displayName);
|
||||||
cmln->addNode(tn);
|
cmln->addNode(tn);
|
||||||
}
|
}
|
||||||
tn->setDisplayName(displayName);
|
tn->setDisplayName(displayName);
|
||||||
@@ -748,7 +750,7 @@ void ServerModeReader::addFileGroups(ProjectNode *targetRoot,
|
|||||||
otherFileNodes.append(fn);
|
otherFileNodes.append(fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
addCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes);
|
addCMakeVFolder(targetRoot, sourceDirectory, 1000, QString(), sourceFileNodes);
|
||||||
addCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes);
|
addCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes);
|
||||||
addCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes);
|
addCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ static FolderNode *recursiveFindOrCreateFolderNode(FolderNode *folder,
|
|||||||
\sa ProjectExplorer::NodesWatcher
|
\sa ProjectExplorer::NodesWatcher
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Node::Node(NodeType nodeType, const Utils::FileName &filePath, int line) :
|
Node::Node(NodeType nodeType, const Utils::FileName &filePath, int line, const QByteArray &id) :
|
||||||
m_filePath(filePath), m_line(line), m_nodeType(nodeType)
|
m_filePath(filePath), m_nodeId(id), m_line(line), m_nodeType(nodeType)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void Node::setPriority(int p)
|
void Node::setPriority(int p)
|
||||||
@@ -222,6 +222,11 @@ int Node::line() const
|
|||||||
return m_line;
|
return m_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray Node::id() const
|
||||||
|
{
|
||||||
|
return m_nodeId;
|
||||||
|
}
|
||||||
|
|
||||||
QString Node::displayName() const
|
QString Node::displayName() const
|
||||||
{
|
{
|
||||||
return filePath().fileName();
|
return filePath().fileName();
|
||||||
@@ -309,9 +314,9 @@ FileType Node::fileTypeForFileName(const Utils::FileName &file)
|
|||||||
\sa ProjectExplorer::FolderNode, ProjectExplorer::ProjectNode
|
\sa ProjectExplorer::FolderNode, ProjectExplorer::ProjectNode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FileNode::FileNode(const Utils::FileName &filePath,
|
FileNode::FileNode(const Utils::FileName &filePath, const FileType fileType, bool generated,
|
||||||
const FileType fileType,
|
int line, const QByteArray &id) :
|
||||||
bool generated, int line) : Node(NodeType::File, filePath, line),
|
Node(NodeType::File, filePath, line, id),
|
||||||
m_fileType(fileType)
|
m_fileType(fileType)
|
||||||
{
|
{
|
||||||
setListInProject(true);
|
setListInProject(true);
|
||||||
@@ -324,7 +329,7 @@ FileNode::FileNode(const Utils::FileName &filePath,
|
|||||||
|
|
||||||
FileNode *FileNode::clone() const
|
FileNode *FileNode::clone() const
|
||||||
{
|
{
|
||||||
auto fn = new FileNode(filePath(), fileType(), isGenerated(), line());
|
auto fn = new FileNode(filePath(), fileType(), isGenerated(), line(), id());
|
||||||
fn->setEnabled(isEnabled());
|
fn->setEnabled(isEnabled());
|
||||||
fn->setPriority(priority());
|
fn->setPriority(priority());
|
||||||
fn->setListInProject(listInProject());
|
fn->setListInProject(listInProject());
|
||||||
@@ -418,8 +423,9 @@ bool FileNode::supportsAction(ProjectAction action, Node *node) const
|
|||||||
|
|
||||||
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
||||||
*/
|
*/
|
||||||
FolderNode::FolderNode(const Utils::FileName &folderPath, NodeType nodeType, const QString &displayName) :
|
FolderNode::FolderNode(const Utils::FileName &folderPath, NodeType nodeType,
|
||||||
Node(nodeType, folderPath, -1),
|
const QString &displayName, const QByteArray &id) :
|
||||||
|
Node(nodeType, folderPath, -1, id),
|
||||||
m_displayName(displayName)
|
m_displayName(displayName)
|
||||||
{
|
{
|
||||||
setPriority(DefaultFolderPriority);
|
setPriority(DefaultFolderPriority);
|
||||||
@@ -735,8 +741,9 @@ bool FolderNode::showInSimpleTree() const
|
|||||||
|
|
||||||
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
||||||
*/
|
*/
|
||||||
VirtualFolderNode::VirtualFolderNode(const Utils::FileName &folderPath, int priority) :
|
VirtualFolderNode::VirtualFolderNode(const Utils::FileName &folderPath, int priority,
|
||||||
FolderNode(folderPath, NodeType::VirtualFolder, QString())
|
const QByteArray &id) :
|
||||||
|
FolderNode(folderPath, NodeType::VirtualFolder, QString(), id)
|
||||||
{
|
{
|
||||||
setPriority(priority);
|
setPriority(priority);
|
||||||
}
|
}
|
||||||
@@ -761,12 +768,11 @@ QString VirtualFolderNode::addFileFilter() const
|
|||||||
/*!
|
/*!
|
||||||
Creates an uninitialized project node object.
|
Creates an uninitialized project node object.
|
||||||
*/
|
*/
|
||||||
ProjectNode::ProjectNode(const Utils::FileName &projectFilePath) :
|
ProjectNode::ProjectNode(const Utils::FileName &projectFilePath, const QByteArray &id) :
|
||||||
FolderNode(projectFilePath, NodeType::Project)
|
FolderNode(projectFilePath, NodeType::Project, projectFilePath.fileName(), id)
|
||||||
{
|
{
|
||||||
setPriority(DefaultProjectPriority);
|
setPriority(DefaultProjectPriority);
|
||||||
setListInProject(true);
|
setListInProject(true);
|
||||||
setDisplayName(projectFilePath.fileName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProjectNode::canAddSubProject(const QString &proFilePath) const
|
bool ProjectNode::canAddSubProject(const QString &proFilePath) const
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ public:
|
|||||||
|
|
||||||
const Utils::FileName &filePath() const; // file system path
|
const Utils::FileName &filePath() const; // file system path
|
||||||
int line() const;
|
int line() const;
|
||||||
|
QByteArray id() const;
|
||||||
virtual QString displayName() const;
|
virtual QString displayName() const;
|
||||||
virtual QString tooltip() const;
|
virtual QString tooltip() const;
|
||||||
bool isEnabled() const;
|
bool isEnabled() const;
|
||||||
@@ -156,7 +157,8 @@ public:
|
|||||||
static FileType fileTypeForFileName(const Utils::FileName &file);
|
static FileType fileTypeForFileName(const Utils::FileName &file);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Node(NodeType nodeType, const Utils::FileName &filePath, int line = -1);
|
Node(NodeType nodeType, const Utils::FileName &filePath, int line = -1,
|
||||||
|
const QByteArray &id = {});
|
||||||
|
|
||||||
void setPriority(int priority);
|
void setPriority(int priority);
|
||||||
void setIsGenerated(bool g);
|
void setIsGenerated(bool g);
|
||||||
@@ -164,6 +166,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
FolderNode *m_parentFolderNode = nullptr;
|
FolderNode *m_parentFolderNode = nullptr;
|
||||||
Utils::FileName m_filePath;
|
Utils::FileName m_filePath;
|
||||||
|
QByteArray m_nodeId;
|
||||||
int m_line = -1;
|
int m_line = -1;
|
||||||
int m_priority = DefaultPriority;
|
int m_priority = DefaultPriority;
|
||||||
const NodeType m_nodeType;
|
const NodeType m_nodeType;
|
||||||
@@ -180,7 +183,8 @@ private:
|
|||||||
class PROJECTEXPLORER_EXPORT FileNode : public Node
|
class PROJECTEXPLORER_EXPORT FileNode : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FileNode(const Utils::FileName &filePath, const FileType fileType, bool generated, int line = -1);
|
FileNode(const Utils::FileName &filePath, const FileType fileType, bool generated, int line = -1,
|
||||||
|
const QByteArray &id = {});
|
||||||
|
|
||||||
FileNode *clone() const;
|
FileNode *clone() const;
|
||||||
|
|
||||||
@@ -210,7 +214,7 @@ class PROJECTEXPLORER_EXPORT FolderNode : public Node
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit FolderNode(const Utils::FileName &folderPath, NodeType nodeType = NodeType::Folder,
|
explicit FolderNode(const Utils::FileName &folderPath, NodeType nodeType = NodeType::Folder,
|
||||||
const QString &displayName = QString());
|
const QString &displayName = QString(), const QByteArray &id = {});
|
||||||
~FolderNode() override;
|
~FolderNode() override;
|
||||||
|
|
||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
@@ -288,7 +292,8 @@ private:
|
|||||||
class PROJECTEXPLORER_EXPORT VirtualFolderNode : public FolderNode
|
class PROJECTEXPLORER_EXPORT VirtualFolderNode : public FolderNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit VirtualFolderNode(const Utils::FileName &folderPath, int priority);
|
explicit VirtualFolderNode(const Utils::FileName &folderPath, int priority,
|
||||||
|
const QByteArray &id = {});
|
||||||
|
|
||||||
void setAddFileFilter(const QString &filter) { m_addFileFilter = filter; }
|
void setAddFileFilter(const QString &filter) { m_addFileFilter = filter; }
|
||||||
QString addFileFilter() const override;
|
QString addFileFilter() const override;
|
||||||
@@ -323,7 +328,7 @@ public:
|
|||||||
const ProjectNode *asProjectNode() const final { return this; }
|
const ProjectNode *asProjectNode() const final { return this; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit ProjectNode(const Utils::FileName &projectFilePath);
|
explicit ProjectNode(const Utils::FileName &projectFilePath, const QByteArray &id = {});
|
||||||
};
|
};
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT ContainerNode : public FolderNode
|
class PROJECTEXPLORER_EXPORT ContainerNode : public FolderNode
|
||||||
|
|||||||
Reference in New Issue
Block a user