diff --git a/doc/api_break.dox b/doc/api_break.dox index 0af58ae89d4d..000f40309daa 100644 --- a/doc/api_break.dox +++ b/doc/api_break.dox @@ -460,6 +460,7 @@ QgsAdvancedDigitizingDockWidget {#qgis_api_break_3_0_QgsAdvancedDigitizin ------------------------------- - canvasReleaseEvent takes now QgsAdvancedDigitizingDockWidget::CaptureMode as second argument. +- snappingMode() was removed. Advanced digitizing now always uses project's snapping configuration. QgsApplication {#qgis_api_break_3_0_QgsApplication} @@ -1550,6 +1551,13 @@ QgsMapLayerLegend {#qgis_api_break_3_0_QgsMapLayerLegend} - defaultPluginLegend() was removed. Plugin layers have to provide their legend implementation. +QgsMapMouseEvent {#qgis_api_break_3_0_QgsMapMouseEvent} +---------------- + +- SnappingMode enum was removed. +- snapPoint() and snapSegment() do not take SnappingMode argument anymore. Snapping is done according to project's snapping configuration. + + QgsMapOverviewCanvas {#qgis_api_break_3_0_QgsMapOverviewCanvas} -------------------- diff --git a/python/gui/qgsadvanceddigitizingdockwidget.sip b/python/gui/qgsadvanceddigitizingdockwidget.sip index daac0e69b909..f78f47db65fc 100644 --- a/python/gui/qgsadvanceddigitizingdockwidget.sip +++ b/python/gui/qgsadvanceddigitizingdockwidget.sip @@ -227,13 +227,6 @@ class QgsAdvancedDigitizingDockWidget : QgsDockWidget Clear any cached previous clicks and helper lines %End - QgsMapMouseEvent::SnappingMode snappingMode(); -%Docstring - The snapping mode - :return: Snapping mode - :rtype: QgsMapMouseEvent.SnappingMode -%End - virtual void keyPressEvent( QKeyEvent *e ); diff --git a/python/gui/qgsmapmouseevent.sip b/python/gui/qgsmapmouseevent.sip index 6aee1c89f11e..89e3e8cb1cc0 100644 --- a/python/gui/qgsmapmouseevent.sip +++ b/python/gui/qgsmapmouseevent.sip @@ -31,13 +31,6 @@ class QgsMapMouseEvent : QMouseEvent %End public: - enum SnappingMode - { - NoSnapping, - SnapProjectConfig, - SnapAllLayers, - }; - QgsMapMouseEvent( QgsMapCanvas *mapCanvas, QMouseEvent *event ); %Docstring Creates a new QgsMapMouseEvent. Should only be required to be called from the QgsMapCanvas. @@ -59,7 +52,7 @@ class QgsMapMouseEvent : QMouseEvent \param modifiers Keyboard modifiers %End - QgsPointXY snapPoint( SnappingMode snappingMode ); + QgsPointXY snapPoint(); %Docstring snapPoint will snap the points using the map canvas snapping utils configuration .. note:: @@ -68,12 +61,11 @@ class QgsMapMouseEvent : QMouseEvent :rtype: QgsPointXY %End - QList snapSegment( SnappingMode snappingMode, bool *snapped = 0, bool allLayers = false ) const; + QList snapSegment( bool *snapped = 0, bool allLayers = false ) const; %Docstring Returns the first snapped segment. If the cached snapped match is a segment, it will simply return it. Otherwise it will try to snap a segment according to the event's snapping mode. In this case the cache will not be overwritten. - \param snappingMode Specify if the default project settings or all layers should be used for snapping \param snapped if given, determines if a segment has been snapped \param allLayers if true, override snapping mode :rtype: list of QgsPointXY diff --git a/src/app/qgsmaptoolannotation.cpp b/src/app/qgsmaptoolannotation.cpp index 098f967b2ec4..feab0a943fe9 100644 --- a/src/app/qgsmaptoolannotation.cpp +++ b/src/app/qgsmaptoolannotation.cpp @@ -182,7 +182,7 @@ void QgsMapToolAnnotation::canvasMoveEvent( QgsMapMouseEvent *e ) { if ( mCurrentMoveAction == QgsMapCanvasAnnotationItem::MoveMapPosition ) { - QgsPointXY mapPos = transformCanvasToAnnotation( e->snapPoint( QgsMapMouseEvent::SnapProjectConfig ), annotation ); + QgsPointXY mapPos = transformCanvasToAnnotation( e->snapPoint(), annotation ); annotation->setMapPosition( mapPos ); annotation->setRelativePosition( QPointF( e->posF().x() / mCanvas->width(), e->posF().y() / mCanvas->height() ) ); diff --git a/src/app/qgsmaptoolmovefeature.cpp b/src/app/qgsmaptoolmovefeature.cpp index 693fa1ee3e4e..47e2e974ecf2 100644 --- a/src/app/qgsmaptoolmovefeature.cpp +++ b/src/app/qgsmaptoolmovefeature.cpp @@ -81,7 +81,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( !mRubberBand ) { // ideally we would snap preferably on the moved feature - e->snapPoint( QgsMapMouseEvent::SnapProjectConfig ); + e->snapPoint(); //find first geometry under mouse cursor and store iterator to it QgsPointXY layerCoords = toLayerCoordinates( vlayer, e->mapPoint() ); @@ -159,7 +159,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) mRubberBand = nullptr; return; } - e->snapPoint( QgsMapMouseEvent::SnapProjectConfig ); + e->snapPoint(); QgsPointXY startPointLayerCoords = toLayerCoordinates( ( QgsMapLayer * )vlayer, mStartPointMapCoords ); QgsPointXY stopPointLayerCoords = toLayerCoordinates( ( QgsMapLayer * )vlayer, e->mapPoint() ); diff --git a/src/gui/qgsadvanceddigitizingdockwidget.cpp b/src/gui/qgsadvanceddigitizingdockwidget.cpp index c3aa60cdfe23..b32268c3fb19 100644 --- a/src/gui/qgsadvanceddigitizingdockwidget.cpp +++ b/src/gui/qgsadvanceddigitizingdockwidget.cpp @@ -94,7 +94,6 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas * , mCurrentMapToolSupportsCad( false ) , mCadEnabled( false ) , mConstructionMode( false ) - , mSnappingMode( ( QgsMapMouseEvent::SnappingMode ) QgsSettings().value( QStringLiteral( "/Cad/SnappingMode" ), QgsMapMouseEvent::SnapProjectConfig ).toInt() ) , mCommonAngleConstraint( QgsSettings().value( QStringLiteral( "/Cad/CommonAngle" ), 90 ).toInt() ) , mSnappedToVertex( false ) , mSessionActive( false ) @@ -177,23 +176,6 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas * angleButtonGroup->addAction( action ); mCommonAngleActions.insert( action, it->first ); } - // snapping on layers - menu->addSeparator(); - QActionGroup *snapButtonGroup = new QActionGroup( menu ); // actions are exclusive for snapping modes - mSnappingActions = QMap(); - QList< QPair< QgsMapMouseEvent::SnappingMode, QString > > snappingModes; - snappingModes << QPair( QgsMapMouseEvent::NoSnapping, tr( "Do not snap to vertices or segment" ) ); - snappingModes << QPair( QgsMapMouseEvent::SnapProjectConfig, tr( "Snap according to project configuration" ) ); - snappingModes << QPair( QgsMapMouseEvent::SnapAllLayers, tr( "Snap to all layers" ) ); - for ( QList< QPair< QgsMapMouseEvent::SnappingMode, QString > >::const_iterator it = snappingModes.begin(); it != snappingModes.end(); ++it ) - { - QAction *action = new QAction( it->second, menu ); - action->setCheckable( true ); - action->setChecked( it->first == mSnappingMode ); - menu->addAction( action ); - snapButtonGroup->addAction( action ); - mSnappingActions.insert( action, it->first ); - } mSettingsButton->setMenu( menu ); connect( mSettingsButton, SIGNAL( triggered( QAction * ) ), this, SLOT( settingsButtonTriggered( QAction * ) ) ); @@ -319,16 +301,6 @@ void QgsAdvancedDigitizingDockWidget::setConstructionMode( bool enabled ) void QgsAdvancedDigitizingDockWidget::settingsButtonTriggered( QAction *action ) { - // snapping - QMap::const_iterator isn = mSnappingActions.constFind( action ); - if ( isn != mSnappingActions.constEnd() ) - { - isn.key()->setChecked( true ); - mSnappingMode = isn.value(); - QgsSettings().setValue( QStringLiteral( "/Cad/SnappingMode" ), ( int )isn.value() ); - return; - } - // common angles QMap::const_iterator ica = mCommonAngleActions.constFind( action ); if ( ica != mCommonAngleActions.constEnd() ) @@ -598,9 +570,9 @@ bool QgsAdvancedDigitizingDockWidget::applyConstraints( QgsMapMouseEvent *e ) QgsDebugMsgLevel( QString( "X: %1 %2 %3" ).arg( mXConstraint->isLocked() ).arg( mXConstraint->relative() ).arg( mXConstraint->value() ), 4 ); QgsDebugMsgLevel( QString( "Y: %1 %2 %3" ).arg( mYConstraint->isLocked() ).arg( mYConstraint->relative() ).arg( mYConstraint->value() ), 4 ); - QgsPointXY point = e->snapPoint( mSnappingMode ); + QgsPointXY point = e->snapPoint(); - mSnappedSegment = e->snapSegment( mSnappingMode ); + mSnappedSegment = e->snapSegment(); bool previousPointExist, penulPointExist; QgsPointXY previousPt = previousPoint( &previousPointExist ); @@ -903,7 +875,7 @@ bool QgsAdvancedDigitizingDockWidget::alignToSegment( QgsMapMouseEvent *e, CadCo bool previousPointExist, penulPointExist, mSnappedSegmentExist; QgsPointXY previousPt = previousPoint( &previousPointExist ); QgsPointXY penultimatePt = penultimatePoint( &penulPointExist ); - QList mSnappedSegment = e->snapSegment( mSnappingMode, &mSnappedSegmentExist, true ); + QList mSnappedSegment = e->snapSegment( &mSnappedSegmentExist, true ); if ( !previousPointExist || !mSnappedSegmentExist ) { diff --git a/src/gui/qgsadvanceddigitizingdockwidget.h b/src/gui/qgsadvanceddigitizingdockwidget.h index c1bc020e58bd..b61a0b9bd0b4 100644 --- a/src/gui/qgsadvanceddigitizingdockwidget.h +++ b/src/gui/qgsadvanceddigitizingdockwidget.h @@ -256,12 +256,6 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private */ void clear(); - /** - * The snapping mode - * \returns Snapping mode - */ - QgsMapMouseEvent::SnappingMode snappingMode() { return mSnappingMode; } - void keyPressEvent( QKeyEvent *e ) override; //! determines if CAD tools are enabled or if map tools behaves "nomally" @@ -455,7 +449,6 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private //! is CAD currently enabled for current map tool bool mCadEnabled; bool mConstructionMode; - QgsMapMouseEvent::SnappingMode mSnappingMode; // constraints std::unique_ptr< CadConstraint > mAngleConstraint; @@ -478,7 +471,6 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private // UI QAction *mEnableAction = nullptr; QMap< QAction *, int > mCommonAngleActions; // map the common angle actions with their angle values - QMap< QAction *, QgsMapMouseEvent::SnappingMode > mSnappingActions; // map the snapping mode actions with their values private: #ifdef SIP_RUN diff --git a/src/gui/qgsmapmouseevent.cpp b/src/gui/qgsmapmouseevent.cpp index 0a80040ec1c1..0cb5147770f0 100644 --- a/src/gui/qgsmapmouseevent.cpp +++ b/src/gui/qgsmapmouseevent.cpp @@ -29,7 +29,7 @@ struct EdgesOnlyFilter : public QgsPointLocator::MatchFilter QgsMapMouseEvent::QgsMapMouseEvent( QgsMapCanvas *mapCanvas, QMouseEvent *event ) : QMouseEvent( event->type(), event->pos(), event->button(), event->buttons(), event->modifiers() ) - , mSnappingMode( NoSnapping ) + , mHasCachedSnapResult( false ) , mOriginalMapPoint( mapCanvas ? mapCanvas->mapSettings().mapToPixel().toMapCoordinates( event->pos() ) : QgsPointXY() ) , mMapPoint( mOriginalMapPoint ) , mPixelPoint( event->pos() ) @@ -39,7 +39,7 @@ QgsMapMouseEvent::QgsMapMouseEvent( QgsMapCanvas *mapCanvas, QMouseEvent *event QgsMapMouseEvent::QgsMapMouseEvent( QgsMapCanvas *mapCanvas, QEvent::Type type, QPoint pos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers ) : QMouseEvent( type, pos, button, buttons, modifiers ) - , mSnappingMode( NoSnapping ) + , mHasCachedSnapResult( false ) , mOriginalMapPoint( mapCanvas ? mapCanvas->mapSettings().mapToPixel().toMapCoordinates( pos ) : QgsPointXY() ) , mMapPoint( mOriginalMapPoint ) , mPixelPoint( pos ) @@ -47,39 +47,16 @@ QgsMapMouseEvent::QgsMapMouseEvent( QgsMapCanvas *mapCanvas, QEvent::Type type, { } -QgsPointXY QgsMapMouseEvent::snapPoint( SnappingMode snappingMode ) +QgsPointXY QgsMapMouseEvent::snapPoint() { // Use cached result - if ( mSnappingMode == snappingMode ) + if ( mHasCachedSnapResult ) return mMapPoint; - mSnappingMode = snappingMode; - - if ( snappingMode == NoSnapping ) - { - mMapPoint = mOriginalMapPoint; - mPixelPoint = pos(); - return mMapPoint; - } + mHasCachedSnapResult = true; QgsSnappingUtils *snappingUtils = mMapCanvas->snappingUtils(); - if ( snappingMode == SnapAllLayers ) - { - QgsSnappingConfig canvasConfig = snappingUtils->config(); - QgsSnappingConfig localConfig = snappingUtils->config(); - - localConfig.setMode( QgsSnappingConfig::AllLayers ); - localConfig.setType( QgsSnappingConfig::VertexAndSegment ); - snappingUtils->setConfig( localConfig ); - - mSnapMatch = snappingUtils->snapToMap( mMapPoint ); - - snappingUtils->setConfig( canvasConfig ); - } - else - { - mSnapMatch = snappingUtils->snapToMap( mMapPoint ); - } + mSnapMatch = snappingUtils->snapToMap( mMapPoint ); if ( mSnapMatch.isValid() ) { @@ -95,28 +72,27 @@ QgsPointXY QgsMapMouseEvent::snapPoint( SnappingMode snappingMode ) return mMapPoint; } -QList QgsMapMouseEvent::snapSegment( SnappingMode snappingMode, bool *snapped, bool allLayers ) const +QList QgsMapMouseEvent::snapSegment( bool *snapped, bool allLayers ) const { QList segment; QgsPointXY pt1, pt2; // If there's a cached snapping result we use it - if ( snappingMode == mSnappingMode && mSnapMatch.hasEdge() ) + if ( mHasCachedSnapResult && mSnapMatch.hasEdge() ) { mSnapMatch.edgePoints( pt1, pt2 ); segment << pt1 << pt2; } - - else if ( snappingMode != NoSnapping ) + else { QgsPointLocator::Match match; - if ( snappingMode == SnapProjectConfig && !allLayers ) + if ( !allLayers ) { // run snapToMap with only segments EdgesOnlyFilter filter; match = mMapCanvas->snappingUtils()->snapToMap( mOriginalMapPoint, &filter ); } - else if ( snappingMode == SnapAllLayers || allLayers ) + else { // run snapToMap with only edges on all layers QgsSnappingUtils *snappingUtils = mMapCanvas->snappingUtils(); diff --git a/src/gui/qgsmapmouseevent.h b/src/gui/qgsmapmouseevent.h index 5eb8201affbf..5782209a0d78 100644 --- a/src/gui/qgsmapmouseevent.h +++ b/src/gui/qgsmapmouseevent.h @@ -45,13 +45,6 @@ class GUI_EXPORT QgsMapMouseEvent : public QMouseEvent public: - enum SnappingMode - { - NoSnapping, - SnapProjectConfig, //!< Snap according to the configuration set in the snapping settings - SnapAllLayers, //!< Snap to all rendered layers (tolerance and type from defaultSettings()) - }; - /** * Creates a new QgsMapMouseEvent. Should only be required to be called from the QgsMapCanvas. * @@ -77,17 +70,16 @@ class GUI_EXPORT QgsMapMouseEvent : public QMouseEvent * \brief snapPoint will snap the points using the map canvas snapping utils configuration * \note if snapping did not succeeded, the map point will be reset to its original position */ - QgsPointXY snapPoint( SnappingMode snappingMode ); + QgsPointXY snapPoint(); /** * Returns the first snapped segment. If the cached snapped match is a segment, it will simply return it. * Otherwise it will try to snap a segment according to the event's snapping mode. In this case the cache * will not be overwritten. - * \param snappingMode Specify if the default project settings or all layers should be used for snapping * \param snapped if given, determines if a segment has been snapped * \param allLayers if true, override snapping mode */ - QList snapSegment( SnappingMode snappingMode, bool *snapped = nullptr, bool allLayers = false ) const; + QList snapSegment( bool *snapped = nullptr, bool allLayers = false ) const; /** * Returns true if there is a snapped point cached. @@ -144,7 +136,8 @@ class GUI_EXPORT QgsMapMouseEvent : public QMouseEvent QPoint mapToPixelCoordinates( const QgsPointXY &point ); - SnappingMode mSnappingMode; + //! Whether snapPoint() was already called + bool mHasCachedSnapResult; //! Unsnapped point in map coordinates. QgsPointXY mOriginalMapPoint; diff --git a/src/gui/qgsmaptooladvanceddigitizing.cpp b/src/gui/qgsmaptooladvanceddigitizing.cpp index 749f44a223f3..d9c69836f955 100644 --- a/src/gui/qgsmaptooladvanceddigitizing.cpp +++ b/src/gui/qgsmaptooladvanceddigitizing.cpp @@ -86,5 +86,5 @@ void QgsMapToolAdvancedDigitizing::cadPointChanged( const QgsPointXY &point ) void QgsMapToolAdvancedDigitizing::snap( QgsMapMouseEvent *e ) { if ( !mCadDockWidget->cadEnabled() ) - e->snapPoint( QgsMapMouseEvent::SnapProjectConfig ); + e->snapPoint(); }