void QgsMapToolNodeTool::deactivate() { removeRubberBands(); delete mSelectedFeature; mSelectedFeature = 0; mSelectionRubberBand = 0; mSelectAnother = false; mCtrl = false; mMoving = true; mClicked = false; QgsMapTool::deactivate(); }
QgsMapToolNodeTool::~QgsMapToolNodeTool() { removeRubberBands(); }
void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e ) { if ( !mSelectedFeature ) return; removeRubberBands(); QgsVectorLayer *vlayer = mSelectedFeature->vlayer(); Q_ASSERT( vlayer ); mClicked = false; mSelectionRectangle = false; if ( mSelectionRubberBand ) { mSelectionRubberBand->close(); delete mSelectionRubberBand; mSelectionRubberBand = 0; } if ( mPressCoordinates == e->pos() ) { if ( mSelectAnother ) { // select another feature mSelectedFeature->setSelectedFeature( mAnother, vlayer, mCanvas ); mIsPoint = vlayer->geometryType() == QGis::Point; mSelectAnother = false; } } else { if ( mMoving ) { mMoving = false; QList<QgsSnappingResult> snapResults; mSnapper.snapToBackgroundLayers( e->pos(), snapResults, QList<QgsPoint>() << mClosestMapVertex ); QgsPoint releaseLayerCoords = toLayerCoordinates( vlayer, snapPointFromResults( snapResults, e->pos() ) ); QgsPoint pressLayerCoords; if ( snapResults.size() > 0 ) { pressLayerCoords = toLayerCoordinates( vlayer, mClosestMapVertex ); int topologicalEditing = QgsProject::instance()->readNumEntry( "Digitizing", "/TopologicalEditing", 0 ); if ( topologicalEditing ) { insertSegmentVerticesForSnap( snapResults, vlayer ); } } else { pressLayerCoords = toLayerCoordinates( vlayer, mPressCoordinates ); } mSelectedFeature->moveSelectedVertexes( releaseLayerCoords - pressLayerCoords ); mCanvas->refresh(); } else // selecting vertexes by rubberband { // coordinates has to be coordinates from layer not canvas QgsRectangle r( toLayerCoordinates( vlayer, mPressCoordinates ), toLayerCoordinates( vlayer, e->pos() ) ); QList<QgsVertexEntry*> &vertexMap = mSelectedFeature->vertexMap(); if ( !mCtrl ) { mSelectedFeature->deselectAllVertexes(); } for ( int i = 0; i < vertexMap.size(); i++ ) { if ( r.contains( vertexMap[i]->point() ) ) { // inverting selection is enough because all were deselected if ctrl is not pressed mSelectedFeature->invertVertexSelection( i, false ); } } } } mMoving = false; if ( mDeselectOnRelease != -1 ) { if ( mCtrl ) { mSelectedFeature->invertVertexSelection( mDeselectOnRelease ); } else { mSelectedFeature->deselectAllVertexes(); mSelectedFeature->selectVertex( mDeselectOnRelease ); } mDeselectOnRelease = -1; } mRecentSnappingResults.clear(); mExcludePoint.clear(); }