From 7a5df7ada69ab9fe033355c99e35aa4452f16ebc Mon Sep 17 00:00:00 2001 From: Martin Dobias Date: Tue, 19 Jan 2016 18:03:15 +0100 Subject: [PATCH] Move tracing action creation to qgis app --- python/gui/qgsmapcanvastracer.sip | 9 +++++++-- src/app/qgisapp.cpp | 8 ++++---- src/gui/qgsmapcanvastracer.cpp | 5 +---- src/gui/qgsmapcanvastracer.h | 9 +++++++-- src/gui/qgsmaptoolcapture.cpp | 2 +- src/ui/qgisapp.ui | 16 ++++++++++++++++ 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/python/gui/qgsmapcanvastracer.sip b/python/gui/qgsmapcanvastracer.sip index 21a1b77e256..4e3f06fbd41 100644 --- a/python/gui/qgsmapcanvastracer.sip +++ b/python/gui/qgsmapcanvastracer.sip @@ -2,6 +2,7 @@ * Extension of QgsTracer that provides extra functionality: * - automatic updates of own configuration based on canvas settings * - reporting of issues to the user via message bar + * - determines whether tracing is currently enabled by the user * * A simple registry of tracer instances associated to map canvas instances * is kept for convenience. (Map tools do not need to create their local @@ -21,8 +22,12 @@ class QgsMapCanvasTracer : QgsTracer explicit QgsMapCanvasTracer( QgsMapCanvas* canvas, QgsMessageBar* messageBar = 0 ); ~QgsMapCanvasTracer(); - //! Access to action that user may use to toggle tracing on/off - QAction* actionEnableTracing(); + //! Access to action that user may use to toggle tracing on/off. May be null if no action was associated + QAction* actionEnableTracing() const; + + //! Assign "enable tracing" checkable action to the tracer. + //! The action is used to determine whether tracing is currently enabled by the user + void setActionEnableTracing( QAction* action ); //! Retrieve instance of this class associated with given canvas (if any). //! The class keeps a simple registry of tracers associated with map canvas diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index dff4ae8de23..5871a06acaf 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -1981,10 +1981,10 @@ void QgisApp::createToolBars() mDigitizeToolBar->insertWidget( mActionMoveFeature, tbAddCircularString ); // Cad toolbar - mAdvancedDigitizeToolBar->insertAction( mActionUndo, mAdvancedDigitizingDockWidget->enableAction() ); + mAdvancedDigitizeToolBar->insertAction( mActionEnableTracing, mAdvancedDigitizingDockWidget->enableAction() ); mTracer = new QgsMapCanvasTracer( mMapCanvas, messageBar() ); - mAdvancedDigitizeToolBar->insertAction( mActionUndo, mTracer->actionEnableTracing() ); + mTracer->setActionEnableTracing( mActionEnableTracing ); } void QgisApp::createStatusBar() @@ -9739,7 +9739,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer ) mActionMergeFeatures->setEnabled( false ); mActionMergeFeatureAttributes->setEnabled( false ); mActionRotatePointSymbols->setEnabled( false ); - mTracer->actionEnableTracing()->setEnabled( false ); + mActionEnableTracing->setEnabled( false ); mActionPinLabels->setEnabled( false ); mActionShowHideLabels->setEnabled( false ); @@ -9860,7 +9860,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer ) mActionRotateFeature->setEnabled( isEditable && canChangeGeometry ); mActionNodeTool->setEnabled( isEditable && canChangeGeometry ); - mTracer->actionEnableTracing()->setEnabled( isEditable && canAddFeatures && + mActionEnableTracing->setEnabled( isEditable && canAddFeatures && ( vlayer->geometryType() == QGis::Line || vlayer->geometryType() == QGis::Polygon ) ); if ( vlayer->geometryType() == QGis::Point ) diff --git a/src/gui/qgsmapcanvastracer.cpp b/src/gui/qgsmapcanvastracer.cpp index 783c20cc64a..c0395c67303 100644 --- a/src/gui/qgsmapcanvastracer.cpp +++ b/src/gui/qgsmapcanvastracer.cpp @@ -17,6 +17,7 @@ QgsMapCanvasTracer::QgsMapCanvasTracer( QgsMapCanvas* canvas, QgsMessageBar* mes : mCanvas( canvas ) , mMessageBar( messageBar ) , mLastMessage( nullptr ) + , mActionEnableTracing( nullptr ) { sTracers.insert( canvas, this ); @@ -27,10 +28,6 @@ QgsMapCanvasTracer::QgsMapCanvasTracer( QgsMapCanvas* canvas, QgsMessageBar* mes connect( canvas, SIGNAL( currentLayerChanged( QgsMapLayer* ) ), this, SLOT( onCurrentLayerChanged() ) ); connect( canvas->snappingUtils(), SIGNAL( configChanged() ), this, SLOT( invalidateGraph() ) ); - mActionEnableTracing = new QAction( QIcon( QgsApplication::getThemeIcon( "/mActionTracing.png" ) ), tr( "Enable Tracing" ), this ); - mActionEnableTracing->setShortcut( Qt::Key_T ); - mActionEnableTracing->setCheckable( true ); - // arbitrarily chosen limit that should allow for fairly fast initialization // of the underlying graph structure setMaxFeatureCount( QSettings().value( "/qgis/digitizing/tracing_max_feature_count", 10000 ).toInt() ); diff --git a/src/gui/qgsmapcanvastracer.h b/src/gui/qgsmapcanvastracer.h index d4168c38838..8fcb70ee0ea 100644 --- a/src/gui/qgsmapcanvastracer.h +++ b/src/gui/qgsmapcanvastracer.h @@ -12,6 +12,7 @@ class QgsMessageBarItem; * Extension of QgsTracer that provides extra functionality: * - automatic updates of own configuration based on canvas settings * - reporting of issues to the user via message bar + * - determines whether tracing is currently enabled by the user * * A simple registry of tracer instances associated to map canvas instances * is kept for convenience. (Map tools do not need to create their local @@ -29,8 +30,12 @@ class GUI_EXPORT QgsMapCanvasTracer : public QgsTracer explicit QgsMapCanvasTracer( QgsMapCanvas* canvas, QgsMessageBar* messageBar = 0 ); ~QgsMapCanvasTracer(); - //! Access to action that user may use to toggle tracing on/off - QAction* actionEnableTracing() { return mActionEnableTracing; } + //! Access to action that user may use to toggle tracing on/off. May be null if no action was associated + QAction* actionEnableTracing() const { return mActionEnableTracing; } + + //! Assign "enable tracing" checkable action to the tracer. + //! The action is used to determine whether tracing is currently enabled by the user + void setActionEnableTracing( QAction* action ) { mActionEnableTracing = action; } //! Retrieve instance of this class associated with given canvas (if any). //! The class keeps a simple registry of tracers associated with map canvas diff --git a/src/gui/qgsmaptoolcapture.cpp b/src/gui/qgsmaptoolcapture.cpp index 1ad7b1e7f7a..d96fd932e53 100644 --- a/src/gui/qgsmaptoolcapture.cpp +++ b/src/gui/qgsmaptoolcapture.cpp @@ -139,7 +139,7 @@ void QgsMapToolCapture::currentLayerChanged( QgsMapLayer *layer ) bool QgsMapToolCapture::tracingEnabled() { QgsMapCanvasTracer* tracer = QgsMapCanvasTracer::tracerForCanvas( mCanvas ); - return tracer && tracer->actionEnableTracing()->isChecked(); + return tracer && tracer->actionEnableTracing() && tracer->actionEnableTracing()->isChecked(); } diff --git a/src/ui/qgisapp.ui b/src/ui/qgisapp.ui index 4a1a684544b..908921bc044 100644 --- a/src/ui/qgisapp.ui +++ b/src/ui/qgisapp.ui @@ -381,6 +381,7 @@ false + @@ -2398,6 +2399,21 @@ Acts on currently active editable layer Report an issue + + + true + + + + :/images/themes/default/mActionTracing.png:/images/themes/default/mActionTracing.png + + + Enable Tracing + + + T + +