QGIS API Documentation 3.43.0-Master (c67cf405802)
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
40
54 QgsRendererCategory( const QVariant &value, QgsSymbol *symbol SIP_TRANSFER, const QString &label, bool render = true, const QString &uuid = QString() );
55
59
64 QString uuid() const;
65
73 QVariant value() const;
74
79 QgsSymbol *symbol() const;
80
86 QString label() const;
87
95 void setValue( const QVariant &value );
96
104 void setSymbol( QgsSymbol *s SIP_TRANSFER );
105
111 void setLabel( const QString &label );
112
117 bool renderState() const;
118
123 void setRenderState( bool render );
124
125 // debugging
126
130 QString dump() const;
131
135 void toSld( QDomDocument &doc, QDomElement &element, QVariantMap props ) const;
136
137#ifdef SIP_RUN
138 SIP_PYOBJECT __repr__();
139 % MethodCode
140 const QString str = !sipCpp->value().isValid()
141 ? QStringLiteral( "<QgsRendererCategory>" )
142 : sipCpp->label().isEmpty()
143 ? QStringLiteral( "<QgsRendererCategory: %1>" ).arg( sipCpp->value().toString() )
144 : QStringLiteral( "<QgsRendererCategory: %1 (%2)>" ).arg( sipCpp->value().toString(), sipCpp->label() );
145 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
146 % End
147#endif
148
149 protected:
151
152 QVariant mValue;
153 std::unique_ptr<QgsSymbol> mSymbol;
154 QString mLabel;
155 bool mRender = true;
156 QString mUuid;
157};
158
159typedef QList<QgsRendererCategory> QgsCategoryList;
160
167{
168 public:
169
178 QgsCategorizedSymbolRenderer( const QString &attrName = QString(), const QgsCategoryList &categories = QgsCategoryList() );
180
181 Qgis::FeatureRendererFlags flags() const override;
182 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
183 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
184 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
185 void stopRender( QgsRenderContext &context ) override;
186 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
187 bool filterNeedsGeometry() const override;
188 QString dump() const override;
189 QgsCategorizedSymbolRenderer *clone() const override SIP_FACTORY;
190 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
191 QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels | Filter; }
192 QString filter( const QgsFields &fields = QgsFields() ) override;
193 QgsSymbolList symbols( QgsRenderContext &context ) const override;
194 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
195
202 void updateSymbols( QgsSymbol *sym );
203
207 const QgsCategoryList &categories() const { return mCategories; }
208
212 int categoryIndexForValue( const QVariant &val );
213
217 int categoryIndexForLabel( const QString &val );
218
228 bool updateCategoryValue( int catIndex, const QVariant &value );
229
239 bool updateCategorySymbol( int catIndex, QgsSymbol *symbol SIP_TRANSFER );
240
251 bool updateCategoryLabel( int catIndex, const QString &label );
252
264 bool updateCategoryRenderState( int catIndex, bool render );
265
271 void addCategory( const QgsRendererCategory &category );
272
278 bool deleteCategory( int catIndex );
279
285 void deleteAllCategories();
286
290 void moveCategory( int from, int to );
291
297 void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
298
304 void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
305
313 QString classAttribute() const { return mAttrName; }
314
322 void setClassAttribute( const QString &attr ) { mAttrName = attr; }
323
327 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
328
329 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
330 QgsLegendSymbolList legendSymbolItems() const override;
331 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
332 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
333
340 QgsSymbol *sourceSymbol();
341
349 const QgsSymbol *sourceSymbol() const SIP_SKIP;
350
358 void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
359
365 QgsColorRamp *sourceColorRamp();
366
373 const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
374
381 void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
382
387 void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
388
389 bool legendSymbolItemsCheckable() const override;
390 bool legendSymbolItemChecked( const QString &key ) override;
391 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
392 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
393 QString legendClassificationAttribute() const override { return classAttribute(); }
394
402 static QgsCategorizedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
403
413 void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
414
419 QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
420
438 int matchToSymbols( QgsStyle *style, Qgis::SymbolType type,
439 QVariantList &unmatchedCategories SIP_OUT, QStringList &unmatchedSymbols SIP_OUT, bool caseSensitive = true, bool useTolerantMatch = false );
440
441
452 static QgsCategoryList createCategories( const QVariantList &values, const QgsSymbol *symbol, QgsVectorLayer *layer = nullptr, const QString &fieldName = QString() );
453
463 static QString displayString( const QVariant &value, int precision = -1 );
464
465
466 protected:
467 QString mAttrName;
468 QgsCategoryList mCategories;
469 std::unique_ptr<QgsSymbol> mSourceSymbol;
470 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
471 std::unique_ptr<QgsExpression> mExpression;
472
473 std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
474
476 int mAttrNum = -1;
477
479 QHash<QString, QgsSymbol *> mSymbolHash;
480 bool mCounting = false;
481
482 void rebuildHash();
483
487 Q_DECL_DEPRECATED QgsSymbol *skipRender() SIP_DEPRECATED;
488
493 Q_DECL_DEPRECATED QgsSymbol *symbolForValue( const QVariant &value ) const SIP_DEPRECATED;
494
495 // TODO QGIS 4.0 - rename Python method to symbolForValue
496
510 QgsSymbol *symbolForValue( const QVariant &value, bool &foundMatchingSymbol SIP_OUT ) const SIP_PYNAME( symbolForValue2 );
511
512 private:
513#ifdef SIP_RUN
516#endif
517
519 QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
520
522 QgsLegendSymbolList baseLegendSymbolItems() const;
523
524};
525
526#endif // QGSCATEGORIZEDSYMBOLRENDERER_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:54
QFlags< FeatureRendererFlag > FeatureRendererFlags
Flags controlling behavior of vector feature renderers.
Definition qgis.h:802
A widget for configuring a QgsCategorizedSymbolRenderer.
A feature renderer which represents features using a list of renderer categories.
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.
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
Handles parsing and evaluation of expressions (formerly called "search strings").
Abstract base class for all 2D vector feature renderers.
QFlags< Capability > Capabilities
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
Container of fields for a vector layer.
Definition qgsfields.h:46
A container for the context for various read/write operations on 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
An interface for classes which can visit style entity (e.g.
A database of saved style entities, including symbols, color ramps, text formats and others.
Definition qgsstyle.h:88
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
Represents a vector layer which manages a vector based dataset.
#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:47
int precision