QGIS API Documentation  3.27.0-Master (bef583a8ef)
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  void setMultiEditFeatureIds( const QgsFeatureIds &fids );
106 
112  virtual void setEditorContext( const QgsAttributeEditorContext &context );
113 
117  QgsAttributeEditorContext editorContext( ) const;
118 
123  Q_DECL_DEPRECATED bool showLabel() const SIP_DEPRECATED;
124 
129  Q_DECL_DEPRECATED void setShowLabel( bool showLabel ) SIP_DEPRECATED;
130 
134  QVariant nmRelationId() const;
135 
140  void setNmRelationId( const QVariant &nmRelationId = QVariant() );
141 
146  Q_DECL_DEPRECATED QString label() const SIP_DEPRECATED;
147 
152  void setLabel( const QString &label = QString() );
153 
159  QgsFeature feature() const;
160 
165  QList<QgsFeature> features() const;
166 
170  bool forceSuppressFormPopup() const;
171 
176  void setForceSuppressFormPopup( bool forceSuppressFormPopup );
177 
181  virtual QVariantMap config() const = 0;
182 
186  virtual void setConfig( const QVariantMap &config ) = 0;
187 
192  bool multiEditModeActive() const;
193 
194  signals:
195 
203  void relatedFeaturesChanged();
204 
205  public slots:
206 
210  virtual void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) = 0;
211 
212  protected slots:
213 
217  void toggleEditing( bool state );
218 
222  void saveEdits();
223 
228  QgsFeatureIds addFeature( const QgsGeometry &geometry = QgsGeometry() );
229 
233  void deleteFeature( QgsFeatureId fid = QgsFeatureId() );
234 
238  void linkFeature();
239 
243  void onLinkFeatureDlgAccepted();
244 
248  void unlinkFeature( QgsFeatureId fid = QgsFeatureId() );
249 
253  void duplicateFeature( const QgsFeatureId &fid );
254 
258  void duplicateFeatures( const QgsFeatureIds &fids );
259 
260  protected:
261 
263  QgsRelation mRelation;
264  QgsRelation mNmRelation;
265  QgsFeatureList mFeatureList;
266 
267  bool mLayerInSameTransactionGroup = false;
268 
269  bool mForceSuppressFormPopup = false;
270 
274  void showEvent( QShowEvent * );
275 
280  Q_DECL_DEPRECATED void updateTitle() SIP_DEPRECATED;
281 
285  void deleteFeatures( const QgsFeatureIds &fids );
286 
290  void unlinkFeatures( const QgsFeatureIds &fids );
291 
292  // Following virtual methods need to be protected so they can be overridden in bindings
293 
300  virtual void updateUi();
301 
306  Q_DECL_DEPRECATED virtual void setTitle( const QString &title ) SIP_DEPRECATED;
307 
312  virtual void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature );
313 
318  virtual void afterSetRelationFeature();
319 
324  virtual void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation );
325 
330  virtual void afterSetRelations();
331 };
332 
333 
343 class GUI_EXPORT QgsAbstractRelationEditorConfigWidget : public QWidget
344 {
345 
346 #ifdef SIP_RUN
348  if ( qobject_cast<QgsRelationEditorConfigWidget *>( sipCpp ) )
349  sipType = sipType_QgsRelationEditorConfigWidget;
350  else
351  sipType = 0;
352  SIP_END
353 #endif
354 
355  Q_OBJECT
356  public:
357 
364  explicit QgsAbstractRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
365 
371  virtual QVariantMap config() = 0;
372 
378  virtual void setConfig( const QVariantMap &config ) = 0;
379 
385  QgsVectorLayer *layer();
386 
392  QgsRelation relation() const;
393 
399  virtual void setNmRelation( const QgsRelation &nmRelation );
400 
406  virtual QgsRelation nmRelation() const;
407 
408  private:
409  QgsVectorLayer *mLayer = nullptr;
410  QgsRelation mRelation;
411  QgsRelation mNmRelation;
412 };
413 
414 
416 
417 
425 {
426  public:
427 
432 
434 
438  virtual QString type() const = 0;
439 
443  virtual QString name() const = 0;
444 
455  virtual QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const = 0 SIP_FACTORY;
456 
466  virtual QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const = 0 SIP_FACTORY;
467 };
468 
469 #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:125
Represents a vector layer which manages a vector based data sets.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
#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:203
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:882
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