Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgssinglesymbolrenderer.h 3 : : --------------------- 4 : : begin : November 2009 5 : : copyright : (C) 2009 by Martin Dobias 6 : : email : wonder dot sk at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : #ifndef QGSSINGLESYMBOLRENDERER_H 16 : : #define QGSSINGLESYMBOLRENDERER_H 17 : : 18 : : #include "qgis_core.h" 19 : : #include "qgis.h" 20 : : #include "qgsrenderer.h" 21 : : 22 : : class QgsDataDefinedSizeLegend; 23 : : class QgsSymbol; 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \class QgsSingleSymbolRenderer 28 : : */ 29 : : class CORE_EXPORT QgsSingleSymbolRenderer : public QgsFeatureRenderer 30 : : { 31 : : public: 32 : : 33 : : /** 34 : : * Constructor for QgsSingleSymbolRenderer. 35 : : * 36 : : * The same \a symbol will be used to render every feature. Ownership 37 : : * of \a symbol is transferred to the renderer. 38 : : */ 39 : : QgsSingleSymbolRenderer( QgsSymbol *symbol SIP_TRANSFER ); 40 : : ~QgsSingleSymbolRenderer() override; 41 : : 42 : : QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override; 43 : : QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override; 44 : : void startRender( QgsRenderContext &context, const QgsFields &fields ) override; 45 : : void stopRender( QgsRenderContext &context ) override; 46 : : QSet<QString> usedAttributes( const QgsRenderContext &context ) const override; 47 : : bool accept( QgsStyleEntityVisitorInterface *visitor ) const override; 48 : : 49 : : /** 50 : : * Returns the symbol which will be rendered for every feature. 51 : : * \see setSymbol() 52 : : */ 53 : : QgsSymbol *symbol() const; 54 : : 55 : : /** 56 : : * Sets the symbol which will be rendered for every feature. Ownership 57 : : * of the symbol is transferred to the renderer. 58 : : * \see symbol() 59 : : */ 60 : : void setSymbol( QgsSymbol *s SIP_TRANSFER ); 61 : : 62 : : QString dump() const override; 63 : : 64 : : QgsSingleSymbolRenderer *clone() const override SIP_FACTORY; 65 : : 66 : : void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override; 67 : : 68 : : /** 69 : : * Creates a new single symbol renderer from an SLD \a element. 70 : : * 71 : : * The geometry type for features to be rendered must be specified via the \a geomType argument. 72 : : * 73 : : * The caller takes ownership of the returned renderer. 74 : : */ 75 : : static QgsFeatureRenderer *createFromSld( QDomElement &element, QgsWkbTypes::GeometryType geomType ) SIP_FACTORY; 76 : : 77 : 0 : QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels; } 78 : : QgsSymbolList symbols( QgsRenderContext &context ) const override; 79 : : 80 : : /** 81 : : * Creates a new single symbol renderer from an XML \a element, using the supplied read/write \a context. 82 : : * 83 : : * The caller takes ownership of the returned renderer. 84 : : */ 85 : : static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; 86 : : 87 : : QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; 88 : : QgsLegendSymbolList legendSymbolItems() const override; 89 : : QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override; 90 : : void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override; 91 : : 92 : : /** 93 : : * Creates a new single symbol renderer from an existing \a renderer. 94 : : * \returns a new renderer if the conversion was possible, otherwise NULLPTR. 95 : : * \since QGIS 2.5 96 : : */ 97 : : static QgsSingleSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY; 98 : : 99 : : /** 100 : : * Configures appearance of legend when renderer is configured to use data-defined size for marker symbols. 101 : : * This allows configuring which values (symbol sizes) should be shown in the legend, whether to display 102 : : * different symbol sizes collapsed in one legend node or separated across multiple legend nodes etc. 103 : : * 104 : : * When renderer does not use data-defined size or does not use marker symbols, these settings will be ignored. 105 : : * Takes ownership of the passed settings objects. NULLPTR is a valid input that disables data-defined 106 : : * size legend. 107 : : * \since QGIS 3.0 108 : : */ 109 : : void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER ); 110 : : 111 : : /** 112 : : * Returns configuration of appearance of legend when using data-defined size for marker symbols. 113 : : * Will return NULLPTR if the functionality is disabled. 114 : : * \since QGIS 3.0 115 : : */ 116 : : QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const; 117 : : 118 : : protected: 119 : : std::unique_ptr<QgsSymbol> mSymbol; 120 : : std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend; 121 : : 122 : : private: 123 : : #ifdef SIP_RUN 124 : : QgsSingleSymbolRenderer( const QgsSingleSymbolRenderer & ); 125 : : QgsSingleSymbolRenderer &operator=( const QgsSingleSymbolRenderer & ); 126 : : #endif 127 : : 128 : : }; 129 : : 130 : : 131 : : #endif // QGSSINGLESYMBOLRENDERER_H