diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2016-11-12 04:16:59 +0100 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2016-11-30 13:55:38 +0000 |
commit | a00ee753fe8e1daf2d764026da7f71d5ed544b57 (patch) | |
tree | 6063deeee60ed4b502d3a7a662f185cb592a62e8 | |
parent | 2584366f6e56b1f7052fa6f6d992fe0cac47ef5e (diff) | |
download | qt-creator-a00ee753fe8e1daf2d764026da7f71d5ed544b57.tar.gz |
ProjectExplorer: Introduce IDeviceFactory::iconForId()
This adds the possibility to have an icon for a device type. Now,
a Kit can have a proper icon if just the device type but not device
is selected.
Change-Id: I2a382ffd5b46cbbf74cdd0b934b3d450d300bfff
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
22 files changed, 132 insertions, 32 deletions
diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 40f8083669..c3717ed6fd 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 dd225e92df..2eb8726fa4 100644 --- a/src/plugins/android/androiddevicefactory.cpp +++ b/src/plugins/android/androiddevicefactory.cpp @@ -28,6 +28,10 @@ #include "androidconstants.h" +#include <utils/icon.h> + +#include <QIcon> + namespace Android { namespace Internal { @@ -48,6 +52,18 @@ QList<Core::Id> AndroidDeviceFactory::availableCreationIds() const return QList<Core::Id>() << 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 8d6dc109b8..3954e42507 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<Core::Id> 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 643355c06a..67c80b7c41 100644 --- a/src/plugins/baremetal/baremetaldevice.cpp +++ b/src/plugins/baremetal/baremetaldevice.cpp @@ -33,7 +33,6 @@ #include <coreplugin/id.h> #include <ssh/sshconnection.h> -#include <utils/icon.h> #include <utils/qtcassert.h> #include <QCoreApplication> @@ -153,28 +152,16 @@ DeviceProcess *BareMetalDevice::createProcess(QObject *parent) const return new GdbServerProviderProcess(sharedFromThis(), parent); } -static const QList<Utils::Icon> &bareMetalDeviceIcon() -{ - static const QList<Utils::Icon> 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 aafae67187..04e2f50048 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp @@ -29,8 +29,11 @@ #include "baremetalconstants.h" #include "baremetaldevice.h" +#include <utils/icon.h> #include <utils/qtcassert.h> +#include <QIcon> + using namespace ProjectExplorer; namespace BareMetal { @@ -51,6 +54,18 @@ QList<Core::Id> BareMetalDeviceConfigurationFactory::availableCreationIds() cons return QList<Core::Id>() << 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 c05b9afa78..0139cd24a2 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<Core::Id> 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 e63c4945af..4945b4cd0a 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -31,7 +31,6 @@ #include <projectexplorer/devicesupport/devicemanager.h> #include <projectexplorer/kitinformation.h> #include <coreplugin/helpmanager.h> -#include <utils/icon.h> #include <utils/portlist.h> #include <QCoreApplication> @@ -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 40cf1e046b..c3eaa1f840 100644 --- a/src/plugins/ios/iosdevicefactory.cpp +++ b/src/plugins/ios/iosdevicefactory.cpp @@ -28,6 +28,10 @@ #include "iosconstants.h" +#include <utils/icon.h> + +#include <QIcon> + namespace Ios { namespace Internal { @@ -46,6 +50,18 @@ QList<Core::Id> IosDeviceFactory::availableCreationIds() const return QList<Core::Id>() << 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 5e2e39b59f..0b7004d6fc 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<Core::Id> 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 1ae8caf4f7..07743dbe04 100644 --- a/src/plugins/ios/iossimulator.cpp +++ b/src/plugins/ios/iossimulator.cpp @@ -28,7 +28,6 @@ #include "iostoolhandler.h" #include <projectexplorer/kitinformation.h> -#include <utils/icon.h> #include <utils/port.h> #include <QCoreApplication> @@ -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 7e6570cc2e..bede066b75 100644 --- a/src/plugins/ios/iossimulatorfactory.cpp +++ b/src/plugins/ios/iossimulatorfactory.cpp @@ -27,8 +27,11 @@ #include <QLatin1String> #include "iosconstants.h" #include "iossimulator.h" +#include "utils/icon.h" #include "utils/qtcassert.h" +#include <QIcon> + namespace Ios { namespace Internal { @@ -49,6 +52,18 @@ QList<Core::Id> IosSimulatorFactory::availableCreationIds() const return QList<Core::Id>() << 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 0b8d222235..013695e785 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<Core::Id> 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 cfa3a3b9eb..b6060c56cb 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 <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/projectexplorericons.h> +#include <utils/icon.h> #include <utils/qtcassert.h> +#include <QApplication> +#include <QIcon> +#include <QStyle> + namespace ProjectExplorer { namespace Internal { @@ -47,6 +53,17 @@ QList<Core::Id> DesktopDeviceFactory::availableCreationIds() const return QList<Core::Id>() << 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 6afcffce1c..c712f12ded 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<Core::Id> 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 d924b6e363..7010b190c7 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h @@ -49,6 +49,8 @@ public: virtual QList<Core::Id> 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 e41e9a3a17..27467c58b7 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 <extensionsystem/pluginmanager.h> #include <utils/algorithm.h> #include <utils/fileutils.h> @@ -356,6 +358,15 @@ Id Kit::id() const return d->m_id; } +static QIcon iconForDeviceType(Core::Id deviceType) +{ + const IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject<IDeviceFactory>( + [&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 2d3f3f30f9..2eb89ff51a 100644 --- a/src/plugins/qnx/qnxdevicefactory.cpp +++ b/src/plugins/qnx/qnxdevicefactory.cpp @@ -31,6 +31,8 @@ #include <utils/qtcassert.h> +#include <QIcon> + namespace Qnx { namespace Internal { @@ -50,6 +52,12 @@ QList<Core::Id> 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 daf79d1324..a7c06184fb 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<Core::Id> 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 4344ed0164..509f6c0ca2 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp @@ -33,6 +33,8 @@ #include <utils/qtcassert.h> +#include <QIcon> + using namespace ProjectExplorer; namespace RemoteLinux { @@ -53,6 +55,12 @@ QList<Core::Id> GenericLinuxDeviceConfigurationFactory::availableCreationIds() c return QList<Core::Id>() << 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 e00bbebf56..a8fcd486b6 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<Core::Id> 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 35b25cadbf..be59f676e6 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -34,6 +34,7 @@ #include <qtsupport/qtversionmanager.h> #include <utils/qtcassert.h> +#include <QIcon> #include <QFileInfo> using Core::MessageManager; @@ -72,6 +73,12 @@ QList<Core::Id> 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 a3729de088..ab2b8a6409 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<Core::Id> 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; |