QGIS API Documentation 3.43.0-Master (3ee7834ace6)
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:
65
72
76 explicit QgsExtentWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr, WidgetStyle style = CondensedStyle );
77
78 ~QgsExtentWidget() override;
79
85 void setOriginalExtent( const QgsRectangle &originalExtent, const QgsCoordinateReferenceSystem &originalCrs );
86
92 QgsRectangle originalExtent() const { return mOriginalExtent; }
93
99 QgsCoordinateReferenceSystem originalCrs() const { return mOriginalCrs; }
100
107 void setCurrentExtent( const QgsRectangle &currentExtent, const QgsCoordinateReferenceSystem &currentCrs );
108
115 QgsRectangle currentExtent() const { return mCurrentExtent; }
116
123 QgsCoordinateReferenceSystem currentCrs() const { return mCurrentCrs; }
124
130 void setOutputCrs( const QgsCoordinateReferenceSystem &outputCrs );
131
136 QgsRectangle outputExtent() const;
137
142 QgsCoordinateReferenceSystem outputCrs() const { return mOutputCrs; }
143
147 QgsExtentWidget::ExtentState extentState() const { return mExtentState; }
148
154 void setMapCanvas( QgsMapCanvas *canvas, bool drawOnCanvasOption = true );
155
160 QSize ratio() const { return mRatio; }
161
165 QString extentLayerName() const;
166
170 bool isValid() const;
171
179 void setNullValueAllowed( bool allowed, const QString &notSetText = QString() );
180
181 public slots:
182
186 void setOutputExtentFromOriginal();
187
191 void setOutputExtentFromCurrent();
192
196 void setOutputExtentFromUser( const QgsRectangle &extent, const QgsCoordinateReferenceSystem &crs );
197
201 void setOutputExtentFromLayer( const QgsMapLayer *layer );
202
206 void setOutputExtentFromDrawOnCanvas();
207
213 void setRatio( QSize ratio ) { mRatio = ratio; }
214
218 void clear();
219
220 signals:
221
225 void extentChanged( const QgsRectangle &r );
226
230 void validationChanged( bool valid );
231
236 void toggleDialogVisibility( bool visible );
237
243
244 protected:
245 void dragEnterEvent( QDragEnterEvent *event ) override;
246 void dragLeaveEvent( QDragLeaveEvent *event ) override;
247 void dropEvent( QDropEvent *event ) override;
248 void showEvent( QShowEvent *event ) override;
249
250 private slots:
251
252 void layerMenuAboutToShow();
253 void layoutMenuAboutToShow();
254 void bookmarkMenuAboutToShow();
255
256 void extentDrawn( const QgsRectangle &extent );
257 void mapToolDeactivated();
258
259 private:
260 void setOutputExtent( const QgsRectangle &r, const QgsCoordinateReferenceSystem &srcCrs, QgsExtentWidget::ExtentState state );
261 void setOutputExtentFromLineEdit();
262 void setOutputExtentFromCondensedLineEdit();
263
264 ExtentState mExtentState = OriginalExtent;
265
267
268 QgsRectangle mCurrentExtent;
270
271 QgsRectangle mOriginalExtent;
272 QgsCoordinateReferenceSystem mOriginalCrs;
273
274 QMenu *mMenu = nullptr;
275
276 QMenu *mLayerMenu = nullptr;
277 QMenu *mLayoutMenu = nullptr;
278 QMenu *mBookmarkMenu = nullptr;
279
280 QgsMapLayerProxyModel *mMapLayerModel = nullptr;
281 QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
282
283 QList<QAction *> mLayerMenuActions;
284 QAction *mUseCanvasExtentAction = nullptr;
285 QAction *mUseCurrentExtentAction = nullptr;
286 QAction *mDrawOnCanvasAction = nullptr;
287
288 QPointer<const QgsMapLayer> mExtentLayer;
289 QString mExtentLayerName;
290
291 std::unique_ptr<QgsMapToolExtent> mMapToolExtent;
292 QPointer<QgsMapTool> mMapToolPrevious = nullptr;
293 QgsMapCanvas *mCanvas = nullptr;
294 QSize mRatio;
295
296 bool mIsValid = false;
297 bool mHasFixedOutputCrs = false;
298
299 QRegularExpression mCondensedRe;
300
301 bool mFirstShow = true;
302 bool mBlockDrawOnCanvas = false;
303
304 void setValid( bool valid );
305
306 void setExtentToLayerExtent( const QString &layerId );
307
308 QgsMapLayer *mapLayerFromMimeData( const QMimeData *data ) const;
309
310 friend class TestProcessingGui;
311};
312
313#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 extentLayerChanged(QgsMapLayer *layer)
Emitted when the extent layer is changed.
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