@@ -51,7 +51,7 @@ void RubberbandShape::setModel( RubberbandModel *model )
5151
5252 mRubberbandModel = model;
5353
54- if ( mRubberbandModel )
54+ if ( mRubberbandModel && ! mFreeze )
5555 {
5656 connect ( mRubberbandModel , &RubberbandModel::vertexChanged, this , &RubberbandShape::markDirty );
5757 connect ( mRubberbandModel , &RubberbandModel::verticesRemoved, this , &RubberbandShape::markDirty );
@@ -85,7 +85,7 @@ void RubberbandShape::setVertexModel( VertexModel *vertexModel )
8585
8686 mVertexModel = vertexModel;
8787
88- if ( mVertexModel )
88+ if ( mVertexModel && ! mFreeze )
8989 {
9090 connect ( mVertexModel , &VertexModel::dataChanged, this , &RubberbandShape::markDirty );
9191 connect ( mVertexModel , &VertexModel::vertexCountChanged, this , &RubberbandShape::markDirty );
@@ -97,6 +97,62 @@ void RubberbandShape::setVertexModel( VertexModel *vertexModel )
9797 emit vertexModelChanged ();
9898}
9999
100+ bool RubberbandShape::freeze () const
101+ {
102+ return mFreeze ;
103+ }
104+
105+ void RubberbandShape::setFreeze ( bool freeze )
106+ {
107+ if ( mFreeze == freeze )
108+ return ;
109+
110+ mFreeze = freeze;
111+ emit freezeChanged ();
112+
113+ if ( mFreeze )
114+ {
115+ if ( mVertexModel )
116+ {
117+ disconnect ( mVertexModel , &VertexModel::dataChanged, this , &RubberbandShape::markDirty );
118+ disconnect ( mVertexModel , &VertexModel::vertexCountChanged, this , &RubberbandShape::markDirty );
119+ disconnect ( mVertexModel , &VertexModel::geometryChanged, this , &RubberbandShape::markDirty );
120+ }
121+ if ( mRubberbandModel )
122+ {
123+ disconnect ( mRubberbandModel , &RubberbandModel::vertexChanged, this , &RubberbandShape::markDirty );
124+ disconnect ( mRubberbandModel , &RubberbandModel::verticesRemoved, this , &RubberbandShape::markDirty );
125+ disconnect ( mRubberbandModel , &RubberbandModel::verticesInserted, this , &RubberbandShape::markDirty );
126+ }
127+ if ( mMapSettings )
128+ {
129+ disconnect ( mMapSettings , &QgsQuickMapSettings::visibleExtentChanged, this , &RubberbandShape::visibleExtentChanged );
130+ disconnect ( mMapSettings , &QgsQuickMapSettings::rotationChanged, this , &RubberbandShape::rotationChanged );
131+ }
132+ }
133+ else
134+ {
135+ if ( mVertexModel )
136+ {
137+ connect ( mVertexModel , &VertexModel::dataChanged, this , &RubberbandShape::markDirty );
138+ connect ( mVertexModel , &VertexModel::vertexCountChanged, this , &RubberbandShape::markDirty );
139+ connect ( mVertexModel , &VertexModel::geometryChanged, this , &RubberbandShape::markDirty );
140+ }
141+ if ( mRubberbandModel )
142+ {
143+ connect ( mRubberbandModel , &RubberbandModel::vertexChanged, this , &RubberbandShape::markDirty );
144+ connect ( mRubberbandModel , &RubberbandModel::verticesRemoved, this , &RubberbandShape::markDirty );
145+ connect ( mRubberbandModel , &RubberbandModel::verticesInserted, this , &RubberbandShape::markDirty );
146+ }
147+ if ( mMapSettings && !mFreeze )
148+ {
149+ connect ( mMapSettings , &QgsQuickMapSettings::visibleExtentChanged, this , &RubberbandShape::visibleExtentChanged );
150+ connect ( mMapSettings , &QgsQuickMapSettings::rotationChanged, this , &RubberbandShape::rotationChanged );
151+ }
152+
153+ markDirty ();
154+ }
155+ }
100156
101157QgsQuickMapSettings *RubberbandShape::mapSettings () const
102158{
@@ -115,8 +171,12 @@ void RubberbandShape::setMapSettings( QgsQuickMapSettings *mapSettings )
115171 }
116172
117173 mMapSettings = mapSettings;
118- connect ( mMapSettings , &QgsQuickMapSettings::visibleExtentChanged, this , &RubberbandShape::visibleExtentChanged );
119- connect ( mMapSettings , &QgsQuickMapSettings::rotationChanged, this , &RubberbandShape::rotationChanged );
174+
175+ if ( mMapSettings && !mFreeze )
176+ {
177+ connect ( mMapSettings , &QgsQuickMapSettings::visibleExtentChanged, this , &RubberbandShape::visibleExtentChanged );
178+ connect ( mMapSettings , &QgsQuickMapSettings::rotationChanged, this , &RubberbandShape::rotationChanged );
179+ }
120180
121181 markDirty ();
122182
0 commit comments