QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
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 
24 class QgsVectorLayer;
25 class QgsStyle;
27 class QgsSymbol;
28 class QgsExpression;
29 class QgsColorRamp;
30 
35 class CORE_EXPORT QgsRendererCategory
36 {
37  public:
38 
42  QgsRendererCategory() = default;
43 
57  QgsRendererCategory( const QVariant &value, QgsSymbol *symbol SIP_TRANSFER, const QString &label, bool render = true, const QString &uuid = QString() );
58 
63  QgsRendererCategory &operator=( QgsRendererCategory cat );
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 
165 typedef 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