Skip to content

Commit 0c0293e

Browse files
committed
[GRASS] update fields on field add/delete
1 parent c3839b3 commit 0c0293e

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

src/plugins/grass/qgsgrassplugin.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ void QgsGrassPlugin::onEditingStarted()
419419
vectorLayer->updateFields();
420420

421421
connect( vectorLayer, SIGNAL( editingStopped() ), SLOT( onEditingStopped() ) );
422+
connect( grassProvider, SIGNAL( fieldsChanged() ), SLOT( onFieldsChanged() ) );
422423

423424
resetEditActions();
424425
}
@@ -439,6 +440,35 @@ void QgsGrassPlugin::onEditingStopped()
439440
resetEditActions();
440441
}
441442

443+
void QgsGrassPlugin::onFieldsChanged()
444+
{
445+
QgsDebugMsg( "entered" );
446+
QgsGrassProvider* grassProvider = dynamic_cast<QgsGrassProvider*>( sender() );
447+
if ( !grassProvider )
448+
{
449+
return;
450+
}
451+
QString uri = grassProvider->dataSourceUri();
452+
uri.remove( QRegExp( "[^_]*$" ) );
453+
QgsDebugMsg( "uri = " + uri );
454+
foreach ( QgsMapLayer *layer, QgsMapLayerRegistry::instance()->mapLayers().values() )
455+
{
456+
if ( !layer || layer->type() != QgsMapLayer::VectorLayer )
457+
{
458+
continue;
459+
}
460+
461+
QgsVectorLayer *vectorLayer = qobject_cast<QgsVectorLayer *>( layer );
462+
if ( vectorLayer && vectorLayer->providerType() == "grass" && vectorLayer->dataProvider() )
463+
{
464+
if ( vectorLayer->dataProvider()->dataSourceUri().startsWith( uri ) )
465+
{
466+
vectorLayer->updateFields();
467+
}
468+
}
469+
}
470+
}
471+
442472
void QgsGrassPlugin::addFeature()
443473
{
444474
QgsDebugMsg( "entered" );

src/plugins/grass/qgsgrassplugin.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ class QgsGrassPlugin : public QObject, public QgisPlugin
121121
void onEditingStopped();
122122
void onCurrentLayerChanged( QgsMapLayer* layer );
123123

124+
void onFieldsChanged();
125+
124126
// Start editing tools
125127
void addFeature();
126128

src/providers/grass/qgsgrassprovider.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,7 @@ void QgsGrassProvider::onAttributeAdded( int idx )
17261726
else
17271727
{
17281728
mEditLayerFields = mEditLayer->fields();
1729+
emit fieldsChanged();
17291730
}
17301731
}
17311732

@@ -1752,6 +1753,7 @@ void QgsGrassProvider::onAttributeDeleted( int idx )
17521753
else
17531754
{
17541755
mEditLayerFields = mEditLayer->fields();
1756+
emit fieldsChanged();
17551757
}
17561758
}
17571759

src/providers/grass/qgsgrassprovider.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,12 @@ class GRASS_LIB_EXPORT QgsGrassProvider : public QgsVectorDataProvider
396396

397397
void onDataChanged();
398398

399+
signals:
400+
// TODO: move to QGIS core?
401+
// Emited when a fields was added/deleted so that other layers sharing the same layer
402+
// may be updated
403+
void fieldsChanged();
404+
399405
protected:
400406
// used by QgsGrassFeatureSource
401407
QgsGrassVectorMapLayer *openLayer() const;

0 commit comments

Comments
 (0)