Skip to content

Commit 863bf88

Browse files
committed
Better synchronisation between node editor and node tool
1 parent 9f8aa84 commit 863bf88

File tree

5 files changed

+36
-4
lines changed

5 files changed

+36
-4
lines changed

src/app/nodetool/qgsmaptoolnodetool.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ void QgsMapToolNodeTool::canvasMapPressEvent( QgsMapMouseEvent* e )
9090
mSelectedFeature = new QgsSelectedFeature( snapResults[0].snappedAtGeometry, vlayer, mCanvas );
9191
connect( QgisApp::instance()->layerTreeView(), SIGNAL( currentLayerChanged( QgsMapLayer* ) ), this, SLOT( currentLayerChanged( QgsMapLayer* ) ) );
9292
connect( mSelectedFeature, SIGNAL( destroyed() ), this, SLOT( selectedFeatureDestroyed() ) );
93+
connect( mSelectedFeature, SIGNAL( lastVertexChanged( const QgsPointV2& ) ), this, SLOT( changeLastVertex( const QgsPointV2& ) ) );
9394
connect( vlayer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) );
9495
mIsPoint = vlayer->geometryType() == QGis::Point;
9596
mNodeEditor = new QgsNodeEditor( vlayer, mSelectedFeature, mCanvas );
@@ -113,7 +114,7 @@ void QgsMapToolNodeTool::canvasMapPressEvent( QgsMapMouseEvent* e )
113114

114115
QgsPoint closestLayerVertex = mSelectedFeature->geometry()->closestVertex( e->mapPoint(), atVertex, beforeVertex, afterVertex, dist );
115116
mSelectedFeature->selectVertex( atVertex );
116-
mClosestMapVertex = toMapCoordinates( vlayer, closestLayerVertex );
117+
//mClosestMapVertex = toMapCoordinates( vlayer, closestLayerVertex );
117118
}
118119
}
119120
}
@@ -309,3 +310,8 @@ int QgsMapToolNodeTool::insertSegmentVerticesForSnap( const QList<QgsSnappingRes
309310

310311
return editedLayer->insertSegmentVerticesForSnap( transformedSnapResults );
311312
}
313+
314+
void QgsMapToolNodeTool::changeLastVertex( const QgsPointV2& pt )
315+
{
316+
mClosestMapVertex = toMapCoordinates( currentVectorLayer(), QgsPoint( pt.x(), pt.y() ) );
317+
}

src/app/nodetool/qgsmaptoolnodetool.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class QgsMapToolNodeTool: public QgsMapToolEdit
5757
*/
5858
void editingToggled();
5959

60+
void changeLastVertex( const QgsPointV2& pt );
61+
6062
private:
6163
/**
6264
* Deletes the rubber band pointers and clears mRubberBands

src/app/nodetool/qgsnodeeditor.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,14 @@ void QgsNodeEditor::updateTableSelection()
225225

226226
void QgsNodeEditor::updateNodeSelection()
227227
{
228-
mSelectedFeature->blockSignals( true );
228+
disconnect( mSelectedFeature, SIGNAL( selectionChanged() ), this, SLOT( updateTableSelection() ) );
229+
229230
mSelectedFeature->deselectAllVertexes();
230231
foreach ( const QModelIndex& index, mTableWidget->selectionModel()->selectedRows() )
231232
{
232233
int nodeIdx = mTableWidget->item( index.row(), 0 )->data( Qt::DisplayRole ).toInt();
233234
mSelectedFeature->selectVertex( nodeIdx );
234235
}
235-
mSelectedFeature->blockSignals( false );
236+
237+
connect( mSelectedFeature, SIGNAL( selectionChanged() ), this, SLOT( updateTableSelection() ) );
236238
}

src/app/nodetool/qgsselectedfeature.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ void QgsSelectedFeature::selectVertex( int vertexNr )
433433
entry->setSelected();
434434

435435
emit selectionChanged();
436+
emit lastVertexChanged( entry->point() );
436437
}
437438

438439
void QgsSelectedFeature::deselectVertex( int vertexNr )
@@ -442,8 +443,23 @@ void QgsSelectedFeature::deselectVertex( int vertexNr )
442443

443444
QgsVertexEntry *entry = mVertexMap[vertexNr];
444445
entry->setSelected( false );
445-
446446
emit selectionChanged();
447+
448+
//todo: take another selected vertex as 'lastVertexChanged'
449+
QList<QgsVertexEntry*>::const_iterator vIt = mVertexMap.constBegin();
450+
for ( ; vIt != mVertexMap.constEnd(); ++vIt )
451+
{
452+
if (( *vIt )->isSelected() )
453+
{
454+
emit lastVertexChanged(( *vIt )->point() );
455+
return;
456+
}
457+
}
458+
459+
if ( vIt == mVertexMap.constEnd() )
460+
{
461+
emit lastVertexChanged( QgsPointV2() ); //no selection anymore
462+
}
447463
}
448464

449465
void QgsSelectedFeature::deselectAllVertexes()
@@ -453,6 +469,7 @@ void QgsSelectedFeature::deselectAllVertexes()
453469
mVertexMap[i]->setSelected( false );
454470
}
455471
emit selectionChanged();
472+
emit lastVertexChanged( QgsPointV2() );
456473
}
457474

458475
void QgsSelectedFeature::invertVertexSelection( int vertexNr )
@@ -466,6 +483,10 @@ void QgsSelectedFeature::invertVertexSelection( int vertexNr )
466483

467484
entry->setSelected( selected );
468485
emit selectionChanged();
486+
if ( selected )
487+
{
488+
emit lastVertexChanged( entry->point() );
489+
}
469490
}
470491

471492
void QgsSelectedFeature::updateVertexMarkersPosition()

src/app/nodetool/qgsselectedfeature.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class QgsSelectedFeature: public QObject
133133

134134
signals:
135135
void selectionChanged();
136+
void lastVertexChanged( const QgsPointV2& pt );
136137
void vertexMapChanged();
137138

138139
public slots:

0 commit comments

Comments
 (0)