aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2023-09-07 12:44:04 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2023-09-11 07:29:10 +0000
commit9b85b1087fc98b45f79a131bcac9bf0f2bead1ea (patch)
tree7c2cf778eee764c1799e1e7ebde28fb2e00dc3be
parent0e26d0676f154fb0906691ea6e230ff9dd1610f3 (diff)
ProjectExplorer: Add Aspect Settings to devices
Change-Id: I4a69945dbb862a2741998a3bbbb0512e5fb829c9 Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
-rw-r--r--src/plugins/docker/dockerdevice.cpp10
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.cpp2
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.cpp37
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.h15
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.cpp3
-rw-r--r--src/plugins/remotelinux/linuxdevice.cpp9
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"));