diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp index aa9f96d423c..b2797b13a0f 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp @@ -86,34 +86,37 @@ ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName, QSt 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(node); + return subPriFileNode ? subPriFileNode->proFileNode() : node->parentProjectNode(); } -void QmakeManager::setContextNode(ProjectExplorer::Node *node) +QmakeProject *QmakeManager::contextProject() { - m_contextNode = node; + return qobject_cast(ProjectTree::currentProject()); } -ProjectExplorer::Project *QmakeManager::contextProject() const +FileNode *QmakeManager::contextFile() { - return m_contextProject; -} + Node *node = ProjectTree::currentNode(); -void QmakeManager::setContextProject(ProjectExplorer::Project *project) -{ - m_contextProject = project; -} + QmakeProFileNode *subProjectNode = nullptr; + if (node) { + auto subPriFileNode = dynamic_cast(node); + if (!subPriFileNode) + subPriFileNode = dynamic_cast(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 m_contextFile; -} - -void QmakeManager::setContextFile(ProjectExplorer::FileNode *file) -{ - m_contextFile = file; + return buildFilePossible ? fileNode : nullptr; } void QmakeManager::addLibrary() @@ -162,7 +165,7 @@ void QmakeManager::runQMake() void QmakeManager::runQMakeContextMenu() { - runQMakeImpl(m_contextProject, m_contextNode); + runQMakeImpl(contextProject(), contextNode()); } void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::Node *node) @@ -227,31 +230,28 @@ void QmakeManager::buildFile() 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, - ProjectExplorer::Project *contextProject, - ProjectExplorer::Node *contextNode, - ProjectExplorer::FileNode *contextFile) + Project *contextProject, Node *contextNode, FileNode *contextFile) { - QmakeProject *qmakeProject = qobject_cast(contextProject); - QTC_ASSERT(qmakeProject, return); + QTC_ASSERT(contextProject, return); + Target *target = contextProject->activeTarget(); + if (!target) + return; - if (!qmakeProject->activeTarget() || - !qmakeProject->activeTarget()->activeBuildConfiguration()) - return; + QmakeBuildConfiguration *bc = qobject_cast(target->activeBuildConfiguration()); + if (!bc) + return; if (!contextNode || !contextFile) isFileBuild = false; - QmakeBuildConfiguration *bc = qobject_cast(qmakeProject->activeTarget()->activeBuildConfiguration()); - if (!bc) - return; if (contextNode) { if (QmakePriFileNode *prifile = dynamic_cast(contextNode)) { if (QmakeProFileNode *profile = prifile->proFileNode()) { - if (profile != qmakeProject->rootProjectNode() || isFileBuild) + if (profile != contextProject->rootProjectNode() || isFileBuild) bc->setSubNodeBuild(profile); } } diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h index 8bffd7cf1c5..a49b9253620 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h @@ -56,12 +56,9 @@ public: ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; // Context information used in the slot implementations - ProjectExplorer::Node *contextNode() const; - void setContextNode(ProjectExplorer::Node *node); - ProjectExplorer::Project *contextProject() const; - void setContextProject(ProjectExplorer::Project *project); - ProjectExplorer::FileNode *contextFile() const; - void setContextFile(ProjectExplorer::FileNode *file); + static ProjectExplorer::Node *contextNode(); + static QmakeProject *contextProject(); + static ProjectExplorer::FileNode *contextFile(); enum Action { BUILD, REBUILD, CLEAN }; @@ -84,10 +81,6 @@ private: ProjectExplorer::FileNode *contextFile); void addLibraryImpl(const QString &fileName, TextEditor::BaseTextEditor *editor); 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 diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp index 852635d7a65..d25b57b2055 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp @@ -321,24 +321,12 @@ void QmakeProjectManagerPlugin::updateContextActions() Project *project = ProjectTree::currentProject(); m_addLibraryActionContextMenu->setEnabled(dynamic_cast(node)); - auto proFileNode = dynamic_cast(node); - auto qmakeProject = qobject_cast(project); - QmakeProFileNode *subProjectNode = nullptr; - if (node) { - auto subPriFileNode = dynamic_cast(node); - if (!subPriFileNode) - subPriFileNode = dynamic_cast(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); + FileNode *proFileNode = QmakeManager::contextFile(); + QmakeProject *qmakeProject = QmakeManager::contextProject(); + Node *subProjectNode = QmakeManager::contextNode(); + FileNode *fileNode = node ? node->asFileNode() : nullptr; + bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source); bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode()); QString subProjectName;