QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsabstractrelationeditorwidget.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsabstractrelationeditorwidget.h
3  ----------------------
4  begin : October 2020
5  copyright : (C) 2020 by Ivan Ivanov
6  email : [email protected]
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSABSTRACTRELATIONEDITORWIDGET_H
19 #define QGSABSTRACTRELATIONEDITORWIDGET_H
20 
21 #include <QWidget>
22 #include "qobjectuniqueptr.h"
23 
25 #include "qgsrelation.h"
26 #include "qgis_sip.h"
27 #include "qgis_gui.h"
28 
29 #ifdef SIP_RUN
30 // this is needed for the "convert to subclass" code below to compile
31 % ModuleHeaderCode
33 % End
34 #endif
35 
36 class QgsFeature;
37 class QgsVectorLayer;
38 
45 class GUI_EXPORT QgsAbstractRelationEditorWidget : public QWidget
46 {
47 
48 #ifdef SIP_RUN
50  if ( qobject_cast<QgsRelationEditorWidget *>( sipCpp ) )
51  sipType = sipType_QgsRelationEditorWidget;
52  else
53  sipType = 0;
54  SIP_END
55 #endif
56 
57  Q_OBJECT
58 
59  public:
60 
61 
65  QgsAbstractRelationEditorWidget( const QVariantMap &config, QWidget *parent SIP_TRANSFERTHIS = nullptr );
66 
70  void setRelationFeature( const QgsRelation &relation, const QgsFeature &feature );
71 
81  void setRelations( const QgsRelation &relation, const QgsRelation &nmrelation );
82 
87  QgsRelation relation() const {return mRelation;}
88 
93  QgsRelation nmRelation() const {return mNmRelation;}
94 
98  void setFeature( const QgsFeature &feature, bool update = true );
99 
105  virtual void setEditorContext( const QgsAttributeEditorContext &context );
106 
110  QgsAttributeEditorContext editorContext( ) const;
111 
116  Q_DECL_DEPRECATED bool showLabel() const SIP_DEPRECATED;
117 
122  Q_DECL_DEPRECATED void setShowLabel( bool showLabel ) SIP_DEPRECATED;
123 
127  QVariant nmRelationId() const;
128 
133  void setNmRelationId( const QVariant &nmRelationId = QVariant() );
134 
139  Q_DECL_DEPRECATED QString label() const SIP_DEPRECATED;
140 
145  void setLabel( const QString &label = QString() );
146 
150  QgsFeature feature() const;
151 
155  bool forceSuppressFormPopup() const;
156 
161  void setForceSuppressFormPopup( bool forceSuppressFormPopup );
162 
166  virtual QVariantMap config() const = 0;
167 
171  virtual void setConfig( const QVariantMap &config ) = 0;
172 
173  public slots:
174 
178  virtual void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) = 0;
179 
180  protected slots:
181 
185  void toggleEditing( bool state );
186 
190  void saveEdits();
191 
195  void addFeature( const QgsGeometry &geometry = QgsGeometry() );
196 
200  void deleteFeature( QgsFeatureId fid = QgsFeatureId() );
201 
205  void linkFeature();
206 
210  void onLinkFeatureDlgAccepted();
211 
215  void unlinkFeature( QgsFeatureId fid = QgsFeatureId() );
216 
220  void duplicateFeature( const QgsFeatureId &fid );
221 
225  void duplicateFeatures( const QgsFeatureIds &fids );
226 
227  protected:
228 
230  QgsRelation mRelation;
231  QgsRelation mNmRelation;
232  QgsFeature mFeature;
233 
234  bool mLayerInSameTransactionGroup = false;
235 
236  bool mForceSuppressFormPopup = false;
237 
241  void showEvent( QShowEvent * );
242 
247  Q_DECL_DEPRECATED void updateTitle() SIP_DEPRECATED;
248 
252  void deleteFeatures( const QgsFeatureIds &fids );
253 
257  void unlinkFeatures( const QgsFeatureIds &fids );
258 
259  // Following virtual methods need to be protected so they can be overridden in bindings
260 
267  virtual void updateUi();
268 
273  Q_DECL_DEPRECATED virtual void setTitle( const QString &title ) SIP_DEPRECATED;
274 
279  virtual void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature );
280 
285  virtual void afterSetRelationFeature();
286 
291  virtual void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation );
292 
297  virtual void afterSetRelations();
298 };
299 
300 
310 class GUI_EXPORT QgsAbstractRelationEditorConfigWidget : public QWidget
311 {
312 
313 #ifdef SIP_RUN
315  if ( qobject_cast<QgsRelationEditorConfigWidget *>( sipCpp ) )
316  sipType = sipType_QgsRelationEditorConfigWidget;
317  else
318  sipType = 0;
319  SIP_END
320 #endif
321 
322  Q_OBJECT
323  public:
324 
331  explicit QgsAbstractRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
332 
338  virtual QVariantMap config() = 0;
339 
345  virtual void setConfig( const QVariantMap &config ) = 0;
346 
352  QgsVectorLayer *layer();
353 
359  QgsRelation relation() const;
360 
366  virtual void setNmRelation( const QgsRelation &nmRelation );
367 
373  virtual QgsRelation nmRelation() const;
374 
375  private:
376  QgsVectorLayer *mLayer = nullptr;
377  QgsRelation mRelation;
378  QgsRelation mNmRelation;
379 };
380 
381 
383 
384 
392 {
393  public:
394 
399 
401 
405  virtual QString type() const = 0;
406 
410  virtual QString name() const = 0;
411 
422  virtual QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const = 0 SIP_FACTORY;
423 
433  virtual QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const = 0 SIP_FACTORY;
434 };
435 
436 #endif // QGSABSTRACTRELATIONEDITORWIDGET_H
This class should be subclassed for every configurable relation widget type.
virtual QVariantMap config()=0
Create a configuration from the current GUI state.
virtual void setConfig(const QVariantMap &config)=0
Update the configuration widget to represent the given configuration.
Factory class for creating relation widgets and their corresponding config widgets.
virtual QString type() const =0
Returns the machine readable identifier name of this widget type.
virtual QgsAbstractRelationEditorConfigWidget * configWidget(const QgsRelation &relation, QWidget *parent) const =0
Override this in your implementation.
virtual QgsAbstractRelationEditorWidget * create(const QVariantMap &config, QWidget *parent=nullptr) const =0
Override this in your implementation.
virtual QString name() const =0
Returns the human readable identifier name of this widget type.
virtual ~QgsAbstractRelationEditorWidgetFactory()=default
Base class to build new relation widgets.
QgsRelation relation() const
Returns the relation.
QgsRelation nmRelation() const
Returns the nm relation.
This class contains context information for attribute editor widgets.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
Represents a vector layer which manages a vector based data sets.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:177
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_END
Definition: qgis_sip.h:194
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