Skip to content

Commit

Permalink
Update widget state when scale locked state is changed from API
Browse files Browse the repository at this point in the history
  • Loading branch information
troopa81 authored and nyalldawson committed Mar 8, 2021
1 parent 22d0826 commit da66679
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 3 deletions.
12 changes: 12 additions & 0 deletions python/gui/auto_generated/qgsmapcanvas.sip.in
Expand Up @@ -1040,6 +1040,18 @@ Emits current mouse position
Emitted when the scale of the map changes
%End

void scaleLockChanged( bool locked );
%Docstring
Emitted when the scale locked state of the map changes

:param locked: true if the scale is locked

.. versionadded:: 3.18

.. seealso:: :py:func:`setScaleLocked`
%End


void extentsChanged();
%Docstring
Emitted when the extents of the map change
Expand Down
3 changes: 1 addition & 2 deletions src/app/qgisapp.cpp
Expand Up @@ -3708,9 +3708,9 @@ void QgisApp::createStatusBar()
mMagnifierWidget->setObjectName( QStringLiteral( "mMagnifierWidget" ) );
mMagnifierWidget->setFont( statusBarFont );
connect( mMapCanvas, &QgsMapCanvas::magnificationChanged, mMagnifierWidget, &QgsStatusBarMagnifierWidget::updateMagnification );
connect( mMapCanvas, &QgsMapCanvas::scaleLockChanged, mMagnifierWidget, &QgsStatusBarMagnifierWidget::updateScaleLock );
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::magnificationChanged, mMapCanvas, [ = ]( double factor ) { mMapCanvas->setMagnificationFactor( factor ); } );
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::scaleLockChanged, mMapCanvas, &QgsMapCanvas::setScaleLocked );
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::scaleLockChanged, mScaleWidget, &QgsStatusBarScaleWidget::setLocked );
mMagnifierWidget->updateMagnification( QSettings().value( QStringLiteral( "/qgis/magnifier_factor_default" ), 1.0 ).toDouble() );
mStatusBar->addPermanentWidget( mMagnifierWidget, 0 );

Expand Down Expand Up @@ -17015,4 +17015,3 @@ QgsAttributeEditorContext QgisApp::createAttributeEditorContext()
context.setMainMessageBar( messageBar() );
return context;
}

5 changes: 5 additions & 0 deletions src/app/qgsstatusbarmagnifierwidget.cpp
Expand Up @@ -93,6 +93,11 @@ void QgsStatusBarMagnifierWidget::updateMagnification( double factor )
mSpinBox->setValue( factor * 100 );
}

void QgsStatusBarMagnifierWidget::updateScaleLock( bool locked )
{
mLockButton->setChecked( locked );
}

void QgsStatusBarMagnifierWidget::setMagnification( double value )
{
emit magnificationChanged( value / 100 );
Expand Down
6 changes: 6 additions & 0 deletions src/app/qgsstatusbarmagnifierwidget.h
Expand Up @@ -56,6 +56,12 @@ class APP_EXPORT QgsStatusBarMagnifierWidget : public QWidget
//! will be triggered from map canvas changes (from mouse wheel, zoom)
void updateMagnification( double factor );

/**
* Will be triggered from map canvas API changes
* \param locked true if the scale is locked
* \since 3.18
*/
void updateScaleLock( bool locked );

private slots:
//! will be triggered form user input in spin box
Expand Down
1 change: 1 addition & 0 deletions src/app/qgsstatusbarscalewidget.cpp
Expand Up @@ -60,6 +60,7 @@ QgsStatusBarScaleWidget::QgsStatusBarScaleWidget( QgsMapCanvas *canvas, QWidget
setLayout( mLayout );

connect( mScale, &QgsScaleComboBox::scaleChanged, this, &QgsStatusBarScaleWidget::userScale );
connect( mMapCanvas, &QgsMapCanvas::scaleLockChanged, this, &QgsStatusBarScaleWidget::setLocked );
}

void QgsStatusBarScaleWidget::setScale( double scale )
Expand Down
6 changes: 5 additions & 1 deletion src/gui/qgsmapcanvas.cpp
Expand Up @@ -2122,7 +2122,11 @@ void QgsMapCanvas::zoomWithCenter( int x, int y, bool zoomIn )

void QgsMapCanvas::setScaleLocked( bool isLocked )
{
mScaleLocked = isLocked;
if ( mScaleLocked != isLocked )
{
mScaleLocked = isLocked;
emit scaleLockChanged( mScaleLocked );
}
}

void QgsMapCanvas::mouseMoveEvent( QMouseEvent *e )
Expand Down
9 changes: 9 additions & 0 deletions src/gui/qgsmapcanvas.h
Expand Up @@ -953,6 +953,15 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
//! Emitted when the scale of the map changes
void scaleChanged( double );

/**
* Emitted when the scale locked state of the map changes
* \param locked true if the scale is locked
* \since QGIS 3.18
* \see setScaleLocked
*/
void scaleLockChanged( bool locked );


//! Emitted when the extents of the map change
void extentsChanged();

Expand Down

0 comments on commit da66679

Please sign in to comment.