Add a changed signal to QgsRelationManager

This commit is contained in:
Nyall Dawson 2014-09-20 22:12:26 +10:00
parent 808464fed6
commit fb2279f620
3 changed files with 25 additions and 1 deletions

View File

@ -22,4 +22,10 @@ class QgsRelationManager : QObject
signals: signals:
void relationsLoaded(); void relationsLoaded();
/**
* Emitted when relations are added or removed to the manager.
* @note added in QGIS 2.5
*/
void changed();
}; };

View File

@ -37,6 +37,7 @@ void QgsRelationManager::setRelations( const QList<QgsRelation>& relations )
{ {
addRelation( rel ); addRelation( rel );
} }
emit changed();
} }
const QMap<QString, QgsRelation>& QgsRelationManager::relations() const const QMap<QString, QgsRelation>& QgsRelationManager::relations() const
@ -52,16 +53,19 @@ void QgsRelationManager::addRelation( const QgsRelation& relation )
mRelations.insert( relation.id(), relation ); mRelations.insert( relation.id(), relation );
mProject->dirty( true ); mProject->dirty( true );
emit changed();
} }
void QgsRelationManager::removeRelation( const QString& name ) void QgsRelationManager::removeRelation( const QString& name )
{ {
mRelations.remove( name ); mRelations.remove( name );
emit changed();
} }
void QgsRelationManager::removeRelation( const QgsRelation& relation ) void QgsRelationManager::removeRelation( const QgsRelation& relation )
{ {
mRelations.remove( relation.id() ); mRelations.remove( relation.id() );
emit changed();
} }
QgsRelation QgsRelationManager::relation( const QString& id ) const QgsRelation QgsRelationManager::relation( const QString& id ) const
@ -72,6 +76,7 @@ QgsRelation QgsRelationManager::relation( const QString& id ) const
void QgsRelationManager::clear() void QgsRelationManager::clear()
{ {
mRelations.clear(); mRelations.clear();
emit changed();
} }
QList<QgsRelation> QgsRelationManager::referencingRelations( QgsVectorLayer* layer, int fieldIdx ) const QList<QgsRelation> QgsRelationManager::referencingRelations( QgsVectorLayer* layer, int fieldIdx ) const
@ -152,6 +157,7 @@ void QgsRelationManager::readProject( const QDomDocument & doc )
} }
emit( relationsLoaded() ); emit( relationsLoaded() );
emit changed();
} }
void QgsRelationManager::writeProject( QDomDocument & doc ) void QgsRelationManager::writeProject( QDomDocument & doc )
@ -175,7 +181,8 @@ void QgsRelationManager::writeProject( QDomDocument & doc )
void QgsRelationManager::layersRemoved( const QStringList& layers ) void QgsRelationManager::layersRemoved( const QStringList& layers )
{ {
Q_FOREACH ( const QString& layer, layers ) bool relationsChanged = false;
Q_FOREACH( const QString& layer, layers )
{ {
QMapIterator<QString, QgsRelation> it( mRelations ); QMapIterator<QString, QgsRelation> it( mRelations );
@ -187,7 +194,12 @@ void QgsRelationManager::layersRemoved( const QStringList& layers )
|| it.value().referencingLayerId() == layer ) || it.value().referencingLayerId() == layer )
{ {
mRelations.remove( it.key() ); mRelations.remove( it.key() );
relationsChanged = true;
} }
} }
} }
if ( relationsChanged )
{
emit changed();
}
} }

View File

@ -107,6 +107,12 @@ class CORE_EXPORT QgsRelationManager : public QObject
signals: signals:
void relationsLoaded(); void relationsLoaded();
/**
* Emitted when relations are added or removed to the manager.
* @note added in QGIS 2.5
*/
void changed();
private slots: private slots:
void readProject( const QDomDocument &doc ); void readProject( const QDomDocument &doc );
void writeProject( QDomDocument &doc ); void writeProject( QDomDocument &doc );