diff options
author | Joerg Bornemann <[email protected]> | 2014-08-01 17:40:21 +0200 |
---|---|---|
committer | Joerg Bornemann <[email protected]> | 2014-08-04 12:39:19 +0200 |
commit | d4a32cdba9a3a2692f44e5b76ebaa8a72bd83a80 (patch) | |
tree | 36f53506d91db0ad9282bd3c8bd94dfbd5bbd26a | |
parent | d6e0df1c74045936c5db030e15b094a61de068d2 (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.qbs | 1 | ||||
-rw-r--r-- | src/plugins/winrt/winrt_dependencies.pri | 1 | ||||
-rw-r--r-- | src/plugins/winrt/winrtconstants.h | 5 | ||||
-rw-r--r-- | src/plugins/winrt/winrtrunconfiguration.cpp | 7 | ||||
-rw-r--r-- | src/plugins/winrt/winrtrunconfiguration.h | 2 | ||||
-rw-r--r-- | src/plugins/winrt/winrtrunfactories.cpp | 40 | ||||
-rw-r--r-- | src/plugins/winrt/winrtrunfactories.h | 1 | ||||
-rw-r--r-- | src/plugins/winrt/winrtrunnerhelper.cpp | 3 |
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. |