From fc6ec40f2f85f49e450f28e01e8fdc27b729258d Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Thu, 16 May 2013 16:31:07 +0200
Subject: [PATCH] Qbs: Properly report related runconfigurations for Qbs nodes

This fixes the run options in the context menu.

Change-Id: If4911f7357329fcb843206165e20d53bf6717258
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
---
 src/plugins/qbsprojectmanager/qbsnodes.cpp | 21 +++++++++++++++++++++
 src/plugins/qbsprojectmanager/qbsnodes.h   |  2 ++
 2 files changed, 23 insertions(+)

diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index 62facdf2178..cc46f98ad14 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -30,9 +30,11 @@
 #include "qbsnodes.h"
 
 #include "qbsproject.h"
+#include "qbsrunconfiguration.h"
 
 #include <coreplugin/fileiconprovider.h>
 #include <coreplugin/idocument.h>
+#include <projectexplorer/target.h>
 #include <qtsupport/qtsupportconstants.h>
 #include <utils/hostosinfo.h>
 #include <utils/qtcassert.h>
@@ -460,6 +462,25 @@ void QbsProductNode::setQbsProductData(const qbs::ProductData *prd)
     emitNodeUpdated();
 }
 
+QList<ProjectExplorer::RunConfiguration *> QbsProductNode::runConfigurationsFor(ProjectExplorer::Node *node)
+{
+    Q_UNUSED(node);
+    QList<ProjectExplorer::RunConfiguration *> result;
+    QbsProjectNode *pn = qobject_cast<QbsProjectNode *>(projectNode());
+    if (!isEnabled() || !pn || pn->qbsProject()->targetExecutable(*m_qbsProductData).isEmpty())
+        return result;
+
+    foreach (ProjectExplorer::RunConfiguration *rc, pn->project()->activeTarget()->runConfigurations()) {
+        QbsRunConfiguration *qbsRc = qobject_cast<QbsRunConfiguration *>(rc);
+        if (!qbsRc)
+            continue;
+        if (qbsRc->qbsProduct() == qbsProductData()->name())
+            result << qbsRc;
+    }
+
+    return result;
+}
+
 QbsGroupNode *QbsProductNode::findGroupNode(const QString &name)
 {
     foreach (ProjectExplorer::ProjectNode *n, subProjectNodes()) {
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index f44d33dd39a..6e89b373fb1 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -151,6 +151,8 @@ public:
     void setQbsProductData(const qbs::ProductData *prd);
     const qbs::ProductData *qbsProductData() const { return m_qbsProductData; }
 
+    QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node);
+
 private:
     QbsGroupNode *findGroupNode(const QString &name);
 
-- 
GitLab