Skip to content

Commit 5bda2df

Browse files
committedDec 17, 2013
#9094: Auto-select adjacent last-removed node
Automatically selects the adjacent vertex to last removed selected node
1 parent eab6b5b commit 5bda2df

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
 

‎src/app/nodetool/qgsmaptoolnodetool.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,11 @@ void QgsMapToolNodeTool::keyReleaseEvent( QKeyEvent* e )
713713

714714
if ( mSelectedFeature && ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete ) )
715715
{
716+
int firstSelectedIndex = firstSelectedVertex();
717+
if ( firstSelectedIndex == -1) return;
718+
716719
mSelectedFeature->deleteSelectedVertexes();
720+
safeSelectVertex( firstSelectedIndex );
717721
mCanvas->refresh();
718722
}
719723
}
@@ -731,3 +735,37 @@ QgsRubberBand* QgsMapToolNodeTool::createRubberBandMarker( QgsPoint center, QgsV
731735
marker->addPoint( pom );
732736
return marker;
733737
}
738+
739+
int QgsMapToolNodeTool::firstSelectedVertex( )
740+
{
741+
if ( mSelectedFeature )
742+
{
743+
QList<QgsVertexEntry*> &vertexMap = mSelectedFeature->vertexMap();
744+
int vertexNr = 0;
745+
746+
foreach ( QgsVertexEntry *entry, vertexMap )
747+
{
748+
if ( entry->isSelected() )
749+
{
750+
return vertexNr;
751+
}
752+
vertexNr++;
753+
}
754+
}
755+
return -1;
756+
}
757+
758+
int QgsMapToolNodeTool::safeSelectVertex( int vertexNr )
759+
{
760+
if ( mSelectedFeature )
761+
{
762+
QList<QgsVertexEntry*> &vertexMap = mSelectedFeature->vertexMap();
763+
764+
if ( vertexNr >= vertexMap.size() ) vertexNr -= vertexMap.size();
765+
if ( vertexNr < 0 ) vertexNr = vertexMap.size() - 1 + vertexNr;
766+
767+
mSelectedFeature->selectVertex( vertexNr );
768+
return vertexNr;
769+
}
770+
return -1;
771+
}

‎src/app/nodetool/qgsmaptoolnodetool.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,16 @@ class QgsMapToolNodeTool: public QgsMapToolVertexEdit
9595
*/
9696
void createTopologyRubberBands( QgsVectorLayer* vlayer, const QList<QgsVertexEntry*> &vertexMap, int vertex );
9797

98+
/**
99+
* Returns the index of first selected vertex, -1 when all unselected
100+
*/
101+
int firstSelectedVertex( );
102+
103+
/**
104+
* Select the specified vertex bounded to current index range, returns the valid selected index
105+
*/
106+
int safeSelectVertex( int vertexNr );
107+
98108
/** The position of the vertex to move (in map coordinates) to exclude later from snapping*/
99109
QList<QgsPoint> mExcludePoint;
100110

0 commit comments

Comments
 (0)
Please sign in to comment.