18 #ifndef QGSMAPCANVAS_H
19 #define QGSMAPCANVAS_H
21 #include "qgsconfig.h"
33 #include <QDomDocument>
34 #include <QGraphicsView>
40 #include <QGestureEvent>
66 class QgsMapCanvasMap;
90 if ( qobject_cast<QgsMapCanvas *>( sipCpp ) !=
nullptr )
91 sipType = sipType_QgsMapCanvas;
98 Q_PROPERTY( QString theme READ theme WRITE setTheme NOTIFY themeChanged )
99 Q_PROPERTY(
bool previewJobsEnabled READ previewJobsEnabled WRITE setPreviewJobsEnabled )
112 double magnificationFactor()
const;
125 void setLayers(
const QList<QgsMapLayer *> &layers );
161 void setMapSettingsFlags( QgsMapSettings::Flags flags );
177 void setCachingEnabled(
bool enabled );
183 bool isCachingEnabled()
const;
200 void waitWhileRendering();
206 void setParallelRenderingEnabled(
bool enabled );
212 bool isParallelRenderingEnabled()
const;
218 void setMapUpdateInterval(
int timeMilliseconds );
224 int mapUpdateInterval()
const;
230 double scale()
const;
233 double mapUnitsPerPixel()
const;
270 void setExtent(
const QgsRectangle &r,
bool magnified =
false );
286 double rotation()
const;
292 void setRotation(
double degrees );
311 void zoomToFullExtent();
321 void zoomToProjectExtent();
324 void zoomToPreviousExtent();
327 void zoomToNextExtent();
330 void clearExtentHistory();
356 void panToSelected(
const QList<QgsMapLayer *> &layers );
371 const QColor &startColor = QColor( 255, 0, 0, 255 ),
const QColor &endColor = QColor( 255, 0, 0, 0 ),
372 int flashes = 3,
int duration = 500 );
387 const QColor &startColor = QColor( 255, 0, 0, 255 ),
const QColor &endColor = QColor( 255, 0, 0, 0 ),
388 int flashes = 3,
int duration = 500 );
391 void setMapTool(
QgsMapTool *mapTool,
bool clean =
false );
421 void setCanvasColor(
const QColor &_newVal );
423 QColor canvasColor()
const;
429 void setSelectionColor(
const QColor &color );
435 QColor selectionColor()
const;
444 int layerCount()
const;
450 QList<QgsMapLayer *> layers()
const;
461 void freeze(
bool frozen =
true );
470 bool isFrozen()
const;
493 QMap<QString, QString> layerStyleOverrides()
const;
506 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
526 void setTheme(
const QString &theme );
533 QString
theme()
const {
return mTheme; }
545 void setWheelFactor(
double factor );
554 void zoomScale(
double scale,
bool ignoreScaleLock =
false );
563 void zoomByFactor(
double scaleFactor,
const QgsPointXY *center =
nullptr,
bool ignoreScaleLock =
false );
566 void zoomWithCenter(
int x,
int y,
bool zoomIn );
582 void enableAntiAliasing(
bool flag );
588 void enableMapTileRendering(
bool flag );
593 void panActionEnd( QPoint releasePoint );
602 void panActionStart( QPoint releasePoint );
606 void panAction( QMouseEvent *event );
609 QPoint mouseLastXY();
617 void setPreviewModeEnabled(
bool previewEnabled );
626 bool previewModeEnabled()
const;
714 void setSegmentationTolerance(
double tolerance );
733 bool annotationsVisible()
const {
return mAnnotationsVisible; }
740 void setAnnotationsVisible(
bool visible );
762 bool previewJobsEnabled()
const;
772 void setPreviewJobsEnabled(
bool enabled );
779 void setCustomDropHandlers(
const QVector<QPointer<QgsCustomDropHandler >> &handlers )
SIP_SKIP;
791 void setTemporalRange(
const QgsDateTimeRange &range );
799 const QgsDateTimeRange &temporalRange()
const;
844 void refreshAllLayers();
854 void redrawAllLayers();
857 void selectionChangedSlot();
860 void saveAsImage(
const QString &fileName, QPixmap *QPixmap =
nullptr,
const QString & =
"PNG" );
863 void layerStateChange();
872 void setRenderFlag(
bool flag );
878 void stopRendering();
881 void readProject(
const QDomDocument & );
884 void writeProject( QDomDocument & );
894 void setMagnificationFactor(
double factor,
const QgsPointXY *center =
nullptr );
901 void setScaleLocked(
bool isLocked );
920 void zoomToSelected(
const QList<QgsMapLayer *> &layers );
932 double zoomInFactor()
const;
937 double zoomOutFactor()
const;
968 void mapToolDestroyed();
971 void rendererJobFinished();
974 void previewJobFinished();
976 void mapUpdateTimeout();
980 void mapThemeChanged(
const QString &theme );
982 void mapThemeRenamed(
const QString &theme,
const QString &newTheme );
1166 bool event( QEvent *e )
override;
1167 void keyPressEvent( QKeyEvent *e )
override;
1168 void keyReleaseEvent( QKeyEvent *e )
override;
1169 void mouseDoubleClickEvent( QMouseEvent *e )
override;
1170 void mouseMoveEvent( QMouseEvent *e )
override;
1171 void mousePressEvent( QMouseEvent *e )
override;
1172 void mouseReleaseEvent( QMouseEvent *e )
override;
1173 void wheelEvent( QWheelEvent *e )
override;
1174 void resizeEvent( QResizeEvent *e )
override;
1175 void paintEvent( QPaintEvent *e )
override;
1176 void dragEnterEvent( QDragEnterEvent *e )
override;
1179 void moveCanvasContents(
bool reset =
false );
1181 void dropEvent( QDropEvent *event )
override;
1196 void connectNotify(
const char *signal )
override;
1201 void updateCanvasItemPositions();
1205 void layerRepaintRequested(
bool deferred );
1207 void autoRefreshTriggered();
1209 void updateAutoRefreshTimer();
1211 void projectThemesChanged();
1213 void startPreviewJob(
int number );
1224 mLockedScale = mCanvas->mapSettings().scale();
1229 QgsRectangle newExtent = mCanvas->mapSettings().extent();
1230 newExtent.
scale( mLockedScale / mCanvas->mapSettings().scale() );
1231 mCanvas->mSettings.setExtent( newExtent );
1236 double mLockedScale;
1243 QgsMapCanvasMap *mMap =
nullptr;
1252 bool mFrozen =
false;
1255 bool mRefreshScheduled =
false;
1258 bool mRefreshAfterJob =
false;
1261 bool mRenderFlag =
true;
1264 QPointer< QgsMapLayer > mCurrentLayer;
1267 QGraphicsScene *mScene =
nullptr;
1279 QList <QgsRectangle> mLastExtent;
1280 int mLastExtentIndex = -1;
1283 double mWheelZoomFactor = 2.0;
1286 QTimer mMapUpdateTimer;
1292 bool mJobCanceled =
false;
1295 std::unique_ptr< QgsLabelingResults > mLabelingResults;
1298 bool mLabelingResultsOutdated =
false;
1301 bool mUseParallelRendering =
false;
1304 bool mDrawRenderingStats =
false;
1309 QTimer *mResizeTimer =
nullptr;
1310 QTimer *mRefreshTimer =
nullptr;
1318 QList< QgsMapRendererQImageJob * > mPreviewJobs;
1321 bool mScaleLocked =
false;
1329 bool mZoomDragging =
false;
1332 std::unique_ptr< QgsRubberBand > mZoomRubberBand;
1334 QCursor mZoomCursor;
1336 QTimer mAutoRefreshTimer;
1338 QTimer mPreviewTimer;
1339 QMetaObject::Connection mPreviewTimerConnection;
1345 bool mAnnotationsVisible =
true;
1347 bool mUsePreviewJobs =
false;
1349 QHash< QString, int > mLastLayerRenderTime;
1351 QVector<QPointer<QgsCustomDropHandler >> mDropHandlers;
1354 QList<double> mZoomResolutions;
1356 QList< QgsMapCanvasInteractionBlocker * > mInteractionBlockers;
1358 int mBlockItemPositionUpdates = 0;
1370 void updateMapSize();
1377 void beginZoomRect( QPoint pos );
1384 void endZoomRect( QPoint pos );
1404 void setLayersPrivate(
const QList<QgsMapLayer *> &layers );
1406 void startPreviewJobs();
1407 void stopPreviewJobs();
1408 void schedulePreviewJob(
int number );
1413 bool panOperationInProgress();
1415 int nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn =
true )
const;
1421 void clearTemporalCache();
1426 void clearElevationCache();
1430 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.
bool antiAliasingEnabled() const
true if antialiasing is enabled
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.
@ Antialiasing
Enable anti-aliasing for map rendering.
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.
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 ...
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