Skip to content

Commit

Permalink
Merge pull request #1024 from ahuarte47/Issue_9181
Browse files Browse the repository at this point in the history
Bug #9181: fix crash trying to resume node editing
  • Loading branch information
3nids committed Dec 18, 2013
2 parents f7e5588 + 889f65f commit 5be7a94
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 10 deletions.
37 changes: 27 additions & 10 deletions src/app/nodetool/qgsmaptoolnodetool.cpp
Expand Up @@ -44,7 +44,7 @@ QgsMapToolNodeTool::QgsMapToolNodeTool( QgsMapCanvas* canvas )

QgsMapToolNodeTool::~QgsMapToolNodeTool()
{
removeRubberBands();
cleanTool();
}

void QgsMapToolNodeTool::createMovingRubberBands()
Expand Down Expand Up @@ -369,6 +369,7 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
mSelectedFeature = new QgsSelectedFeature( snapResults[0].snappedAtGeometry, vlayer, mCanvas );
connect( QgisApp::instance()->legend(), SIGNAL( currentLayerChanged( QgsMapLayer* ) ), this, SLOT( currentLayerChanged( QgsMapLayer* ) ) );
connect( mSelectedFeature, SIGNAL( destroyed() ), this, SLOT( selectedFeatureDestroyed() ) );
connect( vlayer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) );
mIsPoint = vlayer->geometryType() == QGis::Point;
}
else
Expand Down Expand Up @@ -485,20 +486,22 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
void QgsMapToolNodeTool::selectedFeatureDestroyed()
{
QgsDebugCall;
mSelectedFeature = 0;
cleanTool( false );
}

void QgsMapToolNodeTool::currentLayerChanged( QgsMapLayer *layer )
{
if ( mSelectedFeature && layer != mSelectedFeature->vlayer() )
{
delete mSelectedFeature;
mSelectedFeature = 0;

removeRubberBands();
cleanTool();
}
}

void QgsMapToolNodeTool::editingToggled()
{
cleanTool();
}

void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
{
if ( !mSelectedFeature )
Expand Down Expand Up @@ -605,10 +608,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )

void QgsMapToolNodeTool::deactivate()
{
removeRubberBands();

delete mSelectedFeature;
mSelectedFeature = 0;
cleanTool();

mSelectionRubberBand = 0;
mSelectAnother = false;
Expand Down Expand Up @@ -642,6 +642,23 @@ void QgsMapToolNodeTool::removeRubberBands()
mSelectedFeature->cleanRubberBandsData();
}

void QgsMapToolNodeTool::cleanTool( bool deleteSelectedFeature )
{
removeRubberBands();

if ( mSelectedFeature )
{
QgsVectorLayer *vlayer = mSelectedFeature->vlayer();
Q_ASSERT( vlayer );

disconnect( QgisApp::instance()->legend(), SIGNAL( currentLayerChanged( QgsMapLayer* ) ), this, SLOT( currentLayerChanged( QgsMapLayer* ) ) );
disconnect( mSelectedFeature, SIGNAL( destroyed() ), this, SLOT( selectedFeatureDestroyed() ) );
disconnect( vlayer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) );

if ( deleteSelectedFeature ) delete mSelectedFeature;
mSelectedFeature = 0;
}
}

void QgsMapToolNodeTool::canvasDoubleClickEvent( QMouseEvent * e )
{
Expand Down
10 changes: 10 additions & 0 deletions src/app/nodetool/qgsmaptoolnodetool.h
Expand Up @@ -60,12 +60,22 @@ class QgsMapToolNodeTool: public QgsMapToolVertexEdit
*/
void currentLayerChanged( QgsMapLayer *layer );

/*
* the current edition state changed
*/
void editingToggled();

private:
/**
* Deletes the rubber band pointers and clears mRubberBands
*/
void removeRubberBands();

/**
* Disconnects signals and clears objects
*/
void cleanTool( bool deleteSelectedFeature = true );

/**
* Creating rubber band marker for movin of point
* @param center coordinates of point to be moved
Expand Down

0 comments on commit 5be7a94

Please sign in to comment.