From ed93cff3ba0f7f8c0e985009b3f66cda538a7244 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 7 Jul 2023 18:45:39 +0200 Subject: [PATCH] ProjectExplorer: Allow to specific target device for EnvironmentAspects Similar to what is done for ExecutableAspect. The device related part is here not used yet, as only run related setups are affected. This might change with an attempt to unify EnvironmentAspect and RemoteLinuxEnvironmentAspect. Change-Id: I6a620ad1d3443f0e8201c2572689edda1f84593c Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/boot2qt/qdbrunconfiguration.cpp | 3 ++- .../projectexplorer/environmentaspect.cpp | 6 ++++++ .../projectexplorer/environmentaspect.h | 7 +++++++ src/plugins/qnx/qnxrunconfiguration.cpp | 3 ++- .../remotelinuxcustomrunconfiguration.cpp | 3 ++- .../remotelinuxenvironmentaspect.cpp | 20 +++++++++---------- .../remotelinuxenvironmentaspect.h | 2 +- .../remotelinuxrunconfiguration.cpp | 3 ++- 8 files changed, 32 insertions(+), 15 deletions(-) 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);