18 #include <QHeaderView>
34 : QTableView( parent )
35 , mMasterModel( NULL )
36 , mFilterModel( NULL )
37 , mFeatureSelectionModel( NULL )
38 , mFeatureSelectionManager( NULL )
39 , mActionPopup( NULL )
42 restoreGeometry( settings.value(
"/BetterAttributeTable/geometry" ).toByteArray() );
44 verticalHeader()->setDefaultSectionSize( 20 );
45 horizontalHeader()->setHighlightSections(
false );
50 setSelectionBehavior( QAbstractItemView::SelectRows );
51 setSelectionMode( QAbstractItemView::ExtendedSelection );
52 setSortingEnabled(
true );
54 verticalHeader()->viewport()->installEventFilter(
this );
56 connect( verticalHeader(), SIGNAL( sectionPressed(
int ) ),
this, SLOT(
selectRow(
int ) ) );
57 connect( verticalHeader(), SIGNAL( sectionEntered(
int ) ),
this, SLOT(
_q_selectRow(
int ) ) );
93 if (
object == verticalHeader()->viewport() )
95 switch ( event->type() )
97 case QEvent::MouseButtonPress:
101 case QEvent::MouseButtonRelease:
117 disconnect(
mFilterModel, SIGNAL( filterAboutToBeInvalidated() ),
this, SLOT( onFilterAboutToBeInvalidated() ) );
118 disconnect(
mFilterModel, SIGNAL( filterInvalidated() ),
this, SLOT( onFilterInvalidated() ) );
122 QTableView::setModel( filterModel );
157 settings.setValue(
"/BetterAttributeTable/geometry", QVariant( saveGeometry() ) );
162 setSelectionMode( QAbstractItemView::NoSelection );
163 QTableView::mousePressEvent( event );
164 setSelectionMode( QAbstractItemView::ExtendedSelection );
169 setSelectionMode( QAbstractItemView::NoSelection );
170 QTableView::mouseReleaseEvent( event );
171 setSelectionMode( QAbstractItemView::ExtendedSelection );
176 setSelectionMode( QAbstractItemView::NoSelection );
177 QTableView::mouseMoveEvent( event );
178 setSelectionMode( QAbstractItemView::ExtendedSelection );
183 switch ( event->key() )
192 setSelectionMode( QAbstractItemView::NoSelection );
193 QTableView::keyPressEvent( event );
194 setSelectionMode( QAbstractItemView::ExtendedSelection );
198 QTableView::keyPressEvent( event );
205 foreach (
const QModelIndex
index, indexes )
213 setDirtyRegion( viewport()->rect() );
218 QItemSelection selection;
231 QModelIndex idx = indexAt( event->pos() );
232 if ( !idx.isValid() )
266 if ( selectionBehavior() == QTableView::SelectColumns
267 || ( selectionMode() == QTableView::SingleSelection
268 && selectionBehavior() == QTableView::SelectItems ) )
271 if ( row >= 0 && row < model()->rowCount() )
273 int column = horizontalHeader()->logicalIndexAt( isRightToLeft() ? viewport()->width() : 0 );
274 QModelIndex
index = model()->index( row, column );
275 QItemSelectionModel::SelectionFlags command = selectionCommand( index );
276 selectionModel()->setCurrentIndex( index, QItemSelectionModel::NoUpdate );
277 if (( anchor && !( command & QItemSelectionModel::Current ) )
278 || ( selectionMode() == QTableView::SingleSelection ) )
281 if ( selectionMode() != QTableView::SingleSelection
282 && command.testFlag( QItemSelectionModel::Toggle ) )
286 ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
287 command &= ~QItemSelectionModel::Toggle;
290 command |= QItemSelectionModel::Current;
294 QModelIndex br = model()->index( qMax(
mRowSectionAnchor, row ), model()->columnCount() - 1 );
295 if ( verticalHeader()->sectionsMoved() && tl.row() != br.row() )
296 setSelection( visualRect( tl ) | visualRect( br ), command );
QgsAttributeTableFilterModel * mFilterModel
virtual bool isSelected(QgsFeatureId fid)
Returns the selection status of a given feature id.
virtual void loadLayer()
Loads the layer into the model Preferably to be called, before basing any other models on this model...
QgsAttributeTableModel * mMasterModel
QItemSelectionModel::SelectionFlag mCtrlDragSelectionFlag
void mouseMoveEvent(QMouseEvent *event)
Called for mouse move events on a table cell.
QgsVectorLayer * layer()
Returns the layer to which this cache belongs.
virtual bool eventFilter(QObject *object, QEvent *event)
This event filter is installed on the verticalHeader to intercept mouse press and release events...
A model backed by a QgsVectorLayerCache which is able to provide feature/attribute information to a Q...
void enableSync(bool enable)
Enables or disables synchronisation to the QgsVectorLayer When synchronisation is disabled...
Map canvas is a class for displaying all GIS data types on a canvas.
void mousePressEvent(QMouseEvent *event)
Called for mouse press events on a table cell.
void setFeatureSelectionModel(QgsFeatureSelectionModel *featureSelectionModel)
QgsVectorLayerCache * mLayerCache
QgsFeatureSelectionModel * mFeatureSelectionModel
QgsVectorLayer * layer() const
Returns the layer this filter acts on.
QgsIFeatureSelectionManager * mFeatureSelectionManager
QgsAttributeTableView(QWidget *parent=0)
void keyPressEvent(QKeyEvent *event)
Called for key press events Disables selection change by only pressing an arrow key.
virtual void selectFeatures(const QItemSelection &selection, SelectionFlags command)
Select features on this table.
virtual void setFeatureSelectionManager(QgsIFeatureSelectionManager *featureSelectionManager)
QgsAttributeTableDelegate * mTableDelegate
virtual void setModel(QgsAttributeTableFilterModel *filterModel)
void willShowContextMenu(QMenu *menu, QModelIndex atIndex)
Is emitted, in order to provide a hook to add aditional menu entries to the context menu...
This class caches features of a given QgsVectorLayer.
void closeEvent(QCloseEvent *event)
Saves geometry to the settings on close.
void setFeatureSelectionManager(QgsIFeatureSelectionManager *featureSelectionManager)
setFeatureSelectionManager
void mouseReleaseEvent(QMouseEvent *event)
Called for mouse release events on a table cell.
A delegate item class for QgsAttributeTable (see Qt documentation for QItemDelegate).
virtual void selectRow(int row)
virtual void _q_selectRow(int row)
virtual ~QgsAttributeTableView()
Is an interface class to abstract feature selection handling.
Represents a vector layer which manages a vector based data sets.
void contextMenuEvent(QContextMenuEvent *event)
Is called when the context menu will be shown.