File tree Expand file tree Collapse file tree 3 files changed +26
-11
lines changed Expand file tree Collapse file tree 3 files changed +26
-11
lines changed Original file line number Diff line number Diff line change @@ -332,6 +332,14 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
332
332
, showingShadowRects( false )
333
333
, expression( NULL )
334
334
{
335
+ *this = s;
336
+ }
337
+
338
+ QgsPalLayerSettings& QgsPalLayerSettings::operator =( const QgsPalLayerSettings & s )
339
+ {
340
+ if ( this == &s )
341
+ return *this ;
342
+
335
343
// copy only permanent stuff
336
344
337
345
enabled = s.enabled ;
@@ -461,12 +469,17 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
461
469
shadowBlendMode = s.shadowBlendMode ;
462
470
463
471
// data defined
464
- dataDefinedProperties = s.dataDefinedProperties ;
472
+ QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator it = s.dataDefinedProperties .constBegin ();
473
+ for ( ; it != s.dataDefinedProperties .constEnd (); ++it )
474
+ {
475
+ dataDefinedProperties.insert ( it.key (), it.value () ? new QgsDataDefined ( *it.value () ) : 0 );
476
+ }
465
477
mDataDefinedNames = s.mDataDefinedNames ;
466
478
467
479
// scale factors
468
480
vectorScaleFactor = s.vectorScaleFactor ;
469
481
rasterCompressFactor = s.rasterCompressFactor ;
482
+ return *this ;
470
483
}
471
484
472
485
@@ -478,7 +491,13 @@ QgsPalLayerSettings::~QgsPalLayerSettings()
478
491
delete expression;
479
492
delete extentGeom;
480
493
481
- // clear pointers to QgsDataDefined objects
494
+ // delete all QgsDataDefined objects (which also deletes their QgsExpression object)
495
+ QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::iterator it = dataDefinedProperties.begin ();
496
+ for ( ; it != dataDefinedProperties.constEnd (); ++it )
497
+ {
498
+ delete ( it.value () );
499
+ it.value () = 0 ;
500
+ }
482
501
dataDefinedProperties.clear ();
483
502
}
484
503
Original file line number Diff line number Diff line change @@ -67,6 +67,9 @@ class CORE_EXPORT QgsPalLayerSettings
67
67
QgsPalLayerSettings ( const QgsPalLayerSettings& s );
68
68
~QgsPalLayerSettings ();
69
69
70
+ // ! copy operator - only copies the permanent members
71
+ QgsPalLayerSettings &operator =( const QgsPalLayerSettings & s );
72
+
70
73
// ! @note added in 2.4
71
74
static QgsPalLayerSettings fromLayer ( QgsVectorLayer* layer );
72
75
@@ -534,6 +537,8 @@ class CORE_EXPORT QgsPalLayerSettings
534
537
bool dataDefinedUseExpression ( QgsPalLayerSettings::DataDefinedProperties p ) const ;
535
538
536
539
/* * Map of current data defined properties
540
+ *
541
+ * Pointers to QgsDataDefined should never be null, the pointers are owned by this class
537
542
*/
538
543
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* > dataDefinedProperties;
539
544
Original file line number Diff line number Diff line change @@ -102,15 +102,6 @@ void QgsVectorLayerLabelProvider::init()
102
102
103
103
QgsVectorLayerLabelProvider::~QgsVectorLayerLabelProvider ()
104
104
{
105
- // delete all QgsDataDefined objects (which also deletes their QgsExpression object)
106
- QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::iterator it = mSettings .dataDefinedProperties .begin ();
107
- for ( ; it != mSettings .dataDefinedProperties .constEnd (); ++it )
108
- {
109
- delete ( it.value () );
110
- it.value () = 0 ;
111
- }
112
- mSettings .dataDefinedProperties .clear ();
113
-
114
105
qDeleteAll ( mLabels );
115
106
116
107
if ( mOwnsSource )
You can’t perform that action at this time.
0 commit comments