QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsextentwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsextentwidget.h
3 ---------------------
4 begin : March 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
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 QGSEXTENTWIDGET_H
17#define QGSEXTENTWIDGET_H
18
20#include "qgsmaptool.h"
21#include "qgsmaptoolextent.h"
22#include "qgis_sip.h"
23
24#include "ui_qgsextentgroupboxwidget.h"
25
27#include "qgsrectangle.h"
28#include "qgis_gui.h"
29
30#include <memory>
31#include <QRegularExpression>
32
36class QgsMapLayer;
37
51class GUI_EXPORT QgsExtentWidget : public QWidget, private Ui::QgsExtentGroupBoxWidget
52{
53 Q_OBJECT
54
55 public:
56
59 {
65 };
66
69 {
72 };
73
77 explicit QgsExtentWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr, WidgetStyle style = CondensedStyle );
78
79 ~QgsExtentWidget() override;
80
86 void setOriginalExtent( const QgsRectangle &originalExtent, const QgsCoordinateReferenceSystem &originalCrs );
87
93 QgsRectangle originalExtent() const { return mOriginalExtent; }
94
100 QgsCoordinateReferenceSystem originalCrs() const { return mOriginalCrs; }
101
108 void setCurrentExtent( const QgsRectangle &currentExtent, const QgsCoordinateReferenceSystem &currentCrs );
109
116 QgsRectangle currentExtent() const { return mCurrentExtent; }
117
124 QgsCoordinateReferenceSystem currentCrs() const { return mCurrentCrs; }
125
131 void setOutputCrs( const QgsCoordinateReferenceSystem &outputCrs );
132
137 QgsRectangle outputExtent() const;
138
143 QgsCoordinateReferenceSystem outputCrs() const { return mOutputCrs; }
144
148 QgsExtentWidget::ExtentState extentState() const { return mExtentState; }
149
155 void setMapCanvas( QgsMapCanvas *canvas, bool drawOnCanvasOption = true );
156
161 QSize ratio() const { return mRatio; }
162
166 QString extentLayerName() const;
167
171 bool isValid() const;
172
180 void setNullValueAllowed( bool allowed, const QString &notSetText = QString() );
181
182 public slots:
183
187 void setOutputExtentFromOriginal();
188
192 void setOutputExtentFromCurrent();
193
197 void setOutputExtentFromUser( const QgsRectangle &extent, const QgsCoordinateReferenceSystem &crs );
198
202 void setOutputExtentFromLayer( const QgsMapLayer *layer );
203
207 void setOutputExtentFromDrawOnCanvas();
208
214 void setRatio( QSize ratio ) { mRatio = ratio; }
215
219 void clear();
220
221 signals:
222
226 void extentChanged( const QgsRectangle &r );
227
231 void validationChanged( bool valid );
232
237 void toggleDialogVisibility( bool visible );
238
239 protected:
240
241 void dragEnterEvent( QDragEnterEvent *event ) override;
242 void dragLeaveEvent( QDragLeaveEvent *event ) override;
243 void dropEvent( QDropEvent *event ) override;
244
245 private slots:
246
247 void layerMenuAboutToShow();
248 void layoutMenuAboutToShow();
249 void bookmarkMenuAboutToShow();
250
251 void extentDrawn( const QgsRectangle &extent );
252 void mapToolDeactivated();
253
254 private:
255 void setOutputExtent( const QgsRectangle &r, const QgsCoordinateReferenceSystem &srcCrs, QgsExtentWidget::ExtentState state );
256 void setOutputExtentFromLineEdit();
257 void setOutputExtentFromCondensedLineEdit();
258
259 ExtentState mExtentState = OriginalExtent;
260
262
263 QgsRectangle mCurrentExtent;
265
266 QgsRectangle mOriginalExtent;
267 QgsCoordinateReferenceSystem mOriginalCrs;
268
269 QMenu *mMenu = nullptr;
270
271 QMenu *mLayerMenu = nullptr;
272 QMenu *mLayoutMenu = nullptr;
273 QMenu *mBookmarkMenu = nullptr;
274
275 QgsMapLayerProxyModel *mMapLayerModel = nullptr;
276 QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
277
278 QList< QAction * > mLayerMenuActions;
279 QAction *mUseCanvasExtentAction = nullptr;
280 QAction *mUseCurrentExtentAction = nullptr;
281 QAction *mDrawOnCanvasAction = nullptr;
282
283 QPointer< const QgsMapLayer > mExtentLayer;
284 QString mExtentLayerName;
285
286 std::unique_ptr< QgsMapToolExtent > mMapToolExtent;
287 QPointer< QgsMapTool > mMapToolPrevious = nullptr;
288 QgsMapCanvas *mCanvas = nullptr;
289 QSize mRatio;
290
291 bool mIsValid = false;
292 bool mHasFixedOutputCrs = false;
293
294 QRegularExpression mCondensedRe;
295 void setValid( bool valid );
296
297 void setExtentToLayerExtent( const QString &layerId );
298
299 QgsMapLayer *mapLayerFromMimeData( const QMimeData *data ) const;
300
301 friend class TestProcessingGui;
302
303
304};
305
306#endif // QGSEXTENTWIDGET_H
A QSortFilterProxyModel subclass for sorting the entries in a QgsBookmarkManagerModel.
This class represents a coordinate reference system (CRS).
A widget for configuration of a map extent.
QgsCoordinateReferenceSystem currentCrs() const
Returns the coordinate reference system for the current extent set for the widget.
QgsExtentWidget::ExtentState extentState() const
Returns the currently selected state for the widget's extent.
QSize ratio() const
Returns the current fixed aspect ratio to be used when dragging extent onto the canvas.
void toggleDialogVisibility(bool visible)
Emitted when the parent dialog visibility must be changed (e.g.
QgsRectangle originalExtent() const
Returns the original extent set for the widget.
ExtentState
Available states for the current extent selection in the widget.
@ UserExtent
Extent manually entered/modified by the user.
@ OriginalExtent
Layer's extent.
@ ProjectLayerExtent
Extent taken from a layer within the project.
@ CurrentExtent
Map canvas extent.
@ DrawOnCanvas
Extent taken from a rectangled drawn onto the map canvas.
void validationChanged(bool valid)
Emitted when the widget's validation state changes.
QgsCoordinateReferenceSystem outputCrs() const
Returns the current output CRS, used in the display.
QgsRectangle currentExtent() const
Returns the current extent set for the widget.
void extentChanged(const QgsRectangle &r)
Emitted when the widget's extent is changed.
WidgetStyle
Widget styles.
@ CondensedStyle
Shows a compressed widget, for use when available space is minimal.
@ ExpandedStyle
Shows an expanded widget, for use when space is not constrained.
void setRatio(QSize ratio)
Sets a fixed aspect ratio to be used when dragging extent onto the canvas.
QgsCoordinateReferenceSystem originalCrs() const
Returns the original coordinate reference system set for the widget.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:93
The QgsMapLayerProxyModel class provides an easy to use model to display the list of layers in widget...
Base class for all map layer types.
Definition: qgsmaplayer.h:75
A rectangle specified with double values.
Definition: qgsrectangle.h:42
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
const QgsCoordinateReferenceSystem & outputCrs
const QgsCoordinateReferenceSystem & crs