QGIS API Documentation 3.41.0-Master (45a0abf3bec)
Loading...
Searching...
No Matches
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:
150 QVariant mValue;
151 std::unique_ptr<QgsSymbol> mSymbol;
152 QString mLabel;
153 bool mRender = true;
154 QString mUuid;
155};
156
157typedef QList<QgsRendererCategory> QgsCategoryList;
158
164{
165 public:
166
175 QgsCategorizedSymbolRenderer( const QString &attrName = QString(), const QgsCategoryList &categories = QgsCategoryList() );
177
178 Qgis::FeatureRendererFlags flags() const override;
179 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
180 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
181 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
182 void stopRender( QgsRenderContext &context ) override;
183 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
184 bool filterNeedsGeometry() const override;
185 QString dump() const override;
186 QgsCategorizedSymbolRenderer *clone() const override SIP_FACTORY;
187 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
188 QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels | Filter; }
189 QString filter( const QgsFields &fields = QgsFields() ) override;
190 QgsSymbolList symbols( QgsRenderContext &context ) const override;
191 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
192
199 void updateSymbols( QgsSymbol *sym );
200
204 const QgsCategoryList &categories() const { return mCategories; }
205
209 int categoryIndexForValue( const QVariant &val );
210
214 int categoryIndexForLabel( const QString &val );
215
225 bool updateCategoryValue( int catIndex, const QVariant &value );
226
236 bool updateCategorySymbol( int catIndex, QgsSymbol *symbol SIP_TRANSFER );
237
248 bool updateCategoryLabel( int catIndex, const QString &label );
249
261 bool updateCategoryRenderState( int catIndex, bool render );
262
268 void addCategory( const QgsRendererCategory &category );
269
275 bool deleteCategory( int catIndex );
276
282 void deleteAllCategories();
283
287 void moveCategory( int from, int to );
288
294 void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
295
301 void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
302
310 QString classAttribute() const { return mAttrName; }
311
319 void setClassAttribute( const QString &attr ) { mAttrName = attr; }
320
324 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
325
326 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
327 QgsLegendSymbolList legendSymbolItems() const override;
328 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
329 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
330
337 QgsSymbol *sourceSymbol();
338
346 const QgsSymbol *sourceSymbol() const SIP_SKIP;
347
355 void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
356
362 QgsColorRamp *sourceColorRamp();
363
370 const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
371
378 void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
379
384 void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
385
386 bool legendSymbolItemsCheckable() const override;
387 bool legendSymbolItemChecked( const QString &key ) override;
388 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
389 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
390 QString legendClassificationAttribute() const override { return classAttribute(); }
391
399 static QgsCategorizedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
400
410 void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
411
416 QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
417
435 int matchToSymbols( QgsStyle *style, Qgis::SymbolType type,
436 QVariantList &unmatchedCategories SIP_OUT, QStringList &unmatchedSymbols SIP_OUT, bool caseSensitive = true, bool useTolerantMatch = false );
437
438
449 static QgsCategoryList createCategories( const QVariantList &values, const QgsSymbol *symbol, QgsVectorLayer *layer = nullptr, const QString &fieldName = QString() );
450
460 static QString displayString( const QVariant &value, int precision = -1 );
461
462
463 protected:
464 QString mAttrName;
465 QgsCategoryList mCategories;
466 std::unique_ptr<QgsSymbol> mSourceSymbol;
467 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
468 std::unique_ptr<QgsExpression> mExpression;
469
470 std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
471
473 int mAttrNum = -1;
474
476 QHash<QString, QgsSymbol *> mSymbolHash;
477 bool mCounting = false;
478
479 void rebuildHash();
480
484 Q_DECL_DEPRECATED QgsSymbol *skipRender() SIP_DEPRECATED;
485
490 Q_DECL_DEPRECATED QgsSymbol *symbolForValue( const QVariant &value ) const SIP_DEPRECATED;
491
492 // TODO QGIS 4.0 - rename Python method to symbolForValue
493
507 QgsSymbol *symbolForValue( const QVariant &value, bool &foundMatchingSymbol SIP_OUT ) const SIP_PYNAME( symbolForValue2 );
508
509 private:
510#ifdef SIP_RUN
513#endif
514
516 QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
517
519 QgsLegendSymbolList baseLegendSymbolItems() const;
520
521};
522
523#endif // QGSCATEGORIZEDSYMBOLRENDERER_H
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
QFlags< FeatureRendererFlag > FeatureRendererFlags
Flags controlling behavior of vector feature renderers.
Definition qgis.h:772
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.
Class for 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
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
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
Represents a vector layer which manages a vector based data sets.
#define str(x)
Definition qgis.cpp:39
#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