19#include "moc_qgsfeatureselectionmodel.cpp" 
   24  : QItemSelectionModel( model, parent )
 
   25  , mFeatureModel( featureModel )
 
   26  , mSyncEnabled( true )
 
   27  , mClearAndSelectBuffer( false )
 
 
   34  mSyncEnabled = enable;
 
   38    if ( mClearAndSelectBuffer )
 
   44      mFeatureSelectionManager->
select( mSelectedBuffer );
 
   45      mFeatureSelectionManager->
deselect( mDeselectedBuffer );
 
   48    mSelectedBuffer.clear();
 
   49    mDeselectedBuffer.clear();
 
   50    mClearAndSelectBuffer = 
false;
 
 
   56  if ( mSelectedBuffer.contains( fid ) )
 
   59  if ( mDeselectedBuffer.contains( fid ) )
 
   62  if ( !mClearAndSelectBuffer && mFeatureSelectionManager->
selectedFeatureIds().contains( fid ) )
 
 
   77  QgsDebugMsgLevel( QStringLiteral( 
"Index count: %1" ).arg( selection.indexes().size() ), 2 );
 
   79  const auto constIndexes = selection.indexes();
 
   80  for ( 
const QModelIndex &index : constIndexes )
 
   89  if ( command.testFlag( QItemSelectionModel::ClearAndSelect ) )
 
   93      mClearAndSelectBuffer = 
true;
 
   94      const auto constIds = ids;
 
   97        if ( !mDeselectedBuffer.remove( 
id ) )
 
   99          mSelectedBuffer.insert( 
id );
 
  108  else if ( command.testFlag( QItemSelectionModel::Select ) )
 
  112      const auto constIds = ids;
 
  115        if ( !mDeselectedBuffer.remove( 
id ) )
 
  117          mSelectedBuffer.insert( 
id );
 
  123      mFeatureSelectionManager->
select( ids );
 
  126  else if ( command.testFlag( QItemSelectionModel::Deselect ) )
 
  130      const auto constIds = ids;
 
  133        if ( !mSelectedBuffer.remove( 
id ) )
 
  135          mDeselectedBuffer.insert( 
id );
 
  141      mFeatureSelectionManager->
deselect( ids );
 
  147  QModelIndexList updatedIndexes;
 
  148  const auto indexes = selection.indexes();
 
  149  for ( 
const QModelIndex &idx : indexes )
 
  151    updatedIndexes.append( expandIndexToRow( idx ) );
 
 
  159  if ( mFeatureSelectionManager )
 
  162  mFeatureSelectionManager = featureSelectionManager;
 
 
  167void QgsFeatureSelectionModel::layerSelectionChanged( 
const QgsFeatureIds &selected, 
const QgsFeatureIds &deselected, 
bool clearAndSelect )
 
  169  if ( clearAndSelect )
 
  175    QModelIndexList updatedIndexes;
 
  176    const auto constSelected = selected;
 
  179      updatedIndexes.append( expandIndexToRow( mFeatureModel->
fidToIndex( fid ) ) );
 
  182    const auto constDeselected = deselected;
 
  185      updatedIndexes.append( expandIndexToRow( mFeatureModel->
fidToIndex( fid ) ) );
 
  192QModelIndexList QgsFeatureSelectionModel::expandIndexToRow( 
const QModelIndex &index )
 const 
  194  QModelIndexList indexes;
 
  195  const QAbstractItemModel *model = index.model();
 
  196  const int row = index.row();
 
  201  const int columns = model->columnCount();
 
  202  indexes.reserve( columns );
 
  203  for ( 
int column = 0; column < columns; ++column )
 
  205    indexes.append( model->index( row, column ) );
 
@ FeatureId
Get the feature id of the feature in this row.
 
Base class for feature models.
 
virtual QModelIndex fidToIndex(QgsFeatureId fid)=0
 
void enableSync(bool enable)
Enables or disables synchronisation to the QgsVectorLayer When synchronisation is disabled,...
 
virtual void selectFeatures(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)
Select features on this table.
 
virtual bool isSelected(QgsFeatureId fid)
Returns the selection status of a given feature id.
 
QgsFeatureSelectionModel(QAbstractItemModel *model, QgsFeatureModel *featureModel, QgsIFeatureSelectionManager *featureSelectionHandler, QObject *parent)
 
virtual void setFeatureSelectionManager(QgsIFeatureSelectionManager *featureSelectionManager)
 
void requestRepaint()
Request a repaint of the visible items of connected views.
 
Is an interface class to abstract feature selection handling.
 
virtual void select(const QgsFeatureIds &ids)=0
Select features by feature ids.
 
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect)
Emitted when selection was changed.
 
virtual const QgsFeatureIds & selectedFeatureIds() const =0
Returns reference to identifiers of selected features.
 
virtual void deselect(const QgsFeatureIds &ids)=0
Deselect features by feature ids.
 
virtual void setSelectedFeatures(const QgsFeatureIds &ids)=0
Change selection to the new set of features.
 
QSet< QgsFeatureId > QgsFeatureIds
 
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
 
#define QgsDebugMsgLevel(str, level)