@@ -462,9 +462,10 @@ void QgsVertexTool::cadCanvasPressEvent( QgsMapMouseEvent *e )
462
462
{
463
463
if ( !mSelectionRect && !mDraggingVertex && !mDraggingEdge )
464
464
{
465
- if ( mLastMouseMoveMatch .isValid () && mLastMouseMoveMatch .layer () )
465
+ QgsPointLocator::Match m = snapToEditableLayer ( e );
466
+ if ( m.isValid () && m.layer () )
466
467
{
467
- showVertexEditor (); // #spellok
468
+ updateVertexEditor ( m. layer (), m. featureId () );
468
469
}
469
470
}
470
471
}
@@ -847,8 +848,6 @@ void QgsVertexTool::mouseMoveNotDragging( QgsMapMouseEvent *e )
847
848
QgsPointLocator::Match m = snapToEditableLayer ( e );
848
849
bool targetIsAllowed = ( !mSelectedFeature || ( mSelectedFeature ->featureId () == m.featureId () && mSelectedFeature ->layer () == m.layer () ) );
849
850
850
- mLastMouseMoveMatch = m;
851
-
852
851
// possibility to move a vertex
853
852
if ( m.type () == QgsPointLocator::Vertex && targetIsAllowed )
854
853
{
@@ -1074,7 +1073,7 @@ void QgsVertexTool::onCachedGeometryChanged( QgsFeatureId fid, const QgsGeometry
1074
1073
validateGeometry ( layer, fid );
1075
1074
1076
1075
if ( mVertexEditor && mSelectedFeature && mSelectedFeature ->featureId () == fid && mSelectedFeature ->layer () == layer )
1077
- mVertexEditor ->updateEditor ( mSelectedFeature -> layer (), mSelectedFeature .get () );
1076
+ mVertexEditor ->updateEditor ( mSelectedFeature .get () );
1078
1077
}
1079
1078
1080
1079
void QgsVertexTool::onCachedGeometryDeleted ( QgsFeatureId fid )
@@ -1089,35 +1088,43 @@ void QgsVertexTool::onCachedGeometryDeleted( QgsFeatureId fid )
1089
1088
setHighlightedVertices ( mSelectedVertices );
1090
1089
}
1091
1090
1092
-
1093
- void QgsVertexTool::showVertexEditor () // #spellok
1091
+ void QgsVertexTool::updateVertexEditor ( QgsVectorLayer *layer, QgsFeatureId fid )
1094
1092
{
1095
- QgsPointLocator::Match m = mLastMouseMoveMatch ;
1096
- if ( m.isValid () && m.layer () )
1093
+ if ( layer )
1097
1094
{
1098
- if ( mSelectedFeature && mSelectedFeature ->featureId () == m. featureId () && mSelectedFeature ->layer () == m. layer () )
1095
+ if ( mSelectedFeature && mSelectedFeature ->featureId () == fid && mSelectedFeature ->layer () == layer )
1099
1096
{
1100
1097
// if show feature is called on a feature that's already binded to the vertex editor, toggle it off
1101
1098
mSelectedFeature .reset ();
1102
1099
if ( mVertexEditor )
1103
1100
{
1104
- mVertexEditor ->updateEditor ( nullptr , nullptr );
1101
+ mVertexEditor ->updateEditor ( nullptr );
1105
1102
}
1106
1103
return ;
1107
1104
}
1108
1105
1109
- mSelectedFeature .reset ( new QgsSelectedFeature ( m.featureId (), m.layer (), mCanvas ) );
1106
+ mSelectedFeature .reset ( new QgsSelectedFeature ( fid, layer, mCanvas ) );
1107
+ connect ( mSelectedFeature ->layer (), &QgsVectorLayer::featureDeleted, this , &QgsVertexTool::cleanEditor );
1110
1108
for ( int i = 0 ; i < mSelectedVertices .length (); ++i )
1111
1109
{
1112
- if ( mSelectedVertices .at ( i ).layer == m. layer () && mSelectedVertices .at ( i ).fid == m. featureId () )
1110
+ if ( mSelectedVertices .at ( i ).layer == layer && mSelectedVertices .at ( i ).fid == fid )
1113
1111
{
1114
1112
mSelectedFeature ->selectVertex ( mSelectedVertices .at ( i ).vertexId );
1115
1113
}
1116
1114
}
1117
1115
}
1116
+
1117
+ // make sure the vertex editor is alive and visible
1118
+ showVertexEditor ();
1119
+
1120
+ mVertexEditor ->updateEditor ( mSelectedFeature .get () );
1121
+ }
1122
+
1123
+ void QgsVertexTool::showVertexEditor () // #spellok
1124
+ {
1118
1125
if ( !mVertexEditor )
1119
1126
{
1120
- mVertexEditor .reset ( new QgsVertexEditor ( m. layer () ? m. layer () : currentVectorLayer (), mSelectedFeature ? mSelectedFeature . get () : nullptr , mCanvas ) );
1127
+ mVertexEditor .reset ( new QgsVertexEditor ( mCanvas ) );
1121
1128
if ( !QgisApp::instance ()->restoreDockWidget ( mVertexEditor .get () ) )
1122
1129
QgisApp::instance ()->addDockWidget ( Qt::LeftDockWidgetArea, mVertexEditor .get () );
1123
1130
@@ -1129,16 +1136,9 @@ void QgsVertexTool::showVertexEditor() //#spellok
1129
1136
}
1130
1137
else
1131
1138
{
1132
- mVertexEditor ->updateEditor ( m.layer (), mSelectedFeature .get () );
1133
-
1134
1139
mVertexEditor ->show ();
1135
1140
mVertexEditor ->raise ();
1136
1141
}
1137
-
1138
- if ( mSelectedFeature )
1139
- {
1140
- connect ( mSelectedFeature ->layer (), &QgsVectorLayer::featureDeleted, this , &QgsVertexTool::cleanEditor );
1141
- }
1142
1142
}
1143
1143
1144
1144
void QgsVertexTool::cleanupVertexEditor ()
@@ -1739,7 +1739,7 @@ void QgsVertexTool::moveVertex( const QgsPointXY &mapPoint, const QgsPointLocato
1739
1739
}
1740
1740
1741
1741
if ( mVertexEditor )
1742
- mVertexEditor ->updateEditor ( dragLayer, mSelectedFeature .get () );
1742
+ mVertexEditor ->updateEditor ( mSelectedFeature .get () );
1743
1743
1744
1744
setHighlightedVertices ( mSelectedVertices ); // update positions of existing highlighted vertices
1745
1745
setHighlightedVerticesVisible ( true ); // time to show highlighted vertices again
@@ -1842,7 +1842,7 @@ void QgsVertexTool::applyEditsToLayers( QgsVertexTool::VertexEdits &edits )
1842
1842
1843
1843
1844
1844
if ( mVertexEditor )
1845
- mVertexEditor ->updateEditor ( layer, mSelectedFeature .get () );
1845
+ mVertexEditor ->updateEditor ( mSelectedFeature .get () );
1846
1846
}
1847
1847
}
1848
1848
@@ -2003,7 +2003,7 @@ void QgsVertexTool::deleteVertex()
2003
2003
}
2004
2004
2005
2005
if ( mVertexEditor && mSelectedFeature )
2006
- mVertexEditor ->updateEditor ( mSelectedFeature -> layer (), mSelectedFeature .get () );
2006
+ mVertexEditor ->updateEditor ( mSelectedFeature .get () );
2007
2007
}
2008
2008
2009
2009
void QgsVertexTool::setHighlightedVertices ( const QList<Vertex> &listVertices, HighlightMode mode )
0 commit comments