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.
- QgsDataDefinedButton was removed. Use QgsPropertyOverrideButton instead.
- 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.
- QgsFormAnnotationItem. Use QgsFormAnnotation instead.
- QgsHtmlAnnotationItem. Use QgsHtmlAnnotation instead.
@ -1181,6 +1182,9 @@ QgsFeatureRendererV2 {#qgis_api_break_3_0_QgsFeatureRendererV2}
- usedAttributes() now requires a QgsRenderContext argument.
- save() 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}
@ -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().
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}
--------------------
@ -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().
- 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}
@ -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
- 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.
@ -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 updateElseRules() was removed.
- 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.

View File

@ -43,12 +43,6 @@ Create new legend implementation for vector layer
static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) /Factory/;
%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
:rtype: QgsMapLayerLegend
%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 *
* *

View File

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

View File

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

View File

@ -308,8 +308,7 @@ create renderer from XML element
%End
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QgsLegendSymbolList legendSymbolItems() const;
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.
:rtype: QgsSymbolList
%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 );
%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 *

View File

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

View File

@ -13,9 +13,6 @@
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
%End
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
%Docstring
return a list of symbology items for the legend
:rtype: QgsLegendSymbologyList
%End
virtual bool legendSymbolItemsCheckable() const;
%Docstring
.. versionadded:: 2.5
@ -298,11 +289,10 @@ return a list of symbology items for the legend
.. versionadded:: 2.14
%End
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QgsLegendSymbolList legendSymbolItems() const;
%Docstring
.. versionadded:: 2.6
:rtype: QgsLegendSymbolListV2
:rtype: QgsLegendSymbolList
%End
virtual QString legendClassificationAttribute() const;

View File

@ -118,11 +118,10 @@ Constructor takes ownership of the symbol
:rtype: QgsSymbolList
%End
QgsLegendSymbolListV2 legendSymbolItemsV2( int currentLevel = -1 ) const;
QgsLegendSymbolList legendSymbolItems( int currentLevel = -1 ) const;
%Docstring
.. versionadded:: 2.6
:rtype: QgsLegendSymbolListV2
:rtype: QgsLegendSymbolList
%End
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 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context );
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
virtual bool legendSymbolItemsCheckable() const;
virtual bool legendSymbolItemChecked( const QString &key );
virtual void checkLegendSymbolItem( const QString &key, bool state = true );
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ );
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
virtual QgsLegendSymbolList legendSymbolItems() const;
virtual QString dump() const;
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context );
virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context );

View File

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

View File

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

View File

@ -40,11 +40,6 @@ QgsMapLayerLegend *QgsMapLayerLegend::defaultRasterLegend( QgsRasterLayer *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() ) );
}
Q_FOREACH ( const QgsLegendSymbolItem &i, r->legendSymbolItemsV2() )
Q_FOREACH ( const QgsLegendSymbolItem &i, r->legendSymbolItems() )
{
QgsSymbolLegendNode *n = new QgsSymbolLegendNode( nodeLayer, i );
nodes.append( n );
@ -266,32 +261,3 @@ QList<QgsLayerTreeModelLegendNode *> QgsDefaultRasterLayerLegend::createLayerTre
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
static QgsMapLayerLegend *defaultRasterLegend( QgsRasterLayer *rl ) SIP_FACTORY;
//! Create new legend implementation for raster layer
static QgsMapLayerLegend *defaultPluginLegend( QgsPluginLayer *pl ) SIP_FACTORY;
signals:
//! Emitted when existing items/nodes got invalid and should be replaced by new ones
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

View File

@ -308,7 +308,7 @@ void QgsMapThemeCollection::applyMapThemeCheckedLegendNodesToLayer( const MapThe
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 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 )
, mPluginLayerType( layerType )
{
setLegend( QgsMapLayerLegend::defaultPluginLegend( this ) );
}
QgsPluginLayer::~QgsPluginLayer()
@ -45,9 +44,3 @@ void QgsPluginLayer::setSource( const QString &source )
{
mDataSource = source;
}
QgsLegendSymbologyList QgsPluginLayer::legendSymbologyItems( QSize iconSize )
{
Q_UNUSED( iconSize );
return QgsLegendSymbologyList();
}

View File

@ -18,7 +18,6 @@
#include "qgis_core.h"
#include "qgsmaplayer.h"
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList SIP_SKIP;
/** \ingroup core
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 );
//! return a list of symbology items for the legend
//! (default implementation returns nothing)
//! \since QGIS v2.1
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
protected:
QString mPluginLayerType;
};

View File

@ -20,7 +20,7 @@ bool QgsVectorLayerFeatureCounter::run()
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

View File

@ -730,38 +730,21 @@ QDomElement QgsCategorizedSymbolRenderer::save( QDomDocument &doc, const QgsRead
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;
int i = 0;
Q_FOREACH ( const QgsRendererCategory &cat, mCategories )
{
if ( rule.isEmpty() || cat.label() == rule )
{
lst << qMakePair( cat.label(), cat.symbol() );
}
lst << QgsLegendSymbolItem( cat.symbol(), cat.label(), QString::number( i++ ), true );
}
return lst;
}
QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
QgsLegendSymbolList QgsCategorizedSymbolRenderer::legendSymbolItems() const
{
QgsLegendSymbolListV2 lst;
QgsLegendSymbolList lst;
if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker )
{
// check that all symbols that have the same size expression
@ -775,7 +758,7 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
if ( sSize != ddSize )
{
// no common size expression
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
}
else
@ -786,7 +769,7 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
if ( !ddSize || !ddSize.isActive() )
{
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) )
@ -803,14 +786,14 @@ QgsLegendSymbolListV2 QgsCategorizedSymbolRenderer::legendSymbolItemsV2() const
lst << si;
}
// now list the categorized symbols
const QgsLegendSymbolListV2 list2 = QgsFeatureRenderer::legendSymbolItemsV2() ;
const QgsLegendSymbolList list2 = baseLegendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &item, list2 )
lst << item;
return lst;
}
}
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
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;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
QgsLegendSymbolList legendSymbolItems() const 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
@ -210,6 +208,8 @@ class CORE_EXPORT QgsCategorizedSymbolRenderer : public QgsFeatureRenderer
//! Returns calculated classification value for a feature
QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const;
//! Returns list of legend symbol items from individual categories
QgsLegendSymbolList baseLegendSymbolItems() const;
};
#endif // QGSCATEGORIZEDSYMBOLRENDERERV2_H

View File

@ -1136,23 +1136,20 @@ QDomElement QgsGraduatedSymbolRenderer::save( QDomDocument &doc, const QgsReadWr
return rendererElem;
}
QgsLegendSymbologyList QgsGraduatedSymbolRenderer::legendSymbologyItems( QSize iconSize )
QgsLegendSymbolList QgsGraduatedSymbolRenderer::baseLegendSymbolItems() const
{
QgsLegendSymbologyList lst;
int count = ranges().count();
lst.reserve( count );
for ( int i = 0; i < count; i++ )
QgsLegendSymbolList lst;
int i = 0;
Q_FOREACH ( const QgsRendererRange &range, mRanges )
{
const QgsRendererRange &range = ranges()[i];
QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap( range.symbol(), iconSize );
lst << qMakePair( range.label(), pix );
lst << QgsLegendSymbolItem( range.symbol(), range.label(), QString::number( i++ ), true );
}
return lst;
}
QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
QgsLegendSymbolList QgsGraduatedSymbolRenderer::legendSymbolItems() const
{
QgsLegendSymbolListV2 list;
QgsLegendSymbolList list;
if ( mSourceSymbol && mSourceSymbol->type() == QgsSymbol::Marker )
{
// check that all symbols that have the same size expression
@ -1166,7 +1163,7 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
if ( sSize && sSize != ddSize )
{
// no common size expression
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
}
else
@ -1177,7 +1174,7 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
if ( !ddSize || !ddSize.isActive() )
{
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
if ( const QgsSizeScaleTransformer *sizeTransformer = dynamic_cast< const QgsSizeScaleTransformer * >( ddSize.transformer() ) )
@ -1194,14 +1191,14 @@ QgsLegendSymbolListV2 QgsGraduatedSymbolRenderer::legendSymbolItemsV2() const
list << si;
}
// now list the graduated symbols
const QgsLegendSymbolListV2 list2 = QgsFeatureRenderer::legendSymbolItemsV2() ;
const QgsLegendSymbolList list2 = baseLegendSymbolItems();
Q_FOREACH ( const QgsLegendSymbolItem &item, list2 )
list << item;
return list;
}
}
return QgsFeatureRenderer::legendSymbolItemsV2();
return baseLegendSymbolItems();
}
QSet< QString > QgsGraduatedSymbolRenderer::legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context )
@ -1220,21 +1217,6 @@ QSet< QString > QgsGraduatedSymbolRenderer::legendKeysForFeature( QgsFeature &fe
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()
{
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;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
QgsLegendSymbolList legendSymbolItems() const 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
@ -361,6 +359,9 @@ class CORE_EXPORT QgsGraduatedSymbolRenderer : public QgsFeatureRenderer
*/
QVariant valueForFeature( QgsFeature &feature, QgsRenderContext &context ) const;
//! Returns list of legend symbol items from individual ranges
QgsLegendSymbolList baseLegendSymbolItems() const;
#ifdef SIP_RUN
QgsGraduatedSymbolRenderer( const QgsGraduatedSymbolRenderer & );
QgsGraduatedSymbolRenderer &operator=( const QgsGraduatedSymbolRenderer & );

View File

@ -471,22 +471,13 @@ QSet<QString> QgsInvertedPolygonRenderer::usedAttributes( const QgsRenderContext
return mSubRenderer->usedAttributes( context );
}
QgsLegendSymbologyList QgsInvertedPolygonRenderer::legendSymbologyItems( QSize iconSize )
{
if ( !mSubRenderer )
{
return QgsLegendSymbologyList();
}
return mSubRenderer->legendSymbologyItems( iconSize );
}
QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems( double scale, const QString &rule )
QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems() const
{
if ( !mSubRenderer )
{
return QgsLegendSymbolList();
}
return mSubRenderer->legendSymbolItems( scale, rule );
return mSubRenderer->legendSymbolItems();
}
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.
*/
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.
* \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.
*/

View File

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

View File

@ -330,25 +330,15 @@ void QgsPointDistanceRenderer::stopRender( QgsRenderContext &context )
mRenderer->stopRender( context );
}
QgsLegendSymbologyList QgsPointDistanceRenderer::legendSymbologyItems( QSize iconSize )
QgsLegendSymbolList QgsPointDistanceRenderer::legendSymbolItems() const
{
if ( mRenderer )
{
return mRenderer->legendSymbologyItems( iconSize );
}
return QgsLegendSymbologyList();
}
QgsLegendSymbolList QgsPointDistanceRenderer::legendSymbolItems( double scale, const QString &rule )
{
if ( mRenderer )
{
return mRenderer->legendSymbolItems( scale, rule );
return mRenderer->legendSymbolItems();
}
return QgsLegendSymbolList();
}
QgsRectangle QgsPointDistanceRenderer::searchRect( const QgsPointXY &p, double distance ) const
{
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 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
void stopRender( QgsRenderContext &context ) override;
QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = "" ) override SIP_SKIP;
virtual QgsLegendSymbolList legendSymbolItems() const override;
void setEmbeddedRenderer( QgsFeatureRenderer *r SIP_TRANSFER ) override;
const QgsFeatureRenderer *embeddedRenderer() const 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;
}
QgsLegendSymbologyList QgsFeatureRenderer::legendSymbologyItems( QSize iconSize )
{
Q_UNUSED( iconSize );
// empty list by default
return QgsLegendSymbologyList();
}
bool QgsFeatureRenderer::legendSymbolItemsCheckable() const
{
return false;
@ -304,25 +297,11 @@ void QgsFeatureRenderer::setLegendSymbolItem( const QString &key, QgsSymbol *sym
delete symbol;
}
QgsLegendSymbolList QgsFeatureRenderer::legendSymbolItems( double scale, const QString &rule )
QgsLegendSymbolList QgsFeatureRenderer::legendSymbolItems() const
{
Q_UNUSED( scale );
Q_UNUSED( rule );
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 )
{
mCurrentVertexMarkerType = type;

View File

@ -43,9 +43,6 @@ typedef QMap<QString, QString> QgsStringMap SIP_SKIP;
typedef QList<QgsSymbol *> QgsSymbolList;
typedef QMap<QString, QgsSymbol * > QgsSymbolMap SIP_SKIP;
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
typedef QList< QPair<QString, QgsSymbol *> > QgsLegendSymbolList;
#include "qgslegendsymbolitem.h"
@ -281,9 +278,6 @@ class CORE_EXPORT QgsFeatureRenderer
( 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
//! \since QGIS 2.5
virtual bool legendSymbolItemsCheckable() const;
@ -303,17 +297,9 @@ class CORE_EXPORT QgsFeatureRenderer
*/
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER );
/**
* 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
//! Returns a list of symbology items for the legend
//! \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
//! \since QGIS 2.6

View File

@ -236,25 +236,9 @@ void QgsRuleBasedRenderer::Rule::setFilterExpression( const QString &filterExp )
initFilter();
}
QgsLegendSymbolList QgsRuleBasedRenderer::Rule::legendSymbolItems( double scale, const QString &ruleFilter ) const
QgsLegendSymbolList QgsRuleBasedRenderer::Rule::legendSymbolItems( int currentLevel ) const
{
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
{
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 )
{
Rule *rule = *it;
lst << rule->legendSymbolItemsV2( currentLevel + 1 );
lst << rule->legendSymbolItems( currentLevel + 1 );
}
return lst;
}
@ -981,19 +965,6 @@ QDomElement QgsRuleBasedRenderer::save( QDomDocument &doc, const QgsReadWriteCon
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
{
return true;
@ -1021,14 +992,9 @@ void QgsRuleBasedRenderer::setLegendSymbolItem( const QString &key, QgsSymbol *s
delete symbol;
}
QgsLegendSymbolList QgsRuleBasedRenderer::legendSymbolItems( double scale, const QString &rule )
QgsLegendSymbolList QgsRuleBasedRenderer::legendSymbolItems() const
{
return mRootRule->legendSymbolItems( scale, rule );
}
QgsLegendSymbolListV2 QgsRuleBasedRenderer::legendSymbolItemsV2() const
{
return mRootRule->legendSymbolItemsV2();
return mRootRule->legendSymbolItems();
}

View File

@ -155,11 +155,8 @@ class CORE_EXPORT QgsRuleBasedRenderer : public QgsFeatureRenderer
//! \note available in Python bindings as symbol2
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
QgsLegendSymbolListV2 legendSymbolItemsV2( int currentLevel = -1 ) const;
QgsLegendSymbolList legendSymbolItems( int currentLevel = -1 ) const;
/**
* 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 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
virtual bool legendSymbolItemsCheckable() const override;
virtual bool legendSymbolItemChecked( const QString &key ) override;
virtual void checkLegendSymbolItem( const QString &key, bool state = true ) 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 QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QgsLegendSymbolList legendSymbolItems() const override;
virtual QString dump() const override;
virtual bool willRenderFeature( 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;
}
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;
lst << qMakePair( QString(), mSymbol.get() );
return lst;
}
QgsLegendSymbolListV2 QgsSingleSymbolRenderer::legendSymbolItemsV2() const
{
QgsLegendSymbolListV2 lst;
if ( mSymbol->type() == QgsSymbol::Marker )
{
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
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize ) override;
virtual QgsLegendSymbolList legendSymbolItems( double scale = -1, const QString &rule = QString() ) override SIP_SKIP;
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
virtual QgsLegendSymbolList legendSymbolItems() const override;
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context ) 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 )
{
QgsLegendSymbolList symbols = r->legendSymbolItems();
QgsSymbolLevelsDialog dlg( symbols, r->usingSymbolLevels(), this );
QgsSymbolLevelsDialog dlg( r->legendSymbolItems(), r->usingSymbolLevels(), this );
if ( dlg.exec() )
{

View File

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

View File

@ -44,17 +44,18 @@ QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( const QgsLegendSymbolList &list, b
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)
mList.removeFirst();
if ( item.symbol() )
mList << item;
}
int maxLayers = 0;
tableLevels->setRowCount( mList.count() );
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
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( sym, QSize( 16, 16 ) );
@ -96,8 +97,8 @@ void QgsSymbolLevelsDialog::populateTable()
{
for ( int row = 0; row < mList.count(); row++ )
{
QgsSymbol *sym = mList.at( row ).second;
QString label = mList.at( row ).first;
QgsSymbol *sym = mList.at( row ).symbol();
QString label = mList.at( row ).label();
QTableWidgetItem *itemLabel = new QTableWidgetItem( label );
itemLabel->setFlags( itemLabel->flags() ^ Qt::ItemIsEditable );
tableLevels->setItem( row, 0, itemLabel );
@ -131,7 +132,7 @@ void QgsSymbolLevelsDialog::setDefaultLevels()
{
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++ )
{
sym->symbolLayer( layer )->setRenderingPass( layer );
@ -148,7 +149,7 @@ void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column )
{
if ( row < 0 || row >= mList.count() )
return;
QgsSymbol *sym = mList.at( row ).second;
QgsSymbol *sym = mList.at( row ).symbol();
if ( column < 0 || column > sym->symbolLayerCount() )
return;
sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );

View File

@ -2974,7 +2974,7 @@ namespace QgsWms
const SymbolSet &usedSymbols = hitTest[vl];
QList<int> order;
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() );
if ( usedSymbols.contains( sProp ) )

View File

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