forked from qt-creator/qt-creator
Qmake: Fix build/run qmake from context menu again
This got broken when refactoring the project nodes. Change-Id: Iae4614f4a367cefeba3f70faaf19bc2f8994fb0f Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -88,30 +88,31 @@ ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName, QSt
|
|||||||
|
|
||||||
Node *QmakeManager::contextNode()
|
Node *QmakeManager::contextNode()
|
||||||
{
|
{
|
||||||
Node *node = ProjectTree::currentNode();
|
return ProjectTree::currentNode();
|
||||||
if (!node)
|
|
||||||
return nullptr;
|
|
||||||
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
|
||||||
return subPriFileNode ? subPriFileNode->proFileNode() : node->parentProjectNode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeProject *QmakeManager::contextProject()
|
Project *QmakeManager::contextProject()
|
||||||
{
|
{
|
||||||
return qobject_cast<QmakeProject *>(ProjectTree::currentProject());
|
return ProjectTree::currentProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
FileNode *QmakeManager::contextFile()
|
static QmakeProFileNode *buildableFileProFile(Node *node)
|
||||||
{
|
{
|
||||||
Node *node = ProjectTree::currentNode();
|
|
||||||
|
|
||||||
QmakeProFileNode *subProjectNode = nullptr;
|
|
||||||
if (node) {
|
if (node) {
|
||||||
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
||||||
if (!subPriFileNode)
|
if (!subPriFileNode)
|
||||||
subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->parentProjectNode());
|
subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->parentProjectNode());
|
||||||
if (subPriFileNode)
|
if (subPriFileNode)
|
||||||
subProjectNode = subPriFileNode->proFileNode();
|
return subPriFileNode->proFileNode();
|
||||||
}
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileNode *QmakeManager::contextBuildableFileNode()
|
||||||
|
{
|
||||||
|
Node *node = contextNode();
|
||||||
|
|
||||||
|
QmakeProFileNode *subProjectNode = buildableFileProFile(node);
|
||||||
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
||||||
bool buildFilePossible = subProjectNode && fileNode
|
bool buildFilePossible = subProjectNode && fileNode
|
||||||
&& (fileNode->fileType() == ProjectExplorer::FileType::Source);
|
&& (fileNode->fileType() == ProjectExplorer::FileType::Source);
|
||||||
@@ -127,7 +128,7 @@ void QmakeManager::addLibrary()
|
|||||||
|
|
||||||
void QmakeManager::addLibraryContextMenu()
|
void QmakeManager::addLibraryContextMenu()
|
||||||
{
|
{
|
||||||
Node *node = ProjectTree::currentNode();
|
Node *node = contextNode();
|
||||||
if (dynamic_cast<QmakeProFileNode *>(node))
|
if (dynamic_cast<QmakeProFileNode *>(node))
|
||||||
addLibraryImpl(node->filePath().toString(), nullptr);
|
addLibraryImpl(node->filePath().toString(), nullptr);
|
||||||
}
|
}
|
||||||
@@ -157,7 +158,6 @@ void QmakeManager::addLibraryImpl(const QString &fileName, BaseTextEditor *edito
|
|||||||
editor->insert(snippet);
|
editor->insert(snippet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QmakeManager::runQMake()
|
void QmakeManager::runQMake()
|
||||||
{
|
{
|
||||||
runQMakeImpl(SessionManager::startupProject(), nullptr);
|
runQMakeImpl(SessionManager::startupProject(), nullptr);
|
||||||
@@ -175,8 +175,7 @@ void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::No
|
|||||||
QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(p);
|
QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(p);
|
||||||
QTC_ASSERT(qmakeProject, return);
|
QTC_ASSERT(qmakeProject, return);
|
||||||
|
|
||||||
if (!qmakeProject->activeTarget() ||
|
if (!qmakeProject->activeTarget() || !qmakeProject->activeTarget()->activeBuildConfiguration())
|
||||||
!qmakeProject->activeTarget()->activeBuildConfiguration())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QmakeBuildConfiguration *bc = static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration());
|
QmakeBuildConfiguration *bc = static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration());
|
||||||
@@ -187,7 +186,7 @@ void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::No
|
|||||||
//found qmakeStep, now use it
|
//found qmakeStep, now use it
|
||||||
qs->setForced(true);
|
qs->setForced(true);
|
||||||
|
|
||||||
if (node != 0 && node != qmakeProject->rootProjectNode())
|
if (node && node != qmakeProject->rootProjectNode())
|
||||||
if (QmakeProFileNode *profile = dynamic_cast<QmakeProFileNode *>(node))
|
if (QmakeProFileNode *profile = dynamic_cast<QmakeProFileNode *>(node))
|
||||||
bc->setSubNodeBuild(profile);
|
bc->setSubNodeBuild(profile);
|
||||||
|
|
||||||
@@ -230,11 +229,13 @@ void QmakeManager::buildFile()
|
|||||||
|
|
||||||
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild)
|
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild)
|
||||||
{
|
{
|
||||||
handleSubDirContextMenu(action, isFileBuild, contextProject(), contextNode(), contextFile());
|
handleSubDirContextMenu(action, isFileBuild, contextProject(),
|
||||||
|
buildableFileProFile(contextNode()), contextBuildableFileNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
||||||
Project *contextProject, Node *contextNode, FileNode *contextFile)
|
Project *contextProject, Node *contextNode,
|
||||||
|
FileNode *buildableFile)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(contextProject, return);
|
QTC_ASSERT(contextProject, return);
|
||||||
Target *target = contextProject->activeTarget();
|
Target *target = contextProject->activeTarget();
|
||||||
@@ -245,20 +246,16 @@ void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isF
|
|||||||
if (!bc)
|
if (!bc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!contextNode || !contextFile)
|
if (!contextNode || !buildableFile)
|
||||||
isFileBuild = false;
|
isFileBuild = false;
|
||||||
|
|
||||||
if (contextNode) {
|
if (QmakeProFileNode *profile = dynamic_cast<QmakeProFileNode *>(contextNode)) {
|
||||||
if (QmakePriFileNode *prifile = dynamic_cast<QmakePriFileNode *>(contextNode)) {
|
if (profile != contextProject->rootProjectNode() || isFileBuild)
|
||||||
if (QmakeProFileNode *profile = prifile->proFileNode()) {
|
bc->setSubNodeBuild(profile);
|
||||||
if (profile != contextProject->rootProjectNode() || isFileBuild)
|
|
||||||
bc->setSubNodeBuild(profile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFileBuild)
|
if (isFileBuild)
|
||||||
bc->setFileNodeBuild(contextFile);
|
bc->setFileNodeBuild(buildableFile);
|
||||||
if (ProjectExplorerPlugin::saveModifiedFiles()) {
|
if (ProjectExplorerPlugin::saveModifiedFiles()) {
|
||||||
const Core::Id buildStep = ProjectExplorer::Constants::BUILDSTEPS_BUILD;
|
const Core::Id buildStep = ProjectExplorer::Constants::BUILDSTEPS_BUILD;
|
||||||
const Core::Id cleanStep = ProjectExplorer::Constants::BUILDSTEPS_CLEAN;
|
const Core::Id cleanStep = ProjectExplorer::Constants::BUILDSTEPS_CLEAN;
|
||||||
|
@@ -57,8 +57,8 @@ public:
|
|||||||
|
|
||||||
// Context information used in the slot implementations
|
// Context information used in the slot implementations
|
||||||
static ProjectExplorer::Node *contextNode();
|
static ProjectExplorer::Node *contextNode();
|
||||||
static QmakeProject *contextProject();
|
static ProjectExplorer::Project *contextProject();
|
||||||
static ProjectExplorer::FileNode *contextFile();
|
static ProjectExplorer::FileNode *contextBuildableFileNode();
|
||||||
|
|
||||||
enum Action { BUILD, REBUILD, CLEAN };
|
enum Action { BUILD, REBUILD, CLEAN };
|
||||||
|
|
||||||
@@ -77,8 +77,8 @@ private:
|
|||||||
void handleSubDirContextMenu(Action action, bool isFileBuild);
|
void handleSubDirContextMenu(Action action, bool isFileBuild);
|
||||||
void handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
void handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild,
|
||||||
ProjectExplorer::Project *contextProject,
|
ProjectExplorer::Project *contextProject,
|
||||||
ProjectExplorer::Node *contextNode,
|
ProjectExplorer::Node *contextProFileNode,
|
||||||
ProjectExplorer::FileNode *contextFile);
|
ProjectExplorer::FileNode *buildableFile);
|
||||||
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);
|
||||||
};
|
};
|
||||||
|
@@ -71,10 +71,6 @@ using namespace QmakeProjectManager::Internal;
|
|||||||
using namespace QmakeProjectManager;
|
using namespace QmakeProjectManager;
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
|
|
||||||
QmakeProjectManagerPlugin::~QmakeProjectManagerPlugin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
||||||
{
|
{
|
||||||
Q_UNUSED(arguments)
|
Q_UNUSED(arguments)
|
||||||
@@ -318,17 +314,23 @@ 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));
|
||||||
|
|
||||||
FileNode *proFileNode = QmakeManager::contextFile();
|
auto proFileNode = dynamic_cast<QmakeProFileNode *>(node);
|
||||||
QmakeProject *qmakeProject = QmakeManager::contextProject();
|
QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(QmakeManager::contextProject());
|
||||||
Node *subProjectNode = QmakeManager::contextNode();
|
QmakeProFileNode *subProjectNode = nullptr;
|
||||||
|
if (node) {
|
||||||
|
auto subPriFileNode = dynamic_cast<QmakePriFileNode *>(node);
|
||||||
|
if (!subPriFileNode)
|
||||||
|
subPriFileNode = dynamic_cast<QmakePriFileNode *>(node->parentProjectNode());
|
||||||
|
subProjectNode = subPriFileNode ? subPriFileNode->proFileNode() : nullptr;
|
||||||
|
}
|
||||||
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
FileNode *fileNode = node ? node->asFileNode() : nullptr;
|
||||||
|
|
||||||
bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source);
|
bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source);
|
||||||
bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode());
|
bool subProjectActionsVisible = qmakeProject && proFileNode && (proFileNode != qmakeProject->rootProjectNode());
|
||||||
|
|
||||||
QString subProjectName;
|
QString subProjectName;
|
||||||
if (subProjectActionsVisible)
|
if (subProjectActionsVisible)
|
||||||
subProjectName = subProjectNode->displayName();
|
subProjectName = proFileNode->displayName();
|
||||||
|
|
||||||
m_buildSubProjectAction->setParameter(subProjectName);
|
m_buildSubProjectAction->setParameter(subProjectName);
|
||||||
m_rebuildSubProjectAction->setParameter(subProjectName);
|
m_rebuildSubProjectAction->setParameter(subProjectName);
|
||||||
|
@@ -51,7 +51,6 @@ class QmakeProjectManagerPlugin : public ExtensionSystem::IPlugin
|
|||||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "QmakeProjectManager.json")
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "QmakeProjectManager.json")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~QmakeProjectManagerPlugin();
|
|
||||||
bool initialize(const QStringList &arguments, QString *errorMessage);
|
bool initialize(const QStringList &arguments, QString *errorMessage);
|
||||||
void extensionsInitialized();
|
void extensionsInitialized();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user