QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsfeaturelistview.h
Go to the documentation of this file.
1/***************************************************************************
2 QgsAttributeListView.h
3 --------------------------------------
4 Date : Jan 2012
5 Copyright : (C) 2013 Matthias Kuhn
6 Email : matthias at opengis dot ch
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSFEATURELISTVIEW_H
17#define QGSFEATURELISTVIEW_H
18
19#include <QListView>
20#include "qgis_sip.h"
21#include <qdebug.h>
22
23#include "qgsfeature.h" // For QgsFeatureIds
24#include "qgis_gui.h"
25#include <QTimer>
26
32class QgsVectorLayer;
35class QRect;
36class QgsActionMenu;
37
46class GUI_EXPORT QgsFeatureListView : public QListView
47{
48 Q_OBJECT
49
50 public:
51
57 explicit QgsFeatureListView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
58
63 QgsVectorLayerCache *layerCache();
64
65#ifdef __clang__
66#pragma clang diagnostic push
67#pragma clang diagnostic ignored "-Woverloaded-virtual"
68#endif
69
75 virtual void setModel( QgsFeatureListModel *featureListModel );
76#ifdef __clang__
77#pragma clang diagnostic pop
78#endif
79
86
95 bool setDisplayExpression( const QString &displayExpression );
96
104 const QString displayExpression() const;
105
111 QString parserErrorString();
112
118 QgsFeatureIds currentEditSelection();
119
125 void setCurrentFeatureEdited( bool state );
126
131 void setFeatureSelectionManager( QgsIFeatureSelectionManager *featureSelectionManager );
132
133 protected:
134 void mouseMoveEvent( QMouseEvent *event ) override;
135 void mousePressEvent( QMouseEvent *event ) override;
136 void mouseReleaseEvent( QMouseEvent *event ) override;
137 void keyPressEvent( QKeyEvent *event ) override;
138 void contextMenuEvent( QContextMenuEvent *event ) override;
139
140 signals:
141
147
154 void currentEditSelectionProgressChanged( int progress, int count );
155
160 void displayExpressionChanged( const QString &expression );
161
164
170 void willShowContextMenu( QgsActionMenu *menu, const QModelIndex &atIndex );
171
172 public slots:
173
179 void setEditSelection( const QgsFeatureIds &fids );
180
187 void setEditSelection( const QModelIndex &index, QItemSelectionModel::SelectionFlags command );
188
192 void selectAll() override;
193
194 void repaintRequested( const QModelIndexList &indexes );
195 void repaintRequested();
196
201 void editFirstFeature() {editOtherFeature( First );}
202
207 void editNextFeature() {editOtherFeature( Next );}
208
213 void editPreviousFeature() {editOtherFeature( Previous );}
214
219 void editLastFeature() {editOtherFeature( Last );}
220
221
222
223 private slots:
224 void editSelectionChanged( const QItemSelection &selected, const QItemSelection &deselected );
225
232 void ensureEditSelection( bool inSelection = false );
233
234 private:
235 void selectRow( const QModelIndex &index, bool anchor );
236
237 void updateEditSelection( bool inSelection = false );
238
239 enum PositionInList
240 {
241 First,
242 Next,
243 Previous,
244 Last
245 };
246
247 void editOtherFeature( PositionInList positionInList );
248
249
250 QgsFeatureListModel *mModel = nullptr;
251 QItemSelectionModel *mCurrentEditSelectionModel = nullptr;
252 QgsFeatureSelectionModel *mFeatureSelectionModel = nullptr;
253 QgsIFeatureSelectionManager *mOwnedFeatureSelectionManager = nullptr;
254 QgsIFeatureSelectionManager *mFeatureSelectionManager = nullptr;
255 QgsFeatureListViewDelegate *mItemDelegate = nullptr;
256
257 enum class DragMode
258 {
259 Inactive,
260 ExpandSelection,
261 MoveSelection
262 };
263
264 DragMode mDragMode = DragMode::Inactive;
265
266 int mRowAnchor = 0;
267 QItemSelectionModel::SelectionFlags mCtrlDragSelectionFlag;
268
269 QTimer mUpdateEditSelectionTimerWithSelection;
270 QTimer mUpdateEditSelectionTimerWithoutSelection;
271
272 QgsFeatureId mLastEditSelectionFid;
273
274 friend class QgsDualView;
275};
276
277#endif
This class is a menu that is populated automatically with the actions defined for a given layer.
Definition: qgsactionmenu.h:39
A model backed by a QgsVectorLayerCache which is able to provide feature/attribute information to a Q...
This widget is used to show the attributes of a set of features of a QgsVectorLayer.
Definition: qgsdualview.h:45
Shows a list of features and renders a edit button next to each feature.
void currentEditSelectionProgressChanged(int progress, int count)
Emitted whenever the current edit selection has been changed.
void editNextFeature()
editNextFeature will try to edit next feature of the list
void editLastFeature()
editLastFeature will try to edit the last feature of the list
void editFirstFeature()
editFirstFeature will try to edit the first feature of the list
void displayExpressionChanged(const QString &expression)
Emitted whenever the display expression is successfully changed.
void editPreviousFeature()
editPreviousFeature will try to edit previous feature of the list
void willShowContextMenu(QgsActionMenu *menu, const QModelIndex &atIndex)
Emitted when the context menu is created to add the specific actions to it.
QgsFeatureListModel * featureListModel()
Gets the featureListModel used by this view.
void currentEditSelectionChanged(QgsFeature &feat)
Emitted whenever the current edit selection has been changed.
void aboutToChangeEditSelection(bool &ok)
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Is an interface class to abstract feature selection handling.
This class caches features of a given QgsVectorLayer.
Represents a vector layer which manages a vector based data sets.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_SKIP
Definition: qgis_sip.h:126
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28