QGIS API Documentation 3.41.0-Master (3440c17df1d)
Loading...
Searching...
No Matches
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
66
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 void showEvent( QShowEvent *event ) override;
245
246 private slots:
247
248 void layerMenuAboutToShow();
249 void layoutMenuAboutToShow();
250 void bookmarkMenuAboutToShow();
251
252 void extentDrawn( const QgsRectangle &extent );
253 void mapToolDeactivated();
254
255 private:
256 void setOutputExtent( const QgsRectangle &r, const QgsCoordinateReferenceSystem &srcCrs, QgsExtentWidget::ExtentState state );
257 void setOutputExtentFromLineEdit();
258 void setOutputExtentFromCondensedLineEdit();
259
260 ExtentState mExtentState = OriginalExtent;
261
263
264 QgsRectangle mCurrentExtent;
266
267 QgsRectangle mOriginalExtent;
268 QgsCoordinateReferenceSystem mOriginalCrs;
269
270 QMenu *mMenu = nullptr;
271
272 QMenu *mLayerMenu = nullptr;
273 QMenu *mLayoutMenu = nullptr;
274 QMenu *mBookmarkMenu = nullptr;
275
276 QgsMapLayerProxyModel *mMapLayerModel = nullptr;
277 QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
278
279 QList< QAction * > mLayerMenuActions;
280 QAction *mUseCanvasExtentAction = nullptr;
281 QAction *mUseCurrentExtentAction = nullptr;
282 QAction *mDrawOnCanvasAction = nullptr;
283
284 QPointer< const QgsMapLayer > mExtentLayer;
285 QString mExtentLayerName;
286
287 std::unique_ptr< QgsMapToolExtent > mMapToolExtent;
288 QPointer< QgsMapTool > mMapToolPrevious = nullptr;
289 QgsMapCanvas *mCanvas = nullptr;
290 QSize mRatio;
291
292 bool mIsValid = false;
293 bool mHasFixedOutputCrs = false;
294
295 QRegularExpression mCondensedRe;
296
297 bool mFirstShow = true;
298 bool mBlockDrawOnCanvas = false;
299
300 void setValid( bool valid );
301
302 void setExtentToLayerExtent( const QString &layerId );
303
304 QgsMapLayer *mapLayerFromMimeData( const QMimeData *data ) const;
305
306 friend class TestProcessingGui;
307
308
309};
310
311#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.
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:76
A rectangle specified with double values.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
const QgsCoordinateReferenceSystem & outputCrs
const QgsCoordinateReferenceSystem & crs