34 if ( styles == mRowStyles )
43 if ( mFieldStyles.value( fieldName ) == styles )
46 mFieldStyles.insert( fieldName, styles );
52 return mFieldStyles.value( fieldName );
57 QDomElement stylesel = doc.createElement( QStringLiteral(
"conditionalstyles" ) );
58 QDomElement rowel = doc.createElement( QStringLiteral(
"rowstyles" ) );
59 const auto constMRowStyles = mRowStyles;
62 style.writeXml( rowel, doc, context );
65 stylesel.appendChild( rowel );
67 QDomElement fieldsel = doc.createElement( QStringLiteral(
"fieldstyles" ) );
68 QHash<QString, QgsConditionalStyles>::const_iterator it = mFieldStyles.constBegin();
69 for ( ; it != mFieldStyles.constEnd(); ++it )
71 QDomElement fieldel = doc.createElement( QStringLiteral(
"fieldstyle" ) );
72 fieldel.setAttribute( QStringLiteral(
"fieldname" ), it.key() );
74 const auto constStyles = styles;
77 style.writeXml( fieldel, doc, context );
79 fieldsel.appendChild( fieldel );
82 stylesel.appendChild( fieldsel );
84 node.appendChild( stylesel );
90 QDomElement condel = node.firstChildElement( QStringLiteral(
"conditionalstyles" ) );
93 QDomElement rowstylesel = condel.firstChildElement( QStringLiteral(
"rowstyles" ) );
94 QDomNodeList nodelist = rowstylesel.toElement().elementsByTagName( QStringLiteral(
"style" ) );
95 for (
int i = 0; i < nodelist.count(); i++ )
97 QDomElement styleElm = nodelist.at( i ).toElement();
99 style.
readXml( styleElm, context );
100 mRowStyles.append( style );
103 QDomElement fieldstylesel = condel.firstChildElement( QStringLiteral(
"fieldstyles" ) );
104 nodelist = fieldstylesel.toElement().elementsByTagName( QStringLiteral(
"fieldstyle" ) );
105 QList<QgsConditionalStyle> styles;
106 for (
int i = 0; i < nodelist.count(); i++ )
109 QDomElement fieldel = nodelist.at( i ).toElement();
110 QString fieldName = fieldel.attribute( QStringLiteral(
"fieldname" ) );
111 QDomNodeList stylenodelist = fieldel.toElement().elementsByTagName( QStringLiteral(
"style" ) );
112 styles.reserve( stylenodelist.count() );
113 for (
int j = 0; j < stylenodelist.count(); j++ )
115 QDomElement styleElm = stylenodelist.at( j ).toElement();
117 style.
readXml( styleElm, context );
118 styles.append( style );
120 mFieldStyles.insert( fieldName, styles );
135 : mValid( other.mValid )
136 , mName( other.mName )
137 , mRule( other.mRule )
138 , mFont( other.mFont )
139 , mBackColor( other.mBackColor )
140 , mTextColor( other.mTextColor )
141 , mIcon( other.mIcon )
144 mSymbol.reset( other.mSymbol->clone() );
149 mValid = other.mValid;
152 mBackColor = other.mBackColor;
153 mTextColor = other.mTextColor;
158 mSymbol.reset( other.mSymbol->clone() );
169 if (
name().isEmpty() )
172 return QStringLiteral(
"%1 \n%2" ).arg(
name(),
rule() );
180 mSymbol.reset( value->
clone() );
193 return exp.
evaluate( &context ).toBool();
198 QPixmap pixmap( size.isValid() ? size.width() : 64, size.isValid() ? size.height() : 32 );
199 pixmap.fill( Qt::transparent );
201 QPainter painter( &pixmap );
204 painter.setBrush( mBackColor );
206 QRect rect = QRect( 0, 0, pixmap.width(), pixmap.height() );
207 painter.setPen( Qt::NoPen );
208 painter.drawRect( rect );
209 const QPixmap symbolIcon =
icon();
210 if ( !symbolIcon.isNull() )
212 painter.drawPixmap( ( pixmap.width() / 3 - symbolIcon.width() ) / 2, ( pixmap.height() - symbolIcon.height() ) / 2, symbolIcon );
216 painter.setPen( mTextColor );
218 painter.setPen( Qt::black );
220 painter.setRenderHint( QPainter::Antialiasing );
221 painter.setRenderHint( QPainter::HighQualityAntialiasing );
222 painter.setFont(
font() );
223 rect = QRect( pixmap.width() / 3, 0, 2 * pixmap.width() / 3, pixmap.height() );
224 painter.drawText( rect, Qt::AlignCenter, QStringLiteral(
"abc\n123" ) );
241 QList<QgsConditionalStyle> matchingstyles;
242 const auto constStyles = styles;
245 if ( style.matches( value, context ) )
246 matchingstyles.append( style );
248 return matchingstyles;
253 const auto constStyles = styles;
256 if ( style.matches( value, context ) )
271 if ( s.backgroundColor().isValid() && s.backgroundColor().alpha() != 0 )
273 if ( s.textColor().isValid() && s.textColor().alpha() != 0 )
283 QDomElement stylesel = doc.createElement( QStringLiteral(
"style" ) );
284 stylesel.setAttribute( QStringLiteral(
"rule" ), mRule );
285 stylesel.setAttribute( QStringLiteral(
"name" ), mName );
286 if ( mBackColor.isValid() )
288 stylesel.setAttribute( QStringLiteral(
"background_color" ), mBackColor.name() );
289 stylesel.setAttribute( QStringLiteral(
"background_color_alpha" ), mBackColor.alpha() );
291 if ( mTextColor.isValid() )
293 stylesel.setAttribute( QStringLiteral(
"text_color" ), mTextColor.name() );
294 stylesel.setAttribute( QStringLiteral(
"text_color_alpha" ), mTextColor.alpha() );
297 stylesel.appendChild( labelFontElem );
301 stylesel.appendChild( symbolElm );
303 node.appendChild( stylesel );
309 return mValid == other.mValid
310 && mName == other.mName
311 && mRule == other.mRule
312 && mFont == other.mFont
313 && mBackColor == other.mBackColor
314 && mTextColor == other.mTextColor
315 &&
static_cast< bool >( mSymbol ) ==
static_cast< bool >( other.mSymbol )
321 return !( *
this == other );
326 QDomElement styleElm = node.toElement();
327 setRule( styleElm.attribute( QStringLiteral(
"rule" ) ) );
328 setName( styleElm.attribute( QStringLiteral(
"name" ) ) );
329 if ( styleElm.hasAttribute( QStringLiteral(
"background_color" ) ) )
331 QColor bColor = QColor( styleElm.attribute( QStringLiteral(
"background_color" ) ) );
332 if ( styleElm.hasAttribute( QStringLiteral(
"background_color_alpha" ) ) )
334 bColor.setAlpha( styleElm.attribute( QStringLiteral(
"background_color_alpha" ) ).toInt() );
336 if ( bColor.alpha() == 0 )
345 if ( styleElm.hasAttribute( QStringLiteral(
"text_color" ) ) )
347 QColor tColor = QColor( styleElm.attribute( QStringLiteral(
"text_color" ) ) );
348 if ( styleElm.hasAttribute( QStringLiteral(
"text_color_alpha" ) ) )
350 tColor.setAlpha( styleElm.attribute( QStringLiteral(
"text_color_alpha" ) ).toInt() );
352 if ( tColor.alpha() == 0 )
362 QDomElement symbolElm = styleElm.firstChildElement( QStringLiteral(
"symbol" ) );
363 if ( !symbolElm.isNull() )
365 QgsSymbol *
symbol = QgsSymbolLayerUtils::loadSymbol<QgsMarkerSymbol>( symbolElm, context );