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 );
183 void setMapSettingsFlags(
Qgis::MapSettingsFlags flags );
212 void setCachingEnabled(
bool enabled );
221 bool isCachingEnabled() const;
252 void waitWhileRendering();
257 void setParallelRenderingEnabled(
bool enabled );
262 bool isParallelRenderingEnabled() const;
267 void setMapUpdateInterval(
int timeMilliseconds );
272 int mapUpdateInterval() const;
278 double scale() const;
281 double mapUnitsPerPixel() const;
318 void setExtent( const
QgsRectangle &r,
bool magnified = false );
333 double rotation() const;
338 void setRotation(
double degrees );
355 void zoomToFullExtent();
365 void zoomToProjectExtent();
368 void zoomToPreviousExtent();
371 void zoomToNextExtent();
374 void clearExtentHistory();
393 void panToSelected(
QgsMapLayer *layer =
nullptr );
400 void panToSelected( const QList<
QgsMapLayer *> &layers );
414 const QColor &startColor = QColor( 255, 0, 0, 255 ), const QColor &endColor = QColor( 255, 0, 0, 0 ),
415 int flashes = 3,
int duration = 500 );
429 const QColor &startColor = QColor( 255, 0, 0, 255 ), const QColor &endColor = QColor( 255, 0, 0, 0 ),
430 int flashes = 3,
int duration = 500 );
433 void setMapTool(
QgsMapTool *mapTool,
bool clean = false );
463 void setCanvasColor( const QColor &_newVal );
465 QColor canvasColor() const;
470 void setSelectionColor( const QColor &color );
475 QColor selectionColor() const;
498 int layerCount() const;
508 QList<
QgsMapLayer *> layers(
bool expandGroupLayers = false ) const;
519 void freeze(
bool frozen = true );
528 bool isFrozen() const;
538 bool renderFlag()
const {
return mRenderFlag; }
550 QMap<QString, QString> layerStyleOverrides()
const;
562 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
581 void setTheme(
const QString &theme );
587 QString
theme()
const {
return mTheme; }
599 void setWheelFactor(
double factor );
608 void zoomScale(
double scale,
bool ignoreScaleLock =
false );
617 void zoomByFactor(
double scaleFactor,
const QgsPointXY *center =
nullptr,
bool ignoreScaleLock =
false );
620 void zoomWithCenter(
int x,
int y,
bool zoomIn );
635 void enableAntiAliasing(
bool flag );
638 bool antiAliasingEnabled()
const;
641 void enableMapTileRendering(
bool flag );
646 void panActionEnd( QPoint releasePoint );
655 void panActionStart( QPoint releasePoint );
659 void panAction( QMouseEvent *event );
662 QPoint mouseLastXY();
669 void setPreviewModeEnabled(
bool previewEnabled );
677 bool previewModeEnabled()
const;
758 void setSegmentationTolerance(
double tolerance );
775 bool annotationsVisible()
const {
return mAnnotationsVisible; }
781 void setAnnotationsVisible(
bool visible );
800 bool previewJobsEnabled()
const;
809 void setPreviewJobsEnabled(
bool enabled );
816 void setCustomDropHandlers(
const QVector<QPointer<QgsCustomDropHandler >> &handlers )
SIP_SKIP;
889 void refreshAllLayers();
899 void redrawAllLayers();
902 void selectionChangedSlot();
905 void saveAsImage(
const QString &fileName, QPixmap *QPixmap =
nullptr,
const QString & =
"PNG" );
908 void layerStateChange();
917 void setRenderFlag(
bool flag );
922 void stopRendering();
925 void readProject(
const QDomDocument & );
928 void writeProject( QDomDocument & );
937 void setMagnificationFactor(
double factor,
const QgsPointXY *center =
nullptr );
943 void setScaleLocked(
bool isLocked );
955 void zoomToSelected(
QgsMapLayer *layer =
nullptr );
962 void zoomToSelected(
const QList<QgsMapLayer *> &layers );
974 double zoomInFactor()
const;
979 double zoomOutFactor()
const;
1010 void mapToolDestroyed();
1013 void rendererJobFinished();
1016 void previewJobFinished();
1018 void mapUpdateTimeout();
1022 void mapThemeChanged(
const QString &theme );
1024 void mapThemeRenamed(
const QString &theme,
const QString &newTheme );
1026 void updateDevicePixelFromScreen();
1028 void onElevationShadingRendererChanged();
1206 bool event( QEvent *e )
override;
1207 void keyPressEvent( QKeyEvent *e )
override;
1208 void keyReleaseEvent( QKeyEvent *e )
override;
1209 void mouseDoubleClickEvent( QMouseEvent *e )
override;
1210 void mouseMoveEvent( QMouseEvent *e )
override;
1211 void mousePressEvent( QMouseEvent *e )
override;
1212 void mouseReleaseEvent( QMouseEvent *e )
override;
1213 void wheelEvent( QWheelEvent *e )
override;
1214 void resizeEvent( QResizeEvent *e )
override;
1215 void paintEvent( QPaintEvent *e )
override;
1216 void dragEnterEvent( QDragEnterEvent *e )
override;
1217 bool viewportEvent( QEvent *event )
override;
1220 void moveCanvasContents(
bool reset =
false );
1222 void dropEvent( QDropEvent *event )
override;
1224 void showEvent( QShowEvent *event )
override;
1231 void emitExtentsChanged();
1245 void connectNotify(
const char *signal )
override;
1250 void updateCanvasItemPositions();
1254 void layerRepaintRequested(
bool deferred );
1256 void autoRefreshTriggered();
1258 void updateAutoRefreshTimer();
1260 void projectThemesChanged();
1262 void startPreviewJob(
int number );
1264 void temporalControllerModeChanged();
1275 mLockedScale = mCanvas->mapSettings().scale();
1280 QgsRectangle newExtent = mCanvas->mapSettings().extent();
1281 newExtent.
scale( mLockedScale / mCanvas->mapSettings().scale() );
1282 mCanvas->mSettings.setExtent( newExtent );
1287 double mLockedScale;
1290 enum class CacheInvalidationType
1302 QgsMapCanvasMap *mMap =
nullptr;
1313 bool mFrozen =
false;
1316 bool mRefreshScheduled =
false;
1319 bool mRefreshAfterJob =
false;
1322 bool mRenderFlag =
true;
1324 QFlags<CacheInvalidationType> mCacheInvalidations;
1327 QPointer< QgsMapLayer > mCurrentLayer;
1330 QGraphicsScene *mScene =
nullptr;
1339 QList <QgsRectangle> mLastExtent;
1340 int mLastExtentIndex = -1;
1343 double mWheelZoomFactor = 2.0;
1346 QTimer mMapUpdateTimer;
1352 bool mJobCanceled =
false;
1355 std::unique_ptr< QgsLabelingResults > mLabelingResults;
1358 bool mLabelingResultsOutdated =
false;
1364 std::unique_ptr< QgsRenderedItemResults > mRenderedItemResults;
1370 std::unique_ptr< QgsRenderedItemResults > mPreviousRenderedItemResults;
1377 bool mRenderedItemResultsOutdated =
false;
1380 bool mUseParallelRendering =
false;
1383 bool mDrawRenderingStats =
false;
1388 QTimer *mResizeTimer =
nullptr;
1389 QTimer *mRefreshTimer =
nullptr;
1397 QList< QgsMapRendererQImageJob * > mPreviewJobs;
1400 bool mScaleLocked =
false;
1408 bool mZoomDragging =
false;
1411 std::unique_ptr< QgsRubberBand > mZoomRubberBand;
1413 QCursor mZoomCursor;
1415 QTimer mAutoRefreshTimer;
1417 QTimer mPreviewTimer;
1418 QMetaObject::Connection mPreviewTimerConnection;
1424 bool mAnnotationsVisible =
true;
1426 bool mUsePreviewJobs =
false;
1428 QHash< QString, int > mLastLayerRenderTime;
1430 QVector<QPointer<QgsCustomDropHandler >> mDropHandlers;
1433 QList<double> mZoomResolutions;
1435 QList< QgsMapCanvasInteractionBlocker * > mInteractionBlockers;
1437 int mBlockItemPositionUpdates = 0;
1438 int mBlockExtentChangedSignal = 0;
1439 int mBlockScaleChangedSignal = 0;
1441 std::unique_ptr< QgsTemporaryCursorOverride > mTemporaryCursorOverride;
1450 QMap <QString, QDateTime> mRendererErrors;
1453 QPointer< QgsAbstract2DMapController > mMapController;
1464 void updateMapSize();
1470 void beginZoomRect( QPoint pos );
1476 void endZoomRect( QPoint pos );
1479 void stopZoomRect();
1505 void setLayersPrivate(
const QList<QgsMapLayer *> &layers );
1507 void startPreviewJobs();
1508 void stopPreviewJobs();
1509 void schedulePreviewJob(
int number );
1514 bool panOperationInProgress();
1516 int nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn =
true )
const;
1522 void clearTemporalCache();
1527 void clearElevationCache();
1537 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.
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 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.
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 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.
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.
void rotationChanged(double)
Emitted when the rotation of the map changes.
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 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.
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 scaleChanged(double)
Emitted when the scale of the map changes.
void scaleLockChanged(bool locked)
Emitted when the scale locked state of the map changes.
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.
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.
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