ProjectExplorer: Enable devices to register extra macro expander variables

Allow for devices to potentially register extra macro expander variables.

Special devices might want to expose more then the standard set, which is
now exported by IDevice.

Change-Id: Ie00f1bbb95c47c683a58f35d36914ca18a852aae
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Tobias Hunger
2019-08-23 11:58:12 +02:00
parent 4ec804dc4a
commit d763d70db9
3 changed files with 29 additions and 25 deletions

View File

@@ -36,6 +36,7 @@
#include <ssh/sshconnection.h> #include <ssh/sshconnection.h>
#include <utils/displayname.h> #include <utils/displayname.h>
#include <utils/icon.h> #include <utils/icon.h>
#include <utils/macroexpander.h>
#include <utils/portlist.h> #include <utils/portlist.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/url.h> #include <utils/url.h>
@@ -330,6 +331,28 @@ DeviceEnvironmentFetcher::Ptr IDevice::environmentFetcher() const
return DeviceEnvironmentFetcher::Ptr(); return DeviceEnvironmentFetcher::Ptr();
} }
void IDevice::addToMacroExpander(Utils::MacroExpander *expander) const
{
expander->registerVariable("Device:HostAddress",
QCoreApplication::translate("ProjectExplorer::IDevice",
"Host address"),
[this]() { return sshParameters().host(); });
expander->registerVariable("Device:SshPort",
QCoreApplication::translate("ProjectExplorer::IDevice", "SSH port"),
[this]() { return QString::number(sshParameters().port()); });
expander->registerVariable("Device:UserName",
QCoreApplication::translate("ProjectExplorer::IDevice", "User name"),
[this]() { return sshParameters().userName(); });
expander->registerVariable("Device:KeyFile",
QCoreApplication::translate("ProjectExplorer::IDevice",
"Private key file"),
[this]() { return sshParameters().privateKeyFile; });
expander->registerVariable("Device:Name",
QCoreApplication::translate("ProjectExplorer::IDevice",
"Device name"),
[this]() { return displayName(); });
}
IDevice::DeviceState IDevice::deviceState() const IDevice::DeviceState IDevice::deviceState() const
{ {
return d->deviceState; return d->deviceState;

View File

@@ -49,6 +49,7 @@ namespace QSsh { class SshConnectionParameters; }
namespace Utils { namespace Utils {
class Environment; class Environment;
class Icon; class Icon;
class MacroExpander;
class PortList; class PortList;
class Port; class Port;
} // Utils } // Utils
@@ -180,6 +181,8 @@ public:
virtual DeviceProcessSignalOperation::Ptr signalOperation() const = 0; virtual DeviceProcessSignalOperation::Ptr signalOperation() const = 0;
virtual DeviceEnvironmentFetcher::Ptr environmentFetcher() const; virtual DeviceEnvironmentFetcher::Ptr environmentFetcher() const;
virtual void addToMacroExpander(Utils::MacroExpander *expander) const;
enum DeviceState { DeviceReadyToUse, DeviceConnected, DeviceDisconnected, DeviceStateUnknown }; enum DeviceState { DeviceReadyToUse, DeviceConnected, DeviceDisconnected, DeviceStateUnknown };
DeviceState deviceState() const; DeviceState deviceState() const;
void setDeviceState(const DeviceState state); void setDeviceState(const DeviceState state);

View File

@@ -1028,31 +1028,9 @@ KitAspect::ItemList DeviceKitAspect::toUserOutput(const Kit *k) const
void DeviceKitAspect::addToMacroExpander(Kit *kit, Utils::MacroExpander *expander) const void DeviceKitAspect::addToMacroExpander(Kit *kit, Utils::MacroExpander *expander) const
{ {
QTC_ASSERT(kit, return); QTC_ASSERT(kit, return);
expander->registerVariable("Device:HostAddress", tr("Host address"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit); const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? device->sshParameters().host() : QString(); if (device)
}); device->addToMacroExpander(expander);
expander->registerVariable("Device:SshPort", tr("SSH port"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? QString::number(device->sshParameters().port()) : QString();
});
expander->registerVariable("Device:UserName", tr("User name"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? device->sshParameters().userName() : QString();
});
expander->registerVariable("Device:KeyFile", tr("Private key file"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? device->sshParameters().privateKeyFile : QString();
});
expander->registerVariable("Device:Name", tr("Device name"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? device->displayName() : QString();
});
} }
Core::Id DeviceKitAspect::id() Core::Id DeviceKitAspect::id()