Skip to content

Commit 0259d5d

Browse files
authored
Merge pull request #9275 from 3nids/vertextool_34
vertex tool / editor synchronisation backport 3.4
2 parents a887b7d + d7e321e commit 0259d5d

9 files changed

+270
-374
lines changed

src/app/CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ SET(QGIS_APP_SRCS
120120
decorations/qgsdecorationgrid.cpp
121121
decorations/qgsdecorationgriddialog.cpp
122122

123-
vertextool/qgsselectedfeature.cpp
124-
vertextool/qgsvertexentry.cpp
123+
vertextool/qgslockedfeature.cpp
125124
vertextool/qgsvertexeditor.cpp
126125
vertextool/qgsvertextool.cpp
127126

@@ -372,7 +371,7 @@ SET (QGIS_APP_MOC_HDRS
372371
decorations/qgsdecorationgrid.h
373372
decorations/qgsdecorationgriddialog.h
374373

375-
vertextool/qgsselectedfeature.h
374+
vertextool/qgslockedfeature.h
376375
vertextool/qgsvertexeditor.h
377376
vertextool/qgsvertextool.h
378377

src/app/vertextool/qgsselectedfeature.cpp renamed to src/app/vertextool/qgslockedfeature.cpp

Lines changed: 53 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/***************************************************************************
2-
qgsselectedfeature.cpp - selected feature of vertextool
2+
qgslockedfeature.cpp - locked feature of vertextool
33
---------------------
44
begin : April 2009
55
copyright : (C) 2009 by Richard Kostecky
@@ -13,8 +13,8 @@
1313
* *
1414
***************************************************************************/
1515

16-
#include "vertextool/qgsselectedfeature.h"
17-
#include "vertextool/qgsvertexentry.h"
16+
#include "qgslockedfeature.h"
17+
#include "qgsvertexeditor.h"
1818

1919
#include "qgsfeatureiterator.h"
2020
#include "qgspoint.h"
@@ -32,16 +32,29 @@
3232
#include "qgsmapcanvas.h"
3333

3434

35-
QgsSelectedFeature::QgsSelectedFeature( QgsFeatureId featureId,
36-
QgsVectorLayer *vlayer,
37-
QgsMapCanvas *canvas )
35+
QgsLockedFeature::QgsLockedFeature( QgsFeatureId featureId,
36+
QgsVectorLayer *layer,
37+
QgsMapCanvas *canvas )
3838
: mFeatureId( featureId )
39-
, mChangingGeometry( false )
39+
, mLayer( layer )
40+
, mCanvas( canvas )
4041
{
41-
setSelectedFeature( featureId, vlayer, canvas );
42+
// signal changing of current layer
43+
connect( QgisApp::instance()->layerTreeView(), &QgsLayerTreeView::currentLayerChanged, this, &QgsLockedFeature::currentLayerChanged );
44+
45+
// feature was deleted
46+
connect( mLayer, &QgsVectorLayer::featureDeleted, this, &QgsLockedFeature::featureDeleted );
47+
48+
// rolling back
49+
connect( mLayer, &QgsVectorLayer::beforeRollBack, this, &QgsLockedFeature::beforeRollBack );
50+
51+
// geometry was changed
52+
connect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsLockedFeature::geometryChanged );
53+
54+
replaceVertexMap();
4255
}
4356

44-
QgsSelectedFeature::~QgsSelectedFeature()
57+
QgsLockedFeature::~QgsLockedFeature()
4558
{
4659
deleteVertexMap();
4760

@@ -61,13 +74,13 @@ QgsSelectedFeature::~QgsSelectedFeature()
6174
delete mGeometry;
6275
}
6376

64-
void QgsSelectedFeature::currentLayerChanged( QgsMapLayer *layer )
77+
void QgsLockedFeature::currentLayerChanged( QgsMapLayer *layer )
6578
{
6679
if ( layer == mLayer )
6780
deleteLater();
6881
}
6982

70-
void QgsSelectedFeature::updateGeometry( const QgsGeometry *geom )
83+
void QgsLockedFeature::updateGeometry( const QgsGeometry *geom )
7184
{
7285
delete mGeometry;
7386

@@ -86,68 +99,40 @@ void QgsSelectedFeature::updateGeometry( const QgsGeometry *geom )
8699
}
87100
}
88101

89-
void QgsSelectedFeature::setSelectedFeature( QgsFeatureId featureId, QgsVectorLayer *layer, QgsMapCanvas *canvas )
90-
{
91-
mFeatureId = featureId;
92-
mLayer = layer;
93-
mCanvas = canvas;
94-
95-
delete mGeometry;
96-
mGeometry = nullptr;
97-
98-
// signal changing of current layer
99-
connect( QgisApp::instance()->layerTreeView(), &QgsLayerTreeView::currentLayerChanged, this, &QgsSelectedFeature::currentLayerChanged );
100-
101-
// feature was deleted
102-
connect( mLayer, &QgsVectorLayer::featureDeleted, this, &QgsSelectedFeature::featureDeleted );
103-
104-
// rolling back
105-
connect( mLayer, &QgsVectorLayer::beforeRollBack, this, &QgsSelectedFeature::beforeRollBack );
106-
107-
// projection or extents changed
108-
connect( canvas, &QgsMapCanvas::destinationCrsChanged, this, &QgsSelectedFeature::updateVertexMarkersPosition );
109-
connect( canvas, &QgsMapCanvas::extentsChanged, this, &QgsSelectedFeature::updateVertexMarkersPosition );
110-
111-
// geometry was changed
112-
connect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsSelectedFeature::geometryChanged );
113-
114-
replaceVertexMap();
115-
}
116-
117-
void QgsSelectedFeature::beforeRollBack()
102+
void QgsLockedFeature::beforeRollBack()
118103
{
119-
disconnect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsSelectedFeature::geometryChanged );
104+
disconnect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsLockedFeature::geometryChanged );
120105
deleteVertexMap();
121106
}
122107

123-
void QgsSelectedFeature::beginGeometryChange()
108+
void QgsLockedFeature::beginGeometryChange()
124109
{
125110
Q_ASSERT( !mChangingGeometry );
126111
mChangingGeometry = true;
127112

128-
disconnect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsSelectedFeature::geometryChanged );
113+
disconnect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsLockedFeature::geometryChanged );
129114
}
130115

131-
void QgsSelectedFeature::endGeometryChange()
116+
void QgsLockedFeature::endGeometryChange()
132117
{
133118
Q_ASSERT( mChangingGeometry );
134119
mChangingGeometry = false;
135120

136-
connect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsSelectedFeature::geometryChanged );
121+
connect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsLockedFeature::geometryChanged );
137122
}
138123

139-
void QgsSelectedFeature::canvasLayersChanged()
124+
void QgsLockedFeature::canvasLayersChanged()
140125
{
141126
currentLayerChanged( mCanvas->currentLayer() );
142127
}
143128

144-
void QgsSelectedFeature::featureDeleted( QgsFeatureId fid )
129+
void QgsLockedFeature::featureDeleted( QgsFeatureId fid )
145130
{
146131
if ( fid == mFeatureId )
147132
deleteLater();
148133
}
149134

150-
void QgsSelectedFeature::geometryChanged( QgsFeatureId fid, const QgsGeometry &geom )
135+
void QgsLockedFeature::geometryChanged( QgsFeatureId fid, const QgsGeometry &geom )
151136
{
152137
QgsDebugCall;
153138

@@ -159,7 +144,7 @@ void QgsSelectedFeature::geometryChanged( QgsFeatureId fid, const QgsGeometry &g
159144
replaceVertexMap();
160145
}
161146

162-
void QgsSelectedFeature::validateGeometry( QgsGeometry *g )
147+
void QgsLockedFeature::validateGeometry( QgsGeometry *g )
163148
{
164149
QgsSettings settings;
165150
if ( settings.value( QStringLiteral( "qgis/digitizing/validate_geometries" ), 1 ).toInt() == 0 )
@@ -190,15 +175,15 @@ void QgsSelectedFeature::validateGeometry( QgsGeometry *g )
190175
if ( settings.value( QStringLiteral( "qgis/digitizing/validate_geometries" ), 1 ).toInt() == 2 )
191176
method = QgsGeometry::ValidatorGeos;
192177
mValidator = new QgsGeometryValidator( *g, nullptr, method );
193-
connect( mValidator, &QgsGeometryValidator::errorFound, this, &QgsSelectedFeature::addError );
194-
connect( mValidator, &QThread::finished, this, &QgsSelectedFeature::validationFinished );
178+
connect( mValidator, &QgsGeometryValidator::errorFound, this, &QgsLockedFeature::addError );
179+
connect( mValidator, &QThread::finished, this, &QgsLockedFeature::validationFinished );
195180
mValidator->start();
196181

197182
QgsStatusBar *sb = QgisApp::instance()->statusBarIface();
198183
sb->showMessage( tr( "Validation started." ) );
199184
}
200185

201-
void QgsSelectedFeature::addError( QgsGeometry::Error e )
186+
void QgsLockedFeature::addError( QgsGeometry::Error e )
202187
{
203188
mGeomErrors << e;
204189
if ( !mTip.isEmpty() )
@@ -223,13 +208,13 @@ void QgsSelectedFeature::addError( QgsGeometry::Error e )
223208
sb->setToolTip( mTip );
224209
}
225210

226-
void QgsSelectedFeature::validationFinished()
211+
void QgsLockedFeature::validationFinished()
227212
{
228213
QgsStatusBar *sb = QgisApp::instance()->statusBarIface();
229214
sb->showMessage( tr( "Validation finished (%n error(s) found).", "number of geometry errors", mGeomErrorMarkers.size() ) );
230215
}
231216

232-
void QgsSelectedFeature::replaceVertexMap()
217+
void QgsLockedFeature::replaceVertexMap()
233218
{
234219
// delete old map
235220
deleteVertexMap();
@@ -243,7 +228,7 @@ void QgsSelectedFeature::replaceVertexMap()
243228
emit vertexMapChanged();
244229
}
245230

246-
void QgsSelectedFeature::deleteVertexMap()
231+
void QgsLockedFeature::deleteVertexMap()
247232
{
248233
Q_FOREACH ( QgsVertexEntry *entry, mVertexMap )
249234
{
@@ -253,18 +238,18 @@ void QgsSelectedFeature::deleteVertexMap()
253238
mVertexMap.clear();
254239
}
255240

256-
bool QgsSelectedFeature::isSelected( int vertexNr )
241+
bool QgsLockedFeature::isSelected( int vertexNr )
257242
{
258243
return mVertexMap.at( vertexNr )->isSelected();
259244
}
260245

261-
QgsGeometry *QgsSelectedFeature::geometry()
246+
QgsGeometry *QgsLockedFeature::geometry()
262247
{
263248
Q_ASSERT( mGeometry );
264249
return mGeometry;
265250
}
266251

267-
void QgsSelectedFeature::createVertexMap()
252+
void QgsLockedFeature::createVertexMap()
268253
{
269254

270255
if ( !mGeometry )
@@ -288,22 +273,22 @@ void QgsSelectedFeature::createVertexMap()
288273
QgsPoint pt;
289274
while ( geom->nextVertex( vertexId, pt ) )
290275
{
291-
mVertexMap.append( new QgsVertexEntry( mCanvas, mLayer, pt, vertexId, tr( "ring %1, vertex %2" ).arg( vertexId.ring ).arg( vertexId.vertex ) ) );
276+
mVertexMap.append( new QgsVertexEntry( pt, vertexId ) );
292277
}
293278
}
294279

295-
void QgsSelectedFeature::selectVertex( int vertexNr )
280+
void QgsLockedFeature::selectVertex( int vertexNr )
296281
{
297282
if ( vertexNr < 0 || vertexNr >= mVertexMap.size() )
298283
return;
299284

300285
QgsVertexEntry *entry = mVertexMap.at( vertexNr );
301-
entry->setSelected();
286+
entry->setSelected( true );
302287

303288
emit selectionChanged();
304289
}
305290

306-
void QgsSelectedFeature::deselectVertex( int vertexNr )
291+
void QgsLockedFeature::deselectVertex( int vertexNr )
307292
{
308293
if ( vertexNr < 0 || vertexNr >= mVertexMap.size() )
309294
return;
@@ -314,7 +299,7 @@ void QgsSelectedFeature::deselectVertex( int vertexNr )
314299
emit selectionChanged();
315300
}
316301

317-
void QgsSelectedFeature::deselectAllVertices()
302+
void QgsLockedFeature::deselectAllVertices()
318303
{
319304
for ( int i = 0; i < mVertexMap.size(); i++ )
320305
{
@@ -323,7 +308,7 @@ void QgsSelectedFeature::deselectAllVertices()
323308
emit selectionChanged();
324309
}
325310

326-
void QgsSelectedFeature::invertVertexSelection( int vertexNr )
311+
void QgsLockedFeature::invertVertexSelection( int vertexNr )
327312
{
328313
if ( vertexNr < 0 || vertexNr >= mVertexMap.size() )
329314
return;
@@ -336,7 +321,7 @@ void QgsSelectedFeature::invertVertexSelection( int vertexNr )
336321
emit selectionChanged();
337322
}
338323

339-
void QgsSelectedFeature::invertVertexSelection( const QVector<int> &vertexIndices )
324+
void QgsLockedFeature::invertVertexSelection( const QVector<int> &vertexIndices )
340325
{
341326
Q_FOREACH ( int index, vertexIndices )
342327
{
@@ -349,25 +334,17 @@ void QgsSelectedFeature::invertVertexSelection( const QVector<int> &vertexIndice
349334
emit selectionChanged();
350335
}
351336

352-
void QgsSelectedFeature::updateVertexMarkersPosition()
353-
{
354-
Q_FOREACH ( QgsVertexEntry *vertexEntry, mVertexMap )
355-
{
356-
vertexEntry->placeMarker();
357-
}
358-
}
359-
360-
QgsFeatureId QgsSelectedFeature::featureId()
337+
QgsFeatureId QgsLockedFeature::featureId()
361338
{
362339
return mFeatureId;
363340
}
364341

365-
QList<QgsVertexEntry *> &QgsSelectedFeature::vertexMap()
342+
QList<QgsVertexEntry *> &QgsLockedFeature::vertexMap()
366343
{
367344
return mVertexMap;
368345
}
369346

370-
QgsVectorLayer *QgsSelectedFeature::layer()
347+
QgsVectorLayer *QgsLockedFeature::layer()
371348
{
372349
return mLayer;
373350
}

0 commit comments

Comments
 (0)