18 #ifndef QGSMAPCANVAS_H
19 #define QGSMAPCANVAS_H
21 #include "qgsconfig.h"
34 #include <QDomDocument>
35 #include <QGraphicsView>
41 #include <QGestureEvent>
67 class QgsMapCanvasMap;
93 if ( qobject_cast<QgsMapCanvas *>( sipCpp ) !=
nullptr )
94 sipType = sipType_QgsMapCanvas;
101 Q_PROPERTY( QString theme READ theme WRITE setTheme NOTIFY themeChanged )
102 Q_PROPERTY(
bool previewJobsEnabled READ previewJobsEnabled WRITE setPreviewJobsEnabled )
115 double magnificationFactor()
const;
128 void setLayers(
const QList<QgsMapLayer *> &layers );
164 void setMapSettingsFlags( Qgis::MapSettingsFlags flags );
191 void setCachingEnabled(
bool enabled );
197 bool isCachingEnabled()
const;
220 void waitWhileRendering();
226 void setParallelRenderingEnabled(
bool enabled );
232 bool isParallelRenderingEnabled()
const;
238 void setMapUpdateInterval(
int timeMilliseconds );
244 int mapUpdateInterval()
const;
250 double scale()
const;
253 double mapUnitsPerPixel()
const;
290 void setExtent(
const QgsRectangle &r,
bool magnified =
false );
306 double rotation()
const;
312 void setRotation(
double degrees );
331 void zoomToFullExtent();
341 void zoomToProjectExtent();
344 void zoomToPreviousExtent();
347 void zoomToNextExtent();
350 void clearExtentHistory();
376 void panToSelected(
const QList<QgsMapLayer *> &layers );
391 const QColor &startColor = QColor( 255, 0, 0, 255 ),
const QColor &endColor = QColor( 255, 0, 0, 0 ),
392 int flashes = 3,
int duration = 500 );
407 const QColor &startColor = QColor( 255, 0, 0, 255 ),
const QColor &endColor = QColor( 255, 0, 0, 0 ),
408 int flashes = 3,
int duration = 500 );
411 void setMapTool(
QgsMapTool *mapTool,
bool clean =
false );
441 void setCanvasColor(
const QColor &_newVal );
443 QColor canvasColor()
const;
449 void setSelectionColor(
const QColor &color );
455 QColor selectionColor()
const;
476 int layerCount()
const;
482 QList<QgsMapLayer *> layers()
const;
493 void freeze(
bool frozen =
true );
502 bool isFrozen()
const;
525 QMap<QString, QString> layerStyleOverrides()
const;
538 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
558 void setTheme(
const QString &theme );
565 QString
theme()
const {
return mTheme; }
577 void setWheelFactor(
double factor );
586 void zoomScale(
double scale,
bool ignoreScaleLock =
false );
595 void zoomByFactor(
double scaleFactor,
const QgsPointXY *center =
nullptr,
bool ignoreScaleLock =
false );
598 void zoomWithCenter(
int x,
int y,
bool zoomIn );
614 void enableAntiAliasing(
bool flag );
617 bool antiAliasingEnabled()
const;
620 void enableMapTileRendering(
bool flag );
625 void panActionEnd( QPoint releasePoint );
634 void panActionStart( QPoint releasePoint );
638 void panAction( QMouseEvent *event );
641 QPoint mouseLastXY();
649 void setPreviewModeEnabled(
bool previewEnabled );
658 bool previewModeEnabled()
const;
746 void setSegmentationTolerance(
double tolerance );
765 bool annotationsVisible()
const {
return mAnnotationsVisible; }
772 void setAnnotationsVisible(
bool visible );
794 bool previewJobsEnabled()
const;
804 void setPreviewJobsEnabled(
bool enabled );
811 void setCustomDropHandlers(
const QVector<QPointer<QgsCustomDropHandler >> &handlers )
SIP_SKIP;
823 void setTemporalRange(
const QgsDateTimeRange &range );
831 const QgsDateTimeRange &temporalRange()
const;
876 void refreshAllLayers();
886 void redrawAllLayers();
889 void selectionChangedSlot();
892 void saveAsImage(
const QString &fileName, QPixmap *QPixmap =
nullptr,
const QString & =
"PNG" );
895 void layerStateChange();
904 void setRenderFlag(
bool flag );
910 void stopRendering();
913 void readProject(
const QDomDocument & );
916 void writeProject( QDomDocument & );
926 void setMagnificationFactor(
double factor,
const QgsPointXY *center =
nullptr );
933 void setScaleLocked(
bool isLocked );
952 void zoomToSelected(
const QList<QgsMapLayer *> &layers );
964 double zoomInFactor()
const;
969 double zoomOutFactor()
const;
1000 void mapToolDestroyed();
1003 void rendererJobFinished();
1006 void previewJobFinished();
1008 void mapUpdateTimeout();
1012 void mapThemeChanged(
const QString &theme );
1014 void mapThemeRenamed(
const QString &theme,
const QString &newTheme );
1016 void updateDevicePixelFromScreen();
1200 bool event( QEvent *e )
override;
1201 void keyPressEvent( QKeyEvent *e )
override;
1202 void keyReleaseEvent( QKeyEvent *e )
override;
1203 void mouseDoubleClickEvent( QMouseEvent *e )
override;
1204 void mouseMoveEvent( QMouseEvent *e )
override;
1205 void mousePressEvent( QMouseEvent *e )
override;
1206 void mouseReleaseEvent( QMouseEvent *e )
override;
1207 void wheelEvent( QWheelEvent *e )
override;
1208 void resizeEvent( QResizeEvent *e )
override;
1209 void paintEvent( QPaintEvent *e )
override;
1210 void dragEnterEvent( QDragEnterEvent *e )
override;
1211 bool viewportEvent( QEvent *event )
override;
1214 void moveCanvasContents(
bool reset =
false );
1216 void dropEvent( QDropEvent *event )
override;
1218 void showEvent( QShowEvent *event )
override;
1232 void connectNotify(
const char *signal )
override;
1237 void updateCanvasItemPositions();
1241 void layerRepaintRequested(
bool deferred );
1243 void autoRefreshTriggered();
1245 void updateAutoRefreshTimer();
1247 void projectThemesChanged();
1249 void startPreviewJob(
int number );
1260 mLockedScale = mCanvas->mapSettings().scale();
1265 QgsRectangle newExtent = mCanvas->mapSettings().extent();
1266 newExtent.
scale( mLockedScale / mCanvas->mapSettings().scale() );
1267 mCanvas->mSettings.setExtent( newExtent );
1272 double mLockedScale;
1279 QgsMapCanvasMap *mMap =
nullptr;
1288 bool mFrozen =
false;
1291 bool mRefreshScheduled =
false;
1294 bool mRefreshAfterJob =
false;
1297 bool mRenderFlag =
true;
1300 QPointer< QgsMapLayer > mCurrentLayer;
1303 QGraphicsScene *mScene =
nullptr;
1315 QList <QgsRectangle> mLastExtent;
1316 int mLastExtentIndex = -1;
1319 double mWheelZoomFactor = 2.0;
1322 QTimer mMapUpdateTimer;
1328 bool mJobCanceled =
false;
1331 std::unique_ptr< QgsLabelingResults > mLabelingResults;
1334 bool mLabelingResultsOutdated =
false;
1340 std::unique_ptr< QgsRenderedItemResults > mRenderedItemResults;
1346 std::unique_ptr< QgsRenderedItemResults > mPreviousRenderedItemResults;
1353 bool mRenderedItemResultsOutdated =
false;
1356 bool mUseParallelRendering =
false;
1359 bool mDrawRenderingStats =
false;
1364 QTimer *mResizeTimer =
nullptr;
1365 QTimer *mRefreshTimer =
nullptr;
1373 QList< QgsMapRendererQImageJob * > mPreviewJobs;
1376 bool mScaleLocked =
false;
1384 bool mZoomDragging =
false;
1387 std::unique_ptr< QgsRubberBand > mZoomRubberBand;
1389 QCursor mZoomCursor;
1391 QTimer mAutoRefreshTimer;
1393 QTimer mPreviewTimer;
1394 QMetaObject::Connection mPreviewTimerConnection;
1400 bool mAnnotationsVisible =
true;
1402 bool mUsePreviewJobs =
false;
1404 QHash< QString, int > mLastLayerRenderTime;
1406 QVector<QPointer<QgsCustomDropHandler >> mDropHandlers;
1409 QList<double> mZoomResolutions;
1411 QList< QgsMapCanvasInteractionBlocker * > mInteractionBlockers;
1413 int mBlockItemPositionUpdates = 0;
1415 QMetaObject::Connection mScreenDpiChangedConnection;
1417 std::unique_ptr< QgsTemporaryCursorOverride > mTemporaryCursorOverride;
1429 void updateMapSize();
1436 void beginZoomRect( QPoint pos );
1443 void endZoomRect( QPoint pos );
1463 void setLayersPrivate(
const QList<QgsMapLayer *> &layers );
1465 void startPreviewJobs();
1466 void stopPreviewJobs();
1467 void schedulePreviewJob(
int number );
1472 bool panOperationInProgress();
1474 int nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn =
true )
const;
1480 void clearTemporalCache();
1485 void clearElevationCache();
1489 friend class TestQgsMapCanvas;
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Abstract base class for all geometries.
This class represents a coordinate reference system (CRS).
Custom exception class for Coordinate Reference System related exceptions.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
QgsRange which stores a range of double values.
Abstract interface for generating an expression context.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
A class for highlight features on the map.
Stores global configuration for labeling engine.
Class that stores computed placement from labeling engine.
An interactive map canvas item which displays a QgsAnnotation.
An interface for objects which block interactions with a QgsMapCanvas.
Interaction
Available interactions to block.
Deprecated to be deleted, stuff from here should be moved elsewhere.
Map canvas is a class for displaying all GIS data types on a canvas.
void messageEmitted(const QString &title, const QString &message, Qgis::MessageLevel=Qgis::MessageLevel::Info)
emit a message (usually to be displayed in a message bar)
void contextMenuAboutToShow(QMenu *menu, QgsMapMouseEvent *event)
Emitted before the map canvas context menu will be shown.
const QList< double > & zoomResolutions() const
void extentsChanged()
Emitted when the extents of the map change.
void xyCoordinates(const QgsPointXY &p)
Emits current mouse position.
void magnificationChanged(double)
Emitted when the scale of the map changes.
void setZoomResolutions(const QList< double > &resolutions)
Set a list of resolutions (map units per pixel) to which to "snap to" when zooming the map.
QString theme() const
Returns the map's theme shown in the canvas, if set.
void renderComplete(QPainter *)
Emitted when the canvas has rendered.
void tapAndHoldGestureOccurred(const QgsPointXY &mapPoint, QTapAndHoldGesture *gesture)
Emitted whenever a tap and hold gesture occurs at the specified map point.
void zoomNextStatusChanged(bool)
Emitted when zoom next status changed.
void rotationChanged(double)
Emitted when the rotation of the map changes.
void selectionChanged(QgsVectorLayer *layer)
Emitted when selection in any layer gets changed.
bool scaleLocked() const
Returns whether the scale is locked, so zooming can be performed using magnication.
QgsExpressionContextScope & expressionContextScope()
Returns a reference to the expression context scope for the map canvas.
void zRangeChanged()
Emitted when the map canvas z (elevation) range changes.
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
void canvasColorChanged()
Emitted when canvas background color changes.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
void renderErrorOccurred(const QString &error, QgsMapLayer *layer)
Emitted whenever an error is encountered during a map render operation.
void mapRefreshCanceled()
Emitted when the pending map refresh has been canceled.
void renderStarting()
Emitted when the canvas is about to be rendered.
std::unique_ptr< CanvasProperties > mCanvasProperties
Handle pattern for implementation object.
void keyReleased(QKeyEvent *e)
Emit key release event.
void layerStyleOverridesChanged()
Emitted when the configuration of overridden layer styles changes.
void scaleChanged(double)
Emitted when the scale of the map changes.
void scaleLockChanged(bool locked)
Emitted when the scale locked state of the map changes.
bool renderFlag() const
Returns true if canvas render is disabled as a result of user disabling renders via the GUI.
void panDistanceBearingChanged(double distance, QgsUnitTypes::DistanceUnit unit, double bearing)
Emitted whenever the distance or bearing of an in-progress panning operation is changed.
void temporalRangeChanged()
Emitted when the map canvas temporal range changes.
void themeChanged(const QString &theme)
Emitted when the canvas has been assigned a different map theme.
void destinationCrsChanged()
Emitted when map CRS has changed.
void transformContextChanged()
Emitted when the canvas transform context is changed.
void keyPressed(QKeyEvent *e)
Emit key press event.
void mapCanvasRefreshed()
Emitted when canvas finished a refresh request.
void zoomLastStatusChanged(bool)
Emitted when zoom last status changed.
const QgsExpressionContextScope & expressionContextScope() const
Returns a const reference to the expression context scope for the map canvas.
void layersChanged()
Emitted when a new set of layers has been received.
void setExpressionContextScope(const QgsExpressionContextScope &scope)
Sets an expression context scope for the map canvas.
Base class for all map layer types.
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
A widget that displays an overview map.
This class is responsible for keeping cache of rendered images resulting from a map rendering job.
Intermediate base class adding functionality that allows client to query the rendered image.
The QgsMapSettings class contains configuration for rendering of the map.
Perform transforms between map coordinates and device coordinates.
A class to represent a 2D point.
A graphics effect which can be applied to a widget to simulate various printing and color blindness m...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
A rectangle specified with double values.
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
A QgsRectangle with associated coordinate reference system.
Stores collated details of rendered items during a map rendering operation.
A class for drawing transient features (e.g.
This class has all the configuration of snapping and can return answers to snapping queries.
A controller base class for temporal objects, contains a signal for notifying updates of the objects ...
Temporarily sets a cursor override for the QApplication for the lifetime of the object.
DistanceUnit
Units of distance.
Represents a vector layer which manages a vector based data sets.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
#define SIP_KEEPREFERENCE
QSet< QgsFeatureId > QgsFeatureIds
const QgsCoordinateReferenceSystem & crs