QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgscategorizedsymbolrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscategorizedsymbolrenderer.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 QGSCATEGORIZEDSYMBOLRENDERER_H
16#define QGSCATEGORIZEDSYMBOLRENDERER_H
17
18#include "qgis_core.h"
19#include "qgis.h"
20#include "qgsrenderer.h"
21
22#include <QHash>
23
24class QgsVectorLayer;
25class QgsStyle;
27class QgsSymbol;
28class QgsExpression;
29class QgsColorRamp;
30
35class CORE_EXPORT QgsRendererCategory
36{
37 public:
38
43
57 QgsRendererCategory( const QVariant &value, QgsSymbol *symbol SIP_TRANSFER, const QString &label, bool render = true, const QString &uuid = QString() );
58
65
70 QString uuid() const;
71
79 QVariant value() const;
80
85 QgsSymbol *symbol() const;
86
92 QString label() const;
93
101 void setValue( const QVariant &value );
102
110 void setSymbol( QgsSymbol *s SIP_TRANSFER );
111
117 void setLabel( const QString &label );
118
123 bool renderState() const;
124
129 void setRenderState( bool render );
130
131 // debugging
132
136 QString dump() const;
137
141 void toSld( QDomDocument &doc, QDomElement &element, QVariantMap props ) const;
142
143#ifdef SIP_RUN
144 SIP_PYOBJECT __repr__();
145 % MethodCode
146 const QString str = !sipCpp->value().isValid()
147 ? QStringLiteral( "<QgsRendererCategory>" )
148 : sipCpp->label().isEmpty()
149 ? QStringLiteral( "<QgsRendererCategory: %1>" ).arg( sipCpp->value().toString() )
150 : QStringLiteral( "<QgsRendererCategory: %1 (%2)>" ).arg( sipCpp->value().toString(), sipCpp->label() );
151 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
152 % End
153#endif
154
155 protected:
156 QVariant mValue;
157 std::unique_ptr<QgsSymbol> mSymbol;
158 QString mLabel;
159 bool mRender = true;
160 QString mUuid;
161
162 void swap( QgsRendererCategory &other );
163};
164
165typedef QList<QgsRendererCategory> QgsCategoryList;
166
172{
173 public:
174
183 QgsCategorizedSymbolRenderer( const QString &attrName = QString(), const QgsCategoryList &categories = QgsCategoryList() );
185
186 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
187 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
188 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
189 void stopRender( QgsRenderContext &context ) override;
190 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
191 bool filterNeedsGeometry() const override;
192 QString dump() const override;
193 QgsCategorizedSymbolRenderer *clone() const override SIP_FACTORY;
194 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
195 QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels | Filter; }
196 QString filter( const QgsFields &fields = QgsFields() ) override;
197 QgsSymbolList symbols( QgsRenderContext &context ) const override;
198 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
199
206 void updateSymbols( QgsSymbol *sym );
207
211 const QgsCategoryList &categories() const { return mCategories; }
212
216 int categoryIndexForValue( const QVariant &val );
217
221 int categoryIndexForLabel( const QString &val );
222
232 bool updateCategoryValue( int catIndex, const QVariant &value );
233
243 bool updateCategorySymbol( int catIndex, QgsSymbol *symbol SIP_TRANSFER );
244
255 bool updateCategoryLabel( int catIndex, const QString &label );
256
268 bool updateCategoryRenderState( int catIndex, bool render );
269
275 void addCategory( const QgsRendererCategory &category );
276
282 bool deleteCategory( int catIndex );
283
289 void deleteAllCategories();
290
294 void moveCategory( int from, int to );
295
301 void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
302
308 void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
309
317 QString classAttribute() const { return mAttrName; }
318
326 void setClassAttribute( const QString &attr ) { mAttrName = attr; }
327
331 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
332
333 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
334 QgsLegendSymbolList legendSymbolItems() const override;
335 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
336 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
337
344 QgsSymbol *sourceSymbol();
345
353 const QgsSymbol *sourceSymbol() const SIP_SKIP;
354
362 void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
363
369 QgsColorRamp *sourceColorRamp();
370
377 const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
378
385 void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
386
391 void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
392
393 bool legendSymbolItemsCheckable() const override;
394 bool legendSymbolItemChecked( const QString &key ) override;
395 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
396 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
397 QString legendClassificationAttribute() const override { return classAttribute(); }
398
406 static QgsCategorizedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
407
417 void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
418
423 QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
424
442 int matchToSymbols( QgsStyle *style, Qgis::SymbolType type,
443 QVariantList &unmatchedCategories SIP_OUT, QStringList &unmatchedSymbols SIP_OUT, bool caseSensitive = true, bool useTolerantMatch = false );
444
445
456 static QgsCategoryList createCategories( const QVariantList &values, const QgsSymbol *symbol, QgsVectorLayer *layer = nullptr, const QString &fieldName = QString() );
457
467 static QString displayString( const QVariant &value, int precision = -1 );
468
469
470 protected:
471 QString mAttrName;
472 QgsCategoryList mCategories;
473 std::unique_ptr<QgsSymbol> mSourceSymbol;
474 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
475 std::unique_ptr<QgsExpression> mExpression;
476
477 std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
478
480 int mAttrNum = -1;
481
483 QHash<QString, QgsSymbol *> mSymbolHash;
484 bool mCounting = false;
485
486 void rebuildHash();
487
491 Q_DECL_DEPRECATED QgsSymbol *skipRender() SIP_DEPRECATED;
492
497 Q_DECL_DEPRECATED QgsSymbol *symbolForValue( const QVariant &value ) const SIP_DEPRECATED;
498
499 // TODO QGIS 4.0 - rename Python method to symbolForValue
500
514 QgsSymbol *symbolForValue( const QVariant &value, bool &foundMatchingSymbol SIP_OUT ) const SIP_PYNAME( symbolForValue2 );
515
516 private:
517#ifdef SIP_RUN
520#endif
521
523 QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
524
526 QgsLegendSymbolList baseLegendSymbolItems() const;
527
528};
529
530#endif // QGSCATEGORIZEDSYMBOLRENDERER_H
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
const QgsCategoryList & categories() const
Returns a list of all categories recognized by the renderer.
QString classAttribute() const
Returns the class attribute for the renderer, which is the field name or expression string from the l...
void setClassAttribute(const QString &attr)
Sets the class attribute for the renderer, which is the field name or expression string from the laye...
~QgsCategorizedSymbolRenderer() override
Abstract base class for color ramps.
Definition: qgscolorramp.h:29
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
Class for parsing and evaluation of expressions (formerly called "search strings").
QFlags< Capability > Capabilities
Definition: qgsrenderer.h:276
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
Represents an individual category (class) from a QgsCategorizedSymbolRenderer.
std::unique_ptr< QgsSymbol > mSymbol
QgsRendererCategory()=default
Constructor for QgsRendererCategory.
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:94
Represents a vector layer which manages a vector based data sets.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:73
#define str(x)
Definition: qgis.cpp:38
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
QList< QgsRendererCategory > QgsCategoryList
QList< QgsLegendSymbolItem > QgsLegendSymbolList
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44
int precision