diff --git a/python/PyQt6/core/auto_generated/qgspluginlayer.sip.in b/python/PyQt6/core/auto_generated/qgspluginlayer.sip.in index e2459e81186..b47f445846b 100644 --- a/python/PyQt6/core/auto_generated/qgspluginlayer.sip.in +++ b/python/PyQt6/core/auto_generated/qgspluginlayer.sip.in @@ -58,6 +58,13 @@ Set source string. This is used for example in layer tree to show tooltip. virtual QgsDataProvider *dataProvider(); + virtual QIcon icon() const; +%Docstring +Returns an icon for the layer. + +.. versionadded:: 3.42 +%End + protected: }; diff --git a/python/core/auto_generated/qgspluginlayer.sip.in b/python/core/auto_generated/qgspluginlayer.sip.in index e2459e81186..b47f445846b 100644 --- a/python/core/auto_generated/qgspluginlayer.sip.in +++ b/python/core/auto_generated/qgspluginlayer.sip.in @@ -58,6 +58,13 @@ Set source string. This is used for example in layer tree to show tooltip. virtual QgsDataProvider *dataProvider(); + virtual QIcon icon() const; +%Docstring +Returns an icon for the layer. + +.. versionadded:: 3.42 +%End + protected: }; diff --git a/src/core/qgsiconutils.cpp b/src/core/qgsiconutils.cpp index 00a6ccd60f0..f05fc9e5e8e 100644 --- a/src/core/qgsiconutils.cpp +++ b/src/core/qgsiconutils.cpp @@ -19,6 +19,7 @@ #include "qgsapplication.h" #include "qgsmaplayer.h" #include "qgsvectorlayer.h" +#include "qgspluginlayer.h" #include @@ -111,14 +112,23 @@ QIcon QgsIconUtils::iconForLayer( const QgsMapLayer *layer ) case Qgis::LayerType::Mesh: case Qgis::LayerType::VectorTile: case Qgis::LayerType::PointCloud: - case Qgis::LayerType::Plugin: case Qgis::LayerType::Annotation: case Qgis::LayerType::Group: case Qgis::LayerType::TiledScene: { return QgsIconUtils::iconForLayerType( layer->type() ); } - + case Qgis::LayerType::Plugin: + { + if ( const QgsPluginLayer *pl = qobject_cast( layer ) ) + { + const QIcon icon = pl->icon(); + if ( !icon.isNull() ) + return icon; + } + // fallback to default icon if layer did not provide a specific icon + return QgsIconUtils::iconForLayerType( layer->type() ); + } case Qgis::LayerType::Vector: { const QgsVectorLayer *vl = qobject_cast( layer ); diff --git a/src/core/qgspluginlayer.cpp b/src/core/qgspluginlayer.cpp index 958c6bafcab..b5916ffb4ae 100644 --- a/src/core/qgspluginlayer.cpp +++ b/src/core/qgspluginlayer.cpp @@ -14,6 +14,7 @@ ***************************************************************************/ #include "qgspluginlayer.h" #include "moc_qgspluginlayer.cpp" +#include "qgsiconutils.h" QgsPluginLayer::QgsPluginLayer( const QString &layerType, const QString &layerName ) : QgsMapLayer( Qgis::LayerType::Plugin, layerName ) @@ -56,6 +57,11 @@ const QgsDataProvider *QgsPluginLayer::dataProvider() const return mDataProvider; } +QIcon QgsPluginLayer::icon() const +{ + return QgsIconUtils::iconForLayerType( Qgis::LayerType::Plugin ); +} + // // QgsPluginLayerDataProvider // diff --git a/src/core/qgspluginlayer.h b/src/core/qgspluginlayer.h index 51d4d88525d..ca5af6840c4 100644 --- a/src/core/qgspluginlayer.h +++ b/src/core/qgspluginlayer.h @@ -64,6 +64,12 @@ class CORE_EXPORT QgsPluginLayer : public QgsMapLayer QgsDataProvider *dataProvider() override; const QgsDataProvider *dataProvider() const override SIP_SKIP; + /** + * Returns an icon for the layer. + * \since QGIS 3.42 + */ + virtual QIcon icon() const; + protected: QString mPluginLayerType; QgsDataProvider *mDataProvider;