QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
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 
35 class QTreeWidget;
36 class QTreeWidgetItem;
37 class QgsFeature;
38 class QgsVectorLayer;
40 class 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 
60 class 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 
76  QgsFeatureRequest mRequest;
77  QgsFeatureIds mSelectedFeatureIds;
78 };
79 #endif
80 
82 
90 {
91 
92  Q_OBJECT
93  Q_PROPERTY( QgsDualView::ViewMode viewMode READ viewMode WRITE setViewMode )
94  Q_PROPERTY( Buttons visibleButtons READ visibleButtons WRITE setVisibleButtons )
95 
96  public:
97 
102  enum Button
103  {
104  NoButton = 0,
105  Link = 1 << 1,
106  Unlink = 1 << 2,
107  SaveChildEdits = 1 << 3,
108  AddChildFeature = 1 << 4,
109  DuplicateChildFeature = 1 << 5,
110  DeleteChildFeature = 1 << 6,
111  ZoomToChildFeature = 1 << 7,
112  AllButtons = Link | Unlink | SaveChildEdits | AddChildFeature | DuplicateChildFeature | DeleteChildFeature | ZoomToChildFeature
113  };
114  Q_ENUM( Button )
115  Q_DECLARE_FLAGS( Buttons, Button )
116  Q_FLAG( Buttons )
117 
118 
123  QgsRelationEditorWidget( const QVariantMap &config, QWidget *parent SIP_TRANSFERTHIS = nullptr );
124 
126  void setViewMode( QgsDualView::ViewMode mode );
127 
129  QgsDualView::ViewMode viewMode() {return mViewMode;}
130 
135  QgsIFeatureSelectionManager *featureSelectionManager();
136 
142  void setEditorContext( const QgsAttributeEditorContext &context ) override;
143 
147  void setVisibleButtons( const Buttons &buttons );
148 
152  Buttons visibleButtons() const;
153 
158  Q_DECL_DEPRECATED void duplicateFeature() SIP_DEPRECATED;
159 
164  void duplicateSelectedFeatures();
165 
169  void unlinkSelectedFeatures();
170 
174  void deleteSelectedFeatures();
175 
179  void zoomToSelectedFeatures();
180 
184  QVariantMap config() const override;
185 
189  void setConfig( const QVariantMap &config ) override;
190 
191  public slots:
192  void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) override;
193 
194  protected:
195  virtual void updateUi() override;
196  void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature ) override;
197  void afterSetRelationFeature() override;
198  void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation ) override;
199  void afterSetRelations() override;
200 
201  private slots:
202  void setViewMode( int mode ) {setViewMode( static_cast<QgsDualView::ViewMode>( mode ) );}
203  void updateButtons();
204 
205  void addFeature();
206  void addFeatureGeometry();
207  void toggleEditing( bool state );
208  void showContextMenu( QgsActionMenu *menu, QgsFeatureId fid );
209  void mapToolDeactivated();
210  void onKeyPressed( QKeyEvent *e );
211  void onDigitizingCompleted( const QgsFeature &feature );
212 
213  void multiEditItemSelectionChanged();
214 
215  private:
216 
217  enum class MultiEditFeatureType : int
218  {
219  Parent,
220  Child
221  };
222 
223  enum class MultiEditTreeWidgetRole : int
224  {
225  FeatureType = Qt::UserRole + 1,
226  FeatureId = Qt::UserRole + 2
227  };
228 
229  void initDualView( QgsVectorLayer *layer, const QgsFeatureRequest &request );
230  void setMapTool( QgsMapTool *mapTool );
231  void unsetMapTool();
232  QgsFeatureIds selectedChildFeatureIds() const;
233  void updateUiSingleEdit();
234  void updateUiMultiEdit();
235  QTreeWidgetItem *createMultiEditTreeWidgetItem( const QgsFeature &feature, QgsVectorLayer *layer, MultiEditFeatureType type );
236 
237  QgsDualView *mDualView = nullptr;
238  QPointer<QgsMessageBarItem> mMessageBarItem;
240 
241  QToolButton *mToggleEditingButton = nullptr;
242  QToolButton *mSaveEditsButton = nullptr;
243  QToolButton *mAddFeatureButton = nullptr;
244  QToolButton *mDuplicateFeatureButton = nullptr;
245  QToolButton *mDeleteFeatureButton = nullptr;
246  QToolButton *mLinkFeatureButton = nullptr;
247  QToolButton *mUnlinkFeatureButton = nullptr;
248  QToolButton *mZoomToFeatureButton = nullptr;
249  QToolButton *mFormViewButton = nullptr;
250  QToolButton *mTableViewButton = nullptr;
251  QToolButton *mAddFeatureGeometryButton = nullptr;
252  QLabel *mMultiEditInfoLabel = nullptr;
253  QStackedWidget *mStackedWidget = nullptr;
254  QWidget *mMultiEditStackedWidgetPage = nullptr;
255  QTreeWidget *mMultiEditTreeWidget = nullptr;
257  QButtonGroup *mViewModeButtonGroup = nullptr;
258  QgsVectorLayerSelectionManager *mFeatureSelectionMgr = nullptr;
259 
260  Buttons mButtonsVisibility = Button::AllButtons;
261  bool mShowFirstFeature = true;
262 
263  QList<QTreeWidgetItem *> mMultiEditPreviousSelectedItems;
264  QgsFeatureIds mMultiEdit1NJustAddedIds;
265 
266  friend class TestQgsRelationEditorWidget;
267 };
268 
269 
276 class GUI_EXPORT QgsRelationEditorConfigWidget : public QgsAbstractRelationEditorConfigWidget, private Ui::QgsRelationEditorConfigWidgetBase
277 {
278  Q_OBJECT
279 
280  public:
281 
288  explicit QgsRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
289 
295  QVariantMap config();
296 
302  void setConfig( const QVariantMap &config );
303 
304 };
305 
306 
307 #ifndef SIP_RUN
308 
317 {
318  public:
320 
321  QString type() const override;
322 
323  QString name() const override;
324 
325  QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const override;
326 
327  QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const override;
328 
329 };
330 #endif
331 
332 
333 #endif // QGSRELATIONEDITORWIDGET_H
QgsAbstractRelationEditorWidgetFactory
Factory class for creating relation widgets and their corresponding config widgets.
Definition: qgsabstractrelationeditorwidget.h:424
QgsAbstractRelationEditorWidget::addFeature
QgsFeatureIds addFeature(const QgsGeometry &geometry=QgsGeometry())
Adds new features with given geometry Returns the Id of added features.
Definition: qgsabstractrelationeditorwidget.cpp:218
QgsRelationEditorWidget::Button
Button
Possible buttons shown in the relation editor.
Definition: qgsrelationeditorwidget.h:102
QgsAbstractRelationEditorWidgetFactory::name
virtual QString name() const =0
Returns the human readable identifier name of this widget type.
QgsAbstractRelationEditorConfigWidget
This class should be subclassed for every configurable relation widget type.
Definition: qgsabstractrelationeditorwidget.h:343
QgsRelationEditorWidget
The default relation widget in QGIS.
Definition: qgsrelationeditorwidget.h:89
QgsVectorLayerTools
Methods in this class are used to handle basic operations on vector layers. With an implementation of...
Definition: qgsvectorlayertools.h:39
qgsdualview.h
QgsAbstractRelationEditorWidgetFactory::configWidget
virtual QgsAbstractRelationEditorConfigWidget * configWidget(const QgsRelation &relation, QWidget *parent) const =0
Override this in your implementation.
QgsAbstractRelationEditorWidget::setEditorContext
virtual void setEditorContext(const QgsAttributeEditorContext &context)
Sets the editor context.
Definition: qgsabstractrelationeditorwidget.cpp:95
QgsDualView
This widget is used to show the attributes of a set of features of a QgsVectorLayer....
Definition: qgsdualview.h:44
qgsrelationeditorwidget.h
QgsMapTool
Abstract base class for all map tools. Map tools are user interactive tools for manipulating the map ...
Definition: qgsmaptool.h:70
SIP_DEPRECATED
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
QgsFeatureRequest
This class wraps a request for features to a vector layer (or directly its vector data provider).
Definition: qgsfeaturerequest.h:83
qgsvectorlayerselectionmanager.h
QgsAbstractRelationEditorWidgetFactory::type
virtual QString type() const =0
Returns the machine readable identifier name of this widget type.
QObjectUniquePtr< QgsMapToolDigitizeFeature >
QgsAbstractRelationEditorWidgetFactory::create
virtual QgsAbstractRelationEditorWidget * create(const QVariantMap &config, QWidget *parent=nullptr) const =0
Override this in your implementation.
qobjectuniqueptr.h
QgsDualView::AttributeEditor
@ AttributeEditor
Show a list of the features, where one can be chosen and the according attribute dialog will be prese...
Definition: qgsdualview.h:68
QgsRelationEditorWidgetFactory
Factory class for creating a relation editor widget and the respective config widget.
Definition: qgsrelationeditorwidget.h:316
QgsActionMenu
This class is a menu that is populated automatically with the actions defined for a given layer.
Definition: qgsactionmenu.h:37
QgsMapToolDigitizeFeature
This tool digitizes geometry of new point/line/polygon features on already existing vector layers Onc...
Definition: qgsmaptooldigitizefeature.h:31
QgsAbstractRelationEditorConfigWidget::setConfig
virtual void setConfig(const QVariantMap &config)=0
Update the configuration widget to represent the given configuration.
qgsattributeeditorcontext.h
QgsVectorLayerSelectionManager
Definition: qgsvectorlayerselectionmanager.h:32
qgsrelation.h
QgsFeatureIds
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
QgsAbstractRelationEditorWidget::toggleEditing
void toggleEditing(bool state)
Toggles editing state of the widget.
Definition: qgsabstractrelationeditorwidget.cpp:195
qgsabstractrelationeditorwidget.h
QgsDualView::ViewMode
ViewMode
The view modes, in which this widget can present information.
Definition: qgsdualview.h:55
QgsRelationEditorWidget::viewMode
QgsDualView::ViewMode viewMode()
Gets the view mode for the dual view.
Definition: qgsrelationeditorwidget.h:129
QgsVectorLayerSelectionManager::selectedFeatureCount
int selectedFeatureCount() override
Returns the number of features that are selected in this layer.
Definition: qgsvectorlayerselectionmanager.cpp:27
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:391
QgsAbstractRelationEditorWidget::duplicateFeature
void duplicateFeature(const QgsFeatureId &fid)
Duplicates a feature.
Definition: qgsabstractrelationeditorwidget.cpp:700
QgsRelationEditorConfigWidget
Creates a new configuration widget for the relation editor widget.
Definition: qgsrelationeditorwidget.h:276
QgsRelation
Definition: qgsrelation.h:42
QgsFeature
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:55
QgsAbstractRelationEditorConfigWidget::config
virtual QVariantMap config()=0
Create a configuration from the current GUI state.
QgsIFeatureSelectionManager
Is an interface class to abstract feature selection handling.
Definition: qgsifeatureselectionmanager.h:31
QgsAttributeEditorContext
This class contains context information for attribute editor widgets. It will be passed to embedded w...
Definition: qgsattributeeditorcontext.h:40
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QgsVectorLayerSelectionManager::selectedFeatureIds
const QgsFeatureIds & selectedFeatureIds() const override
Returns reference to identifiers of selected features.
Definition: qgsvectorlayerselectionmanager.cpp:47
QgsAbstractRelationEditorWidget
Base class to build new relation widgets.
Definition: qgsabstractrelationeditorwidget.h:45
QgsFeatureId
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28