mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-30 00:29:39 -05:00
Fix needs geometry on table reload
This commit is contained in:
parent
e115e6df08
commit
f08dfed622
@ -1053,9 +1053,7 @@ void QgsAttributeTableModel::prefetchSortData( const QString &expressionString,
|
||||
widgetData = getWidgetData( cache.sortFieldIndex );
|
||||
}
|
||||
|
||||
const QgsFeatureRequest request = QgsFeatureRequest( mFeatureRequest )
|
||||
.setFlags( cache.sortCacheExpression.needsGeometry() ? Qgis::FeatureRequestFlag::NoFlags : Qgis::FeatureRequestFlag::NoGeometry )
|
||||
.setSubsetOfAttributes( cache.sortCacheAttributes );
|
||||
const QgsFeatureRequest request = QgsFeatureRequest( mFeatureRequest ).setFlags( cache.sortCacheExpression.needsGeometry() ? Qgis::FeatureRequestFlag::NoFlags : Qgis::FeatureRequestFlag::NoGeometry ).setSubsetOfAttributes( cache.sortCacheAttributes );
|
||||
|
||||
QgsFeatureIterator it = mLayerCache->getFeatures( request );
|
||||
|
||||
|
||||
@ -336,16 +336,13 @@ void QgsDualView::setFilterMode( QgsAttributeTableFilterModel::FilterMode filter
|
||||
|
||||
// create an empty form to find out if it needs geometry or not
|
||||
const QgsAttributeForm emptyForm( mLayer, QgsFeature(), mEditorContext );
|
||||
const bool needsGeometry = ( filterMode == QgsAttributeTableFilterModel::ShowVisible ) || emptyForm.needsGeometry();
|
||||
const bool needsGeometry = ( filterMode == QgsAttributeTableFilterModel::ShowVisible ) || emptyForm.needsGeometry() || QgsExpression( mConfig.sortExpression() ).needsGeometry();
|
||||
|
||||
const bool requiresTableReload = ( request.filterType() != Qgis::Qgis::FeatureRequestFilterType::NoFilter || request.spatialFilterType() != Qgis::SpatialFilterType::NoFilter ) // previous request was subset
|
||||
|| ( needsGeometry && request.flags() & Qgis::FeatureRequestFlag::NoGeometry ) // no geometry for last request
|
||||
|| ( mMasterModel->rowCount() == 0 ); // no features
|
||||
|
||||
if ( !needsGeometry )
|
||||
request.setFlags( request.flags() | Qgis::FeatureRequestFlag::NoGeometry );
|
||||
else
|
||||
request.setFlags( request.flags() & ~( static_cast< int >( Qgis::FeatureRequestFlag::NoGeometry ) ) );
|
||||
request.setFlags( request.flags().setFlag( Qgis::FeatureRequestFlag::NoGeometry, !needsGeometry ) );
|
||||
request.setFilterFids( QgsFeatureIds() );
|
||||
request.setFilterRect( QgsRectangle() );
|
||||
request.disableFilter();
|
||||
@ -1135,7 +1132,6 @@ bool QgsDualView::modifySort()
|
||||
config.setSortExpression( QString() );
|
||||
}
|
||||
|
||||
setAttributeTableConfig( config );
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@ -1334,7 +1330,10 @@ void QgsDualView::setAttributeTableConfig( const QgsAttributeTableConfig &config
|
||||
mFilterModel->setAttributeTableConfig( mConfig );
|
||||
mTableView->setAttributeTableConfig( mConfig );
|
||||
const QgsAttributeList attributes { requiredAttributes( mLayer ) };
|
||||
QgsFeatureRequest request { mMasterModel->request() };
|
||||
// Determine if the sort expression needs geometry
|
||||
const bool newSortExpressionNeedsGeometry { QgsExpression( config.sortExpression() ).needsGeometry() };
|
||||
QgsFeatureRequest request = mMasterModel->request();
|
||||
request.setFlags( request.flags().setFlag( Qgis::FeatureRequestFlag::NoGeometry, !newSortExpressionNeedsGeometry ) );
|
||||
request.setSubsetOfAttributes( attributes );
|
||||
mMasterModel->setRequest( request );
|
||||
mLayerCache->setCacheSubsetOfAttributes( attributes );
|
||||
@ -1342,6 +1341,7 @@ void QgsDualView::setAttributeTableConfig( const QgsAttributeTableConfig &config
|
||||
|
||||
void QgsDualView::setSortExpression( const QString &sortExpression, Qt::SortOrder sortOrder )
|
||||
{
|
||||
|
||||
if ( sortExpression.isNull() )
|
||||
mFilterModel->sort( -1 );
|
||||
else
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user