API cleanup for legend support in renderers

This commit is contained in:
Martin Dobias 2017-06-09 17:22:59 +02:00
parent b3bd45b052
commit a8999639c7
38 changed files with 93 additions and 348 deletions

View File

@ -265,6 +265,7 @@ should now call QgsCoordinateReferenceSystem::invalidateCache() and QgsCoordinat
- QgsDataDefined was removed. Use the QgsProperty framework instead. - QgsDataDefined was removed. Use the QgsProperty framework instead.
- QgsDataDefinedButton was removed. Use QgsPropertyOverrideButton instead. - QgsDataDefinedButton was removed. Use QgsPropertyOverrideButton instead.
- QgsDataDefinedSymbolDialog was removed. Code using this dialog should be reworked to use QgsPropertyOverrideButton - QgsDataDefinedSymbolDialog was removed. Code using this dialog should be reworked to use QgsPropertyOverrideButton
- QgsDefaultPluginLayerLegend was removed. Use QgsMapLayer::setLegend() to provide legend nodes for plugin layers.
- QgsFileNameWidgetWrapper was removed. Use QgsExternalResourceWidgetWrapper instead. - QgsFileNameWidgetWrapper was removed. Use QgsExternalResourceWidgetWrapper instead.
- QgsFormAnnotationItem. Use QgsFormAnnotation instead. - QgsFormAnnotationItem. Use QgsFormAnnotation instead.
- QgsHtmlAnnotationItem. Use QgsHtmlAnnotation instead. - QgsHtmlAnnotationItem. Use QgsHtmlAnnotation instead.
@ -1181,6 +1182,9 @@ QgsFeatureRendererV2 {#qgis_api_break_3_0_QgsFeatureRendererV2}
- usedAttributes() now requires a QgsRenderContext argument. - usedAttributes() now requires a QgsRenderContext argument.
- save() expects QgsReadWriteContext reference as the last argument - save() expects QgsReadWriteContext reference as the last argument
- static create() method in subclasses expects QgsReadWriteContext reference as the last argument - static create() method in subclasses expects QgsReadWriteContext reference as the last argument
- legendSymbologyItems() was removed.
- legendSymbolItems() was removed.
- legendSymbolItemsV2() has been renamed to legendSymbolItems()
QgsFeatureRequest {#qgis_api_break_3_0_QgsFeatureRequest} QgsFeatureRequest {#qgis_api_break_3_0_QgsFeatureRequest}
@ -1530,6 +1534,12 @@ QgsMapLayerActionRegistry {#qgis_api_break_3_0_QgsMapLayerActionRegistry}
- This class is no longer a singleton and instance() has been removed. Instead use QgsGui::mapLayerActionRegistry(). - This class is no longer a singleton and instance() has been removed. Instead use QgsGui::mapLayerActionRegistry().
QgsMapLayerLegend {#qgis_api_break_3_0_QgsMapLayerLegend}
-----------------
- defaultPluginLegend() was removed. Plugin layers have to provide their legend implementation.
QgsMapOverviewCanvas {#qgis_api_break_3_0_QgsMapOverviewCanvas} QgsMapOverviewCanvas {#qgis_api_break_3_0_QgsMapOverviewCanvas}
-------------------- --------------------
@ -1768,6 +1778,7 @@ QgsPluginLayer {#qgis_api_break_3_0_QgsPluginLayer}
- createMapRenderer(): default implementation (which called plugin's draw() method) has been removed. Plugin layers must implement createMapRenderer(). - createMapRenderer(): default implementation (which called plugin's draw() method) has been removed. Plugin layers must implement createMapRenderer().
- clone(): new pure virtual method. Plugin layer must implement clone(). - clone(): new pure virtual method. Plugin layer must implement clone().
- legendSymbologyItems() has been removed. Use QgsMapLayer::setLegend() to provide legend nodes.
QgsPluginLayerRegistry {#qgis_api_break_3_0_QgsPluginLayerRegistry} QgsPluginLayerRegistry {#qgis_api_break_3_0_QgsPluginLayerRegistry}
@ -1786,7 +1797,7 @@ QgsPointDisplacementRenderer {#qgis_api_break_3_0_QgsPointDisplacementRen
---------------------------- ----------------------------
- The deprecated method setDisplacementGroups() has been removed. This method has had no effect since QGIS 2.4 - The deprecated method setDisplacementGroups() has been removed. This method has had no effect since QGIS 2.4
- setMaxLabelScaleDenominator() and maxLabelScaleDenominator() were renamed to setMinimumLabelScale() and - setMaxLabelScaleDenominator() and maxLabelScaleDenominator() were renamed to setMinimumLabelScale() and
minimumLabelScale() for consistency with other areas in the QGIS API. minimumLabelScale() for consistency with other areas in the QGIS API.
@ -2008,6 +2019,8 @@ QgsRuleBasedRenderer {#qgis_api_break_3_0_QgsRuleBasedRenderer}
- QgsRuleBasedRenderer.Rule checkState() and setCheckState() were removed. Use active() and setActive() instead. - QgsRuleBasedRenderer.Rule checkState() and setCheckState() were removed. Use active() and setActive() instead.
- QgsRuleBasedRenderer.Rule updateElseRules() was removed. - QgsRuleBasedRenderer.Rule updateElseRules() was removed.
- QgsRuleBasedRenderer.Rule scaleMinDenom(), scaleMaxDenom(), setScaleMaxDenom() and setScaleMinDenom() were removed. Use minimumScale(), maximumScale(), setMinimumScale() and setMaximumScale() instead. - QgsRuleBasedRenderer.Rule scaleMinDenom(), scaleMaxDenom(), setScaleMaxDenom() and setScaleMinDenom() were removed. Use minimumScale(), maximumScale(), setMinimumScale() and setMaximumScale() instead.
- QgsRuleBasedRenderer.Rule legendSymbolItems() was removed.
- QgsRuleBasedRenderer.Rule legendSymbolItemsV2() was renamed to legendSymbolItems()
- startRender( QgsRenderContext& context, const QgsFields& fields ) was removed. Use startRender( QgsRenderContext& context, const QgsFields& fields, QString& filter ) instead. - startRender( QgsRenderContext& context, const QgsFields& fields ) was removed. Use startRender( QgsRenderContext& context, const QgsFields& fields, QString& filter ) instead.

View File

@ -43,12 +43,6 @@ Create new legend implementation for vector layer
static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) /Factory/; static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) /Factory/;
%Docstring %Docstring
Create new legend implementation for raster layer
:rtype: QgsMapLayerLegend
%End
static QgsMapLayerLegend *defaultPluginLegend( QgsPluginLayer *pl ) /Factory/;
%Docstring
Create new legend implementation for raster layer Create new legend implementation for raster layer
:rtype: QgsMapLayerLegend :rtype: QgsMapLayerLegend
%End %End
@ -137,23 +131,6 @@ class QgsDefaultRasterLayerLegend : QgsMapLayerLegend
}; };
class QgsDefaultPluginLayerLegend : QgsMapLayerLegend
{
%Docstring
Default legend implementation for plugin layers
.. versionadded:: 2.6
%End
%TypeHeaderCode
#include "qgsmaplayerlegend.h"
%End
public:
explicit QgsDefaultPluginLayerLegend( QgsPluginLayer *pl );
virtual QList<QgsLayerTreeModelLegendNode *> createLayerTreeModelLegendNodes( QgsLayerTreeLayer *nodeLayer ) /Factory/;
};
/************************************************************************ /************************************************************************
* This file has been generated automatically from * * This file has been generated automatically from *
* * * *

View File

@ -52,12 +52,6 @@ Set extent of the layer
.. versionadded:: 2.16 .. versionadded:: 2.16
%End %End
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
%Docstring
.. versionadded:: 2.1
:rtype: QgsLegendSymbologyList
%End
protected: protected:
}; };

View File

@ -163,8 +163,7 @@ create renderer from XML element
%End %End
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ); virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context );

View File

@ -308,8 +308,7 @@ create renderer from XML element
%End %End
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ); virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context );

View File

@ -105,12 +105,12 @@ Proxy that will call this method on the embedded renderer.
Proxy that will call this method on the embedded renderer. Proxy that will call this method on the embedded renderer.
:rtype: QgsSymbolList :rtype: QgsSymbolList
%End %End
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
%Docstring
Proxy that will call this method on the embedded renderer.
:rtype: QgsLegendSymbologyList
%End
virtual QgsLegendSymbolList legendSymbolItems() const;
%Docstring
Proxy that will call this method on the embedded renderer.
:rtype: QgsLegendSymbolList
%End
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ); virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context );
%Docstring %Docstring

View File

@ -97,7 +97,7 @@ Set symbol of the item. Takes ownership of symbol.
}; };
typedef QList< QgsLegendSymbolItem > QgsLegendSymbolListV2; typedef QList< QgsLegendSymbolItem > QgsLegendSymbolList;
/************************************************************************ /************************************************************************
* This file has been generated automatically from * * This file has been generated automatically from *

View File

@ -83,8 +83,7 @@ Optional label text
virtual void startRender( QgsRenderContext &context, const QgsFields &fields ); virtual void startRender( QgsRenderContext &context, const QgsFields &fields );
virtual void stopRender( QgsRenderContext &context ); virtual void stopRender( QgsRenderContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); virtual QgsLegendSymbolList legendSymbolItems() const;
virtual void setEmbeddedRenderer( QgsFeatureRenderer *r /Transfer/ ); virtual void setEmbeddedRenderer( QgsFeatureRenderer *r /Transfer/ );
virtual const QgsFeatureRenderer *embeddedRenderer() const; virtual const QgsFeatureRenderer *embeddedRenderer() const;

View File

@ -13,9 +13,6 @@
typedef QList<QgsSymbol *> QgsSymbolList; typedef QList<QgsSymbol *> QgsSymbolList;
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
typedef QList< QPair<QString, QgsSymbol *> > QgsLegendSymbolList;
@ -267,12 +264,6 @@ store renderer info to XML element
used from subclasses to create SLD Rule elements following SLD v1.1 specs used from subclasses to create SLD Rule elements following SLD v1.1 specs
%End %End
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
%Docstring
return a list of symbology items for the legend
:rtype: QgsLegendSymbologyList
%End
virtual bool legendSymbolItemsCheckable() const; virtual bool legendSymbolItemsCheckable() const;
%Docstring %Docstring
.. versionadded:: 2.5 .. versionadded:: 2.5
@ -298,11 +289,10 @@ return a list of symbology items for the legend
.. versionadded:: 2.14 .. versionadded:: 2.14
%End %End
virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
%Docstring %Docstring
.. versionadded:: 2.6 .. versionadded:: 2.6
:rtype: QgsLegendSymbolListV2 :rtype: QgsLegendSymbolList
%End %End
virtual QString legendClassificationAttribute() const; virtual QString legendClassificationAttribute() const;

View File

@ -118,11 +118,10 @@ Constructor takes ownership of the symbol
:rtype: QgsSymbolList :rtype: QgsSymbolList
%End %End
QgsLegendSymbolList legendSymbolItems( int currentLevel = -1 ) const;
QgsLegendSymbolListV2 legendSymbolItemsV2( int currentLevel = -1 ) const;
%Docstring %Docstring
.. versionadded:: 2.6 .. versionadded:: 2.6
:rtype: QgsLegendSymbolListV2 :rtype: QgsLegendSymbolList
%End %End
bool isFilterOK( QgsFeature &f, QgsRenderContext *context = 0 ) const; bool isFilterOK( QgsFeature &f, QgsRenderContext *context = 0 ) const;
@ -486,13 +485,12 @@ return symbol for current feature. Should not be used individually: there could
virtual QgsSymbolList symbols( QgsRenderContext &context ); virtual QgsSymbolList symbols( QgsRenderContext &context );
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
virtual bool legendSymbolItemsCheckable() const; virtual bool legendSymbolItemsCheckable() const;
virtual bool legendSymbolItemChecked( const QString &key ); virtual bool legendSymbolItemChecked( const QString &key );
virtual void checkLegendSymbolItem( const QString &key, bool state = true ); virtual void checkLegendSymbolItem( const QString &key, bool state = true );
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ ); virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ );
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const; virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QString dump() const; virtual QString dump() const;
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ); virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context );
virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context ); virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context );

View File

@ -48,8 +48,7 @@ create renderer from XML element
:rtype: QgsFeatureRenderer :rtype: QgsFeatureRenderer
%End %End
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ); virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ); virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context );
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ ); virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ );

View File

@ -239,7 +239,7 @@ void QgsSymbolLegendNode::checkAll( bool state )
if ( !vlayer || !vlayer->renderer() ) if ( !vlayer || !vlayer->renderer() )
return; return;
QgsLegendSymbolListV2 symbolList = vlayer->renderer()->legendSymbolItemsV2(); QgsLegendSymbolList symbolList = vlayer->renderer()->legendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &item, symbolList ) Q_FOREACH ( const QgsLegendSymbolItem &item, symbolList )
{ {
vlayer->renderer()->checkLegendSymbolItem( item.ruleKey(), state ); vlayer->renderer()->checkLegendSymbolItem( item.ruleKey(), state );

View File

@ -40,11 +40,6 @@ QgsMapLayerLegend *QgsMapLayerLegend::defaultRasterLegend( QgsRasterLayer *rl )
return new QgsDefaultRasterLayerLegend( rl ); return new QgsDefaultRasterLayerLegend( rl );
} }
QgsMapLayerLegend *QgsMapLayerLegend::defaultPluginLegend( QgsPluginLayer *pl )
{
return new QgsDefaultPluginLayerLegend( pl );
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
@ -199,7 +194,7 @@ QList<QgsLayerTreeModelLegendNode *> QgsDefaultVectorLayerLegend::createLayerTre
nodes.append( new QgsSimpleLegendNode( nodeLayer, r->legendClassificationAttribute() ) ); nodes.append( new QgsSimpleLegendNode( nodeLayer, r->legendClassificationAttribute() ) );
} }
Q_FOREACH ( const QgsLegendSymbolItem &i, r->legendSymbolItemsV2() ) Q_FOREACH ( const QgsLegendSymbolItem &i, r->legendSymbolItems() )
{ {
QgsSymbolLegendNode *n = new QgsSymbolLegendNode( nodeLayer, i ); QgsSymbolLegendNode *n = new QgsSymbolLegendNode( nodeLayer, i );
nodes.append( n ); nodes.append( n );
@ -266,32 +261,3 @@ QList<QgsLayerTreeModelLegendNode *> QgsDefaultRasterLayerLegend::createLayerTre
return nodes; return nodes;
} }
// -------------------------------------------------------------------------
QgsDefaultPluginLayerLegend::QgsDefaultPluginLayerLegend( QgsPluginLayer *pl )
: mLayer( pl )
{
}
QList<QgsLayerTreeModelLegendNode *> QgsDefaultPluginLayerLegend::createLayerTreeModelLegendNodes( QgsLayerTreeLayer *nodeLayer )
{
QList<QgsLayerTreeModelLegendNode *> nodes;
QSize iconSize( 16, 16 );
QgsLegendSymbologyList symbologyList = mLayer->legendSymbologyItems( iconSize );
if ( symbologyList.isEmpty() )
return nodes;
typedef QPair<QString, QPixmap> XY;
Q_FOREACH ( const XY &item, symbologyList )
{
nodes << new QgsSimpleLegendNode( nodeLayer, item.first, QIcon( item.second ) );
}
return nodes;
}

View File

@ -56,9 +56,6 @@ class CORE_EXPORT QgsMapLayerLegend : public QObject
//! Create new legend implementation for raster layer //! Create new legend implementation for raster layer
static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) SIP_FACTORY; static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) SIP_FACTORY;
//! Create new legend implementation for raster layer
static QgsMapLayerLegend *defaultPluginLegend( QgsPluginLayer *pl ) SIP_FACTORY;
signals: signals:
//! Emitted when existing items/nodes got invalid and should be replaced by new ones //! Emitted when existing items/nodes got invalid and should be replaced by new ones
void itemsChanged(); void itemsChanged();
@ -124,21 +121,4 @@ class CORE_EXPORT QgsDefaultRasterLayerLegend : public QgsMapLayerLegend
}; };
/** \ingroup core
* Default legend implementation for plugin layers
* \since QGIS 2.6
*/
class CORE_EXPORT QgsDefaultPluginLayerLegend : public QgsMapLayerLegend
{
Q_OBJECT
public:
explicit QgsDefaultPluginLayerLegend( QgsPluginLayer *pl );
virtual QList<QgsLayerTreeModelLegendNode *> createLayerTreeModelLegendNodes( QgsLayerTreeLayer *nodeLayer ) SIP_FACTORY override;
private:
QgsPluginLayer *mLayer = nullptr;
};
#endif // QGSMAPLAYERLEGEND_H #endif // QGSMAPLAYERLEGEND_H

View File

@ -308,7 +308,7 @@ void QgsMapThemeCollection::applyMapThemeCheckedLegendNodesToLayer( const MapThe
bool someNodesUnchecked = layerRec.usingLegendItems; bool someNodesUnchecked = layerRec.usingLegendItems;
Q_FOREACH ( const QgsLegendSymbolItem &item, vlayer->renderer()->legendSymbolItemsV2() ) Q_FOREACH ( const QgsLegendSymbolItem &item, vlayer->renderer()->legendSymbolItems() )
{ {
bool checked = renderer->legendSymbolItemChecked( item.ruleKey() ); bool checked = renderer->legendSymbolItemChecked( item.ruleKey() );
bool shouldBeChecked = someNodesUnchecked ? layerRec.checkedLegendItems.contains( item.ruleKey() ) : true; bool shouldBeChecked = someNodesUnchecked ? layerRec.checkedLegendItems.contains( item.ruleKey() ) : true;

View File

@ -21,7 +21,6 @@ QgsPluginLayer::QgsPluginLayer( const QString &layerType, const QString &layerNa
: QgsMapLayer( PluginLayer, layerName ) : QgsMapLayer( PluginLayer, layerName )
, mPluginLayerType( layerType ) , mPluginLayerType( layerType )
{ {
setLegend( QgsMapLayerLegend::defaultPluginLegend( this ) );
} }
QgsPluginLayer::~QgsPluginLayer() QgsPluginLayer::~QgsPluginLayer()
@ -45,9 +44,3 @@ void QgsPluginLayer::setSource( const QString &source )
{ {
mDataSource = source; mDataSource = source;
} }
QgsLegendSymbologyList QgsPluginLayer::legendSymbologyItems( QSize iconSize )
{
Q_UNUSED( iconSize );
return QgsLegendSymbologyList();
}

View File

@ -18,7 +18,6 @@
#include "qgis_core.h" #include "qgis_core.h"
#include "qgsmaplayer.h" #include "qgsmaplayer.h"
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList SIP_SKIP;
/** \ingroup core /** \ingroup core
Base class for plugin layers. These can be implemented by plugins Base class for plugin layers. These can be implemented by plugins
@ -53,11 +52,6 @@ class CORE_EXPORT QgsPluginLayer : public QgsMapLayer
*/ */
void setSource( const QString &source ); void setSource( const QString &source );
//! return a list of symbology items for the legend
//! (default implementation returns nothing)
//! \since QGIS v2.1
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
protected: protected:
QString mPluginLayerType; QString mPluginLayerType;
}; };

View File

@ -20,7 +20,7 @@ bool QgsVectorLayerFeatureCounter::run()
for ( ; symbolIt != symbolList.constEnd(); ++symbolIt ) for ( ; symbolIt != symbolList.constEnd(); ++symbolIt )
{ {
mSymbolFeatureCountMap.insert( symbolIt->first, 0 ); mSymbolFeatureCountMap.insert( symbolIt->label(), 0 );
} }
// If there are no features to be counted, we can spare us the trouble // If there are no features to be counted, we can spare us the trouble

View File

@ -730,38 +730,21 @@ QDomElement QgsCategorizedSymbolRenderer::save( QDomDocument &doc, const QgsRead
return rendererElem; return rendererElem;
} }
QgsLegendSymbologyList QgsCategorizedSymbolRenderer::legendSymbologyItems( QSize iconSize )
{
QgsLegendSymbologyList lst;
int count = categories().count();
lst.reserve( count );
for ( int i = 0; i < count; i++ )
{
const QgsRendererCategory &cat = categories()[i];
QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap( cat.symbol(), iconSize );
lst << qMakePair( cat.label(), pix );
}
return lst;
}
QgsLegendSymbolList QgsCategorizedSymbolRenderer::legendSymbolItems( double scale, const QString &rule ) QgsLegendSymbolList QgsCategorizedSymbolRenderer::baseLegendSymbolItems() const
{ {
Q_UNUSED( scale );
QgsLegendSymbolList lst; QgsLegendSymbolList lst;
int i = 0;
Q_FOREACH ( const QgsRendererCategory &cat, mCategories ) Q_FOREACH ( const QgsRendererCategory &cat, mCategories )
{ {
if ( rule.isEmpty() || cat.label() == rule ) lst << QgsLegendSymbolItem( cat.symbol(), cat.label(), QString::number( i++ ), true );
{
lst << qMakePair( cat.label(), cat.symbol() );
}
} }
return lst; return lst;
} }
QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const QgsLegendSymbolList QgsCategorizedSymbolRenderer::legendSymbolItems() const
{ {
QgsLegendSymbolListV2 lst; QgsLegendSymbolList lst;
if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker ) if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker )
{ {
// check that all symbols that have the same size expression // check that all symbols that have the same size expression
@ -775,7 +758,7 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
if ( sSize != ddSize ) if ( sSize != ddSize )
{ {
// no common size expression // no common size expression
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
} }
else else
@ -786,7 +769,7 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
if ( !ddSize || !ddSize.isActive() ) if ( !ddSize || !ddSize.isActive() )
{ {
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) ) if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) )
@ -803,14 +786,14 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
lst << si; lst << si;
} }
// now list the categorized symbols // now list the categorized symbols
const QgsLegendSymbolListV2 list2 = QgsFeatureRenderer::legendSymbolItemsV2() ; const QgsLegendSymbolList list2 = baseLegendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &item, list2 ) Q_FOREACH ( const QgsLegendSymbolItem &item, list2 )
lst << item; lst << item;
return lst; return lst;
} }
} }
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
QSet<QString> QgsCategorizedSymbolRenderer::legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) QSet<QString> QgsCategorizedSymbolRenderer::legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context )

View File

@ -131,9 +131,7 @@ class CORE_EXPORT QgsCategorizedSymbolRenderer : public QgsFeatureRenderer
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override; QgsLegendSymbolList legendSymbolItems() const override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override; virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override;
/** Returns the renderer's source symbol, which is the base symbol used for the each categories' symbol before applying /** Returns the renderer's source symbol, which is the base symbol used for the each categories' symbol before applying
@ -210,6 +208,8 @@ class CORE_EXPORT QgsCategorizedSymbolRenderer : public QgsFeatureRenderer
//! Returns calculated classification value for a feature //! Returns calculated classification value for a feature
QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const; QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const;
//! Returns list of legend symbol items from individual categories
QgsLegendSymbolList baseLegendSymbolItems() const;
}; };
#endif // QGSCATEGORIZEDSYMBOLRENDERERV2_H #endif // QGSCATEGORIZEDSYMBOLRENDERERV2_H

View File

@ -1136,23 +1136,20 @@ QDomElement QgsGraduatedSymbolRenderer::save( QDomDocument &doc, const QgsReadWr
return rendererElem; return rendererElem;
} }
QgsLegendSymbologyList QgsGraduatedSymbolRenderer::legendSymbologyItems( QSize iconSize ) QgsLegendSymbolList QgsGraduatedSymbolRenderer::baseLegendSymbolItems() const
{ {
QgsLegendSymbologyList lst; QgsLegendSymbolList lst;
int count = ranges().count(); int i = 0;
lst.reserve( count ); Q_FOREACH ( const QgsRendererRange &range, mRanges )
for ( int i = 0; i < count; i++ )
{ {
const QgsRendererRange &range = ranges()[i]; lst << QgsLegendSymbolItem( range.symbol(), range.label(), QString::number( i++ ), true );
QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap( range.symbol(), iconSize );
lst << qMakePair( range.label(), pix );
} }
return lst; return lst;
} }
QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const QgsLegendSymbolList QgsGraduatedSymbolRenderer::legendSymbolItems() const
{ {
QgsLegendSymbolListV2 list; QgsLegendSymbolList list;
if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker ) if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker )
{ {
// check that all symbols that have the same size expression // check that all symbols that have the same size expression
@ -1166,7 +1163,7 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
if ( sSize && sSize != ddSize ) if ( sSize && sSize != ddSize )
{ {
// no common size expression // no common size expression
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
} }
else else
@ -1177,7 +1174,7 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
if ( !ddSize || !ddSize.isActive() ) if ( !ddSize || !ddSize.isActive() )
{ {
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) ) if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) )
@ -1194,14 +1191,14 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
list << si; list << si;
} }
// now list the graduated symbols // now list the graduated symbols
const QgsLegendSymbolListV2 list2 = QgsFeatureRenderer::legendSymbolItemsV2() ; const QgsLegendSymbolList list2 = baseLegendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &item, list2 ) Q_FOREACH ( const QgsLegendSymbolItem &item, list2 )
list << item; list << item;
return list; return list;
} }
} }
return QgsFeatureRenderer::legendSymbolItemsV2(); return baseLegendSymbolItems();
} }
QSet< QString > QgsGraduatedSymbolRenderer::legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) QSet< QString > QgsGraduatedSymbolRenderer::legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context )
@ -1220,21 +1217,6 @@ QSet< QString > QgsGraduatedSymbolRenderer::legendKeysForFeature( QgsFeature &fe
return QSet< QString >(); return QSet< QString >();
} }
QgsLegendSymbolList QgsGraduatedSymbolRenderer::legendSymbolItems( double scale, const QString &rule )
{
Q_UNUSED( scale );
QgsLegendSymbolList lst;
Q_FOREACH ( const QgsRendererRange &range, mRanges )
{
if ( rule.isEmpty() || range.label() == rule )
{
lst << qMakePair( range.label(), range.symbol() );
}
}
return lst;
}
QgsSymbol *QgsGraduatedSymbolRenderer::sourceSymbol() QgsSymbol *QgsGraduatedSymbolRenderer::sourceSymbol()
{ {
return mSourceSymbol.get(); return mSourceSymbol.get();

View File

@ -250,9 +250,7 @@ class CORE_EXPORT QgsGraduatedSymbolRenderer : public QgsFeatureRenderer
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override; QgsLegendSymbolList legendSymbolItems() const override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override; virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override;
/** Returns the renderer's source symbol, which is the base symbol used for the each classes' symbol before applying /** Returns the renderer's source symbol, which is the base symbol used for the each classes' symbol before applying
@ -361,6 +359,9 @@ class CORE_EXPORT QgsGraduatedSymbolRenderer : public QgsFeatureRenderer
*/ */
QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const; QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const;
//! Returns list of legend symbol items from individual ranges
QgsLegendSymbolList baseLegendSymbolItems() const;
#ifdef SIP_RUN #ifdef SIP_RUN
QgsGraduatedSymbolRenderer( const QgsGraduatedSymbolRenderer & ); QgsGraduatedSymbolRenderer( const QgsGraduatedSymbolRenderer & );
QgsGraduatedSymbolRenderer &operator=( const QgsGraduatedSymbolRenderer & ); QgsGraduatedSymbolRenderer &operator=( const QgsGraduatedSymbolRenderer & );

View File

@ -471,22 +471,13 @@ QSet<QString> QgsInvertedPolygonRenderer::usedAttributes( const QgsRenderContext
return mSubRenderer->usedAttributes( context ); return mSubRenderer->usedAttributes( context );
} }
QgsLegendSymbologyList QgsInvertedPolygonRenderer::legendSymbologyItems( QSize iconSize ) QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems() const
{
if ( !mSubRenderer )
{
return QgsLegendSymbologyList();
}
return mSubRenderer->legendSymbologyItems( iconSize );
}
QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems( double scale, const QString &rule )
{ {
if ( !mSubRenderer ) if ( !mSubRenderer )
{ {
return QgsLegendSymbolList(); return QgsLegendSymbolList();
} }
return mSubRenderer->legendSymbolItems( scale, rule ); return mSubRenderer->legendSymbolItems();
} }
bool QgsInvertedPolygonRenderer::willRenderFeature( QgsFeature &feat, QgsRenderContext &context ) bool QgsInvertedPolygonRenderer::willRenderFeature( QgsFeature &feat, QgsRenderContext &context )

View File

@ -98,13 +98,10 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRenderer
/** Proxy that will call this method on the embedded renderer. /** Proxy that will call this method on the embedded renderer.
*/ */
virtual QgsSymbolList originalSymbolsForFeature( QgsFeature &feat, QgsRenderContext &context ) override; virtual QgsSymbolList originalSymbolsForFeature( QgsFeature &feat, QgsRenderContext &context ) override;
//! Proxy that will call this method on the embedded renderer.
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
/** Proxy that will call this method on the embedded renderer. /** Proxy that will call this method on the embedded renderer.
* \note not available in Python bindings
*/ */
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) override SIP_SKIP; virtual QgsLegendSymbolList legendSymbolItems() const override;
/** Proxy that will call this method on the embedded renderer. /** Proxy that will call this method on the embedded renderer.
*/ */

View File

@ -96,6 +96,6 @@ class CORE_EXPORT QgsLegendSymbolItem
}; };
typedef QList< QgsLegendSymbolItem > QgsLegendSymbolListV2; typedef QList< QgsLegendSymbolItem > QgsLegendSymbolList;
#endif // QGSLEGENDSYMBOLITEMV2_H #endif // QGSLEGENDSYMBOLITEMV2_H

View File

@ -330,25 +330,15 @@ void QgsPointDistanceRenderer::stopRender( QgsRenderContext &context )
mRenderer->stopRender( context ); mRenderer->stopRender( context );
} }
QgsLegendSymbologyList QgsPointDistanceRenderer::legendSymbologyItems( QSize iconSize ) QgsLegendSymbolList QgsPointDistanceRenderer::legendSymbolItems() const
{ {
if ( mRenderer ) if ( mRenderer )
{ {
return mRenderer->legendSymbologyItems( iconSize ); return mRenderer->legendSymbolItems();
}
return QgsLegendSymbologyList();
}
QgsLegendSymbolList QgsPointDistanceRenderer::legendSymbolItems( double scale, const QString &rule )
{
if ( mRenderer )
{
return mRenderer->legendSymbolItems( scale, rule );
} }
return QgsLegendSymbolList(); return QgsLegendSymbolList();
} }
QgsRectangle QgsPointDistanceRenderer::searchRect( const QgsPointXY &p, double distance ) const QgsRectangle QgsPointDistanceRenderer::searchRect( const QgsPointXY &p, double distance ) const
{ {
return QgsRectangle( p.x() - distance, p.y() - distance, p.x() + distance, p.y() + distance ); return QgsRectangle( p.x() - distance, p.y() - distance, p.x() + distance, p.y() + distance );

View File

@ -90,8 +90,7 @@ class CORE_EXPORT QgsPointDistanceRenderer: public QgsFeatureRenderer
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ) override; virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ) override;
virtual void startRender( QgsRenderContext &context, const QgsFields &fields ) override; virtual void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
void stopRender( QgsRenderContext &context ) override; void stopRender( QgsRenderContext &context ) override;
QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override; virtual QgsLegendSymbolList legendSymbolItems() const override;
QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) override SIP_SKIP;
void setEmbeddedRenderer( QgsFeatureRenderer *r SIP_TRANSFER ) override; void setEmbeddedRenderer( QgsFeatureRenderer *r SIP_TRANSFER ) override;
const QgsFeatureRenderer *embeddedRenderer() const override; const QgsFeatureRenderer *embeddedRenderer() const override;
void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override; void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;

View File

@ -274,13 +274,6 @@ QDomElement QgsFeatureRenderer::writeSld( QDomDocument &doc, const QString &styl
return userStyleElem; return userStyleElem;
} }
QgsLegendSymbologyList QgsFeatureRenderer::legendSymbologyItems( QSize iconSize )
{
Q_UNUSED( iconSize );
// empty list by default
return QgsLegendSymbologyList();
}
bool QgsFeatureRenderer::legendSymbolItemsCheckable() const bool QgsFeatureRenderer::legendSymbolItemsCheckable() const
{ {
return false; return false;
@ -304,25 +297,11 @@ void QgsFeatureRenderer::setLegendSymbolItem( const QString &key, QgsSymbol *sym
delete symbol; delete symbol;
} }
QgsLegendSymbolList QgsFeatureRenderer::legendSymbolItems( double scale, const QString &rule ) QgsLegendSymbolList QgsFeatureRenderer::legendSymbolItems() const
{ {
Q_UNUSED( scale );
Q_UNUSED( rule );
return QgsLegendSymbolList(); return QgsLegendSymbolList();
} }
QgsLegendSymbolListV2 QgsFeatureRenderer::legendSymbolItemsV2() const
{
QgsLegendSymbolList lst = const_cast<QgsFeatureRenderer *>( this )->legendSymbolItems();
QgsLegendSymbolListV2 lst2;
int i = 0;
for ( QgsLegendSymbolList::const_iterator it = lst.begin(); it != lst.end(); ++it, ++i )
{
lst2 << QgsLegendSymbolItem( it->second, it->first, QString::number( i ), legendSymbolItemsCheckable() );
}
return lst2;
}
void QgsFeatureRenderer::setVertexMarkerAppearance( int type, int size ) void QgsFeatureRenderer::setVertexMarkerAppearance( int type, int size )
{ {
mCurrentVertexMarkerType = type; mCurrentVertexMarkerType = type;

View File

@ -43,9 +43,6 @@ typedef QMap<QString, QString> QgsStringMap SIP_SKIP;
typedef QList<QgsSymbol *> QgsSymbolList; typedef QList<QgsSymbol *> QgsSymbolList;
typedef QMap<QString, QgsSymbol * > QgsSymbolMap SIP_SKIP; typedef QMap<QString, QgsSymbol * > QgsSymbolMap SIP_SKIP;
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
typedef QList< QPair<QString, QgsSymbol *> > QgsLegendSymbolList;
#include "qgslegendsymbolitem.h" #include "qgslegendsymbolitem.h"
@ -281,9 +278,6 @@ class CORE_EXPORT QgsFeatureRenderer
( void ) props; // warning avoidance ( void ) props; // warning avoidance
} }
//! return a list of symbology items for the legend
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
//! items of symbology items in legend should be checkable //! items of symbology items in legend should be checkable
//! \since QGIS 2.5 //! \since QGIS 2.5
virtual bool legendSymbolItemsCheckable() const; virtual bool legendSymbolItemsCheckable() const;
@ -303,17 +297,9 @@ class CORE_EXPORT QgsFeatureRenderer
*/ */
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ); virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER );
/** //! Returns a list of symbology items for the legend
* Return a list of legend item text / symbol.
* The \a scale value indicates the scale denominator for the legend symbols, e.g. 1000.0 for a 1:1000 map.
* \note not available in Python bindings
*/
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) SIP_SKIP;
//! Return a list of symbology items for the legend. Better choice than legendSymbolItems().
//! Default fallback implementation just uses legendSymbolItems() implementation
//! \since QGIS 2.6 //! \since QGIS 2.6
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const; virtual QgsLegendSymbolList legendSymbolItems() const;
//! If supported by the renderer, return classification attribute for the use in legend //! If supported by the renderer, return classification attribute for the use in legend
//! \since QGIS 2.6 //! \since QGIS 2.6

View File

@ -236,25 +236,9 @@ void QgsRuleBasedRenderer::Rule::setFilterExpression( const QString &filterExp )
initFilter(); initFilter();
} }
QgsLegendSymbolList QgsRuleBasedRenderer::Rule::legendSymbolItems( double scale, const QString &ruleFilter ) const QgsLegendSymbolList QgsRuleBasedRenderer::Rule::legendSymbolItems( int currentLevel ) const
{ {
QgsLegendSymbolList lst; QgsLegendSymbolList lst;
if ( mSymbol && ( ruleFilter.isEmpty() || mLabel == ruleFilter ) )
lst << qMakePair( mLabel, mSymbol );
Q_FOREACH ( Rule *rule, mChildren )
{
if ( qgsDoubleNear( scale, -1 ) || rule->isScaleOK( scale ) )
{
lst << rule->legendSymbolItems( scale, ruleFilter );
}
}
return lst;
}
QgsLegendSymbolListV2 QgsRuleBasedRenderer::Rule::legendSymbolItemsV2( int currentLevel ) const
{
QgsLegendSymbolListV2 lst;
if ( currentLevel != -1 ) // root rule should not be shown if ( currentLevel != -1 ) // root rule should not be shown
{ {
lst << QgsLegendSymbolItem( mSymbol, mLabel, mRuleKey, true, mMaximumScale, mMinimumScale, currentLevel, mParent ? mParent->mRuleKey : QString() ); lst << QgsLegendSymbolItem( mSymbol, mLabel, mRuleKey, true, mMaximumScale, mMinimumScale, currentLevel, mParent ? mParent->mRuleKey : QString() );
@ -263,7 +247,7 @@ QgsLegendSymbolListV2 QgsRuleBasedRenderer::Rule::legendSymbolItemsV2( int curre
for ( RuleList::const_iterator it = mChildren.constBegin(); it != mChildren.constEnd(); ++it ) for ( RuleList::const_iterator it = mChildren.constBegin(); it != mChildren.constEnd(); ++it )
{ {
Rule *rule = *it; Rule *rule = *it;
lst << rule->legendSymbolItemsV2( currentLevel + 1 ); lst << rule->legendSymbolItems( currentLevel + 1 );
} }
return lst; return lst;
} }
@ -981,19 +965,6 @@ QDomElement QgsRuleBasedRenderer::save( QDomDocument &doc, const QgsReadWriteCon
return rendererElem; return rendererElem;
} }
QgsLegendSymbologyList QgsRuleBasedRenderer::legendSymbologyItems( QSize iconSize )
{
QgsLegendSymbologyList lst;
QgsLegendSymbolList items = legendSymbolItems();
for ( QgsLegendSymbolList::iterator it = items.begin(); it != items.end(); ++it )
{
QPair<QString, QgsSymbol *> pair = *it;
QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap( pair.second, iconSize );
lst << qMakePair( pair.first, pix );
}
return lst;
}
bool QgsRuleBasedRenderer::legendSymbolItemsCheckable() const bool QgsRuleBasedRenderer::legendSymbolItemsCheckable() const
{ {
return true; return true;
@ -1021,14 +992,9 @@ void QgsRuleBasedRenderer::setLegendSymbolItem( const QString &key, QgsSymbol *s
delete symbol; delete symbol;
} }
QgsLegendSymbolList QgsRuleBasedRenderer::legendSymbolItems( double scale, const QString &rule ) QgsLegendSymbolList QgsRuleBasedRenderer::legendSymbolItems() const
{ {
return mRootRule->legendSymbolItems( scale, rule ); return mRootRule->legendSymbolItems();
}
QgsLegendSymbolListV2 QgsRuleBasedRenderer::legendSymbolItemsV2() const
{
return mRootRule->legendSymbolItemsV2();
} }

View File

@ -155,11 +155,8 @@ class CORE_EXPORT QgsRuleBasedRenderer : public QgsFeatureRenderer
//! \note available in Python bindings as symbol2 //! \note available in Python bindings as symbol2
QgsSymbolList symbols( const QgsRenderContext &context = QgsRenderContext() ) const; QgsSymbolList symbols( const QgsRenderContext &context = QgsRenderContext() ) const;
//! \note not available in Python bindings
QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) const SIP_SKIP;
//! \since QGIS 2.6 //! \since QGIS 2.6
QgsLegendSymbolListV2 legendSymbolItemsV2( int currentLevel = -1 ) const; QgsLegendSymbolList legendSymbolItems( int currentLevel = -1 ) const;
/** /**
* Check if a given feature shall be rendered by this rule * Check if a given feature shall be rendered by this rule
@ -468,14 +465,12 @@ class CORE_EXPORT QgsRuleBasedRenderer : public QgsFeatureRenderer
virtual QgsSymbolList symbols( QgsRenderContext &context ) override; virtual QgsSymbolList symbols( QgsRenderContext &context ) override;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
virtual bool legendSymbolItemsCheckable() const override; virtual bool legendSymbolItemsCheckable() const override;
virtual bool legendSymbolItemChecked( const QString &key ) override; virtual bool legendSymbolItemChecked( const QString &key ) override;
virtual void checkLegendSymbolItem( const QString &key, bool state = true ) override; virtual void checkLegendSymbolItem( const QString &key, bool state = true ) override;
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override; virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) override SIP_SKIP; virtual QgsLegendSymbolList legendSymbolItems() const override;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QString dump() const override; virtual QString dump() const override;
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ) override; virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context ) override;
virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context ) override; virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context ) override;

View File

@ -278,29 +278,9 @@ QDomElement QgsSingleSymbolRenderer::save( QDomDocument &doc, const QgsReadWrite
return rendererElem; return rendererElem;
} }
QgsLegendSymbologyList QgsSingleSymbolRenderer::legendSymbologyItems( QSize iconSize ) QgsLegendSymbolList QgsSingleSymbolRenderer::legendSymbolItems() const
{ {
QgsLegendSymbologyList lst;
if ( mSymbol )
{
QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap( mSymbol.get(), iconSize );
lst << qMakePair( QString(), pix );
}
return lst;
}
QgsLegendSymbolList QgsSingleSymbolRenderer::legendSymbolItems( double scale, const QString &rule )
{
Q_UNUSED( scale );
Q_UNUSED( rule );
QgsLegendSymbolList lst; QgsLegendSymbolList lst;
lst << qMakePair( QString(), mSymbol.get() );
return lst;
}
QgsLegendSymbolListV2 QgsSingleSymbolRenderer::legendSymbolItemsV2() const
{
QgsLegendSymbolListV2 lst;
if ( mSymbol->type() == QgsSymbol::Marker ) if ( mSymbol->type() == QgsSymbol::Marker )
{ {
const QgsMarkerSymbol *symbol = static_cast<const QgsMarkerSymbol *>( mSymbol.get() ); const QgsMarkerSymbol *symbol = static_cast<const QgsMarkerSymbol *>( mSymbol.get() );

View File

@ -52,9 +52,7 @@ class CORE_EXPORT QgsSingleSymbolRenderer : public QgsFeatureRenderer
//! create renderer from XML element //! create renderer from XML element
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override; virtual QgsLegendSymbolList legendSymbolItems() const override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override; virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) override;
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override; virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;

View File

@ -249,9 +249,7 @@ void QgsRendererWidget::changeSymbolAngle()
void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r ) void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r )
{ {
QgsLegendSymbolList symbols = r->legendSymbolItems(); QgsSymbolLevelsDialog dlg( r->legendSymbolItems(), r->usingSymbolLevels(), this );
QgsSymbolLevelsDialog dlg( symbols, r->usingSymbolLevels(), this );
if ( dlg.exec() ) if ( dlg.exec() )
{ {

View File

@ -396,9 +396,7 @@ void QgsRuleBasedRendererWidget::keyPressEvent( QKeyEvent *event )
void QgsRuleBasedRendererWidget::setRenderingOrder() void QgsRuleBasedRendererWidget::setRenderingOrder()
{ {
QgsLegendSymbolList lst = mRenderer->legendSymbolItems(); QgsSymbolLevelsDialog dlg( mRenderer->legendSymbolItems(), true, this );
QgsSymbolLevelsDialog dlg( lst, true, this );
dlg.setForceOrderingEnabled( true ); dlg.setForceOrderingEnabled( true );
dlg.exec(); dlg.exec();

View File

@ -44,17 +44,18 @@ QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( const QgsLegendSymbolList &list, b
connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsDialog::updateUi ); connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsDialog::updateUi );
if ( mList.count() > 0 && !mList[0].second ) // only consider entries with symbols
Q_FOREACH ( const QgsLegendSymbolItem &item, list )
{ {
// remove symbolless entry (probably classifier of categorized renderer) if ( item.symbol() )
mList.removeFirst(); mList << item;
} }
int maxLayers = 0; int maxLayers = 0;
tableLevels->setRowCount( mList.count() ); tableLevels->setRowCount( mList.count() );
for ( int i = 0; i < mList.count(); i++ ) for ( int i = 0; i < mList.count(); i++ )
{ {
QgsSymbol *sym = mList.at( i ).second; QgsSymbol *sym = mList.at( i ).symbol();
// set icons for the rows // set icons for the rows
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( sym, QSize( 16, 16 ) ); QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( sym, QSize( 16, 16 ) );
@ -96,8 +97,8 @@ void QgsSymbolLevelsDialog::populateTable()
{ {
for ( int row = 0; row < mList.count(); row++ ) for ( int row = 0; row < mList.count(); row++ )
{ {
QgsSymbol *sym = mList.at( row ).second; QgsSymbol *sym = mList.at( row ).symbol();
QString label = mList.at( row ).first; QString label = mList.at( row ).label();
QTableWidgetItem *itemLabel = new QTableWidgetItem( label ); QTableWidgetItem *itemLabel = new QTableWidgetItem( label );
itemLabel->setFlags( itemLabel->flags() ^ Qt::ItemIsEditable ); itemLabel->setFlags( itemLabel->flags() ^ Qt::ItemIsEditable );
tableLevels->setItem( row, 0, itemLabel ); tableLevels->setItem( row, 0, itemLabel );
@ -131,7 +132,7 @@ void QgsSymbolLevelsDialog::setDefaultLevels()
{ {
for ( int i = 0; i < mList.count(); i++ ) for ( int i = 0; i < mList.count(); i++ )
{ {
QgsSymbol *sym = mList.at( i ).second; QgsSymbol *sym = mList.at( i ).symbol();
for ( int layer = 0; layer < sym->symbolLayerCount(); layer++ ) for ( int layer = 0; layer < sym->symbolLayerCount(); layer++ )
{ {
sym->symbolLayer( layer )->setRenderingPass( layer ); sym->symbolLayer( layer )->setRenderingPass( layer );
@ -148,7 +149,7 @@ void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column )
{ {
if ( row < 0 || row >= mList.count() ) if ( row < 0 || row >= mList.count() )
return; return;
QgsSymbol *sym = mList.at( row ).second; QgsSymbol *sym = mList.at( row ).symbol();
if ( column < 0 || column > sym->symbolLayerCount() ) if ( column < 0 || column > sym->symbolLayerCount() )
return; return;
sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() ); sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );

View File

@ -2974,7 +2974,7 @@ namespace QgsWms
const SymbolSet &usedSymbols = hitTest[vl]; const SymbolSet &usedSymbols = hitTest[vl];
QList<int> order; QList<int> order;
int i = 0; int i = 0;
Q_FOREACH ( const QgsLegendSymbolItem &legendItem, vl->renderer()->legendSymbolItemsV2() ) Q_FOREACH ( const QgsLegendSymbolItem &legendItem, vl->renderer()->legendSymbolItems() )
{ {
QString sProp = QgsSymbolLayerUtils::symbolProperties( legendItem.legacyRuleKey() ); QString sProp = QgsSymbolLayerUtils::symbolProperties( legendItem.legacyRuleKey() );
if ( usedSymbols.contains( sProp ) ) if ( usedSymbols.contains( sProp ) )

View File

@ -359,7 +359,7 @@ void TestQgsLayerTree::testFindLegendNode()
QVERIFY( !m->findLegendNode( QString( "id" ), QString( "rule" ) ) ); QVERIFY( !m->findLegendNode( QString( "id" ), QString( "rule" ) ) );
QVERIFY( !m->findLegendNode( QString( "vl" ), QString( "rule" ) ) ); QVERIFY( !m->findLegendNode( QString( "vl" ), QString( "rule" ) ) );
QgsLegendSymbolListV2 symbolList = renderer->legendSymbolItemsV2(); QgsLegendSymbolList symbolList = renderer->legendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &symbol, symbolList ) Q_FOREACH ( const QgsLegendSymbolItem &symbol, symbolList )
{ {
QgsLayerTreeModelLegendNode *found = m->findLegendNode( vl->id(), symbol.ruleKey() ); QgsLayerTreeModelLegendNode *found = m->findLegendNode( vl->id(), symbol.ruleKey() );
@ -488,7 +488,7 @@ void TestQgsLayerTree::testRendererLegend( QgsFeatureRenderer *renderer )
m->refreshLayerLegend( n ); m->refreshLayerLegend( n );
//test initial symbol //test initial symbol
QgsLegendSymbolListV2 symbolList = renderer->legendSymbolItemsV2(); QgsLegendSymbolList symbolList = renderer->legendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &symbol, symbolList ) Q_FOREACH ( const QgsLegendSymbolItem &symbol, symbolList )
{ {
QgsSymbolLegendNode *symbolNode = dynamic_cast< QgsSymbolLegendNode * >( m->findLegendNode( vl->id(), symbol.ruleKey() ) ); QgsSymbolLegendNode *symbolNode = dynamic_cast< QgsSymbolLegendNode * >( m->findLegendNode( vl->id(), symbol.ruleKey() ) );
@ -503,7 +503,7 @@ void TestQgsLayerTree::testRendererLegend( QgsFeatureRenderer *renderer )
symbolNode->setSymbol( newSymbol ); symbolNode->setSymbol( newSymbol );
QCOMPARE( symbolNode->symbol()->color(), QColor( 255, 255, 0 ) ); QCOMPARE( symbolNode->symbol()->color(), QColor( 255, 255, 0 ) );
//test that symbol change was sent to renderer //test that symbol change was sent to renderer
symbolList = renderer->legendSymbolItemsV2(); symbolList = renderer->legendSymbolItems();
QCOMPARE( symbolList.at( 1 ).symbol()->color(), QColor( 255, 255, 0 ) ); QCOMPARE( symbolList.at( 1 ).symbol()->color(), QColor( 255, 255, 0 ) );
//another test - check directly setting symbol at renderer //another test - check directly setting symbol at renderer