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 <utils/displayname.h>
#include <utils/icon.h>
#include <utils/macroexpander.h>
#include <utils/portlist.h>
#include <utils/qtcassert.h>
#include <utils/url.h>
@@ -330,6 +331,28 @@ DeviceEnvironmentFetcher::Ptr IDevice::environmentFetcher() const
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
{
return d->deviceState;

View File

@@ -49,6 +49,7 @@ namespace QSsh { class SshConnectionParameters; }
namespace Utils {
class Environment;
class Icon;
class MacroExpander;
class PortList;
class Port;
} // Utils
@@ -180,6 +181,8 @@ public:
virtual DeviceProcessSignalOperation::Ptr signalOperation() const = 0;
virtual DeviceEnvironmentFetcher::Ptr environmentFetcher() const;
virtual void addToMacroExpander(Utils::MacroExpander *expander) const;
enum DeviceState { DeviceReadyToUse, DeviceConnected, DeviceDisconnected, DeviceStateUnknown };
DeviceState deviceState() const;
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
{
QTC_ASSERT(kit, return);
expander->registerVariable("Device:HostAddress", tr("Host address"),
[kit]() -> QString {
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
return device ? device->sshParameters().host() : QString();
});
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();
});
const IDevice::ConstPtr device = DeviceKitAspect::device(kit);
if (device)
device->addToMacroExpander(expander);
}
Core::Id DeviceKitAspect::id()