QGIS API Documentation 3.27.0-Master (9c08adf5ef)
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#include "qgsactionmenu.h"
23
24#include "qgsfeature.h" // For QgsFeatureIds
25#include "qgis_gui.h"
26#include <QTimer>
27
33class QgsVectorLayer;
36class QRect;
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 &deselected, const QItemSelection &selected );
225
232 void ensureEditSelection( bool inSelection = false );
233
234 private:
235 void selectRow( const QModelIndex &index, bool anchor );
236
237 enum PositionInList
238 {
239 First,
240 Next,
241 Previous,
242 Last
243 };
244
245 void editOtherFeature( PositionInList positionInList );
246
247
248 QgsFeatureListModel *mModel = nullptr;
249 QItemSelectionModel *mCurrentEditSelectionModel = nullptr;
250 QgsFeatureSelectionModel *mFeatureSelectionModel = nullptr;
251 QgsIFeatureSelectionManager *mOwnedFeatureSelectionManager = nullptr;
252 QgsIFeatureSelectionManager *mFeatureSelectionManager = nullptr;
253 QgsFeatureListViewDelegate *mItemDelegate = nullptr;
254
255 enum class DragMode
256 {
257 Inactive,
258 ExpandSelection,
259 MoveSelection
260 };
261
262 DragMode mDragMode = DragMode::Inactive;
263
264 int mRowAnchor = 0;
265 QItemSelectionModel::SelectionFlags mCtrlDragSelectionFlag;
266
267 QTimer mUpdateEditSelectionTimer;
268
269 friend class QgsDualView;
270};
271
272#endif
This class is a menu that is populated automatically with the actions defined for a given layer.
Definition: qgsactionmenu.h:38
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