aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <[email protected]>2014-08-01 17:40:21 +0200
committerJoerg Bornemann <[email protected]>2014-08-04 12:39:19 +0200
commitd4a32cdba9a3a2692f44e5b76ebaa8a72bd83a80 (patch)
tree36f53506d91db0ad9282bd3c8bd94dfbd5bbd26a
parentd6e0df1c74045936c5db030e15b094a61de068d2 (diff)
WinRt: fix run control for SUBDIRS projects
Winrtrunner was called with the executable file path for the top-level .pro file, which happens to be the empty string. We now store (and use) the right .pro file path. Change-Id: I7d71e6b99393e863f3ba0df2d2902f29d75a9583 Reviewed-by: Christian Kandeler <[email protected]> Reviewed-by: Daniel Teske <[email protected]>
-rw-r--r--src/plugins/winrt/winrt.qbs1
-rw-r--r--src/plugins/winrt/winrt_dependencies.pri1
-rw-r--r--src/plugins/winrt/winrtconstants.h5
-rw-r--r--src/plugins/winrt/winrtrunconfiguration.cpp7
-rw-r--r--src/plugins/winrt/winrtrunconfiguration.h2
-rw-r--r--src/plugins/winrt/winrtrunfactories.cpp40
-rw-r--r--src/plugins/winrt/winrtrunfactories.h1
-rw-r--r--src/plugins/winrt/winrtrunnerhelper.cpp3
8 files changed, 46 insertions, 14 deletions
diff --git a/src/plugins/winrt/winrt.qbs b/src/plugins/winrt/winrt.qbs
index c3168b2b2b0..67b8e0e4bf5 100644
--- a/src/plugins/winrt/winrt.qbs
+++ b/src/plugins/winrt/winrt.qbs
@@ -10,6 +10,7 @@ QtcPlugin {
Depends { name: "Debugger" }
Depends { name: "ProjectExplorer" }
Depends { name: "QtSupport" }
+ Depends { name: "QmakeProjectManager" }
Depends { name: "Qt.gui" }
files: [
diff --git a/src/plugins/winrt/winrt_dependencies.pri b/src/plugins/winrt/winrt_dependencies.pri
index 8ba3491bc24..de1f7ec435f 100644
--- a/src/plugins/winrt/winrt_dependencies.pri
+++ b/src/plugins/winrt/winrt_dependencies.pri
@@ -3,4 +3,5 @@ QTC_PLUGIN_DEPENDS += \
coreplugin \
debugger \
projectexplorer \
+ qmakeprojectmanager \
qtsupport
diff --git a/src/plugins/winrt/winrtconstants.h b/src/plugins/winrt/winrtconstants.h
index 3704603cff2..b7b09daa6a3 100644
--- a/src/plugins/winrt/winrtconstants.h
+++ b/src/plugins/winrt/winrtconstants.h
@@ -33,6 +33,7 @@
namespace WinRt {
namespace Internal {
namespace Constants {
+
const char WINRT_DEVICE_TYPE_LOCAL[] = "WinRt.Device.Local";
const char WINRT_DEVICE_TYPE_EMULATOR[] = "WinRt.Device.Emulator";
const char WINRT_DEVICE_TYPE_PHONE[] = "WinRt.Device.Phone";
@@ -43,7 +44,9 @@ const char WINRT_WINPHONEQT[] = "WinRt.QtVersion.WindowsPhone";
const char WINRT_QTMAP_SUBKEYNAME[] = "WinRt";
const char WINRT_QTMAP_OSFLAVOR[] = "OsFlavor";
const char WINRT_MANIFEST_EDITOR_ID[] = "WinRTManifestEditorID";
-}
+const char WINRT_RC_PREFIX[] = "WinRt.WinRtRunConfiguration:";
+
+} // Constants
} // Internal
} // WinRt
diff --git a/src/plugins/winrt/winrtrunconfiguration.cpp b/src/plugins/winrt/winrtrunconfiguration.cpp
index 2fb121ecc7e..3cec89026f4 100644
--- a/src/plugins/winrt/winrtrunconfiguration.cpp
+++ b/src/plugins/winrt/winrtrunconfiguration.cpp
@@ -29,6 +29,7 @@
#include "winrtrunconfiguration.h"
#include "winrtrunconfigurationwidget.h"
+#include "winrtconstants.h"
#include <coreplugin/icore.h>
#include <projectexplorer/target.h>
@@ -40,8 +41,14 @@ namespace Internal {
static const char argumentsIdC[] = "WinRtRunConfigurationArgumentsId";
static const char uninstallAfterStopIdC[] = "WinRtRunConfigurationUninstallAfterStopId";
+static QString pathFromId(Core::Id id)
+{
+ return id.suffixAfter(Constants::WINRT_RC_PREFIX);
+}
+
WinRtRunConfiguration::WinRtRunConfiguration(ProjectExplorer::Target *parent, Core::Id id)
: RunConfiguration(parent, id)
+ , m_proFilePath(pathFromId(id))
, m_uninstallAfterStop(false)
{
setDisplayName(tr("Run App Package"));
diff --git a/src/plugins/winrt/winrtrunconfiguration.h b/src/plugins/winrt/winrtrunconfiguration.h
index af2e1850d55..f010580f29d 100644
--- a/src/plugins/winrt/winrtrunconfiguration.h
+++ b/src/plugins/winrt/winrtrunconfiguration.h
@@ -47,6 +47,7 @@ public:
QVariantMap toMap() const;
bool fromMap(const QVariantMap &map);
+ const QString &proFilePath() const { return m_proFilePath; }
const QString &arguments() const { return m_arguments; }
bool uninstallAfterStop() const { return m_uninstallAfterStop; }
@@ -59,6 +60,7 @@ public slots:
void setUninstallAfterStop(bool b);
private:
+ QString m_proFilePath;
QString m_arguments;
bool m_uninstallAfterStop;
};
diff --git a/src/plugins/winrt/winrtrunfactories.cpp b/src/plugins/winrt/winrtrunfactories.cpp
index 8758669e77f..fda57eb5b26 100644
--- a/src/plugins/winrt/winrtrunfactories.cpp
+++ b/src/plugins/winrt/winrtrunfactories.cpp
@@ -37,15 +37,16 @@
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
+#include <qmakeprojectmanager/qmakeproject.h>
#include <utils/qtcassert.h>
using namespace ProjectExplorer;
+using QmakeProjectManager::QmakeProject;
+using QmakeProjectManager::QmakeProFileNode;
namespace WinRt {
namespace Internal {
-static const char winrtConfigurationIdC[] = "WinRTConfigurationID";
-
static bool isKitCompatible(Kit *kit)
{
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
@@ -62,13 +63,17 @@ WinRtRunConfigurationFactory::WinRtRunConfigurationFactory()
{
}
-QList<Core::Id> WinRtRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const
+QList<Core::Id> WinRtRunConfigurationFactory::availableCreationIds(Target *parent,
+ CreationMode mode) const
{
- Q_UNUSED(mode)
- QList<Core::Id> result;
- if (isKitCompatible(parent->kit()))
- result.append(Core::Id(winrtConfigurationIdC));
- return result;
+ if (!canHandle(parent))
+ return QList<Core::Id>();
+
+ QmakeProject *project = static_cast<QmakeProject *>(parent->project());
+ QList<QmakeProFileNode *> nodes = project->applicationProFiles();
+ if (mode == AutoCreate)
+ nodes = QmakeProject::nodesWithQtcRunnable(nodes);
+ return QmakeProject::idsForNodes(Core::Id(Constants::WINRT_RC_PREFIX), nodes);
}
QString WinRtRunConfigurationFactory::displayNameForId(Core::Id id) const
@@ -79,7 +84,8 @@ QString WinRtRunConfigurationFactory::displayNameForId(Core::Id id) const
bool WinRtRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const
{
- return id == winrtConfigurationIdC && isKitCompatible(parent->kit());
+ Q_UNUSED(id);
+ return canHandle(parent);
}
RunConfiguration *WinRtRunConfigurationFactory::doCreate(Target *parent, Core::Id id)
@@ -89,12 +95,15 @@ RunConfiguration *WinRtRunConfigurationFactory::doCreate(Target *parent, Core::I
bool WinRtRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
- return ProjectExplorer::idFromMap(map) == winrtConfigurationIdC && isKitCompatible(parent->kit());
+ if (!canHandle(parent))
+ return false;
+
+ return idFromMap(map).toString().startsWith(QLatin1String(Constants::WINRT_RC_PREFIX));
}
RunConfiguration *WinRtRunConfigurationFactory::doRestore(Target *parent, const QVariantMap &map)
{
- RunConfiguration *config = new WinRtRunConfiguration(parent, winrtConfigurationIdC);
+ RunConfiguration *config = new WinRtRunConfiguration(parent, idFromMap(map));
config->fromMap(map);
return config;
}
@@ -113,6 +122,15 @@ RunConfiguration *WinRtRunConfigurationFactory::clone(Target *parent, RunConfigu
return 0;
}
+bool WinRtRunConfigurationFactory::canHandle(Target *parent) const
+{
+ if (!isKitCompatible(parent->kit()))
+ return false;
+ if (!qobject_cast<QmakeProject *>(parent->project()))
+ return false;
+ return true;
+}
+
WinRtRunControlFactory::WinRtRunControlFactory()
{
}
diff --git a/src/plugins/winrt/winrtrunfactories.h b/src/plugins/winrt/winrtrunfactories.h
index 2df07f6e7f1..be4b26e3349 100644
--- a/src/plugins/winrt/winrtrunfactories.h
+++ b/src/plugins/winrt/winrtrunfactories.h
@@ -52,6 +52,7 @@ public:
ProjectExplorer::RunConfiguration *product);
private:
+ bool canHandle(ProjectExplorer::Target *parent) const;
virtual ProjectExplorer::RunConfiguration *doCreate(ProjectExplorer::Target *parent, Core::Id id);
virtual ProjectExplorer::RunConfiguration *doRestore(ProjectExplorer::Target *parent, const QVariantMap &map);
};
diff --git a/src/plugins/winrt/winrtrunnerhelper.cpp b/src/plugins/winrt/winrtrunnerhelper.cpp
index d9919fa8214..19f935d0ce6 100644
--- a/src/plugins/winrt/winrtrunnerhelper.cpp
+++ b/src/plugins/winrt/winrtrunnerhelper.cpp
@@ -90,8 +90,7 @@ bool WinRtRunnerHelper::init(WinRtRunConfiguration *runConfiguration, QString *e
return false;
}
- const Utils::FileName proFile = Utils::FileName::fromString(
- target->project()->document()->filePath());
+ const QString &proFile = m_runConfiguration->proFilePath();
m_executableFilePath = target->applicationTargets().targetForProject(proFile).toString()
+ QStringLiteral(".exe"); // ### we should not need to append ".exe" here.