diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 40f80836692..c3717ed6fdc 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -45,10 +45,6 @@ AndroidDevice::AndroidDevice() { setDisplayName(QCoreApplication::translate("Android::Internal::AndroidDevice", "Run on Android")); setDeviceState(DeviceReadyToUse); - setDeviceIcon({Utils::Icon({{":/android/images/androiddevicesmall.png", - Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint), - Utils::Icon({{":/android/images/androiddevice.png", - Utils::Theme::IconsBaseColor}})}); } AndroidDevice::AndroidDevice(const AndroidDevice &other) diff --git a/src/plugins/android/androiddevicefactory.cpp b/src/plugins/android/androiddevicefactory.cpp index dd225e92df8..2eb8726fa4d 100644 --- a/src/plugins/android/androiddevicefactory.cpp +++ b/src/plugins/android/androiddevicefactory.cpp @@ -28,6 +28,10 @@ #include "androidconstants.h" +#include + +#include + namespace Android { namespace Internal { @@ -48,6 +52,18 @@ QList AndroidDeviceFactory::availableCreationIds() const return QList() << Core::Id(Constants::ANDROID_DEVICE_TYPE); } +QIcon AndroidDeviceFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + using namespace Utils; + static const QIcon icon = + Icon::combinedIcon({Icon({{":/android/images/androiddevicesmall.png", + Theme::PanelTextColorDark}}, Icon::Tint), + Icon({{":/android/images/androiddevice.png", + Theme::IconsBaseColor}})}); + return icon; +} + bool AndroidDeviceFactory::canCreate() const { return false; diff --git a/src/plugins/android/androiddevicefactory.h b/src/plugins/android/androiddevicefactory.h index 8d6dc109b82..3954e425070 100644 --- a/src/plugins/android/androiddevicefactory.h +++ b/src/plugins/android/androiddevicefactory.h @@ -38,6 +38,7 @@ public: QString displayNameForId(Core::Id type) const; QList availableCreationIds() const; + QIcon iconForId(Core::Id type) const; bool canCreate() const; ProjectExplorer::IDevice::Ptr create(Core::Id id) const; diff --git a/src/plugins/baremetal/baremetaldevice.cpp b/src/plugins/baremetal/baremetaldevice.cpp index 643355c06a8..67c80b7c410 100644 --- a/src/plugins/baremetal/baremetaldevice.cpp +++ b/src/plugins/baremetal/baremetaldevice.cpp @@ -33,7 +33,6 @@ #include #include -#include #include #include @@ -153,28 +152,16 @@ DeviceProcess *BareMetalDevice::createProcess(QObject *parent) const return new GdbServerProviderProcess(sharedFromThis(), parent); } -static const QList &bareMetalDeviceIcon() -{ - static const QList icon = { - Utils::Icon({{":/baremetal/images/baremetaldevicesmall.png", - Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint), - Utils::Icon({{":/baremetal/images/baremetaldevice.png", - Utils::Theme::IconsBaseColor}})}; - return icon; -} - BareMetalDevice::BareMetalDevice(const QString &name, Core::Id type, MachineType machineType, Origin origin, Core::Id id) : IDevice(type, origin, machineType, id) { setDisplayName(name); - setDeviceIcon(bareMetalDeviceIcon()); } BareMetalDevice::BareMetalDevice(const BareMetalDevice &other) : IDevice(other) { setGdbServerProviderId(other.gdbServerProviderId()); - setDeviceIcon(bareMetalDeviceIcon()); } } //namespace Internal diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp index aafae67187c..04e2f50048a 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp @@ -29,8 +29,11 @@ #include "baremetalconstants.h" #include "baremetaldevice.h" +#include #include +#include + using namespace ProjectExplorer; namespace BareMetal { @@ -51,6 +54,18 @@ QList BareMetalDeviceConfigurationFactory::availableCreationIds() cons return QList() << Core::Id(Constants::BareMetalOsType); } +QIcon BareMetalDeviceConfigurationFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + using namespace Utils; + static const QIcon icon = + Icon::combinedIcon({Icon({{":/baremetal/images/baremetaldevicesmall.png", + Theme::PanelTextColorDark}}, Icon::Tint), + Icon({{":/baremetal/images/baremetaldevice.png", + Theme::IconsBaseColor}})}); + return icon; +} + IDevice::Ptr BareMetalDeviceConfigurationFactory::create(Core::Id id) const { QTC_ASSERT(id == Constants::BareMetalOsType, return IDevice::Ptr()); diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h index c05b9afa785..0139cd24a20 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h +++ b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h @@ -40,6 +40,7 @@ public: QString displayNameForId(Core::Id type) const; QList availableCreationIds() const; + QIcon iconForId(Core::Id type) const; ProjectExplorer::IDevice::Ptr create(Core::Id id) const; bool canRestore(const QVariantMap &map) const; diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index e63c4945afb..4945b4cd0a7 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include @@ -92,10 +91,6 @@ IosDevice::IosDevice() ports.addRange(Utils::Port(Constants::IOS_DEVICE_PORT_START), Utils::Port(Constants::IOS_DEVICE_PORT_END)); setFreePorts(ports); - setDeviceIcon({Utils::Icon({{":/ios/images/iosdevicesmall.png", - Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint), - Utils::Icon({{":/ios/images/iosdevice.png", - Utils::Theme::IconsBaseColor}})}); } IosDevice::IosDevice(const IosDevice &other) diff --git a/src/plugins/ios/iosdevicefactory.cpp b/src/plugins/ios/iosdevicefactory.cpp index 40cf1e046b5..c3eaa1f840f 100644 --- a/src/plugins/ios/iosdevicefactory.cpp +++ b/src/plugins/ios/iosdevicefactory.cpp @@ -28,6 +28,10 @@ #include "iosconstants.h" +#include + +#include + namespace Ios { namespace Internal { @@ -46,6 +50,18 @@ QList IosDeviceFactory::availableCreationIds() const return QList() << Core::Id(Constants::IOS_DEVICE_TYPE); } +QIcon IosDeviceFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + using namespace Utils; + static const QIcon icon = + Icon::combinedIcon({Icon({{":/ios/images/iosdevicesmall.png", + Theme::PanelTextColorDark}}, Icon::Tint), + Icon({{":/ios/images/iosdevice.png", + Theme::IconsBaseColor}})}); + return icon; +} + bool IosDeviceFactory::canCreate() const { return false; diff --git a/src/plugins/ios/iosdevicefactory.h b/src/plugins/ios/iosdevicefactory.h index 5e2e39b59f9..0b7004d6fce 100644 --- a/src/plugins/ios/iosdevicefactory.h +++ b/src/plugins/ios/iosdevicefactory.h @@ -42,6 +42,7 @@ public: QString displayNameForId(Core::Id type) const override; QList availableCreationIds() const override; + QIcon iconForId(Core::Id type) const override; bool canCreate() const override; ProjectExplorer::IDevice::Ptr create(Core::Id id) const override; diff --git a/src/plugins/ios/iossimulator.cpp b/src/plugins/ios/iossimulator.cpp index 1ae8caf4f77..07743dbe049 100644 --- a/src/plugins/ios/iossimulator.cpp +++ b/src/plugins/ios/iossimulator.cpp @@ -28,7 +28,6 @@ #include "iostoolhandler.h" #include -#include #include #include @@ -54,10 +53,6 @@ IosSimulator::IosSimulator(Core::Id id) { setDisplayName(QCoreApplication::translate("Ios::Internal::IosSimulator", "iOS Simulator")); setDeviceState(DeviceReadyToUse); - setDeviceIcon({Utils::Icon({{":/ios/images/iosdevicesmall.png", - Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint), - Utils::Icon({{":/ios/images/iosdevice.png", - Utils::Theme::IconsBaseColor}})}); } IosSimulator::IosSimulator() diff --git a/src/plugins/ios/iossimulatorfactory.cpp b/src/plugins/ios/iossimulatorfactory.cpp index 7e6570cc2e1..bede066b759 100644 --- a/src/plugins/ios/iossimulatorfactory.cpp +++ b/src/plugins/ios/iossimulatorfactory.cpp @@ -27,8 +27,11 @@ #include #include "iosconstants.h" #include "iossimulator.h" +#include "utils/icon.h" #include "utils/qtcassert.h" +#include + namespace Ios { namespace Internal { @@ -49,6 +52,18 @@ QList IosSimulatorFactory::availableCreationIds() const return QList() << Core::Id(Constants::IOS_SIMULATOR_TYPE); } +QIcon IosSimulatorFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + using namespace Utils; + static const QIcon icon = + Icon::combinedIcon({Icon({{":/ios/images/iosdevicesmall.png", + Theme::PanelTextColorDark}}, Icon::Tint), + Icon({{":/ios/images/iosdevice.png", + Theme::IconsBaseColor}})}); + return icon; +} + bool IosSimulatorFactory::canCreate() const { return false; diff --git a/src/plugins/ios/iossimulatorfactory.h b/src/plugins/ios/iossimulatorfactory.h index 0b8d2222353..013695e7859 100644 --- a/src/plugins/ios/iossimulatorfactory.h +++ b/src/plugins/ios/iossimulatorfactory.h @@ -38,6 +38,7 @@ public: QString displayNameForId(Core::Id type) const override; QList availableCreationIds() const override; + QIcon iconForId(Core::Id type) const override; bool canCreate() const override; ProjectExplorer::IDevice::Ptr create(Core::Id id) const override; diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp index cfa3a3b9eba..b6060c56cb1 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp @@ -26,9 +26,15 @@ #include "desktopdevicefactory.h" #include "desktopdevice.h" #include +#include +#include #include +#include +#include +#include + namespace ProjectExplorer { namespace Internal { @@ -47,6 +53,17 @@ QList DesktopDeviceFactory::availableCreationIds() const return QList() << Core::Id(Constants::DESKTOP_DEVICE_TYPE); } +QIcon DesktopDeviceFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + static const QIcon icon = + Utils::creatorTheme()->flag(Utils::Theme::FlatSideBarIcons) + ? Utils::Icon::combinedIcon({Icons::DESKTOP_DEVICE.icon(), + Icons::DESKTOP_DEVICE_SMALL.icon()}) + : QApplication::style()->standardIcon(QStyle::SP_ComputerIcon); + return icon; +} + bool DesktopDeviceFactory::canCreate() const { return false; diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h index 6afcffce1ce..c712f12dedc 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h @@ -39,6 +39,7 @@ public: QString displayNameForId(Core::Id type) const override; QList availableCreationIds() const override; + QIcon iconForId(Core::Id type) const override; bool canCreate() const override; IDevice::Ptr create(Core::Id id) const override; diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h index d924b6e363a..7010b190c78 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h @@ -49,6 +49,8 @@ public: virtual QList availableCreationIds() const = 0; + virtual QIcon iconForId(Core::Id type) const = 0; + virtual bool canCreate() const; virtual IDevice::Ptr create(Core::Id id) const = 0; diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index e41e9a3a176..27467c58b73 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -25,12 +25,14 @@ #include "kit.h" +#include "devicesupport/idevicefactory.h" #include "kitinformation.h" #include "kitmanager.h" #include "ioutputparser.h" #include "osparser.h" #include "projectexplorerconstants.h" -#include "projectexplorericons.h" + +#include #include #include @@ -356,6 +358,15 @@ Id Kit::id() const return d->m_id; } +static QIcon iconForDeviceType(Core::Id deviceType) +{ + const IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject( + [&deviceType](const IDeviceFactory *factory) { + return factory->availableCreationIds().contains(deviceType); + }); + return factory ? factory->iconForId(deviceType) : QIcon(); +} + QIcon Kit::icon() const { if (!d->m_cachedIcon.isNull()) @@ -375,10 +386,14 @@ QIcon Kit::icon() const } } - d->m_cachedIcon = creatorTheme()->flag(Theme::FlatSideBarIcons) - ? Icon::combinedIcon({Icons::DESKTOP_DEVICE.icon(), - Icons::DESKTOP_DEVICE_SMALL.icon()}) - : QApplication::style()->standardIcon(QStyle::SP_ComputerIcon); + const Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(this); + const QIcon deviceTypeIcon = iconForDeviceType(deviceType); + if (!deviceTypeIcon.isNull()) { + d->m_cachedIcon = deviceTypeIcon; + return d->m_cachedIcon; + } + + d->m_cachedIcon = iconForDeviceType(Constants::DESKTOP_DEVICE_TYPE); return d->m_cachedIcon; } diff --git a/src/plugins/qnx/qnxdevicefactory.cpp b/src/plugins/qnx/qnxdevicefactory.cpp index 2d3f3f30f9b..2eb89ff51a9 100644 --- a/src/plugins/qnx/qnxdevicefactory.cpp +++ b/src/plugins/qnx/qnxdevicefactory.cpp @@ -31,6 +31,8 @@ #include +#include + namespace Qnx { namespace Internal { @@ -50,6 +52,12 @@ QList QnxDeviceFactory::availableCreationIds() const return { Constants::QNX_QNX_OS_TYPE }; } +QIcon QnxDeviceFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + return QIcon(); +} + bool QnxDeviceFactory::canCreate() const { return true; diff --git a/src/plugins/qnx/qnxdevicefactory.h b/src/plugins/qnx/qnxdevicefactory.h index daf79d13248..a7c06184fb8 100644 --- a/src/plugins/qnx/qnxdevicefactory.h +++ b/src/plugins/qnx/qnxdevicefactory.h @@ -39,6 +39,7 @@ public: QString displayNameForId(Core::Id type) const; QList availableCreationIds() const; + QIcon iconForId(Core::Id type) const; bool canCreate() const; ProjectExplorer::IDevice::Ptr create(Core::Id id) const; diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp index 4344ed01645..509f6c0ca2d 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp @@ -33,6 +33,8 @@ #include +#include + using namespace ProjectExplorer; namespace RemoteLinux { @@ -53,6 +55,12 @@ QList GenericLinuxDeviceConfigurationFactory::availableCreationIds() c return QList() << Core::Id(Constants::GenericLinuxOsType); } +QIcon GenericLinuxDeviceConfigurationFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + return QIcon(); +} + IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create(Core::Id id) const { QTC_ASSERT(id == Constants::GenericLinuxOsType, return IDevice::Ptr()); diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h index e00bbebf56a..a8fcd486b6b 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h @@ -41,6 +41,7 @@ public: QString displayNameForId(Core::Id type) const; QList availableCreationIds() const; + QIcon iconForId(Core::Id type) const; ProjectExplorer::IDevice::Ptr create(Core::Id id) const; bool canRestore(const QVariantMap &map) const; diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp index 35b25cadbf2..be59f676e69 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -34,6 +34,7 @@ #include #include +#include #include using Core::MessageManager; @@ -72,6 +73,12 @@ QList WinRtDeviceFactory::availableCreationIds() const << Constants::WINRT_DEVICE_TYPE_EMULATOR; } +QIcon WinRtDeviceFactory::iconForId(Core::Id type) const +{ + Q_UNUSED(type) + return QIcon(); +} + IDevice::Ptr WinRtDeviceFactory::create(Core::Id id) const { Q_UNUSED(id); diff --git a/src/plugins/winrt/winrtdevicefactory.h b/src/plugins/winrt/winrtdevicefactory.h index a3729de0888..ab2b8a64091 100644 --- a/src/plugins/winrt/winrtdevicefactory.h +++ b/src/plugins/winrt/winrtdevicefactory.h @@ -38,6 +38,7 @@ public: WinRtDeviceFactory(); QString displayNameForId(Core::Id type) const; QList availableCreationIds() const; + QIcon iconForId(Core::Id type) const; bool canCreate() const { return false; } ProjectExplorer::IDevice::Ptr create(Core::Id id) const; bool canRestore(const QVariantMap &map) const;