QGIS API Documentation  3.23.0-Master (eb871beae0)
qgsattributeeditorcontext.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsattributeeditorcontext.h
3  --------------------------------------
4  Date : 30.7.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 QGSATTRIBUTEEDITORCONTEXT_H
17 #define QGSATTRIBUTEEDITORCONTEXT_H
18 
19 #include <QMap>
20 #include <QWidget>
21 #include <QMetaEnum>
22 
23 #include "qgsdistancearea.h"
24 #include "qgsvectorlayertools.h"
25 #include "qgsvectorlayer.h"
26 #include "qgis_gui.h"
27 #include "qgsproject.h"
28 
29 class QgsMapCanvas;
31 class QgsMessageBar;
32 
40 class GUI_EXPORT QgsAttributeEditorContext
41 {
42  Q_GADGET
43 
44  public:
45 
47  enum Mode
48  {
50  AddFeatureMode,
56  IdentifyMode
57  };
58  Q_ENUM( Mode )
59 
60 
64  {
67  Single
68  };
69 
70  enum FormMode
71  {
74  Popup
75  };
76 
79 
81  : mParentContext( &parentContext )
82  , mVectorLayerTools( parentContext.mVectorLayerTools )
83  , mMapCanvas( parentContext.mMapCanvas )
84  , mMainMessageBar( parentContext.mMainMessageBar )
85  , mCadDockWidget( parentContext.mCadDockWidget )
86  , mDistanceArea( parentContext.mDistanceArea )
87  , mFormFeature( parentContext.mFormFeature )
88  , mFormMode( formMode )
89  {
90  Q_ASSERT( parentContext.vectorLayerTools() );
91  }
92 
93  QgsAttributeEditorContext( const QgsAttributeEditorContext &parentContext, const QgsRelation &relation, RelationMode relationMode, FormMode widgetMode )
94  : mParentContext( &parentContext )
95  , mVectorLayerTools( parentContext.mVectorLayerTools )
96  , mMapCanvas( parentContext.mMapCanvas )
97  , mMainMessageBar( parentContext.mMainMessageBar )
98  , mCadDockWidget( parentContext.mCadDockWidget )
99  , mDistanceArea( parentContext.mDistanceArea )
100  , mRelation( relation )
101  , mRelationMode( relationMode )
102  , mFormMode( widgetMode )
103  {
104  Q_ASSERT( parentContext.vectorLayerTools() );
105  }
106 
112  inline void setDistanceArea( const QgsDistanceArea &distanceArea )
113  {
114  if ( mLayer )
115  {
116  mDistanceArea = distanceArea;
117  mDistanceArea.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
118  }
119  }
120 
126  inline const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
127 
133  inline void setMapCanvas( QgsMapCanvas *mapCanvas ) { mMapCanvas = mapCanvas; }
134 
140  inline QgsMapCanvas *mapCanvas() const { return mMapCanvas; }
141 
148  void setCadDockWidget( QgsAdvancedDigitizingDockWidget *cadDockWidget );
149 
156  QgsAdvancedDigitizingDockWidget *cadDockWidget() const { return mCadDockWidget; }
157 
164  inline void setVectorLayerTools( QgsVectorLayerTools *vlTools ) { mVectorLayerTools = vlTools; }
165  // TODO QGIS 4.0 - rename vlTools to tools
166 
172  inline const QgsVectorLayerTools *vectorLayerTools() const { return mVectorLayerTools; }
173 
182  inline void setRelation( const QgsRelation &relation, RelationMode mode ) { mRelation = relation; mRelationMode = mode; }
183 
190  inline const QgsRelation &relation() const { return mRelation; }
191 
198  inline RelationMode relationMode() const { return mRelationMode; }
199 
204  inline FormMode formMode() const { return mFormMode; }
205 
212  inline void setFormMode( FormMode mode ) { mFormMode = mode; }
213 
219  bool allowCustomUi() const { return mAllowCustomUi; }
220 
228  void setAllowCustomUi( bool allow ) { mAllowCustomUi = allow; }
229 
230  inline const QgsAttributeEditorContext *parentContext() const { return mParentContext; }
231 
237  QgsFeature formFeature() const { return mFormFeature; }
238 
244  void setFormFeature( const QgsFeature &feature ) { mFormFeature = feature ; }
245 
251  QgsFeature parentFormFeature() const { return mParentFormFeature; }
252 
258  void setParentFormFeature( const QgsFeature &feature ) { mParentFormFeature = feature ; }
259 
264  Mode attributeFormMode() const { return mAttributeFormMode; }
265 
270  void setAttributeFormMode( const Mode &attributeFormMode ) { mAttributeFormMode = attributeFormMode; }
271 
276  QString attributeFormModeString() const
277  {
278  const QMetaEnum metaEnum( QMetaEnum::fromType<Mode>() );
279  return metaEnum.valueToKey( static_cast<int>( mAttributeFormMode ) );
280  }
281 
286  void setMainMessageBar( QgsMessageBar *messageBar ) { mMainMessageBar = messageBar; }
287 
292  QgsMessageBar *mainMessageBar() { return mMainMessageBar; }
293 
294  private:
295  const QgsAttributeEditorContext *mParentContext = nullptr;
296  QgsVectorLayer *mLayer = nullptr;
297  QgsVectorLayerTools *mVectorLayerTools = nullptr;
298  QgsMapCanvas *mMapCanvas = nullptr;
299  QgsMessageBar *mMainMessageBar = nullptr;
300  QgsAdvancedDigitizingDockWidget *mCadDockWidget = nullptr;
301  QgsDistanceArea mDistanceArea;
302  QgsRelation mRelation;
303  RelationMode mRelationMode = Undefined;
305  QgsFeature mFormFeature;
307  QgsFeature mParentFormFeature;
308  FormMode mFormMode = Embed;
309  bool mAllowCustomUi = true;
310  Mode mAttributeFormMode = SingleEditMode;
311 };
312 
313 #endif // QGSATTRIBUTEEDITORCONTEXT_H
The QgsAdvancedDigitizingDockWidget class is a dockable widget used to handle the CAD tools on top of...
This class contains context information for attribute editor widgets.
void setMapCanvas(QgsMapCanvas *mapCanvas)
Sets the associated map canvas, mapCanvas, (e.g.
RelationMode relationMode() const
Returns the attribute relation mode.
const QgsDistanceArea & distanceArea() const
Returns the distance area object used for area/length calculations.
QgsAttributeEditorContext()=default
Constructor for QgsAttributeEditorContext.
const QgsAttributeEditorContext * parentContext() const
FormMode formMode() const
Returns the form mode.
void setFormFeature(const QgsFeature &feature)
Set current feature for the currently edited form or table row.
QgsMapCanvas * mapCanvas() const
Returns the associated map canvas (e.g.
void setRelation(const QgsRelation &relation, RelationMode mode)
Set attribute relation and mode.
QgsMessageBar * mainMessageBar()
Returns the main message bar.
QgsAdvancedDigitizingDockWidget * cadDockWidget() const
Returns the associated CAD dock widget (e.g.
const QgsRelation & relation() const
Returns the attribute relation.
QString attributeFormModeString() const
Returns given attributeFormMode as string.
RelationMode
Determines in which direction a relation was resolved.
@ Multiple
When showing a list of features (e.g. houses as an embedded form in a district form)
@ Undefined
This context is not defined by a relation.
QgsFeature parentFormFeature() const
Returns the feature of the currently edited parent form in its actual state.
@ Embed
A form was embedded as a widget on another form.
@ StandaloneDialog
A form was opened as a new dialog.
void setParentFormFeature(const QgsFeature &feature)
Sets the feature of the currently edited parent form.
QgsAttributeEditorContext(const QgsAttributeEditorContext &parentContext, const QgsRelation &relation, RelationMode relationMode, FormMode widgetMode)
void setFormMode(FormMode mode)
Sets the form mode.
void setVectorLayerTools(QgsVectorLayerTools *vlTools)
Sets the associated vector layer tools.
void setMainMessageBar(QgsMessageBar *messageBar)
Set current messageBar as the main message bar.
QgsAttributeEditorContext(const QgsAttributeEditorContext &parentContext, FormMode formMode)
bool allowCustomUi() const
Returns true if the attribute editor should permit use of custom UI forms.
@ SearchMode
Form values are used for searching/filtering the layer.
@ FixAttributeMode
Fix feature mode, for modifying the feature attributes without saving. The updated feature is availab...
@ SingleEditMode
Single edit mode, for editing a single feature.
@ AggregateSearchMode
Form is in aggregate search mode, show each widget in this mode.
@ MultiEditMode
Multi edit mode, for editing fields of multiple features at once.
void setAttributeFormMode(const Mode &attributeFormMode)
Set attributeFormMode for the edited form.
QgsFeature formFeature() const
Returns current feature from the currently edited form or table row.
void setAllowCustomUi(bool allow)
Sets whether the attribute editor should permit use of custom UI forms.
const QgsVectorLayerTools * vectorLayerTools() const
Returns the associated vector layer tools.
Mode attributeFormMode() const
Returns current attributeFormMode.
void setDistanceArea(const QgsDistanceArea &distanceArea)
Sets distance area object, distanceArea, for area/length calculations.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:89
A bar for displaying non-blocking messages to the user.
Definition: qgsmessagebar.h:61
static QgsProject * instance()
Returns the QgsProject singleton instance.
Definition: qgsproject.cpp:468
QgsCoordinateTransformContext transformContext
Definition: qgsproject.h:107
Methods in this class are used to handle basic operations on vector layers.
Represents a vector layer which manages a vector based data sets.