QgsAttributeTableModel::QgsAttributeTableModel( QgsVectorLayerCache *layerCache, QObject *parent ) : QAbstractTableModel( parent ) , mLayerCache( layerCache ) , mCachedField( -1 ) { QgsDebugMsg( "entered." ); if ( layerCache->layer()->geometryType() == QGis::NoGeometry ) { mFeatureRequest.setFlags( QgsFeatureRequest::NoGeometry ); } mFeat.setFeatureId( std::numeric_limits<int>::min() ); if ( !layer()->hasGeometryType() ) mFeatureRequest.setFlags( QgsFeatureRequest::NoGeometry ); loadAttributes(); connect( mLayerCache, SIGNAL( attributeValueChanged( QgsFeatureId, int, const QVariant& ) ), this, SLOT( attributeValueChanged( QgsFeatureId, int, const QVariant& ) ) ); connect( layer(), SIGNAL( featureDeleted( QgsFeatureId ) ), this, SLOT( featureDeleted( QgsFeatureId ) ) ); connect( layer(), SIGNAL( attributeDeleted( int ) ), this, SLOT( attributeDeleted( int ) ) ); connect( layer(), SIGNAL( updatedFields() ), this, SLOT( updatedFields() ) ); connect( layer(), SIGNAL( editCommandEnded() ), this, SLOT( editCommandEnded() ) ); connect( mLayerCache, SIGNAL( featureAdded( QgsFeatureId ) ), this, SLOT( featureAdded( QgsFeatureId ) ) ); connect( mLayerCache, SIGNAL( cachedLayerDeleted() ), this, SLOT( layerDeleted() ) ); }
QgsAttributeTableModel::QgsAttributeTableModel( QgsVectorLayerCache *layerCache, QObject *parent ) : QAbstractTableModel( parent ) , mLayerCache( layerCache ) , mFieldCount( 0 ) , mSortCacheExpression( QLatin1String( "" ) ) , mSortFieldIndex( -1 ) , mExtraColumns( 0 ) { mExpressionContext << QgsExpressionContextUtils::globalScope() << QgsExpressionContextUtils::projectScope() << QgsExpressionContextUtils::layerScope( layerCache->layer() ); if ( layerCache->layer()->geometryType() == QgsWkbTypes::NullGeometry ) { mFeatureRequest.setFlags( QgsFeatureRequest::NoGeometry ); } mFeat.setFeatureId( std::numeric_limits<int>::min() ); if ( !layer()->hasGeometryType() ) mFeatureRequest.setFlags( QgsFeatureRequest::NoGeometry ); loadAttributes(); connect( mLayerCache, SIGNAL( attributeValueChanged( QgsFeatureId, int, const QVariant& ) ), this, SLOT( attributeValueChanged( QgsFeatureId, int, const QVariant& ) ) ); connect( layer(), SIGNAL( featuresDeleted( QgsFeatureIds ) ), this, SLOT( featuresDeleted( QgsFeatureIds ) ) ); connect( layer(), SIGNAL( attributeDeleted( int ) ), this, SLOT( attributeDeleted( int ) ) ); connect( layer(), SIGNAL( updatedFields() ), this, SLOT( updatedFields() ) ); connect( layer(), SIGNAL( editCommandEnded() ), this, SLOT( editCommandEnded() ) ); connect( mLayerCache, SIGNAL( featureAdded( QgsFeatureId ) ), this, SLOT( featureAdded( QgsFeatureId ) ) ); connect( mLayerCache, SIGNAL( cachedLayerDeleted() ), this, SLOT( layerDeleted() ) ); }
void QgsFieldExpressionWidget::setLayer( QgsVectorLayer *layer ) { if ( mFieldProxyModel->sourceFieldModel()->layer() ) disconnect( mFieldProxyModel->sourceFieldModel()->layer(), SIGNAL( updatedFields() ), this, SLOT( reloadLayer() ) ); if ( layer ) mExpressionContext = layer->createExpressionContext(); else mExpressionContext = QgsProject::instance()->createExpressionContext(); mFieldProxyModel->sourceFieldModel()->setLayer( layer ); if ( mFieldProxyModel->sourceFieldModel()->layer() ) connect( mFieldProxyModel->sourceFieldModel()->layer(), SIGNAL( updatedFields() ), SLOT( reloadLayer() ), Qt::UniqueConnection ); }
QgsAttributeForm::QgsAttributeForm( QgsVectorLayer* vl, const QgsFeature &feature, const QgsAttributeEditorContext &context, QWidget* parent ) : QWidget( parent ) , mLayer( vl ) , mContext( context ) , mButtonBox( nullptr ) , mFormNr( sFormCounter++ ) , mIsSaving( false ) , mIsAddDialog( false ) , mPreventFeatureRefresh( false ) , mEditCommandMessage( tr( "Attributes changed" ) ) { init(); initPython(); setFeature( feature ); // Using attributeAdded() attributeDeleted() are not emitted on all fields changes (e.g. layer fields changed, // joined fields changed) -> use updatedFields() instead #if 0 connect( vl, SIGNAL( attributeAdded( int ) ), this, SLOT( onAttributeAdded( int ) ) ); connect( vl, SIGNAL( attributeDeleted( int ) ), this, SLOT( onAttributeDeleted( int ) ) ); #endif connect( vl, SIGNAL( updatedFields() ), this, SLOT( onUpdatedFields() ) ); connect( vl, SIGNAL( beforeAddingExpressionField( QString ) ), this, SLOT( preventFeatureRefresh() ) ); connect( vl, SIGNAL( beforeRemovingExpressionField( int ) ), this, SLOT( preventFeatureRefresh() ) ); }
void QgsFieldExpressionWidget::setLayer( QgsVectorLayer *layer ) { if ( mFieldProxyModel->sourceFieldModel()->layer() ) disconnect( mFieldProxyModel->sourceFieldModel()->layer(), SIGNAL( updatedFields() ), this, SLOT( reloadLayer() ) ); mExpressionContext.reset( new QgsExpressionContext() ); mExpressionContext->appendScope( QgsExpressionContextUtils::globalScope() ); mExpressionContext->appendScope( QgsExpressionContextUtils::projectScope() ); if ( layer ) mExpressionContext->appendScope( QgsExpressionContextUtils::layerScope( layer ) ); mFieldProxyModel->sourceFieldModel()->setLayer( layer ); if ( mFieldProxyModel->sourceFieldModel()->layer() ) connect( mFieldProxyModel->sourceFieldModel()->layer(), SIGNAL( updatedFields() ), SLOT( reloadLayer() ), Qt::UniqueConnection ); }
void QgsFieldModel::setLayer( QgsVectorLayer *layer ) { if ( mLayer ) { disconnect( mLayer, SIGNAL( updatedFields() ), this, SLOT( updateModel() ) ); disconnect( mLayer, SIGNAL( layerDeleted() ), this, SLOT( layerDeleted() ) ); } mLayer = layer; if ( mLayer ) { connect( mLayer, SIGNAL( updatedFields() ), this, SLOT( updateModel() ) ); connect( mLayer, SIGNAL( layerDeleted() ), this, SLOT( layerDeleted() ) ); } updateModel(); }
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::removeJoin( const QString& joinLayerId ) { for ( int i = 0; i < mVectorJoins.size(); ++i ) { if ( mVectorJoins.at( i ).joinLayerId == joinLayerId ) { mVectorJoins.removeAt( i ); } } if ( QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( joinLayerId ) ) ) disconnect( vl, SIGNAL( updatedFields() ), this, SLOT( joinedLayerUpdatedFields() ) ); 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(); }