@@ -290,18 +290,85 @@ QImage QgsDataDefinedSizeLegend::collapsedLegendImage( QgsRenderContext &context
290
290
return img;
291
291
}
292
292
293
- QgsDataDefinedSizeLegend *QgsDataDefinedSizeLegend::readTypeAndAlignmentFromXml ( const QDomElement &elem )
293
+ QgsDataDefinedSizeLegend *QgsDataDefinedSizeLegend::readXml ( const QDomElement &elem, const QgsReadWriteContext &context )
294
294
{
295
295
if ( elem.isNull () )
296
296
return nullptr ;
297
297
QgsDataDefinedSizeLegend *ddsLegend = new QgsDataDefinedSizeLegend;
298
298
ddsLegend->setLegendType ( elem.attribute ( " type" ) == " collapsed" ? LegendCollapsed : LegendSeparated );
299
299
ddsLegend->setVerticalAlignment ( elem.attribute ( " valign" ) == " center" ? AlignCenter : AlignBottom );
300
+ ddsLegend->setTitle ( elem.attribute ( " title" ) );
301
+
302
+ QDomElement elemSymbol = elem.firstChildElement ( " symbol" );
303
+ if ( !elemSymbol.isNull () )
304
+ {
305
+ ddsLegend->setSymbol ( QgsSymbolLayerUtils::loadSymbol<QgsMarkerSymbol>( elemSymbol, context ) );
306
+ }
307
+
308
+ QDomElement elemTextStyle = elem.firstChildElement ( " text-style" );
309
+ if ( !elemTextStyle.isNull () )
310
+ {
311
+ QDomElement elemFont = elemTextStyle.firstChildElement ( " font" );
312
+ if ( !elemFont.isNull () )
313
+ {
314
+ ddsLegend->setFont ( QFont ( elemFont.attribute ( " family" ), elemFont.attribute ( " size" ).toInt (),
315
+ elemFont.attribute ( " weight" ).toInt (), elemFont.attribute ( " italic" ).toInt () ) );
316
+ }
317
+ ddsLegend->setTextColor ( QgsSymbolLayerUtils::decodeColor ( elemTextStyle.attribute ( " color" ) ) );
318
+ ddsLegend->setTextAlignment ( static_cast <Qt::AlignmentFlag>( elemTextStyle.attribute ( " align" ).toInt () ) );
319
+ }
320
+
321
+ QDomElement elemClasses = elem.firstChildElement ( " classes" );
322
+ if ( !elemClasses.isNull () )
323
+ {
324
+ QList<SizeClass> classes;
325
+ QDomElement elemClass = elemClasses.firstChildElement ( " class" );
326
+ while ( !elemClass.isNull () )
327
+ {
328
+ classes << SizeClass ( elemClass.attribute ( " size" ).toDouble (), elemClass.attribute ( " label" ) );
329
+ elemClass = elemClass.nextSiblingElement ();
330
+ }
331
+ ddsLegend->setClasses ( classes );
332
+ }
333
+
300
334
return ddsLegend;
301
335
}
302
336
303
- void QgsDataDefinedSizeLegend::writeTypeAndAlignmentToXml ( const QgsDataDefinedSizeLegend &ddsLegend, QDomElement &elem )
337
+ void QgsDataDefinedSizeLegend::writeXml ( QDomElement &elem, const QgsReadWriteContext &context ) const
304
338
{
305
- elem.setAttribute ( " type" , ddsLegend.legendType () == LegendCollapsed ? " collapsed" : " separated" );
306
- elem.setAttribute ( " valign" , ddsLegend.verticalAlignment () == AlignCenter ? " center" : " bottom" );
339
+ QDomDocument doc = elem.ownerDocument ();
340
+
341
+ elem.setAttribute ( " type" , mType == LegendCollapsed ? " collapsed" : " separated" );
342
+ elem.setAttribute ( " valign" , mVAlign == AlignCenter ? " center" : " bottom" );
343
+ elem.setAttribute ( " title" , mTitleLabel );
344
+
345
+ if ( mSymbol )
346
+ {
347
+ QgsSymbolLayerUtils::saveSymbol ( " source" , mSymbol .get (), doc, context );
348
+ }
349
+
350
+ QDomElement elemFont = doc.createElement ( " font" );
351
+ elemFont.setAttribute ( " family" , mFont .family () );
352
+ elemFont.setAttribute ( " size" , mFont .pointSize () );
353
+ elemFont.setAttribute ( " weight" , mFont .weight () );
354
+ elemFont.setAttribute ( " italic" , mFont .italic () );
355
+
356
+ QDomElement elemTextStyle = doc.createElement ( " text-style" );
357
+ elemTextStyle.setAttribute ( " color" , QgsSymbolLayerUtils::encodeColor ( mTextColor ) );
358
+ elemTextStyle.setAttribute ( " align" , static_cast <int >( mTextAlignment ) );
359
+ elemTextStyle.appendChild ( elemFont );
360
+ elem.appendChild ( elemTextStyle );
361
+
362
+ if ( !mSizeClasses .isEmpty () )
363
+ {
364
+ QDomElement elemClasses = doc.createElement ( " classes" );
365
+ Q_FOREACH ( const SizeClass &sc, mSizeClasses )
366
+ {
367
+ QDomElement elemClass = doc.createElement ( " class" );
368
+ elemClass.setAttribute ( " size" , sc.size );
369
+ elemClass.setAttribute ( " label" , sc.label );
370
+ elemClasses.appendChild ( elemClass );
371
+ }
372
+ elem.appendChild ( elemClasses );
373
+ }
307
374
}
0 commit comments