void QgsAttributeTableModel::featureDeleted( int fid ) { QgsDebugMsgLevel( QString( "deleted fid=%1 => row=%2" ).arg( fid ).arg( idToRow( fid ) ), 3 ); int row = idToRow( fid ); beginRemoveRows( QModelIndex(), row, row ); removeRow( row ); endRemoveRows(); }
void QgsAttributeTableModel::featuresDeleted( const QgsFeatureIds &fids ) { QList<int> rows; const auto constFids = fids; for ( QgsFeatureId fid : constFids ) { QgsDebugMsgLevel( QStringLiteral( "(%2) fid: %1, size: %3" ).arg( fid ).arg( mFeatureRequest.filterType() ).arg( mIdRowMap.size() ), 4 ); int row = idToRow( fid ); if ( row != -1 ) rows << row; } std::sort( rows.begin(), rows.end() ); int lastRow = -1; int beginRow = -1; int currentRowCount = 0; int removedRows = 0; bool reset = false; const auto constRows = rows; for ( int row : constRows ) { #if 0 qDebug() << "Row: " << row << ", begin " << beginRow << ", last " << lastRow << ", current " << currentRowCount << ", removed " << removedRows; #endif if ( lastRow == -1 ) { beginRow = row; } if ( row != lastRow + 1 && lastRow != -1 ) { if ( rows.count() > 100 && currentRowCount < 10 ) { reset = true; break; } removeRows( beginRow - removedRows, currentRowCount ); beginRow = row; removedRows += currentRowCount; currentRowCount = 0; } currentRowCount++; lastRow = row; } if ( !reset ) removeRows( beginRow - removedRows, currentRowCount ); else resetModel(); }
void QgsAttributeTableModel::featureDeleted( QgsFeatureId fid ) { prefetchColumnData( -1 ); // Invalidate cached column data int row = idToRow( fid ); beginRemoveRows( QModelIndex(), row, row ); removeRow( row ); endRemoveRows(); }
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 ); }
QModelIndexList QgsAttributeTableModel::idToIndexList( QgsFeatureId id ) const { QModelIndexList indexes; int row = idToRow( id ); for ( int column = 0; column < columnCount(); ++column ) { indexes.append( index( row, column ) ); } return indexes; }
void QgsAttributeTableModel::featuresDeleted( const QgsFeatureIds& fids ) { QList<int> rows; Q_FOREACH ( QgsFeatureId fid, fids ) { QgsDebugMsgLevel( QString( "(%2) fid: %1, size: %3" ).arg( fid ).arg( mFeatureRequest.filterType() ).arg( mIdRowMap.size() ), 4 ); int row = idToRow( fid ); if ( row != -1 ) rows << row; }
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::swapRows( QgsFeatureId a, QgsFeatureId b ) { if ( a == b ) return; int rowA = idToRow( a ); int rowB = idToRow( b ); //emit layoutAboutToBeChanged(); mRowIdMap.remove( rowA ); mRowIdMap.remove( rowB ); mRowIdMap.insert( rowA, b ); mRowIdMap.insert( rowB, a ); mIdRowMap.remove( a ); mIdRowMap.remove( b ); mIdRowMap.insert( a, rowB ); mIdRowMap.insert( b, rowA ); //emit layoutChanged(); }
void QgsAttributeTableModel::featureDeleted( QgsFeatureId fid ) { QgsDebugMsgLevel( QString( "(%2) fid: %1" ).arg( fid ).arg( mFeatureRequest.filterType() ), 4 ); mFieldCache.remove( fid ); int row = idToRow( fid ); if ( row != -1 ) { beginRemoveRows( QModelIndex(), row, row ); removeRow( row ); endRemoveRows(); } }
QModelIndex QgsAttributeTableModel::idToIndex( QgsFeatureId id ) const { return index( idToRow( id ), 0 ); }
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 } } } }
void QgsAttributeTableModel::attributeValueChanged( int fid, int idx, const QVariant &value ) { setData( index( idToRow( fid ), mAttributes.indexOf( idx ) ), value, Qt::EditRole ); }