diff --git a/src/plugins/boot2qt/qdbrunconfiguration.cpp b/src/plugins/boot2qt/qdbrunconfiguration.cpp index efc4886b3bf..cba9aef178c 100644 --- a/src/plugins/boot2qt/qdbrunconfiguration.cpp +++ b/src/plugins/boot2qt/qdbrunconfiguration.cpp @@ -80,7 +80,8 @@ QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id) symbolsAspect->setLabelText(Tr::tr("Executable on host:")); symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay); - auto envAspect = addAspect(target); + auto envAspect = addAspect(); + envAspect->setDeviceSelector(target, EnvironmentAspect::RunDevice); auto argsAspect = addAspect(); argsAspect->setMacroExpander(macroExpander()); diff --git a/src/plugins/projectexplorer/environmentaspect.cpp b/src/plugins/projectexplorer/environmentaspect.cpp index e55e95156da..cae48b2f329 100644 --- a/src/plugins/projectexplorer/environmentaspect.cpp +++ b/src/plugins/projectexplorer/environmentaspect.cpp @@ -30,6 +30,12 @@ EnvironmentAspect::EnvironmentAspect(AspectContainer *container) addDataExtractor(this, &EnvironmentAspect::environment, &Data::environment); } +void EnvironmentAspect::setDeviceSelector(Target *target, DeviceSelector selector) +{ + m_target = target; + m_selector = selector; +} + int EnvironmentAspect::baseEnvironmentBase() const { return m_base; diff --git a/src/plugins/projectexplorer/environmentaspect.h b/src/plugins/projectexplorer/environmentaspect.h index 1de5641f6b0..ee1bb7e1831 100644 --- a/src/plugins/projectexplorer/environmentaspect.h +++ b/src/plugins/projectexplorer/environmentaspect.h @@ -22,6 +22,9 @@ class PROJECTEXPLORER_EXPORT EnvironmentAspect : public Utils::BaseAspect public: EnvironmentAspect(Utils::AspectContainer *container = nullptr); + enum DeviceSelector { HostDevice, BuildDevice, RunDevice }; + void setDeviceSelector(Target *target, DeviceSelector selector); + // The environment including the user's modifications. Utils::Environment environment() const; @@ -50,6 +53,8 @@ public: bool isLocal() const { return m_isLocal; } + Target *target() const { return m_target; } + bool isPrintOnRunAllowed() const { return m_allowPrintOnRun; } bool isPrintOnRunEnabled() const { return m_printOnRun; } void setPrintOnRun(bool enabled) { m_printOnRun = enabled; } @@ -93,6 +98,8 @@ private: bool m_isLocal = false; bool m_allowPrintOnRun = true; bool m_printOnRun = false; + Target *m_target = nullptr; + DeviceSelector m_selector = RunDevice; }; } // namespace ProjectExplorer diff --git a/src/plugins/qnx/qnxrunconfiguration.cpp b/src/plugins/qnx/qnxrunconfiguration.cpp index 96245e95017..a6624c56f4b 100644 --- a/src/plugins/qnx/qnxrunconfiguration.cpp +++ b/src/plugins/qnx/qnxrunconfiguration.cpp @@ -40,7 +40,8 @@ public: symbolsAspect->setLabelText(Tr::tr("Executable on host:")); symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay); - auto envAspect = addAspect(target); + auto envAspect = addAspect(); + envAspect->setDeviceSelector(target, EnvironmentAspect::RunDevice); auto argsAspect = addAspect(); argsAspect->setMacroExpander(macroExpander()); diff --git a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp index cbafc2423b5..631bc638b57 100644 --- a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp @@ -32,7 +32,8 @@ private: RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *target, Id id) : RunConfiguration(target, id) { - auto envAspect = addAspect(target); + auto envAspect = addAspect(); + envAspect->setDeviceSelector(target, EnvironmentAspect::RunDevice); auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); diff --git a/src/plugins/remotelinux/remotelinuxenvironmentaspect.cpp b/src/plugins/remotelinux/remotelinuxenvironmentaspect.cpp index 07880089de2..e658f295521 100644 --- a/src/plugins/remotelinux/remotelinuxenvironmentaspect.cpp +++ b/src/plugins/remotelinux/remotelinuxenvironmentaspect.cpp @@ -32,24 +32,26 @@ const int ENVIRONMENTASPECT_VERSION = 1; // Version was introduced in 4.3 with t class RemoteLinuxEnvironmentAspectWidget : public EnvironmentAspectWidget { public: - RemoteLinuxEnvironmentAspectWidget(RemoteLinuxEnvironmentAspect *aspect, Target *target) + RemoteLinuxEnvironmentAspectWidget(RemoteLinuxEnvironmentAspect *aspect) : EnvironmentAspectWidget(aspect) { auto fetchButton = new QPushButton(Tr::tr("Fetch Device Environment")); addWidget(fetchButton); - connect(target, &Target::kitChanged, aspect, [aspect] { aspect->setRemoteEnvironment({}); }); + connect(aspect->target(), &Target::kitChanged, aspect, [aspect] { + aspect->setRemoteEnvironment({}); + }); - connect(fetchButton, &QPushButton::clicked, this, [aspect, target] { - if (IDevice::ConstPtr device = DeviceKitAspect::device(target->kit())) { + connect(fetchButton, &QPushButton::clicked, this, [aspect] { + if (IDevice::ConstPtr device = DeviceKitAspect::device(aspect->target()->kit())) { DeviceFileAccess *access = device->fileAccess(); QTC_ASSERT(access, return); aspect->setRemoteEnvironment(access->deviceEnvironment()); } }); - envWidget()->setOpenTerminalFunc([target](const Environment &env) { - IDevice::ConstPtr device = DeviceKitAspect::device(target->kit()); + envWidget()->setOpenTerminalFunc([aspect](const Environment &env) { + IDevice::ConstPtr device = DeviceKitAspect::device(aspect->target()->kit()); if (!device) { QMessageBox::critical(Core::ICore::dialogParent(), Tr::tr("Cannot Open Terminal"), @@ -70,14 +72,12 @@ static bool displayAlreadySet(const Utils::EnvironmentItems &changes) }); } -RemoteLinuxEnvironmentAspect::RemoteLinuxEnvironmentAspect(Target *target) +RemoteLinuxEnvironmentAspect::RemoteLinuxEnvironmentAspect() { addSupportedBaseEnvironment(Tr::tr("Clean Environment"), {}); addPreferredBaseEnvironment(Tr::tr("System Environment"), [this] { return m_remoteEnvironment; }); - setConfigWidgetCreator([this, target] { - return new RemoteLinuxEnvironmentAspectWidget(this, target); - }); + setConfigWidgetCreator([this] { return new RemoteLinuxEnvironmentAspectWidget(this); }); } void RemoteLinuxEnvironmentAspect::setRemoteEnvironment(const Utils::Environment &env) diff --git a/src/plugins/remotelinux/remotelinuxenvironmentaspect.h b/src/plugins/remotelinux/remotelinuxenvironmentaspect.h index 552faabe416..e85c51ac70f 100644 --- a/src/plugins/remotelinux/remotelinuxenvironmentaspect.h +++ b/src/plugins/remotelinux/remotelinuxenvironmentaspect.h @@ -14,7 +14,7 @@ class REMOTELINUX_EXPORT RemoteLinuxEnvironmentAspect : public ProjectExplorer:: Q_OBJECT public: - RemoteLinuxEnvironmentAspect(ProjectExplorer::Target *target); + RemoteLinuxEnvironmentAspect(); void setRemoteEnvironment(const Utils::Environment &env); diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index 4234afaf745..8a9cf316662 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -33,7 +33,8 @@ public: RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id) : RunConfiguration(target, id) { - auto envAspect = addAspect(target); + auto envAspect = addAspect(); + envAspect->setDeviceSelector(target, EnvironmentAspect::RunDevice); auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);