QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
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  signals:
174 
182  void relatedFeaturesChanged();
183 
184  public slots:
185 
189  virtual void parentFormValueChanged( const QString &attribute, const QVariant &newValue ) = 0;
190 
191  protected slots:
192 
196  void toggleEditing( bool state );
197 
201  void saveEdits();
202 
206  void addFeature( const QgsGeometry &geometry = QgsGeometry() );
207 
211  void deleteFeature( QgsFeatureId fid = QgsFeatureId() );
212 
216  void linkFeature();
217 
221  void onLinkFeatureDlgAccepted();
222 
226  void unlinkFeature( QgsFeatureId fid = QgsFeatureId() );
227 
231  void duplicateFeature( const QgsFeatureId &fid );
232 
236  void duplicateFeatures( const QgsFeatureIds &fids );
237 
238  protected:
239 
241  QgsRelation mRelation;
242  QgsRelation mNmRelation;
243  QgsFeature mFeature;
244 
245  bool mLayerInSameTransactionGroup = false;
246 
247  bool mForceSuppressFormPopup = false;
248 
252  void showEvent( QShowEvent * );
253 
258  Q_DECL_DEPRECATED void updateTitle() SIP_DEPRECATED;
259 
263  void deleteFeatures( const QgsFeatureIds &fids );
264 
268  void unlinkFeatures( const QgsFeatureIds &fids );
269 
270  // Following virtual methods need to be protected so they can be overridden in bindings
271 
278  virtual void updateUi();
279 
284  Q_DECL_DEPRECATED virtual void setTitle( const QString &title ) SIP_DEPRECATED;
285 
290  virtual void beforeSetRelationFeature( const QgsRelation &newRelation, const QgsFeature &newFeature );
291 
296  virtual void afterSetRelationFeature();
297 
302  virtual void beforeSetRelations( const QgsRelation &newRelation, const QgsRelation &newNmRelation );
303 
308  virtual void afterSetRelations();
309 };
310 
311 
321 class GUI_EXPORT QgsAbstractRelationEditorConfigWidget : public QWidget
322 {
323 
324 #ifdef SIP_RUN
326  if ( qobject_cast<QgsRelationEditorConfigWidget *>( sipCpp ) )
327  sipType = sipType_QgsRelationEditorConfigWidget;
328  else
329  sipType = 0;
330  SIP_END
331 #endif
332 
333  Q_OBJECT
334  public:
335 
342  explicit QgsAbstractRelationEditorConfigWidget( const QgsRelation &relation, QWidget *parent SIP_TRANSFERTHIS );
343 
349  virtual QVariantMap config() = 0;
350 
356  virtual void setConfig( const QVariantMap &config ) = 0;
357 
363  QgsVectorLayer *layer();
364 
370  QgsRelation relation() const;
371 
377  virtual void setNmRelation( const QgsRelation &nmRelation );
378 
384  virtual QgsRelation nmRelation() const;
385 
386  private:
387  QgsVectorLayer *mLayer = nullptr;
388  QgsRelation mRelation;
389  QgsRelation mNmRelation;
390 };
391 
392 
394 
395 
403 {
404  public:
405 
410 
412 
416  virtual QString type() const = 0;
417 
421  virtual QString name() const = 0;
422 
433  virtual QgsAbstractRelationEditorWidget *create( const QVariantMap &config, QWidget *parent = nullptr ) const = 0 SIP_FACTORY;
434 
444  virtual QgsAbstractRelationEditorConfigWidget *configWidget( const QgsRelation &relation, QWidget *parent ) const = 0 SIP_FACTORY;
445 };
446 
447 #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
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