QGIS API Documentation  3.13.0-Master (5a3b1ced84)
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,
55  IdentifyMode
56  };
57  Q_ENUM( Mode )
58 
59 
63  {
66  Single
67  };
68 
69  enum FormMode
70  {
73  Popup
74  };
75 
77  QgsAttributeEditorContext() = default;
78 
80  : mParentContext( &parentContext )
81  , mVectorLayerTools( parentContext.mVectorLayerTools )
82  , mMapCanvas( parentContext.mMapCanvas )
83  , mMainMessageBar( parentContext.mMainMessageBar )
84  , mCadDockWidget( parentContext.mCadDockWidget )
85  , mDistanceArea( parentContext.mDistanceArea )
86  , mFormFeature( parentContext.mFormFeature )
87  , mFormMode( formMode )
88  {
89  Q_ASSERT( parentContext.vectorLayerTools() );
90  }
91 
92  QgsAttributeEditorContext( const QgsAttributeEditorContext &parentContext, const QgsRelation &relation, RelationMode relationMode, FormMode widgetMode )
93  : mParentContext( &parentContext )
94  , mVectorLayerTools( parentContext.mVectorLayerTools )
95  , mMapCanvas( parentContext.mMapCanvas )
96  , mMainMessageBar( parentContext.mMainMessageBar )
97  , mCadDockWidget( parentContext.mCadDockWidget )
98  , mDistanceArea( parentContext.mDistanceArea )
99  , mRelation( relation )
100  , mRelationMode( relationMode )
101  , mFormMode( widgetMode )
102  {
103  Q_ASSERT( parentContext.vectorLayerTools() );
104  }
105 
111  inline void setDistanceArea( const QgsDistanceArea &distanceArea )
112  {
113  if ( mLayer )
114  {
115  mDistanceArea = distanceArea;
116  mDistanceArea.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
117  }
118  }
119 
125  inline const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
126 
132  inline void setMapCanvas( QgsMapCanvas *mapCanvas ) { mMapCanvas = mapCanvas; }
133 
139  inline QgsMapCanvas *mapCanvas() const { return mMapCanvas; }
140 
147  void setCadDockWidget( QgsAdvancedDigitizingDockWidget *cadDockWidget );
148 
155  QgsAdvancedDigitizingDockWidget *cadDockWidget() const { return mCadDockWidget; }
156 
163  inline void setVectorLayerTools( QgsVectorLayerTools *vlTools ) { mVectorLayerTools = vlTools; }
164  // TODO QGIS 4.0 - rename vlTools to tools
165 
171  inline const QgsVectorLayerTools *vectorLayerTools() const { return mVectorLayerTools; }
172 
181  inline void setRelation( const QgsRelation &relation, RelationMode mode ) { mRelation = relation; mRelationMode = mode; }
182 
189  inline const QgsRelation &relation() const { return mRelation; }
190 
197  inline RelationMode relationMode() const { return mRelationMode; }
198 
203  inline FormMode formMode() const { return mFormMode; }
204 
211  inline void setFormMode( FormMode mode ) { mFormMode = mode; }
212 
218  bool allowCustomUi() const { return mAllowCustomUi; }
219 
227  void setAllowCustomUi( bool allow ) { mAllowCustomUi = allow; }
228 
229  inline const QgsAttributeEditorContext *parentContext() const { return mParentContext; }
230 
236  QgsFeature formFeature() const { return mFormFeature; }
237 
243  void setFormFeature( const QgsFeature &feature ) { mFormFeature = feature ; }
244 
250  QgsFeature parentFormFeature() const { return mParentFormFeature; }
251 
257  void setParentFormFeature( const QgsFeature &feature ) { mParentFormFeature = feature ; }
258 
263  Mode attributeFormMode() const { return mAttributeFormMode; }
264 
269  void setAttributeFormMode( const Mode &attributeFormMode ) { mAttributeFormMode = attributeFormMode; }
270 
275  QString attributeFormModeString() const
276  {
277  const QMetaEnum metaEnum( QMetaEnum::fromType<Mode>() );
278  return metaEnum.valueToKey( static_cast<int>( mAttributeFormMode ) );
279  }
280 
285  void setMainMessageBar( QgsMessageBar *messageBar ) { mMainMessageBar = messageBar; }
286 
291  QgsMessageBar *mainMessageBar() { return mMainMessageBar; }
292 
293  private:
294  const QgsAttributeEditorContext *mParentContext = nullptr;
295  QgsVectorLayer *mLayer = nullptr;
296  QgsVectorLayerTools *mVectorLayerTools = nullptr;
297  QgsMapCanvas *mMapCanvas = nullptr;
298  QgsMessageBar *mMainMessageBar = nullptr;
299  QgsAdvancedDigitizingDockWidget *mCadDockWidget = nullptr;
300  QgsDistanceArea mDistanceArea;
301  QgsRelation mRelation;
302  RelationMode mRelationMode = Undefined;
304  QgsFeature mFormFeature;
306  QgsFeature mParentFormFeature;
307  FormMode mFormMode = Embed;
308  bool mAllowCustomUi = true;
309  Mode mAttributeFormMode = SingleEditMode;
310 };
311 
312 #endif // QGSATTRIBUTEEDITORCONTEXT_H
Methods in this class are used to handle basic operations on vector layers.
const QgsVectorLayerTools * vectorLayerTools() const
Returns the associated vector layer tools.
void setAttributeFormMode(const Mode &attributeFormMode)
Set attributeFormMode for the edited form.
Form is in aggregate search mode, show each widget in this mode.
void setParentFormFeature(const QgsFeature &feature)
Sets the feature of the currently edited parent form.
This class contains context information for attribute editor widgets.
QgsAttributeEditorContext(const QgsAttributeEditorContext &parentContext, FormMode formMode)
void setMapCanvas(QgsMapCanvas *mapCanvas)
Sets the associated map canvas, mapCanvas, (e.g.
When showing a list of features (e.g. houses as an embedded form in a district form) ...
A bar for displaying non-blocking messages to the user.
Definition: qgsmessagebar.h:45
QgsMessageBar * mainMessageBar()
Returns the main message bar.
QgsAttributeEditorContext(const QgsAttributeEditorContext &parentContext, const QgsRelation &relation, RelationMode relationMode, FormMode widgetMode)
void setVectorLayerTools(QgsVectorLayerTools *vlTools)
Sets the associated vector layer tools.
Multi edit mode, for editing fields of multiple features at once.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
void setAllowCustomUi(bool allow)
Sets whether the attribute editor should permit use of custom UI forms.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:78
void setFormFeature(const QgsFeature &feature)
Set current feature for the currently edited form or table row.
This context is not defined by a relation.
RelationMode
Determines in which direction a relation was resolved.
const QgsRelation & relation() const
Returns the attribute relation.
void setDistanceArea(const QgsDistanceArea &distanceArea)
Sets distance area object, distanceArea, for area/length calculations.
QgsFeature formFeature() const
Returns current feature from the currently edited form or table row.
QgsAdvancedDigitizingDockWidget * cadDockWidget() const
Returns the associated CAD dock widget (e.g.
Mode attributeFormMode() const
Returns current attributeFormMode.
QgsFeature parentFormFeature() const
Returns the feature of the currently edited parent form in its actual state.
const QgsAttributeEditorContext * parentContext() const
FormMode formMode() const
Returns the form mode.
QgsCoordinateTransformContext transformContext
Definition: qgsproject.h:99
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
void setFormMode(FormMode mode)
Sets the form mode.
bool allowCustomUi() const
Returns true if the attribute editor should permit use of custom UI forms.
Single edit mode, for editing a single feature.
static QgsProject * instance()
Returns the QgsProject singleton instance.
Definition: qgsproject.cpp:457
QString attributeFormModeString() const
Returns given attributeFormMode as string.
const QgsDistanceArea & distanceArea() const
Returns the distance area object used for area/length calculations.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
RelationMode relationMode() const
Returns the attribute relation mode.
Form values are used for searching/filtering the layer.
The QgsAdvancedDigitizingDockWidget class is a dockable widget used to handle the CAD tools on top of...
Represents a vector layer which manages a vector based data sets.
void setRelation(const QgsRelation &relation, RelationMode mode)
Set attribute relation and mode.
void setMainMessageBar(QgsMessageBar *messageBar)
Set current messageBar as the main message bar.
QgsMapCanvas * mapCanvas() const
Returns the associated map canvas (e.g.
A form was embedded as a widget on another form.