void QgsAttributeTableModel::attributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value ) { if ( mCachedField == idx ) mFieldCache[ fid ] = value; if ( fid == mFeat.id() ) { mFeat.setValid( false ); } setData( index( idToRow( fid ), fieldCol( idx ) ), value, Qt::EditRole ); }
void QgsAttributeTableModel::attributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value ) { QgsDebugMsgLevel( QString( "(%4) fid: %1, idx: %2, value: %3" ).arg( fid ).arg( idx ).arg( value.toString() ).arg( mFeatureRequest.filterType() ), 3 ); // No filter request: skip all possibly heavy checks if ( mFeatureRequest.filterType() == QgsFeatureRequest::FilterNone ) { setData( index( idToRow( fid ), fieldCol( idx ) ), value, Qt::EditRole ); } else { if ( loadFeatureAtId( fid ) ) { if ( mFeatureRequest.acceptFeature( mFeat ) ) { if ( !mIdRowMap.contains( fid ) ) { // Feature changed in such a way, it will be shown now featureAdded( fid ); } else { if ( idx == mCachedField ) mFieldCache[ fid ] = value; // Update representation setData( index( idToRow( fid ), fieldCol( idx ) ), value, Qt::EditRole ); } } else { if ( mIdRowMap.contains( fid ) ) { // Feature changed such, that it is no longer shown featureDeleted( fid ); } // else: we don't care } } } }
void QgsAttributeTableModel::fieldConditionalStyleChanged( const QString &fieldName ) { if ( fieldName.isNull() ) { mRowStylesMap.clear(); emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); return; } int fieldIndex = mLayerCache->layer()->fields().lookupField( fieldName ); if ( fieldIndex == -1 ) return; //whole column has changed int col = fieldCol( fieldIndex ); emit dataChanged( index( 0, col ), index( rowCount() - 1, col ) ); }
void QgsAttributeTableModel::attributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value ) { // Defer all updates if a bulk edit/rollback command is running if ( mBulkEditCommandRunning ) { mAttributeValueChanges.insert( QPair<QgsFeatureId, int>( fid, idx ), value ); return; } QgsDebugMsgLevel( QStringLiteral( "(%4) fid: %1, idx: %2, value: %3" ).arg( fid ).arg( idx ).arg( value.toString() ).arg( mFeatureRequest.filterType() ), 2 ); for ( SortCache &cache : mSortCaches ) { if ( cache.sortCacheAttributes.contains( idx ) ) { if ( cache.sortFieldIndex == -1 ) { if ( loadFeatureAtId( fid ) ) { mExpressionContext.setFeature( mFeat ); cache.sortCache[fid] = cache.sortCacheExpression.evaluate( &mExpressionContext ); } } else { QgsFieldFormatter *fieldFormatter = mFieldFormatters.at( cache.sortFieldIndex ); const QVariant &widgetCache = mAttributeWidgetCaches.at( cache.sortFieldIndex ); const QVariantMap &widgetConfig = mWidgetConfigs.at( cache.sortFieldIndex ); QVariant sortValue = fieldFormatter->representValue( layer(), cache.sortFieldIndex, widgetConfig, widgetCache, value ); cache.sortCache.insert( fid, sortValue ); } } } // No filter request: skip all possibly heavy checks if ( mFeatureRequest.filterType() == QgsFeatureRequest::FilterNone ) { if ( loadFeatureAtId( fid ) ) setData( index( idToRow( fid ), fieldCol( idx ) ), value, Qt::EditRole ); } else { if ( loadFeatureAtId( fid ) ) { if ( mFeatureRequest.acceptFeature( mFeat ) ) { if ( !mIdRowMap.contains( fid ) ) { // Feature changed in such a way, it will be shown now featureAdded( fid ); } else { // Update representation setData( index( idToRow( fid ), fieldCol( idx ) ), value, Qt::EditRole ); } } else { if ( mIdRowMap.contains( fid ) ) { // Feature changed such, that it is no longer shown featuresDeleted( QgsFeatureIds() << fid ); } // else: we don't care } } } }