@@ -44,7 +44,7 @@ QgsMapToolNodeTool::QgsMapToolNodeTool( QgsMapCanvas* canvas )
44
44
45
45
QgsMapToolNodeTool::~QgsMapToolNodeTool ()
46
46
{
47
- removeRubberBands ();
47
+ cleanTool ();
48
48
}
49
49
50
50
void QgsMapToolNodeTool::createMovingRubberBands ()
@@ -369,6 +369,7 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
369
369
mSelectedFeature = new QgsSelectedFeature ( snapResults[0 ].snappedAtGeometry , vlayer, mCanvas );
370
370
connect ( QgisApp::instance ()->legend (), SIGNAL ( currentLayerChanged ( QgsMapLayer* ) ), this , SLOT ( currentLayerChanged ( QgsMapLayer* ) ) );
371
371
connect ( mSelectedFeature , SIGNAL ( destroyed () ), this , SLOT ( selectedFeatureDestroyed () ) );
372
+ connect ( vlayer, SIGNAL ( editingStopped () ), this , SLOT ( editingToggled () ) );
372
373
mIsPoint = vlayer->geometryType () == QGis::Point ;
373
374
}
374
375
else
@@ -485,20 +486,22 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
485
486
void QgsMapToolNodeTool::selectedFeatureDestroyed ()
486
487
{
487
488
QgsDebugCall;
488
- mSelectedFeature = 0 ;
489
+ cleanTool ( false ) ;
489
490
}
490
491
491
492
void QgsMapToolNodeTool::currentLayerChanged ( QgsMapLayer *layer )
492
493
{
493
494
if ( mSelectedFeature && layer != mSelectedFeature ->vlayer () )
494
495
{
495
- delete mSelectedFeature ;
496
- mSelectedFeature = 0 ;
497
-
498
- removeRubberBands ();
496
+ cleanTool ();
499
497
}
500
498
}
501
499
500
+ void QgsMapToolNodeTool::editingToggled ()
501
+ {
502
+ cleanTool ();
503
+ }
504
+
502
505
void QgsMapToolNodeTool::canvasReleaseEvent ( QMouseEvent * e )
503
506
{
504
507
if ( !mSelectedFeature )
@@ -605,10 +608,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
605
608
606
609
void QgsMapToolNodeTool::deactivate ()
607
610
{
608
- removeRubberBands ();
609
-
610
- delete mSelectedFeature ;
611
- mSelectedFeature = 0 ;
611
+ cleanTool ();
612
612
613
613
mSelectionRubberBand = 0 ;
614
614
mSelectAnother = false ;
@@ -642,6 +642,23 @@ void QgsMapToolNodeTool::removeRubberBands()
642
642
mSelectedFeature ->cleanRubberBandsData ();
643
643
}
644
644
645
+ void QgsMapToolNodeTool::cleanTool ( bool deleteSelectedFeature )
646
+ {
647
+ removeRubberBands ();
648
+
649
+ if ( mSelectedFeature )
650
+ {
651
+ QgsVectorLayer *vlayer = mSelectedFeature ->vlayer ();
652
+ Q_ASSERT ( vlayer );
653
+
654
+ disconnect ( QgisApp::instance ()->legend (), SIGNAL ( currentLayerChanged ( QgsMapLayer* ) ), this , SLOT ( currentLayerChanged ( QgsMapLayer* ) ) );
655
+ disconnect ( mSelectedFeature , SIGNAL ( destroyed () ), this , SLOT ( selectedFeatureDestroyed () ) );
656
+ disconnect ( vlayer, SIGNAL ( editingStopped () ), this , SLOT ( editingToggled () ) );
657
+
658
+ if ( deleteSelectedFeature ) delete mSelectedFeature ;
659
+ mSelectedFeature = 0 ;
660
+ }
661
+ }
645
662
646
663
void QgsMapToolNodeTool::canvasDoubleClickEvent ( QMouseEvent * e )
647
664
{
0 commit comments