From 66aaaadd670d8b0932993fb2d8f0e09c4c2c3f7c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 4 Jan 2018 11:05:58 +1000 Subject: [PATCH] Fix tracing still active when snapping is turned off Otherwise tracing is disabled in the snapping toolbar, yet still active on the canvas. --- python/gui/qgsmapcanvastracer.sip | 15 +++++++++++++++ src/app/qgisapp.cpp | 1 + src/app/qgssnappingwidget.h | 5 +++++ src/gui/qgsmapcanvastracer.h | 14 ++++++++++++++ src/gui/qgsmaptoolcapture.cpp | 3 ++- 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/python/gui/qgsmapcanvastracer.sip b/python/gui/qgsmapcanvastracer.sip index 4971e658692..ff911c2b800 100644 --- a/python/gui/qgsmapcanvastracer.sip +++ b/python/gui/qgsmapcanvastracer.sip @@ -43,6 +43,21 @@ Access to action that user may use to toggle tracing on/off. May be null if no a %Docstring Assign "enable tracing" checkable action to the tracer. The action is used to determine whether tracing is currently enabled by the user +%End + + QAction *actionEnableSnapping() const; +%Docstring +Access to action that user may use to toggle snapping on/off. May be null if no action was associated. + +.. versionadded:: 3.0 +%End + + void setActionEnableSnapping( QAction *action ); +%Docstring +Assign "enable snapping" checkable action to the tracer. +The action is used to determine whether snapping is currently enabled by the user. + +.. versionadded:: 3.0 %End static QgsMapCanvasTracer *tracerForCanvas( QgsMapCanvas *canvas ); diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index e924061fcd7..8089c67f898 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -2415,6 +2415,7 @@ void QgisApp::createToolBars() mTracer = new QgsMapCanvasTracer( mMapCanvas, messageBar() ); mTracer->setActionEnableTracing( mSnappingWidget->enableTracingAction() ); + mTracer->setActionEnableSnapping( mSnappingWidget->enableSnappingAction() ); connect( mSnappingWidget->tracingOffsetSpinBox(), static_cast< void ( QgsDoubleSpinBox::* )( double ) >( &QgsDoubleSpinBox::valueChanged ), this, [ = ]( double v ) { mTracer->setOffset( v ); } ); diff --git a/src/app/qgssnappingwidget.h b/src/app/qgssnappingwidget.h index c881c1090bf..8e5fd5cc06e 100644 --- a/src/app/qgssnappingwidget.h +++ b/src/app/qgssnappingwidget.h @@ -75,6 +75,11 @@ class APP_EXPORT QgsSnappingWidget : public QWidget */ QAction *enableTracingAction() { return mEnableTracingAction; } + /** + * Returns the enable snapping action widget. + */ + QAction *enableSnappingAction() { return mEnabledAction; } + //! Returns spin box used to set offset for tracing QgsDoubleSpinBox *tracingOffsetSpinBox() { return mTracingOffsetSpinBox; } diff --git a/src/gui/qgsmapcanvastracer.h b/src/gui/qgsmapcanvastracer.h index 7ad25f28c35..8a6ded43f89 100644 --- a/src/gui/qgsmapcanvastracer.h +++ b/src/gui/qgsmapcanvastracer.h @@ -55,6 +55,19 @@ class GUI_EXPORT QgsMapCanvasTracer : public QgsTracer */ void setActionEnableTracing( QAction *action ) { mActionEnableTracing = action; } + /** + * Access to action that user may use to toggle snapping on/off. May be null if no action was associated. + * \since QGIS 3.0 + */ + QAction *actionEnableSnapping() const { return mActionEnableSnapping; } + + /** + * Assign "enable snapping" checkable action to the tracer. + * The action is used to determine whether snapping is currently enabled by the user. + * \since QGIS 3.0 + */ + void setActionEnableSnapping( QAction *action ) { mActionEnableSnapping = action; } + /** * Retrieve instance of this class associated with given canvas (if any). * The class keeps a simple registry of tracers associated with map canvas @@ -78,6 +91,7 @@ class GUI_EXPORT QgsMapCanvasTracer : public QgsTracer QgsMessageBarItem *mLastMessage = nullptr; QAction *mActionEnableTracing = nullptr; + QAction *mActionEnableSnapping = nullptr; static QHash sTracers; }; diff --git a/src/gui/qgsmaptoolcapture.cpp b/src/gui/qgsmaptoolcapture.cpp index 97cd4177f84..36f230f64d2 100644 --- a/src/gui/qgsmaptoolcapture.cpp +++ b/src/gui/qgsmaptoolcapture.cpp @@ -129,7 +129,8 @@ void QgsMapToolCapture::currentLayerChanged( QgsMapLayer *layer ) bool QgsMapToolCapture::tracingEnabled() { QgsMapCanvasTracer *tracer = QgsMapCanvasTracer::tracerForCanvas( mCanvas ); - return tracer && tracer->actionEnableTracing() && tracer->actionEnableTracing()->isChecked(); + return tracer && ( !tracer->actionEnableTracing() || tracer->actionEnableTracing()->isChecked() ) + && ( !tracer->actionEnableSnapping() || tracer->actionEnableSnapping()->isChecked() ); }