42 #include <QDomDocument>
43 #include <QDomElement>
45 #include <QRegularExpression>
56 : mValue( cat.mValue )
57 , mSymbol( cat.mSymbol ? cat.mSymbol->clone() : nullptr )
58 , mLabel( cat.mLabel )
59 , mRender( cat.mRender )
126 if ( !
mSymbol.get() || props.value( QStringLiteral(
"attribute" ), QString() ).toString().isEmpty() )
129 QString attrName = props[ QStringLiteral(
"attribute" )].toString();
131 QDomElement ruleElem = doc.createElement( QStringLiteral(
"se:Rule" ) );
132 element.appendChild( ruleElem );
134 QDomElement nameElem = doc.createElement( QStringLiteral(
"se:Name" ) );
135 nameElem.appendChild( doc.createTextNode(
mLabel ) );
136 ruleElem.appendChild( nameElem );
138 QDomElement descrElem = doc.createElement( QStringLiteral(
"se:Description" ) );
139 QDomElement titleElem = doc.createElement( QStringLiteral(
"se:Title" ) );
140 QString descrStr = QStringLiteral(
"%1 is '%2'" ).arg( attrName,
mValue.toString() );
141 titleElem.appendChild( doc.createTextNode( !
mLabel.isEmpty() ?
mLabel : descrStr ) );
142 descrElem.appendChild( titleElem );
143 ruleElem.appendChild( descrElem );
149 filterFunc = QStringLiteral(
"%1 = '%2' or %1 is null" )
150 .arg( attrName.replace(
'\"', QLatin1String(
"\"\"" ) ),
151 mValue.toString().replace(
'\'', QLatin1String(
"''" ) ) );
155 filterFunc = QStringLiteral(
"%1 = '%2'" )
156 .arg( attrName.replace(
'\"', QLatin1String(
"\"\"" ) ),
157 mValue.toString().replace(
'\'', QLatin1String(
"''" ) ) );
165 mSymbol->toSld( doc, ruleElem, props );
172 , mAttrName( attrName )
181 QgsDebugMsg( QStringLiteral(
"invalid symbol in a category! ignoring..." ) );
195 const QVariant val = cat.value();
196 if ( val.type() == QVariant::List )
198 const QVariantList list = val.toList();
199 for (
const QVariant &v : list )
201 mSymbolHash.insert( v.toString(), ( cat.renderState() ||
mCounting ) ? cat.symbol() :
nullptr );
206 mSymbolHash.insert( val.toString(), ( cat.renderState() ||
mCounting ) ? cat.symbol() :
nullptr );
224 foundMatchingSymbol =
false;
227 QHash<QString, QgsSymbol *>::const_iterator it =
mSymbolHash.constFind( value.isNull() ? QString() : value.toString() );
232 QgsDebugMsg( QStringLiteral(
"there are no hashed symbols!!!" ) );
241 foundMatchingSymbol =
true;
271 QVariant value = valueForFeature( feature, context );
273 bool foundCategory =
false;
277 if ( !foundCategory )
315 if ( catIndex < 0 || catIndex >=
mCategories.size() )
323 if ( catIndex < 0 || catIndex >=
mCategories.size() )
331 if ( catIndex < 0 || catIndex >=
mCategories.size() )
339 if ( catIndex < 0 || catIndex >=
mCategories.size() )
349 QgsDebugMsg( QStringLiteral(
"invalid symbol in a category! ignoring..." ) );
358 if ( catIndex < 0 || catIndex >=
mCategories.size() )
387 if ( order == Qt::AscendingOrder )
399 return QString::localeAwareCompare( c1.
label(), c2.
label() ) < 0;
409 if ( order == Qt::AscendingOrder )
438 cat.symbol()->startRender( context, fields );
448 cat.symbol()->stopRender( context );
455 QSet<QString> attributes;
467 QgsCategoryList::const_iterator catIt =
mCategories.constBegin();
494 QString s = QStringLiteral(
"CATEGORIZED: idx %1\n" ).arg(
mAttrName );
517 QVariantMap newProps = props;
518 newProps[ QStringLiteral(
"attribute" )] =
mAttrName;
523 it->toSld( doc, element, newProps );
530 bool isExpression = ( attrNum == -1 );
532 bool hasDefault =
false;
533 bool defaultActive =
false;
534 bool allActive =
true;
535 bool noneActive =
true;
539 QString activeValues;
540 QString inactiveValues;
544 if ( cat.value() ==
"" || cat.value().isNull() )
547 defaultActive = cat.renderState();
550 noneActive = noneActive && !cat.renderState();
551 allActive = allActive && cat.renderState();
553 QVariant::Type valType = isExpression ? cat.value().type() : fields.
at( attrNum ).
type();
554 const bool isList = cat.value().type() == QVariant::List;
557 if ( !cat.renderState() )
559 if ( cat.value() !=
"" )
563 const QVariantList list = cat.value().toList();
564 for (
const QVariant &v : list )
566 if ( !inactiveValues.isEmpty() )
567 inactiveValues.append(
',' );
574 if ( !inactiveValues.isEmpty() )
575 inactiveValues.append(
',' );
577 inactiveValues.append( value );
583 if ( cat.value() !=
"" )
587 const QVariantList list = cat.value().toList();
588 for (
const QVariant &v : list )
590 if ( !activeValues.isEmpty() )
591 activeValues.append(
',' );
598 if ( !activeValues.isEmpty() )
599 activeValues.append(
',' );
601 activeValues.append( value );
607 QString attr = isExpression ?
mAttrName : QStringLiteral(
"\"%1\"" ).arg(
mAttrName );
609 if ( allActive && hasDefault )
613 else if ( noneActive )
615 return QStringLiteral(
"FALSE" );
617 else if ( defaultActive )
619 return QStringLiteral(
"(%1) NOT IN (%2) OR (%1) IS NULL" ).arg( attr, inactiveValues );
623 return QStringLiteral(
"(%1) IN (%2)" ).arg( attr, activeValues );
634 lst.append( cat.symbol() );
660 QDomElement symbolsElem = element.firstChildElement( QStringLiteral(
"symbols" ) );
661 if ( symbolsElem.isNull() )
664 QDomElement catsElem = element.firstChildElement( QStringLiteral(
"categories" ) );
665 if ( catsElem.isNull() )
671 QDomElement catElem = catsElem.firstChildElement();
672 while ( !catElem.isNull() )
674 if ( catElem.tagName() == QLatin1String(
"category" ) )
677 if ( catElem.hasAttribute( QStringLiteral(
"value" ) ) )
679 value = QVariant( catElem.attribute( QStringLiteral(
"value" ) ) );
684 QDomElement valElem = catElem.firstChildElement();
685 while ( !valElem.isNull() )
687 if ( valElem.tagName() == QLatin1String(
"val" ) )
689 values << QVariant( valElem.attribute( QStringLiteral(
"value" ) ) );
691 valElem = valElem.nextSiblingElement();
693 if ( !values.isEmpty() )
696 QString symbolName = catElem.attribute( QStringLiteral(
"symbol" ) );
697 QString label = catElem.attribute( QStringLiteral(
"label" ) );
698 bool render = catElem.attribute( QStringLiteral(
"render" ) ) != QLatin1String(
"false" );
699 if ( symbolMap.contains( symbolName ) )
701 QgsSymbol *symbol = symbolMap.take( symbolName );
705 catElem = catElem.nextSiblingElement();
708 QString attrName = element.attribute( QStringLiteral(
"attr" ) );
716 QDomElement sourceSymbolElem = element.firstChildElement( QStringLiteral(
"source-symbol" ) );
717 if ( !sourceSymbolElem.isNull() )
720 if ( sourceSymbolMap.contains( QStringLiteral(
"0" ) ) )
728 QDomElement sourceColorRampElem = element.firstChildElement( QStringLiteral(
"colorramp" ) );
729 if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( QStringLiteral(
"name" ) ) == QLatin1String(
"[source]" ) )
734 QDomElement rotationElem = element.firstChildElement( QStringLiteral(
"rotation" ) );
735 if ( !rotationElem.isNull() && !rotationElem.attribute( QStringLiteral(
"field" ) ).isEmpty() )
747 QDomElement sizeScaleElem = element.firstChildElement( QStringLiteral(
"sizescale" ) );
748 if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( QStringLiteral(
"field" ) ).isEmpty() )
754 sizeScaleElem.attribute( QStringLiteral(
"field" ) ) );
760 sizeScaleElem.attribute( QStringLiteral(
"field" ) ) );
764 QDomElement ddsLegendSizeElem = element.firstChildElement( QStringLiteral(
"data-defined-size-legend" ) );
765 if ( !ddsLegendSizeElem.isNull() )
778 rendererElem.setAttribute( QStringLiteral(
"type" ), QStringLiteral(
"categorizedSymbol" ) );
779 rendererElem.setAttribute( QStringLiteral(
"symbollevels" ), (
mUsingSymbolLevels ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
780 rendererElem.setAttribute( QStringLiteral(
"forceraster" ), (
mForceRaster ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
781 rendererElem.setAttribute( QStringLiteral(
"attr" ),
mAttrName );
788 QDomElement catsElem = doc.createElement( QStringLiteral(
"categories" ) );
789 QgsCategoryList::const_iterator it =
mCategories.constBegin();
793 QString symbolName = QString::number( i );
796 QDomElement catElem = doc.createElement( QStringLiteral(
"category" ) );
797 if ( cat.
value().type() == QVariant::List )
799 const QVariantList list = cat.
value().toList();
800 for (
const QVariant &v : list )
802 QDomElement valueElem = doc.createElement( QStringLiteral(
"val" ) );
803 valueElem.setAttribute(
"value", v.toString() );
804 catElem.appendChild( valueElem );
809 catElem.setAttribute( QStringLiteral(
"value" ), cat.
value().toString() );
811 catElem.setAttribute( QStringLiteral(
"symbol" ), symbolName );
812 catElem.setAttribute( QStringLiteral(
"label" ), cat.
label() );
813 catElem.setAttribute( QStringLiteral(
"render" ), cat.
renderState() ?
"true" :
"false" );
814 catsElem.appendChild( catElem );
817 rendererElem.appendChild( catsElem );
821 rendererElem.appendChild( symbolsElem );
829 sourceSymbols.insert( QStringLiteral(
"0" ),
mSourceSymbol.get() );
831 rendererElem.appendChild( sourceSymbolElem );
838 rendererElem.appendChild( colorRampElem );
841 QDomElement rotationElem = doc.createElement( QStringLiteral(
"rotation" ) );
842 rendererElem.appendChild( rotationElem );
844 QDomElement sizeScaleElem = doc.createElement( QStringLiteral(
"sizescale" ) );
845 rendererElem.appendChild( sizeScaleElem );
852 QDomElement
orderBy = doc.createElement( QStringLiteral(
"orderby" ) );
854 rendererElem.appendChild(
orderBy );
856 rendererElem.setAttribute( QStringLiteral(
"enableorderby" ), (
mOrderByEnabled ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
860 QDomElement ddsLegendElem = doc.createElement( QStringLiteral(
"data-defined-size-legend" ) );
862 rendererElem.appendChild( ddsLegendElem );
892 if ( sSize != ddSize )
895 return baseLegendSymbolItems();
912 lst += baseLegendSymbolItems();
917 return baseLegendSymbolItems();
922 QString value = valueForFeature( feature, context ).toString();
928 if ( cat.value().type() == QVariant::List )
930 const QVariantList list = cat.value().toList();
931 for (
const QVariant &v : list )
942 match = value == cat.value();
948 return QSet< QString >() << QString::number( i );
950 return QSet< QString >();
955 return QSet< QString >();
1004 double value = count / num;
1016 symbol->
setColor( cat.symbol()->color() );
1031 int index = key.toInt( &ok );
1032 if ( ok && index >= 0 && index <
mCategories.size() )
1041 int index = key.toInt( &ok );
1051 int index = key.toInt( &ok );
1058 std::unique_ptr< QgsCategorizedSymbolRenderer > r;
1059 if ( renderer->
type() == QLatin1String(
"categorizedSymbol" ) )
1063 else if ( renderer->
type() == QLatin1String(
"graduatedSymbol" ) )
1066 if ( graduatedSymbolRenderer )
1075 r->setClassAttribute( graduatedSymbolRenderer->
classAttribute() );
1078 else if ( renderer->
type() == QLatin1String(
"pointDisplacement" ) || renderer->
type() == QLatin1String(
"pointCluster" ) )
1081 if ( pointDistanceRenderer )
1084 else if ( renderer->
type() == QLatin1String(
"invertedPolygonRenderer" ) )
1087 if ( invertedPolygonRenderer )
1090 else if ( renderer->
type() == QLatin1String(
"embeddedSymbol" ) && layer )
1113 r = std::make_unique< QgsCategorizedSymbolRenderer >( QString(),
QgsCategoryList() );
1118 r->setSourceSymbol(
symbols.at( 0 )->clone() );
1122 r->setOrderBy( renderer->
orderBy() );
1145 const QSet< QString > allSymbolNames = qgis::listToSet( unmatchedSymbols );
1147 const QRegularExpression tolerantMatchRe( QStringLiteral(
"[^\\w\\d ]" ), QRegularExpression::UseUnicodePropertiesOption );
1149 for (
int catIdx = 0; catIdx <
mCategories.count(); ++catIdx )
1151 const QVariant value =
mCategories.at( catIdx ).value();
1152 const QString val = value.toString().trimmed();
1153 std::unique_ptr< QgsSymbol > symbol( style->
symbol( val ) );
1155 if ( symbol && symbol->type() ==
type )
1158 unmatchedSymbols.removeAll( val );
1163 if ( !caseSensitive || useTolerantMatch )
1165 QString testVal = val;
1166 if ( useTolerantMatch )
1167 testVal.replace( tolerantMatchRe, QString() );
1169 bool foundMatch =
false;
1170 for (
const QString &name : allSymbolNames )
1172 QString testName = name.trimmed();
1173 if ( useTolerantMatch )
1174 testName.replace( tolerantMatchRe, QString() );
1176 if ( testName == testVal || ( !caseSensitive && testName.trimmed().compare( testVal, Qt::CaseInsensitive ) == 0 ) )
1179 std::unique_ptr< QgsSymbol > symbol( style->
symbol( name ) );
1180 if ( symbol && symbol->type() ==
type )
1183 unmatchedSymbols.removeAll( name );
1194 unmatchedCategories << value;
1203 QVariantList vals = values;
1207 if ( layer && !attributeName.isNull() )
1210 for (
const QVariant &value : vals )
1213 if ( !value.isNull() )
1215 int fieldIdx = fields.
lookupField( attributeName );
1216 QString categoryName = value.toString();
1217 if ( fieldIdx != -1 )
1222 categoryName =
formatter->representValue( layer, fieldIdx, setup.
config(), QVariant(), value );
static QgsFieldFormatterRegistry * fieldFormatterRegistry()
Gets the registry of available field formatters.
void sortByValue(Qt::SortOrder order=Qt::AscendingOrder)
Sorts the existing categories by their value.
const QgsCategoryList & categories() const
Returns a list of all categories recognized by the renderer.
QString filter(const QgsFields &fields=QgsFields()) override
If a renderer does not require all the features this method may be overridden and return an expressio...
QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
To be overridden.
void updateSymbols(QgsSymbol *sym)
Update all the symbols but leave categories and colors.
bool updateCategoryRenderState(int catIndex, bool render)
Changes the render state for the category with the specified index.
void setSourceColorRamp(QgsColorRamp *ramp)
Sets the source color ramp.
void stopRender(QgsRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsSymbol * sourceSymbol()
Returns the renderer's source symbol, which is the base symbol used for the each categories' symbol b...
int matchToSymbols(QgsStyle *style, Qgis::SymbolType type, QVariantList &unmatchedCategories, QStringList &unmatchedSymbols, bool caseSensitive=true, bool useTolerantMatch=false)
Replaces category symbols with the symbols from a style that have a matching name and symbol type.
std::unique_ptr< QgsColorRamp > mSourceColorRamp
Q_DECL_DEPRECATED QgsSymbol * symbolForValue(const QVariant &value) const
Returns the matching symbol corresponding to an attribute value.
std::unique_ptr< QgsSymbol > mSourceSymbol
static QgsCategorizedSymbolRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer, QgsVectorLayer *layer=nullptr)
Creates a new QgsCategorizedSymbolRenderer from an existing renderer.
void updateColorRamp(QgsColorRamp *ramp)
Update the color ramp used and all symbols colors.
QgsDataDefinedSizeLegend * dataDefinedSizeLegend() const
Returns configuration of appearance of legend when using data-defined size for marker symbols.
static QgsCategoryList createCategories(const QVariantList &values, const QgsSymbol *symbol, QgsVectorLayer *layer=nullptr, const QString &fieldName=QString())
Create categories for a list of values.
QHash< QString, QgsSymbol * > mSymbolHash
hashtable for faster access to symbols
bool filterNeedsGeometry() const override
Returns true if this renderer requires the geometry to apply the filter.
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns a list of attributes required by this renderer.
void setSourceSymbol(QgsSymbol *sym)
Sets the source symbol for the renderer, which is the base symbol used for the each categories' symbo...
void startRender(QgsRenderContext &context, const QgsFields &fields) override
Must be called when a new render cycle is started.
QgsSymbolList symbols(QgsRenderContext &context) const override
Returns list of symbols used by the renderer.
int categoryIndexForValue(const QVariant &val)
Returns the index for the category with the specified value (or -1 if not found).
static QgsFeatureRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
Creates a categorized renderer from an XML element.
bool updateCategorySymbol(int catIndex, QgsSymbol *symbol)
Changes the symbol for the category with the specified index.
QgsCategoryList mCategories
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
void setLegendSymbolItem(const QString &key, QgsSymbol *symbol) override
Sets the symbol to be used for a legend symbol item.
std::unique_ptr< QgsExpression > mExpression
std::unique_ptr< QgsDataDefinedSizeLegend > mDataDefinedSizeLegend
bool legendSymbolItemChecked(const QString &key) override
items of symbology items in legend is checked
bool legendSymbolItemsCheckable() const override
items of symbology items in legend should be checkable
void addCategory(const QgsRendererCategory &category)
Adds a new category to the renderer.
QgsCategorizedSymbolRenderer(const QString &attrName=QString(), const QgsCategoryList &categories=QgsCategoryList())
Constructor for QgsCategorizedSymbolRenderer.
void sortByLabel(Qt::SortOrder order=Qt::AscendingOrder)
Sorts the existing categories by their label.
QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns symbol for feature.
int mAttrNum
attribute index (derived from attribute name in startRender)
QgsLegendSymbolList legendSymbolItems() const override
Returns a list of symbology items for the legend.
void moveCategory(int from, int to)
Moves an existing category at index position from to index position to.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
store renderer info to XML element
bool deleteCategory(int catIndex)
Deletes the category with the specified index from the renderer.
Q_DECL_DEPRECATED QgsSymbol * skipRender()
void checkLegendSymbolItem(const QString &key, bool state=true) override
item in symbology was checked
QString dump() const override
Returns debug information about this renderer.
QSet< QString > legendKeysForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns legend keys matching a specified feature.
QgsColorRamp * sourceColorRamp()
Returns the source color ramp, from which each categories' color is derived.
bool updateCategoryValue(int catIndex, const QVariant &value)
Changes the value for the category with the specified index.
void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const override
used from subclasses to create SLD Rule elements following SLD v1.1 specs
QgsCategorizedSymbolRenderer * clone() const override
Create a deep copy of this renderer.
void deleteAllCategories()
Deletes all existing categories from the renderer.
void setDataDefinedSizeLegend(QgsDataDefinedSizeLegend *settings)
Configures appearance of legend when renderer is configured to use data-defined size for marker symbo...
bool updateCategoryLabel(int catIndex, const QString &label)
Changes the label for the category with the specified index.
~QgsCategorizedSymbolRenderer() override
int categoryIndexForLabel(const QString &val)
Returns the index of the category with the specified label (or -1 if the label was not found,...
Abstract base class for color ramps.
virtual QgsColorRamp * clone() const =0
Creates a clone of the color ramp.
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
static QgsDataDefinedSizeLegend * readXml(const QDomElement &elem, const QgsReadWriteContext &context) SIP_FACTORY
Creates instance from given element and returns it (caller takes ownership). Returns nullptr on error...
void updateFromSymbolAndProperty(const QgsMarkerSymbol *symbol, const QgsProperty &ddSize)
Updates the list of classes, source symbol and title label from given symbol and property.
QgsLegendSymbolList legendSymbolList() const
Generates legend symbol items according to the configuration.
A vector feature renderer which uses embedded feature symbology to render per-feature symbols.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
Class for parsing and evaluation of expressions (formerly called "search strings").
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
static QString quotedValue(const QVariant &value)
Returns a string representation of a literal value, including appropriate quotations where required.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
QSet< QString > referencedColumns() const
Gets list of columns referenced by the expression.
bool needsGeometry() const
Returns true if the expression uses feature geometry for some computation.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsPaintEffect * mPaintEffect
void copyRendererData(QgsFeatureRenderer *destRenderer) const
Clones generic renderer data to another renderer.
bool orderByEnabled() const
Returns whether custom ordering will be applied before features are processed by this renderer.
static void convertSymbolRotation(QgsSymbol *symbol, const QString &field)
QgsFeatureRequest::OrderBy mOrderBy
virtual const QgsFeatureRenderer * embeddedRenderer() const
Returns the current embedded renderer (subrenderer) for this feature renderer.
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
static void convertSymbolSizeScale(QgsSymbol *symbol, Qgis::ScaleMethod method, const QString &field)
QgsFeatureRequest::OrderBy orderBy() const
Gets the order in which features shall be processed by this renderer.
void CORE_EXPORT save(QDomElement &elem) const
Serialize to XML.
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
@ EmbeddedSymbols
Retrieve any embedded feature symbology (since QGIS 3.20)
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
const QgsSymbol * embeddedSymbol() const
Returns the feature's embedded symbology, or nullptr if the feature has no embedded symbol.
Encapsulate a field in an attribute table or data source.
QgsEditorWidgetSetup editorWidgetSetup() const
Gets the editor widget setup for the field.
Container of fields for a vector layer.
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
QgsSymbol * sourceSymbol()
Returns the renderer's source symbol, which is the base symbol used for the each classes' symbol befo...
QgsColorRamp * sourceColorRamp()
Returns the source color ramp, from which each classes' color is derived.
QString classAttribute() const
void setSourceSymbol(QgsSymbol *sym)
Sets the source symbol for the renderer, which is the base symbol used for the each classes' symbol b...
QgsInvertedPolygonRenderer is a polygon-only feature renderer used to display features inverted,...
The class stores information about one class/rule of a vector layer renderer in a unified way that ca...
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsProperty dataDefinedSize() const
Returns data defined size for whole symbol (including all symbol layers).
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
virtual bool saveProperties(QDomDocument &doc, QDomElement &element) const
Saves the current state of the effect to a DOM element.
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
A store for object properties.
bool isActive() const
Returns whether the property is currently active.
Totally random color ramp.
virtual void setTotalColorCount(int colorCount)
Sets the desired total number of unique colors for the resultant ramp.
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.
double rendererScale() const
Returns the renderer map scale.
QgsExpressionContext & expressionContext()
Gets the expression context.
Represents an individual category (class) from a QgsCategorizedSymbolRenderer.
void setRenderState(bool render)
Sets whether the category is currently enabled and should be rendered.
void swap(QgsRendererCategory &other)
std::unique_ptr< QgsSymbol > mSymbol
QgsSymbol * symbol() const
Returns the symbol which will be used to render this category.
void setSymbol(QgsSymbol *s)
Sets the symbol which will be used to render this category.
QgsRendererCategory()=default
Constructor for QgsRendererCategory.
bool renderState() const
Returns true if the category is currently enabled and should be rendered.
QString dump() const
Returns a string representing the categories settings, used for debugging purposes only.
void setLabel(const QString &label)
Sets the label for this category, which is used to represent the category within legends and the laye...
void toSld(QDomDocument &doc, QDomElement &element, QVariantMap props) const
Converts the category to a matching SLD rule, within the specified DOM document and element.
void setValue(const QVariant &value)
Sets the value corresponding to this category.
QVariant value() const
Returns the value corresponding to this category.
QString label() const
Returns the label for this category, which is used to represent the category within legends and the l...
QgsRendererCategory & operator=(QgsRendererCategory cat)
A color ramp entity for QgsStyle databases.
An interface for classes which can visit style entity (e.g.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
A symbol entity for QgsStyle databases.
QgsSymbol * symbol(const QString &name)
Returns a NEW copy of symbol.
QStringList symbolNames() const
Returns a list of names of symbols.
static void sortVariantList(QList< QVariant > &list, Qt::SortOrder order)
Sorts the passed list in requested order.
static void applyScaleDependency(QDomDocument &doc, QDomElement &ruleElem, QVariantMap &props)
Checks if the properties contain scaleMinDenom and scaleMaxDenom, if available, they are added into t...
static bool createFunctionElement(QDomDocument &doc, QDomElement &element, const QString &function)
static QgsColorRamp * loadColorRamp(QDomElement &element)
Creates a color ramp from the settings encoded in an XML element.
static Qgis::ScaleMethod decodeScaleMethod(const QString &str)
Decodes a symbol scale method from a string.
static QDomElement saveColorRamp(const QString &name, QgsColorRamp *ramp, QDomDocument &doc)
Encodes a color ramp's settings to an XML element.
static void clearSymbolMap(QgsSymbolMap &symbols)
static QgsSymbolMap loadSymbols(QDomElement &element, const QgsReadWriteContext &context)
Reads a collection of symbols from XML and returns them in a map. Caller is responsible for deleting ...
static QDomElement saveSymbols(QgsSymbolMap &symbols, const QString &tagName, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a collection of symbols to XML with specified tagName for the top-level element.
Abstract base class for all rendered symbols.
QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns a list of attributes required to render this feature.
void setColor(const QColor &color)
Sets the color for the symbol.
virtual QgsSymbol * clone() const =0
Returns a deep copy of this symbol.
Represents a vector layer which manages a vector based data sets.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
bool qgsVariantLessThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is less than the second.
bool qgsVariantGreaterThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is greater than the second.
bool labelGreaterThan(const QgsRendererCategory &c1, const QgsRendererCategory &c2)
bool valueLessThan(const QgsRendererCategory &c1, const QgsRendererCategory &c2)
bool valueGreaterThan(const QgsRendererCategory &c1, const QgsRendererCategory &c2)
bool labelLessThan(const QgsRendererCategory &c1, const QgsRendererCategory &c2)
QList< QgsRendererCategory > QgsCategoryList
QList< QgsLegendSymbolItem > QgsLegendSymbolList
#define QgsDebugMsgLevel(str, level)
#define RENDERER_TAG_NAME
QMap< QString, QgsSymbol * > QgsSymbolMap
QList< QgsSymbol * > QgsSymbolList
Contains information relating to the style entity currently being visited.