QGIS API Documentation 3.39.0-Master (3aed037ce22)
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 void swap( QgsRendererCategory &other );
157};
158
159typedef QList<QgsRendererCategory> QgsCategoryList;
160
166{
167 public:
168
177 QgsCategorizedSymbolRenderer( const QString &attrName = QString(), const QgsCategoryList &categories = QgsCategoryList() );
179
180 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
181 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
182 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
183 void stopRender( QgsRenderContext &context ) override;
184 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
185 bool filterNeedsGeometry() const override;
186 QString dump() const override;
187 QgsCategorizedSymbolRenderer *clone() const override SIP_FACTORY;
188 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
189 QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels | Filter; }
190 QString filter( const QgsFields &fields = QgsFields() ) override;
191 QgsSymbolList symbols( QgsRenderContext &context ) const override;
192 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
193
200 void updateSymbols( QgsSymbol *sym );
201
205 const QgsCategoryList &categories() const { return mCategories; }
206
210 int categoryIndexForValue( const QVariant &val );
211
215 int categoryIndexForLabel( const QString &val );
216
226 bool updateCategoryValue( int catIndex, const QVariant &value );
227
237 bool updateCategorySymbol( int catIndex, QgsSymbol *symbol SIP_TRANSFER );
238
249 bool updateCategoryLabel( int catIndex, const QString &label );
250
262 bool updateCategoryRenderState( int catIndex, bool render );
263
269 void addCategory( const QgsRendererCategory &category );
270
276 bool deleteCategory( int catIndex );
277
283 void deleteAllCategories();
284
288 void moveCategory( int from, int to );
289
295 void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
296
302 void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
303
311 QString classAttribute() const { return mAttrName; }
312
320 void setClassAttribute( const QString &attr ) { mAttrName = attr; }
321
325 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
326
327 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
328 QgsLegendSymbolList legendSymbolItems() const override;
329 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
330 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
331
338 QgsSymbol *sourceSymbol();
339
347 const QgsSymbol *sourceSymbol() const SIP_SKIP;
348
356 void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
357
363 QgsColorRamp *sourceColorRamp();
364
371 const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
372
379 void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
380
385 void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
386
387 bool legendSymbolItemsCheckable() const override;
388 bool legendSymbolItemChecked( const QString &key ) override;
389 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
390 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
391 QString legendClassificationAttribute() const override { return classAttribute(); }
392
400 static QgsCategorizedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer, QgsVectorLayer *layer = nullptr ) SIP_FACTORY;
401
411 void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
412
417 QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
418
436 int matchToSymbols( QgsStyle *style, Qgis::SymbolType type,
437 QVariantList &unmatchedCategories SIP_OUT, QStringList &unmatchedSymbols SIP_OUT, bool caseSensitive = true, bool useTolerantMatch = false );
438
439
450 static QgsCategoryList createCategories( const QVariantList &values, const QgsSymbol *symbol, QgsVectorLayer *layer = nullptr, const QString &fieldName = QString() );
451
461 static QString displayString( const QVariant &value, int precision = -1 );
462
463
464 protected:
465 QString mAttrName;
466 QgsCategoryList mCategories;
467 std::unique_ptr<QgsSymbol> mSourceSymbol;
468 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
469 std::unique_ptr<QgsExpression> mExpression;
470
471 std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
472
474 int mAttrNum = -1;
475
477 QHash<QString, QgsSymbol *> mSymbolHash;
478 bool mCounting = false;
479
480 void rebuildHash();
481
485 Q_DECL_DEPRECATED QgsSymbol *skipRender() SIP_DEPRECATED;
486
491 Q_DECL_DEPRECATED QgsSymbol *symbolForValue( const QVariant &value ) const SIP_DEPRECATED;
492
493 // TODO QGIS 4.0 - rename Python method to symbolForValue
494
508 QgsSymbol *symbolForValue( const QVariant &value, bool &foundMatchingSymbol SIP_OUT ) const SIP_PYNAME( symbolForValue2 );
509
510 private:
511#ifdef SIP_RUN
514#endif
515
517 QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
518
520 QgsLegendSymbolList baseLegendSymbolItems() const;
521
522};
523
524#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.
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
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:94
Represents a vector layer which manages a vector based data sets.
#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:47
int precision