QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
qgsrelationeditorwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsrelationeditorwidget.h
3 --------------------------------------
4 Date : 17.5.2013
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 QGSRELATIONEDITORWIDGET_H
17#define QGSRELATIONEDITORWIDGET_H
18
19#include <QWidget>
20#include <QToolButton>
21#include <QButtonGroup>
22#include <QGridLayout>
23#include "qobjectuniqueptr.h"
24
25#include "ui_qgsrelationeditorconfigwidgetbase.h"
26
28#include "qobjectuniqueptr.h"
30#include "qgsdualview.h"
31#include "qgsrelation.h"
33#include "qgis_gui.h"
34
35class QTreeWidget;
36class QTreeWidgetItem;
37class QgsFeature;
38class QgsVectorLayer;
40class QgsMapTool;
42
43#ifdef SIP_RUN
44//%ModuleHeaderCode
45// fix to allow compilation with sip that for some reason
46// doesn't add this include to the file where the code from
47// ConvertToSubClassCode goes.
49//%End
50#endif
51
52
54#ifndef SIP_RUN
55
60class QgsFilteredSelectionManager : public QgsVectorLayerSelectionManager
61{
62 Q_OBJECT
63
64 public:
65 QgsFilteredSelectionManager( QgsVectorLayer *layer, const QgsFeatureRequest &request, QObject *parent = nullptr );
66
67 const QgsFeatureIds &selectedFeatureIds() const override;
68 int selectedFeatureCount() override;
69
70 private slots:
71
72 void onSelectionChanged( const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect ) override;
73
74 private:
75 QgsFeatureRequest mRequest;
76 QgsFeatureIds mSelectedFeatureIds;
77};
78#endif
80
81
89{
90 Q_OBJECT
91 Q_PROPERTY( QgsDualView::ViewMode viewMode READ viewMode WRITE setViewMode )
92 Q_PROPERTY( Buttons visibleButtons READ visibleButtons WRITE setVisibleButtons )
93
94 public:
99 enum Button SIP_ENUM_BASETYPE( IntFlag )
100 {
101 NoButton = 0,
102 Link = 1 << 1,
103 Unlink = 1 << 2,
104 SaveChildEdits = 1 << 3,
105 AddChildFeature = 1 << 4,
106 DuplicateChildFeature = 1 << 5,
107 DeleteChildFeature = 1 << 6,
108 ZoomToChildFeature = 1 << 7,
109 AllButtons = Link | Unlink | SaveChildEdits | AddChildFeature | DuplicateChildFeature | DeleteChildFeature | ZoomToChildFeature
110 };
111 Q_ENUM( Button )
112 Q_DECLARE_FLAGS( Buttons, Button )
113 Q_FLAG( Buttons )
114
120 QgsRelationEditorWidget( const QVariantMap &config, QWidget *parent SIP_TRANSFERTHIS = nullptr );
121
123 void setViewMode( QgsDualView::ViewMode mode );
124
126 QgsDualView::ViewMode viewMode() { return mViewMode; }
127
132 QgsIFeatureSelectionManager *featureSelectionManager();
133
139 void setEditorContext( const QgsAttributeEditorContext &context ) override;
140
144 void setVisibleButtons( const Buttons &buttons );
145
149 Buttons visibleButtons() const;
150
155 Q_DECL_DEPRECATED void duplicateFeature() SIP_DEPRECATED;
156
161 void duplicateSelectedFeatures();
162
166 void unlinkSelectedFeatures();
167
171 void deleteSelectedFeatures();
172
176 void zoomToSelectedFeatures();
177
181 QVariantMap config() const override;
182
186 void setConfig( const QVariantMap &config ) override;
187
188 public slots:
189 void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) override;
190
191 protected:
192 virtual void updateUi() override;
193 void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature ) override;
194 void afterSetRelationFeature() override;
195 void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation ) override;
196 void afterSetRelations() override;
197
198 private slots:
199 void setViewMode( int mode ) { setViewMode( static_cast<QgsDualView::ViewMode>( mode ) ); }
200 void updateButtons();
201
202 void addFeature();
203 void addFeatureGeometry();
204
205 // TODO -- someone familiar with this widget needs to fix this:
206 void toggleEditing( bool state ); // cppcheck-suppress duplInheritedMember
207
208 void showContextMenu( QgsActionMenu *menu, QgsFeatureId fid );
209 void mapToolDeactivated();
210 void onDigitizingCompleted( const QgsFeature &feature );
211 void onDigitizingCanceled();
212 void multiEditItemSelectionChanged();
213 void linkFeature();
214
215 private:
216 void digitizingFinished();
217
218 enum class MultiEditFeatureType : int
219 {
220 Parent,
221 Child
222 };
223
224 enum class MultiEditTreeWidgetRole : int
225 {
226 FeatureType = Qt::UserRole + 1,
227 FeatureId = Qt::UserRole + 2
228 };
229
230 void initDualView( QgsVectorLayer *layer, const QgsFeatureRequest &request );
231 void setMapTool( QgsMapTool *mapTool );
232 void unsetMapTool();
233 QgsFeatureIds selectedChildFeatureIds() const;
234 void updateUiSingleEdit();
235 void updateUiMultiEdit();
236 QTreeWidgetItem *createMultiEditTreeWidgetItem( const QgsFeature &feature, QgsVectorLayer *layer, MultiEditFeatureType type );
237
238 QgsDualView *mDualView = nullptr;
239 QPointer<QgsMessageBarItem> mMessageBarItem;
241
242 QToolButton *mToggleEditingButton = nullptr;
243 QToolButton *mSaveEditsButton = nullptr;
244 QToolButton *mAddFeatureButton = nullptr;
245 QToolButton *mDuplicateFeatureButton = nullptr;
246 QToolButton *mDeleteFeatureButton = nullptr;
247 QToolButton *mLinkFeatureButton = nullptr;
248 QToolButton *mUnlinkFeatureButton = nullptr;
249 QToolButton *mZoomToFeatureButton = nullptr;
250 QToolButton *mFormViewButton = nullptr;
251 QToolButton *mTableViewButton = nullptr;
252 QToolButton *mAddFeatureGeometryButton = nullptr;
253 QLabel *mMultiEditInfoLabel = nullptr;
254 QStackedWidget *mStackedWidget = nullptr;
255 QWidget *mMultiEditStackedWidgetPage = nullptr;
256 QTreeWidget *mMultiEditTreeWidget = nullptr;
258 QButtonGroup *mViewModeButtonGroup = nullptr;
259 QgsVectorLayerSelectionManager *mFeatureSelectionMgr = nullptr;
260
261 Buttons mButtonsVisibility = Button::AllButtons;
262 bool mShowFirstFeature = true;
263 bool mAllowAddChildFeatureWithNoGeometry = true;
264 QString mFilterExpression;
265
266 QList<QTreeWidgetItem *> mMultiEditPreviousSelectedItems;
267 QgsFeatureIds mMultiEdit1NJustAddedIds;
268
269 friend class TestQgsRelationEditorWidget;
270};
271
272
279class GUI_EXPORT QgsRelationEditorConfigWidget : public QgsAbstractRelationEditorConfigWidget, private Ui::QgsRelationEditorConfigWidgetBase
280{
281 Q_OBJECT
282
283 public:
290 explicit QgsRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
291
297 QVariantMap config() override;
298
304 void setConfig( const QVariantMap &config ) override;
305
309 void mEditExpression_clicked();
310};
311
312
313#ifndef SIP_RUN
314
323{
324 public:
326
327 QString type() const override;
328
329 QString name() const override;
330
331 QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const override;
332
333 QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const override;
334};
335#endif
336
337
338#endif // QGSRELATIONEDITORWIDGET_H
Keeps a pointer to a QObject and deletes it whenever this object is deleted.
This class should be subclassed for every configurable relation widget type.
Factory class for creating relation widgets and their corresponding config widgets.
Base class to build new relation widgets.
void toggleEditing(bool state)
Toggles editing state of the widget.
QgsFeatureIds addFeature(const QgsGeometry &geometry=QgsGeometry())
Adds new features with given geometry Returns the Id of added features.
virtual void setConfig(const QVariantMap &config)=0
Defines the widget configuration.
virtual void setEditorContext(const QgsAttributeEditorContext &context)
Sets the editor context.
void linkFeature(const QString &filterExpression=QString())
Links a new feature to the relation.
virtual QVariantMap config() const =0
Returns the widget configuration.
void duplicateFeature(const QgsFeatureId &fid)
Duplicates a feature.
This class is a menu that is populated automatically with the actions defined for a given layer.
This class contains context information for attribute editor widgets.
This widget is used to show the attributes of a set of features of a QgsVectorLayer.
Definition qgsdualview.h:46
ViewMode
The view modes, in which this widget can present information.
Definition qgsdualview.h:56
@ AttributeEditor
Show a list of the features, where one can be chosen and the according attribute dialog will be prese...
Definition qgsdualview.h:68
This class wraps a request for features to a vector layer (or directly its vector data provider).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
Is an interface class to abstract feature selection handling.
This tool digitizes geometry of new point/line/polygon features on already existing vector layers Onc...
Abstract base class for all map tools.
Definition qgsmaptool.h:71
Creates a new configuration widget for the relation editor widget.
Factory class for creating a relation editor widget and the respective config widget.
The default relation widget in QGIS.
Button
Possible buttons shown in the relation editor.
Represents a relationship between two vector layers.
Definition qgsrelation.h:44
int selectedFeatureCount() override
Returns the number of features that are selected in this layer.
const QgsFeatureIds & selectedFeatureIds() const override
Returns reference to identifiers of selected features.
Methods in this class are used to handle basic operations on vector layers.
Represents a vector layer which manages a vector based data sets.
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:278
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features