diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-09-07 12:44:04 +0200 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-09-11 07:29:10 +0000 |
commit | 9b85b1087fc98b45f79a131bcac9bf0f2bead1ea (patch) | |
tree | 7c2cf778eee764c1799e1e7ebde28fb2e00dc3be | |
parent | 0e26d0676f154fb0906691ea6e230ff9dd1610f3 (diff) |
ProjectExplorer: Add Aspect Settings to devices
Change-Id: I4a69945dbb862a2741998a3bbbb0512e5fb829c9
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
6 files changed, 60 insertions, 16 deletions
diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index b8e0f1344f..ce63015d81 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -128,6 +128,12 @@ public: DockerDevicePrivate *m_dev = nullptr; }; +class DockerDeviceSettings : public DeviceSettings +{ +public: + DockerDeviceSettings() { displayName.setDefaultValue(Tr::tr("Docker Image")); } +}; + class DockerDevicePrivate : public QObject { public: @@ -410,12 +416,12 @@ QString DockerDeviceFileAccess::mapToDevicePath(const QString &hostPath) const } DockerDevice::DockerDevice(const DockerDeviceData &data) - : d(new DockerDevicePrivate(this, data)) + : ProjectExplorer::IDevice(std::make_unique<DockerDeviceSettings>()) + , d(new DockerDevicePrivate(this, data)) { setFileAccess(&d->m_fileAccess); setDisplayType(Tr::tr("Docker")); setOsType(OsTypeLinux); - setDefaultDisplayName(Tr::tr("Docker Image")); setupId(IDevice::ManuallyAdded); setType(Constants::DOCKER_DEVICE_TYPE); setMachineType(IDevice::Hardware); diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp index a5cee8b3a6..cc9649cfca 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp @@ -44,7 +44,7 @@ DesktopDevice::DesktopDevice() setupId(IDevice::AutoDetected, DESKTOP_DEVICE_ID); setType(DESKTOP_DEVICE_TYPE); - setDefaultDisplayName(Tr::tr("Local PC")); + settings()->displayName.setDefaultValue(Tr::tr("Local PC")); setDisplayType(Tr::tr("Desktop")); setDeviceState(IDevice::DeviceStateUnknown); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index f27c93c7f3..389e746f22 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -123,9 +123,13 @@ namespace Internal { class IDevicePrivate { public: - IDevicePrivate() = default; + IDevicePrivate(std::unique_ptr<DeviceSettings> s) + : settings(std::move(s)) + { + if (!settings) + settings = std::make_unique<DeviceSettings>(); + } - DisplayName displayName; QString displayType; Id type; IDevice::Origin origin = IDevice::AutoDetected; @@ -148,12 +152,22 @@ public: QList<IDevice::DeviceAction> deviceActions; Store extraData; IDevice::OpenTerminal openTerminal; + + std::unique_ptr<DeviceSettings> settings; }; } // namespace Internal +DeviceSettings::DeviceSettings() +{ + displayName.setSettingsKey(DisplayNameKey); + displayName.setDisplayStyle(StringAspect::DisplayStyle::LineEditDisplay); + displayName.setLabelText(Tr::tr("Name:")); +} + DeviceTester::DeviceTester(QObject *parent) : QObject(parent) { } -IDevice::IDevice() : d(new Internal::IDevicePrivate) +IDevice::IDevice(std::unique_ptr<DeviceSettings> settings) + : d(new Internal::IDevicePrivate(std::move(settings))) { } @@ -264,17 +278,17 @@ Environment IDevice::systemEnvironment() const QString IDevice::displayName() const { - return d->displayName.value(); + return d->settings->displayName(); } void IDevice::setDisplayName(const QString &name) { - d->displayName.setValue(name); + settings()->displayName.setValue(name); } void IDevice::setDefaultDisplayName(const QString &name) { - d->displayName.setDefaultValue(name); + settings()->displayName.setDefaultValue(name); } QString IDevice::displayType() const @@ -439,7 +453,8 @@ Id IDevice::idFromMap(const Store &map) void IDevice::fromMap(const Store &map) { d->type = typeFromMap(map); - d->displayName.fromMap(map, DisplayNameKey); + settings()->fromMap(map); + d->id = Id::fromSetting(map.value(IdKey)); d->osType = osTypeFromString(map.value(ClientOsTypeKey, osTypeToString(OsTypeLinux)).toString()); if (!d->id.isValid()) @@ -487,7 +502,8 @@ void IDevice::fromMap(const Store &map) Store IDevice::toMap() const { Store map; - d->displayName.toMap(map, DisplayNameKey); + d->settings->toMap(map); + map.insert(TypeKey, d->type.toString()); map.insert(ClientOsTypeKey, osTypeToString(d->osType)); map.insert(IdKey, d->id.toSetting()); @@ -528,6 +544,11 @@ IDevice::Ptr IDevice::clone() const return device; } +DeviceSettings *IDevice::settings() const +{ + return d->settings.get(); +} + QString IDevice::deviceStateToString() const { switch (d->deviceState) { diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index 070eda339b..12503f6b9a 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -8,10 +8,11 @@ #include <solutions/tasking/tasktree.h> -#include <utils/id.h> +#include <utils/aspects.h> #include <utils/expected.h> #include <utils/filepath.h> #include <utils/hostosinfo.h> +#include <utils/id.h> #include <utils/store.h> #include <QAbstractSocket> @@ -83,6 +84,14 @@ public: std::function<QList<Utils::Port>(const QByteArray &commandOutput)> parsePorts; }; +class PROJECTEXPLORER_EXPORT DeviceSettings : public Utils::AspectContainer +{ +public: + DeviceSettings(); + + Utils::StringAspect displayName{this}; +}; + // See cpp file for documentation. class PROJECTEXPLORER_EXPORT IDevice : public QEnableSharedFromThis<IDevice> { @@ -99,6 +108,8 @@ public: Ptr clone() const; + DeviceSettings *settings() const; + QString displayName() const; void setDisplayName(const QString &name); void setDefaultDisplayName(const QString &name); @@ -216,7 +227,7 @@ public: virtual void checkOsType() {} protected: - IDevice(); + IDevice(std::unique_ptr<DeviceSettings> settings = nullptr); virtual void fromMap(const Utils::Store &map); virtual Utils::Store toMap() const; diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp index 4a5b9b5530..9d22992474 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp @@ -69,7 +69,6 @@ IDevice::Ptr IDeviceFactory::create() const IDevice::Ptr device = m_creator(); if (!device) // e.g. Cancel used on the dialog to create a device return {}; - device->setDefaultDisplayName(displayName()); return device; } @@ -80,7 +79,7 @@ IDevice::Ptr IDeviceFactory::construct() const IDevice::Ptr device = m_constructor(); QTC_ASSERT(device, return {}); - device->setDefaultDisplayName(displayName()); + device->settings()->displayName.setDefaultValue(displayName()); return device; } diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 4e4f5f73bb..d32a4edda1 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -293,6 +293,12 @@ public: LinuxDevicePrivate *m_dev; }; +class LinuxDeviceSettings : public DeviceSettings +{ +public: + LinuxDeviceSettings() { displayName.setDefaultValue(Tr::tr("Remote Linux Device")); } +}; + class LinuxDevicePrivate { public: @@ -937,7 +943,8 @@ private: // LinuxDevice LinuxDevice::LinuxDevice() - : d(new LinuxDevicePrivate(this)) + : IDevice(std::make_unique<LinuxDeviceSettings>()) + , d(new LinuxDevicePrivate(this)) { setFileAccess(&d->m_fileAccess); setDisplayType(Tr::tr("Remote Linux")); |