forked from qt-creator/qt-creator
qmake: Avoid passing some context menu data by side channels
... and the need temporarily storing them by creating them when needed. Change-Id: I930dd34bc7682f3d4fb40bd8da132f52ba32414b Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -86,34 +86,37 @@ ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName, QSt
|
|||||||
return new QmakeProject(this, fileName);
|
return new QmakeProject(this, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectExplorer::Node *QmakeManager::contextNode() const
|
Node *QmakeManager::contextNode()
|
||||||
{
|
{
|
||||||
return m_contextNode;
|
Node *node = ProjectTree::currentNode();
|
||||||
|
if (!node)
|
||||||
|
return nullptr;
|
||||||
|
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
||||||
|
return subPriFileNode ? subPriFileNode->proFileNode() : node->parentProjectNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeManager::setContextNode(ProjectExplorer::Node *node)
|
QmakeProject *QmakeManager::contextProject()
|
||||||
{
|
{
|
||||||
m_contextNode = node;
|
return qobject_cast<QmakeProject *>(ProjectTree::currentProject());
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectExplorer::Project *QmakeManager::contextProject() const
|
FileNode *QmakeManager::contextFile()
|
||||||
{
|
{
|
||||||
return m_contextProject;
|
Node *node = ProjectTree::currentNode();
|
||||||
}
|
|
||||||
|
|
||||||
void QmakeManager::setContextProject(ProjectExplorer::Project *project)
|
QmakeProFileNode *subProjectNode = nullptr;
|
||||||
{
|
if (node) {
|
||||||
m_contextProject = project;
|
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
||||||
}
|
if (!subPriFileNode)
|
||||||
|
subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->parentProjectNode());
|
||||||
|
if (subPriFileNode)
|
||||||
|
subProjectNode = subPriFileNode->proFileNode();
|
||||||
|
}
|
||||||
|
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
||||||
|
bool buildFilePossible = subProjectNode && fileNode
|
||||||
|
&& (fileNode->fileType() == ProjectExplorer::FileType::Source);
|
||||||
|
|
||||||
ProjectExplorer::FileNode *QmakeManager::contextFile() const
|
return buildFilePossible ? fileNode : nullptr;
|
||||||
{
|
|
||||||
return m_contextFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QmakeManager::setContextFile(ProjectExplorer::FileNode *file)
|
|
||||||
{
|
|
||||||
m_contextFile = file;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeManager::addLibrary()
|
void QmakeManager::addLibrary()
|
||||||
@@ -162,7 +165,7 @@ void QmakeManager::runQMake()
|
|||||||
|
|
||||||
void QmakeManager::runQMakeContextMenu()
|
void QmakeManager::runQMakeContextMenu()
|
||||||
{
|
{
|
||||||
runQMakeImpl(m_contextProject, m_contextNode);
|
runQMakeImpl(contextProject(), contextNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::Node *node)
|
void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::Node *node)
|
||||||
@@ -227,31 +230,28 @@ void QmakeManager::buildFile()
|
|||||||
|
|
||||||
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild)
|
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild)
|
||||||
{
|
{
|
||||||
handleSubDirContextMenu(action, isFileBuild, m_contextProject, m_contextNode, m_contextFile);
|
handleSubDirContextMenu(action, isFileBuild, contextProject(), contextNode(), contextFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
||||||
ProjectExplorer::Project *contextProject,
|
Project *contextProject, Node *contextNode, FileNode *contextFile)
|
||||||
ProjectExplorer::Node *contextNode,
|
|
||||||
ProjectExplorer::FileNode *contextFile)
|
|
||||||
{
|
{
|
||||||
QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(contextProject);
|
QTC_ASSERT(contextProject, return);
|
||||||
QTC_ASSERT(qmakeProject, return);
|
Target *target = contextProject->activeTarget();
|
||||||
|
if (!target)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!qmakeProject->activeTarget() ||
|
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(target->activeBuildConfiguration());
|
||||||
!qmakeProject->activeTarget()->activeBuildConfiguration())
|
if (!bc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!contextNode || !contextFile)
|
if (!contextNode || !contextFile)
|
||||||
isFileBuild = false;
|
isFileBuild = false;
|
||||||
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration());
|
|
||||||
if (!bc)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (contextNode) {
|
if (contextNode) {
|
||||||
if (QmakePriFileNode *prifile = dynamic_cast<QmakePriFileNode *>(contextNode)) {
|
if (QmakePriFileNode *prifile = dynamic_cast<QmakePriFileNode *>(contextNode)) {
|
||||||
if (QmakeProFileNode *profile = prifile->proFileNode()) {
|
if (QmakeProFileNode *profile = prifile->proFileNode()) {
|
||||||
if (profile != qmakeProject->rootProjectNode() || isFileBuild)
|
if (profile != contextProject->rootProjectNode() || isFileBuild)
|
||||||
bc->setSubNodeBuild(profile);
|
bc->setSubNodeBuild(profile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,12 +56,9 @@ public:
|
|||||||
ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override;
|
ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override;
|
||||||
|
|
||||||
// Context information used in the slot implementations
|
// Context information used in the slot implementations
|
||||||
ProjectExplorer::Node *contextNode() const;
|
static ProjectExplorer::Node *contextNode();
|
||||||
void setContextNode(ProjectExplorer::Node *node);
|
static QmakeProject *contextProject();
|
||||||
ProjectExplorer::Project *contextProject() const;
|
static ProjectExplorer::FileNode *contextFile();
|
||||||
void setContextProject(ProjectExplorer::Project *project);
|
|
||||||
ProjectExplorer::FileNode *contextFile() const;
|
|
||||||
void setContextFile(ProjectExplorer::FileNode *file);
|
|
||||||
|
|
||||||
enum Action { BUILD, REBUILD, CLEAN };
|
enum Action { BUILD, REBUILD, CLEAN };
|
||||||
|
|
||||||
@@ -84,10 +81,6 @@ private:
|
|||||||
ProjectExplorer::FileNode *contextFile);
|
ProjectExplorer::FileNode *contextFile);
|
||||||
void addLibraryImpl(const QString &fileName, TextEditor::BaseTextEditor *editor);
|
void addLibraryImpl(const QString &fileName, TextEditor::BaseTextEditor *editor);
|
||||||
void runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::Node *node);
|
void runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::Node *node);
|
||||||
|
|
||||||
ProjectExplorer::Node *m_contextNode = nullptr;
|
|
||||||
ProjectExplorer::Project *m_contextProject = nullptr;
|
|
||||||
ProjectExplorer::FileNode *m_contextFile = nullptr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QmakeProjectManager
|
} // namespace QmakeProjectManager
|
||||||
|
|||||||
@@ -321,24 +321,12 @@ void QmakeProjectManagerPlugin::updateContextActions()
|
|||||||
Project *project = ProjectTree::currentProject();
|
Project *project = ProjectTree::currentProject();
|
||||||
m_addLibraryActionContextMenu->setEnabled(dynamic_cast<QmakeProFileNode *>(node));
|
m_addLibraryActionContextMenu->setEnabled(dynamic_cast<QmakeProFileNode *>(node));
|
||||||
|
|
||||||
auto proFileNode = dynamic_cast<QmakeProFileNode *>(node);
|
FileNode *proFileNode = QmakeManager::contextFile();
|
||||||
auto qmakeProject = qobject_cast<QmakeProject *>(project);
|
QmakeProject *qmakeProject = QmakeManager::contextProject();
|
||||||
QmakeProFileNode *subProjectNode = nullptr;
|
Node *subProjectNode = QmakeManager::contextNode();
|
||||||
if (node) {
|
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
||||||
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
|
||||||
if (!subPriFileNode)
|
|
||||||
subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->parentProjectNode());
|
|
||||||
if (subPriFileNode)
|
|
||||||
subProjectNode = subPriFileNode->proFileNode();
|
|
||||||
}
|
|
||||||
ProjectExplorer::FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
|
||||||
bool buildFilePossible = subProjectNode && fileNode
|
|
||||||
&& (fileNode->fileType() == ProjectExplorer::FileType::Source);
|
|
||||||
|
|
||||||
m_qmakeProjectManager->setContextNode(subProjectNode);
|
|
||||||
m_qmakeProjectManager->setContextProject(qmakeProject);
|
|
||||||
m_qmakeProjectManager->setContextFile(buildFilePossible ? fileNode : nullptr);
|
|
||||||
|
|
||||||
|
bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source);
|
||||||
bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode());
|
bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode());
|
||||||
|
|
||||||
QString subProjectName;
|
QString subProjectName;
|
||||||
|
|||||||
Reference in New Issue
Block a user