QGIS API Documentation  3.23.0-Master (eb871beae0)
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 
157  QgsFeature feature() const;
158 
162  bool forceSuppressFormPopup() const;
163 
168  void setForceSuppressFormPopup( bool forceSuppressFormPopup );
169 
173  virtual QVariantMap config() const = 0;
174 
178  virtual void setConfig( const QVariantMap &config ) = 0;
179 
184  bool multiEditModeActive() const;
185 
186  public slots:
187 
191  virtual void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) = 0;
192 
193  protected slots:
194 
198  void toggleEditing( bool state );
199 
203  void saveEdits();
204 
209  QgsFeatureIds addFeature( const QgsGeometry &geometry = QgsGeometry() );
210 
214  void deleteFeature( QgsFeatureId fid = QgsFeatureId() );
215 
219  void linkFeature();
220 
224  void onLinkFeatureDlgAccepted();
225 
229  void unlinkFeature( QgsFeatureId fid = QgsFeatureId() );
230 
234  void duplicateFeature( const QgsFeatureId &fid );
235 
239  void duplicateFeatures( const QgsFeatureIds &fids );
240 
241  protected:
242 
244  QgsRelation mRelation;
245  QgsRelation mNmRelation;
246  QgsFeatureList mFeatureList;
247 
248  bool mLayerInSameTransactionGroup = false;
249 
250  bool mForceSuppressFormPopup = false;
251 
255  void showEvent( QShowEvent * );
256 
261  Q_DECL_DEPRECATED void updateTitle() SIP_DEPRECATED;
262 
266  void deleteFeatures( const QgsFeatureIds &fids );
267 
271  void unlinkFeatures( const QgsFeatureIds &fids );
272 
273  // Following virtual methods need to be protected so they can be overridden in bindings
274 
281  virtual void updateUi();
282 
287  Q_DECL_DEPRECATED virtual void setTitle( const QString &title ) SIP_DEPRECATED;
288 
293  virtual void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature );
294 
299  virtual void afterSetRelationFeature();
300 
305  virtual void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation );
306 
311  virtual void afterSetRelations();
312 };
313 
314 
324 class GUI_EXPORT QgsAbstractRelationEditorConfigWidget : public QWidget
325 {
326 
327 #ifdef SIP_RUN
329  if ( qobject_cast<QgsRelationEditorConfigWidget *>( sipCpp ) )
330  sipType = sipType_QgsRelationEditorConfigWidget;
331  else
332  sipType = 0;
333  SIP_END
334 #endif
335 
336  Q_OBJECT
337  public:
338 
345  explicit QgsAbstractRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
346 
352  virtual QVariantMap config() = 0;
353 
359  virtual void setConfig( const QVariantMap &config ) = 0;
360 
366  QgsVectorLayer *layer();
367 
373  QgsRelation relation() const;
374 
380  virtual void setNmRelation( const QgsRelation &nmRelation );
381 
387  virtual QgsRelation nmRelation() const;
388 
389  private:
390  QgsVectorLayer *mLayer = nullptr;
391  QgsRelation mRelation;
392  QgsRelation mNmRelation;
393 };
394 
395 
397 
398 
406 {
407  public:
408 
413 
415 
419  virtual QString type() const = 0;
420 
424  virtual QString name() const = 0;
425 
436  virtual QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const = 0 SIP_FACTORY;
437 
447  virtual QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const = 0 SIP_FACTORY;
448 };
449 
450 #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: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
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:834
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