34#include <QDomDocument>
35#include <QGraphicsView>
41#include <QGestureEvent>
97 if ( qobject_cast<QgsMapCanvas *>( sipCpp ) !=
nullptr )
98 sipType = sipType_QgsMapCanvas;
105 Q_PROPERTY( QString theme READ theme WRITE setTheme NOTIFY themeChanged )
106 Q_PROPERTY(
bool previewJobsEnabled READ previewJobsEnabled WRITE setPreviewJobsEnabled )
125 void addOverlayWidget( QWidget *widget
SIP_TRANSFER, Qt::Edge edge );
130 double magnificationFactor() const;
142 void setLayers( const QList<
QgsMapLayer *> &layers );
150 void setFlags(
Qgis::MapCanvasFlags flags );
158 Qgis::MapCanvasFlags flags() const;
199 void setMapSettingsFlags(
Qgis::MapSettingsFlags flags );
228 void setCachingEnabled(
bool enabled );
237 bool isCachingEnabled() const;
268 void waitWhileRendering();
273 void setParallelRenderingEnabled(
bool enabled );
278 bool isParallelRenderingEnabled() const;
283 void setMapUpdateInterval(
int timeMilliseconds );
288 int mapUpdateInterval() const;
294 double scale() const;
297 double mapUnitsPerPixel() const;
334 void setExtent( const
QgsRectangle &r,
bool magnified = false );
349 double rotation() const;
354 void setRotation(
double degrees );
371 void zoomToFullExtent();
381 void zoomToProjectExtent();
384 void zoomToPreviousExtent();
387 void zoomToNextExtent();
390 void clearExtentHistory();
409 void panToSelected(
QgsMapLayer *layer =
nullptr );
416 void panToSelected( const QList<
QgsMapLayer *> &layers );
430 const QColor &startColor = QColor( 255, 0, 0, 255 ), const QColor &endColor = QColor( 255, 0, 0, 0 ),
431 int flashes = 3,
int duration = 500 );
445 const QColor &startColor = QColor( 255, 0, 0, 255 ), const QColor &endColor = QColor( 255, 0, 0, 0 ),
446 int flashes = 3,
int duration = 500 );
449 void setMapTool(
QgsMapTool *mapTool,
bool clean = false );
479 void setCanvasColor( const QColor &_newVal );
481 QColor canvasColor() const;
486 void setSelectionColor( const QColor &color );
491 QColor selectionColor() const;
514 int layerCount() const;
524 QList<
QgsMapLayer *> layers(
bool expandGroupLayers = false ) const;
533 template <
typename T>
534 QVector<T>
layers()
const {
return mapSettings().layers<T>();}
548 void freeze(
bool frozen =
true );
559 bool isFrozen()
const;
583 QMap<QString, QString> layerStyleOverrides()
const;
595 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
614 void setTheme(
const QString &theme );
620 QString
theme()
const {
return mTheme; }
632 void setWheelFactor(
double factor );
641 void zoomScale(
double scale,
bool ignoreScaleLock =
false );
650 void zoomByFactor(
double scaleFactor,
const QgsPointXY *center =
nullptr,
bool ignoreScaleLock =
false );
653 void zoomWithCenter(
int x,
int y,
bool zoomIn );
668 void enableAntiAliasing(
bool flag );
671 bool antiAliasingEnabled()
const;
674 void enableMapTileRendering(
bool flag );
679 void panActionEnd( QPoint releasePoint );
688 void panActionStart( QPoint releasePoint );
692 void panAction( QMouseEvent *event );
695 QPoint mouseLastXY();
702 void setPreviewModeEnabled(
bool previewEnabled );
710 bool previewModeEnabled()
const;
791 void setSegmentationTolerance(
double tolerance );
808 bool annotationsVisible()
const {
return mAnnotationsVisible; }
814 void setAnnotationsVisible(
bool visible );
833 bool previewJobsEnabled()
const;
842 void setPreviewJobsEnabled(
bool enabled );
849 void setCustomDropHandlers(
const QVector<QPointer<QgsCustomDropHandler >> &handlers )
SIP_SKIP;
922 void refreshAllLayers();
932 void redrawAllLayers();
935 void selectionChangedSlot();
938 void saveAsImage(
const QString &fileName, QPixmap *QPixmap =
nullptr,
const QString & =
"PNG" );
941 void layerStateChange();
952 void setRenderFlag(
bool flag );
957 void stopRendering();
960 void readProject(
const QDomDocument & );
963 void writeProject( QDomDocument & );
972 void setMagnificationFactor(
double factor,
const QgsPointXY *center =
nullptr );
978 void setScaleLocked(
bool isLocked );
990 void zoomToSelected(
QgsMapLayer *layer =
nullptr );
997 void zoomToSelected(
const QList<QgsMapLayer *> &layers );
1009 double zoomInFactor()
const;
1014 double zoomOutFactor()
const;
1045 void mapToolDestroyed();
1048 void rendererJobFinished();
1051 void previewJobFinished();
1053 void mapUpdateTimeout();
1057 void mapThemeChanged(
const QString &theme );
1059 void mapThemeRenamed(
const QString &theme,
const QString &newTheme );
1061 void updateDevicePixelFromScreen();
1063 void onElevationShadingRendererChanged();
1241 bool event( QEvent *e )
override;
1242 void keyPressEvent( QKeyEvent *e )
override;
1243 void keyReleaseEvent( QKeyEvent *e )
override;
1244 void mouseDoubleClickEvent( QMouseEvent *e )
override;
1245 void mouseMoveEvent( QMouseEvent *e )
override;
1246 void mousePressEvent( QMouseEvent *e )
override;
1247 void mouseReleaseEvent( QMouseEvent *e )
override;
1248 void wheelEvent( QWheelEvent *e )
override;
1249 void resizeEvent( QResizeEvent *e )
override;
1250 void paintEvent( QPaintEvent *e )
override;
1251 void dragEnterEvent( QDragEnterEvent *e )
override;
1252 bool viewportEvent( QEvent *event )
override;
1255 void moveCanvasContents(
bool reset =
false );
1257 void dropEvent( QDropEvent *event )
override;
1259 void showEvent( QShowEvent *event )
override;
1266 void emitExtentsChanged();
1280 void connectNotify(
const char *signal )
override;
1285 void updateCanvasItemPositions();
1289 void layerRepaintRequested(
bool deferred );
1291 void autoRefreshTriggered();
1293 void updateAutoRefreshTimer();
1295 void projectThemesChanged();
1297 void startPreviewJob(
int number );
1299 void temporalControllerModeChanged();
1310 mLockedScale = mCanvas->mapSettings().scale();
1315 QgsRectangle newExtent = mCanvas->mapSettings().extent();
1316 newExtent.
scale( mLockedScale / mCanvas->mapSettings().scale() );
1317 mCanvas->mSettings.setExtent( newExtent );
1322 double mLockedScale;
1325 enum class CacheInvalidationType
1339 QgsMapCanvasMap *mMap =
nullptr;
1350 bool mFrozen =
false;
1353 bool mRefreshScheduled =
false;
1356 bool mRefreshAfterJob =
false;
1359 bool mRenderFlag =
true;
1361 QFlags<CacheInvalidationType> mCacheInvalidations;
1364 QPointer< QgsMapLayer > mCurrentLayer;
1367 QGraphicsScene *mScene =
nullptr;
1376 QList <QgsRectangle> mLastExtent;
1377 int mLastExtentIndex = -1;
1380 double mWheelZoomFactor = 2.0;
1383 QTimer mMapUpdateTimer;
1389 bool mJobCanceled =
false;
1392 std::unique_ptr< QgsLabelingResults > mLabelingResults;
1395 bool mLabelingResultsOutdated =
false;
1401 std::unique_ptr< QgsRenderedItemResults > mRenderedItemResults;
1407 std::unique_ptr< QgsRenderedItemResults > mPreviousRenderedItemResults;
1414 bool mRenderedItemResultsOutdated =
false;
1417 bool mUseParallelRendering =
false;
1420 bool mDrawRenderingStats =
false;
1425 QTimer *mResizeTimer =
nullptr;
1426 QTimer *mRefreshTimer =
nullptr;
1434 QList< QgsMapRendererQImageJob * > mPreviewJobs;
1437 bool mScaleLocked =
false;
1445 bool mZoomDragging =
false;
1448 std::unique_ptr< QgsRubberBand > mZoomRubberBand;
1450 QCursor mZoomCursor;
1452 QTimer mAutoRefreshTimer;
1454 QTimer mPreviewTimer;
1455 QMetaObject::Connection mPreviewTimerConnection;
1461 bool mAnnotationsVisible =
true;
1463 bool mUsePreviewJobs =
false;
1465 QHash< QString, int > mLastLayerRenderTime;
1467 QVector<QPointer<QgsCustomDropHandler >> mDropHandlers;
1470 QList<double> mZoomResolutions;
1472 QList< QgsMapCanvasInteractionBlocker * > mInteractionBlockers;
1474 int mBlockItemPositionUpdates = 0;
1475 int mBlockExtentChangedSignal = 0;
1476 int mBlockScaleChangedSignal = 0;
1478 std::unique_ptr< QgsTemporaryCursorOverride > mTemporaryCursorOverride;
1487 QMap <QString, QDateTime> mRendererErrors;
1490 QPointer< QgsAbstract2DMapController > mMapController;
1501 void updateMapSize();
1507 void beginZoomRect( QPoint pos );
1513 void endZoomRect( QPoint pos );
1516 void stopZoomRect();
1542 void setLayersPrivate(
const QList<QgsMapLayer *> &layers );
1544 void startPreviewJobs();
1545 void stopPreviewJobs();
1546 void schedulePreviewJob(
int number );
1551 bool panOperationInProgress();
1553 int nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn =
true )
const;
1559 void clearTemporalCache();
1564 void clearElevationCache();
1574 friend class TestQgsMapCanvas;
The Qgis class provides global constants for use throughout the application.
DistanceUnit
Units of distance.
MessageLevel
Level for messages This will be used both for message log and message bar in application.
@ Info
Information message.
QFlags< MapCanvasFlag > MapCanvasFlags
Flags controlling behavior of map canvases.
Abstract base class for all 2D map controllers.
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 geometry is the spatial representation of a feature.
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 contextMenuAboutToShow(QMenu *menu, QgsMapMouseEvent *event)
Emitted before the map canvas context menu will be shown.
void selectionChanged(QgsMapLayer *layer)
Emitted when selection in any layer gets changed.
void extentsChanged()
Emitted when the extents of the map change.
void xyCoordinates(const QgsPointXY &p)
Emits current mouse position.
QgsExpressionContextScope & expressionContextScope()
Returns a reference to the expression context scope for the map canvas.
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.
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
void tapAndHoldGestureOccurred(const QgsPointXY &mapPoint, QTapAndHoldGesture *gesture)
Emitted whenever a tap and hold gesture occurs at the specified map point.
const QList< double > & zoomResolutions() const
void panDistanceBearingChanged(double distance, Qgis::DistanceUnit unit, double bearing)
Emitted whenever the distance or bearing of an in-progress panning operation is changed.
bool scaleLocked() const
Returns whether the scale is locked, so zooming can be performed using magnication.
void zRangeChanged()
Emitted when the map canvas z (elevation) range changes.
void scaleChanged(double scale)
Emitted when the scale of the map changes.
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
void canvasColorChanged()
Emitted when canvas background color changes.
void magnificationChanged(double magnification)
Emitted when the scale of the map 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.
const QgsExpressionContextScope & expressionContextScope() const
Returns a const reference to the expression context scope for the map canvas.
void layerStyleOverridesChanged()
Emitted when the configuration of overridden layer styles changes.
void zoomNextStatusChanged(bool available)
Emitted when zoom next status changed.
void rotationChanged(double rotation)
Emitted when the rotation of the map changes.
void messageEmitted(const QString &title, const QString &message, Qgis::MessageLevel level=Qgis::MessageLevel::Info)
emit a message (usually to be displayed in a message bar)
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 temporalRangeChanged()
Emitted when the map canvas temporal range changes.
void zoomLastStatusChanged(bool available)
Emitted when zoom last status changed.
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 layersChanged()
Emitted when a new set of layers has been received.
void renderComplete(QPainter *painter)
Emitted when the canvas has rendered.
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.
QList< QgsMapRendererJob::Error > Errors
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.
A utility class for dynamic handling of changes to screen properties.
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.
Represents a vector layer which manages a vector based data sets.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
#define SIP_KEEPREFERENCE
#define SIP_THROW(name,...)
QSet< QgsFeatureId > QgsFeatureIds
const QgsCoordinateReferenceSystem & crs