void QgsVectorLayerJoinBuffer::createJoinCaches() { QList< QgsVectorJoinInfo >::iterator joinIt = mVectorJoins.begin(); for ( ; joinIt != mVectorJoins.end(); ++joinIt ) { cacheJoinLayer( *joinIt ); } }
void QgsVectorLayerJoinBuffer::addJoin( const QgsVectorJoinInfo& joinInfo ) { mVectorJoins.push_back( joinInfo ); //cache joined layer to virtual memory if specified by user if ( joinInfo.memoryCache ) { cacheJoinLayer( mVectorJoins.last() ); } }
void QgsVectorLayerJoinBuffer::createJoinCaches() { QList< QgsVectorJoinInfo >::iterator joinIt = mVectorJoins.begin(); for ( ; joinIt != mVectorJoins.end(); ++joinIt ) { cacheJoinLayer( *joinIt ); // make sure we are connected to the joined layer if ( QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( joinIt->joinLayerId ) ) ) connect( vl, SIGNAL( updatedFields() ), this, SLOT( joinedLayerUpdatedFields() ), Qt::UniqueConnection ); } }
void QgsVectorLayerJoinBuffer::joinedLayerUpdatedFields() { QgsVectorLayer* joinedLayer = qobject_cast<QgsVectorLayer*>( sender() ); Q_ASSERT( joinedLayer ); // recache the joined layer for ( QgsVectorJoinList::iterator it = mVectorJoins.begin(); it != mVectorJoins.end(); ++it ) { if ( joinedLayer->id() == it->joinLayerId ) { it->cachedAttributes.clear(); cacheJoinLayer( *it ); } } emit joinedFieldsChanged(); }
void QgsVectorLayerJoinBuffer::addJoin( const QgsVectorJoinInfo& joinInfo ) { mVectorJoins.push_back( joinInfo ); //cache joined layer to virtual memory if specified by user if ( joinInfo.memoryCache ) { cacheJoinLayer( mVectorJoins.last() ); } // Wait for notifications about changed fields in joined layer to propagate them. // During project load the joined layers possibly do not exist yet so the connection will not be created, // but then QgsProject makes sure to call createJoinCaches() which will do the connection. // Unique connection makes sure we do not respond to one layer's update more times (in case of multiple join) if ( QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( joinInfo.joinLayerId ) ) ) connect( vl, SIGNAL( updatedFields() ), this, SLOT( joinedLayerUpdatedFields() ), Qt::UniqueConnection ); emit joinedFieldsChanged(); }