38
38
static const int MIN_RADIUS_ROLE = Qt::UserRole + 1 ;
39
39
40
40
41
- QgsVertexEditorModel::QgsVertexEditorModel ( QgsVectorLayer *layer, QgsSelectedFeature *selectedFeature, QgsMapCanvas *canvas, QObject *parent )
41
+ QgsVertexEditorModel::QgsVertexEditorModel ( QgsMapCanvas *canvas, QObject *parent )
42
42
: QAbstractTableModel( parent )
43
- , mLayer( layer )
44
- , mSelectedFeature( selectedFeature )
45
43
, mCanvas( canvas )
46
- , mHasZ( false )
47
- , mHasM( false )
48
- , mHasR( true ) // always show for now - avoids scanning whole feature for curves TODO - avoid this
49
- , mZCol( -1 )
50
- , mMCol( -1 )
51
- , mRCol( -1 )
52
44
{
45
+ QWidget *parentWidget = dynamic_cast < QWidget * >( parent );
46
+ if ( parentWidget )
47
+ mWidgetFont = parentWidget->font ();
48
+ }
53
49
54
- QgsWkbTypes::Type layerWKBType = mLayer ->wkbType ();
50
+ void QgsVertexEditorModel::setFeature ( QgsSelectedFeature *selectedFeature )
51
+ {
52
+ beginResetModel ();
55
53
56
- mHasZ = QgsWkbTypes::hasZ ( layerWKBType );
57
- mHasM = QgsWkbTypes::hasM ( layerWKBType );
54
+ mSelectedFeature = selectedFeature;
55
+ if ( mSelectedFeature && mSelectedFeature ->layer () )
56
+ {
57
+ QgsWkbTypes::Type layerWKBType = mSelectedFeature ->layer ()->wkbType ();
58
58
59
- if ( mHasZ )
60
- mZCol = 2 ;
59
+ mHasZ = QgsWkbTypes::hasZ ( layerWKBType );
60
+ mHasM = QgsWkbTypes::hasM ( layerWKBType ) ;
61
61
62
- if ( mHasM )
63
- mMCol = 2 + ( mHasZ ? 1 : 0 ) ;
62
+ if ( mHasZ )
63
+ mZCol = 2 ;
64
64
65
- if ( mHasR )
66
- mRCol = 2 + ( mHasZ ? 1 : 0 ) + ( mHasM ? 1 : 0 );
65
+ if ( mHasM )
66
+ mMCol = 2 + ( mHasZ ? 1 : 0 );
67
67
68
- QWidget *parentWidget = dynamic_cast < QWidget * >( parent );
69
- if ( parentWidget )
70
- {
71
- mWidgetFont = parentWidget->font ();
68
+ if ( mHasR )
69
+ mRCol = 2 + ( mHasZ ? 1 : 0 ) + ( mHasM ? 1 : 0 );
72
70
}
73
71
72
+ endResetModel ();
74
73
}
75
74
76
75
int QgsVertexEditorModel::rowCount ( const QModelIndex &parent ) const
@@ -84,7 +83,10 @@ int QgsVertexEditorModel::rowCount( const QModelIndex &parent ) const
84
83
int QgsVertexEditorModel::columnCount ( const QModelIndex &parent ) const
85
84
{
86
85
Q_UNUSED ( parent );
87
- return 2 + ( mHasZ ? 1 : 0 ) + ( mHasM ? 1 : 0 ) + ( mHasR ? 1 : 0 );
86
+ if ( !mSelectedFeature )
87
+ return 0 ;
88
+ else
89
+ return 2 + ( mHasZ ? 1 : 0 ) + ( mHasM ? 1 : 0 ) + ( mHasR ? 1 : 0 );
88
90
}
89
91
90
92
QVariant QgsVertexEditorModel::data ( const QModelIndex &index, int role ) const
@@ -207,7 +209,7 @@ bool QgsVertexEditorModel::setData( const QModelIndex &index, const QVariant &va
207
209
{
208
210
return false ;
209
211
}
210
- if ( !mSelectedFeature || index .row () >= mSelectedFeature ->vertexMap ().count () )
212
+ if ( !mSelectedFeature || ! mSelectedFeature -> layer () || index .row () >= mSelectedFeature ->vertexMap ().count () )
211
213
{
212
214
return false ;
213
215
}
@@ -247,10 +249,10 @@ bool QgsVertexEditorModel::setData( const QModelIndex &index, const QVariant &va
247
249
double m = ( index .column () == mMCol ? value.toDouble () : mSelectedFeature ->vertexMap ().at ( index .row () )->point ().m () );
248
250
QgsPoint p ( QgsWkbTypes::PointZM, x, y, z, m );
249
251
250
- mLayer ->beginEditCommand ( QObject::tr ( " Moved vertices" ) );
251
- mLayer ->moveVertex ( p, mSelectedFeature ->featureId (), index .row () );
252
- mLayer ->endEditCommand ();
253
- mLayer ->triggerRepaint ();
252
+ mSelectedFeature -> layer () ->beginEditCommand ( QObject::tr ( " Moved vertices" ) );
253
+ mSelectedFeature -> layer () ->moveVertex ( p, mSelectedFeature ->featureId (), index .row () );
254
+ mSelectedFeature -> layer () ->endEditCommand ();
255
+ mSelectedFeature -> layer () ->triggerRepaint ();
254
256
255
257
return false ;
256
258
}
@@ -296,6 +298,7 @@ bool QgsVertexEditorModel::calcR( int row, double &r, double &minRadius ) const
296
298
297
299
QgsVertexEditor::QgsVertexEditor ( QgsMapCanvas *canvas )
298
300
: mCanvas( canvas )
301
+ , mVertexModel( new QgsVertexEditorModel( mCanvas , this ) )
299
302
{
300
303
setWindowTitle ( tr ( " Vertex Editor" ) );
301
304
setObjectName ( QStringLiteral ( " VertexEditor" ) );
@@ -320,6 +323,8 @@ QgsVertexEditor::QgsVertexEditor( QgsMapCanvas *canvas )
320
323
mTableView ->setItemDelegateForColumn ( 3 , new CoordinateItemDelegate ( this ) );
321
324
mTableView ->setItemDelegateForColumn ( 4 , new CoordinateItemDelegate ( this ) );
322
325
mTableView ->setVisible ( false );
326
+ mTableView ->setModel ( mVertexModel );
327
+ connect ( mTableView ->selectionModel (), &QItemSelectionModel::selectionChanged, this , &QgsVertexEditor::updateVertexSelection );
323
328
324
329
layout->addWidget ( mTableView );
325
330
layout->addWidget ( mHintLabel );
@@ -329,24 +334,16 @@ QgsVertexEditor::QgsVertexEditor( QgsMapCanvas *canvas )
329
334
330
335
void QgsVertexEditor::updateEditor ( QgsSelectedFeature *selectedFeature )
331
336
{
332
- if ( mSelectedFeature )
333
- {
334
- delete mVertexModel ;
335
- mVertexModel = nullptr ;
336
- }
337
337
338
338
mSelectedFeature = selectedFeature;
339
339
340
+ mVertexModel ->setFeature ( mSelectedFeature );
341
+
340
342
if ( mSelectedFeature )
341
343
{
342
- // TODO We really should just update the model itself.
343
- mVertexModel = new QgsVertexEditorModel ( mSelectedFeature ->layer (), mSelectedFeature , mCanvas , this );
344
- mTableView ->setModel ( mVertexModel );
345
-
346
344
mHintLabel ->setVisible ( false );
347
345
mTableView ->setVisible ( true );
348
346
349
- connect ( mTableView ->selectionModel (), &QItemSelectionModel::selectionChanged, this , &QgsVertexEditor::updateVertexSelection );
350
347
connect ( mSelectedFeature , &QgsSelectedFeature::selectionChanged, this , &QgsVertexEditor::updateTableSelection );
351
348
}
352
349
else
0 commit comments