Skip to content

Commit 614800c

Browse files
NathanW2nyalldawson
authored andcommitted
[Fix] Don't recreate vertex editor each time
1 parent c923d5b commit 614800c

3 files changed

Lines changed: 34 additions & 13 deletions

File tree

‎src/app/vertextool/qgsvertexeditor.cpp‎

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -277,18 +277,12 @@ QgsVertexEditor::QgsVertexEditor(
277277
QgsVectorLayer *layer,
278278
QgsSelectedFeature *selectedFeature,
279279
QgsMapCanvas *canvas )
280-
: mUpdatingTableSelection( false )
280+
: mCanvas( canvas )
281+
, mUpdatingTableSelection( false )
281282
, mUpdatingVertexSelection( false )
282283
{
283284
setWindowTitle( tr( "Vertex Editor" ) );
284-
285-
mLayer = layer;
286-
mSelectedFeature = selectedFeature;
287-
mCanvas = canvas;
288-
289285
mTableView = new QTableView( this );
290-
mVertexModel = new QgsVertexEditorModel( mLayer, mSelectedFeature, mCanvas, this );
291-
mTableView->setModel( mVertexModel );
292286

293287
mTableView->setSelectionMode( QTableWidget::ExtendedSelection );
294288
mTableView->setSelectionBehavior( QTableWidget::SelectRows );
@@ -300,8 +294,26 @@ QgsVertexEditor::QgsVertexEditor(
300294

301295
setWidget( mTableView );
302296

303-
connect( mSelectedFeature, &QgsSelectedFeature::selectionChanged, this, &QgsVertexEditor::updateTableSelection );
304297
connect( mTableView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsVertexEditor::updateVertexSelection );
298+
299+
updateEditor( layer, selectedFeature );
300+
}
301+
302+
void QgsVertexEditor::updateEditor( QgsVectorLayer *layer, QgsSelectedFeature *selectedFeature )
303+
{
304+
if ( mVertexModel )
305+
{
306+
delete mVertexModel;
307+
}
308+
309+
mLayer = layer;
310+
mSelectedFeature = selectedFeature;
311+
312+
// TOOD We really should just update the model itself.
313+
mVertexModel = new QgsVertexEditorModel( mLayer, mSelectedFeature, mCanvas, this );
314+
mTableView->setModel( mVertexModel );
315+
316+
connect( mSelectedFeature, &QgsSelectedFeature::selectionChanged, this, &QgsVertexEditor::updateTableSelection );
305317
}
306318

307319
void QgsVertexEditor::updateTableSelection()

‎src/app/vertextool/qgsvertexeditor.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class QgsVertexEditor : public QgsDockWidget
7575
QgsMapCanvas *canvas );
7676

7777
public:
78+
void updateEditor( QgsVectorLayer *layer, QgsSelectedFeature *selectedFeature );
7879
QgsVectorLayer *mLayer = nullptr;
7980
QgsSelectedFeature *mSelectedFeature = nullptr;
8081
QgsMapCanvas *mCanvas = nullptr;

‎src/app/vertextool/qgsvertextool.cpp‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,10 +1036,18 @@ void QgsVertexTool::showVertexEditor() //#spellok
10361036
return;
10371037

10381038
mSelectedFeature.reset( new QgsSelectedFeature( m.featureId(), m.layer(), mCanvas ) );
1039-
mVertexEditor.reset( new QgsVertexEditor( m.layer(), mSelectedFeature.get(), mCanvas ) );
1040-
QgisApp::instance()->addDockWidget( Qt::LeftDockWidgetArea, mVertexEditor.get() );
1041-
connect( mVertexEditor.get(), &QgsVertexEditor::deleteSelectedRequested, this, &QgsVertexTool::deleteVertexEditorSelection );
1042-
connect( mVertexEditor.get(), &QgsVertexEditor::editorClosed, this, &QgsVertexTool::cleanupVertexEditor );
1039+
if ( !mVertexEditor )
1040+
{
1041+
mVertexEditor.reset( new QgsVertexEditor( m.layer(), mSelectedFeature.get(), mCanvas ) );
1042+
QgisApp::instance()->addDockWidget( Qt::LeftDockWidgetArea, mVertexEditor.get() );
1043+
connect( mVertexEditor.get(), &QgsVertexEditor::deleteSelectedRequested, this, &QgsVertexTool::deleteVertexEditorSelection );
1044+
connect( mVertexEditor.get(), &QgsVertexEditor::editorClosed, this, &QgsVertexTool::cleanupVertexEditor );
1045+
}
1046+
else
1047+
{
1048+
mVertexEditor->updateEditor( m.layer(), mSelectedFeature.get() );
1049+
}
1050+
10431051
connect( mSelectedFeature.get()->vlayer(), &QgsVectorLayer::featureDeleted, this, &QgsVertexTool::cleanEditor );
10441052
}
10451053

0 commit comments

Comments
 (0)