Skip to content

Commit 531f366

Browse files
authored
Merge pull request #8310 from borysiasty/scale_lock_button
Move the scale lock button from the QgsStatusBarScaleWidget to QgsStatusBarMagnifierWidget
2 parents 2633006 + 83065a4 commit 531f366

5 files changed

+29
-19
lines changed

src/app/qgisapp.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -3034,7 +3034,6 @@ void QgisApp::createStatusBar()
30343034
mScaleWidget = new QgsStatusBarScaleWidget( mMapCanvas, mStatusBar );
30353035
mScaleWidget->setObjectName( QStringLiteral( "mScaleWidget" ) );
30363036
mScaleWidget->setFont( statusBarFont );
3037-
connect( mScaleWidget, &QgsStatusBarScaleWidget::scaleLockChanged, mMapCanvas, &QgsMapCanvas::setScaleLocked );
30383037
mStatusBar->addPermanentWidget( mScaleWidget, 0 );
30393038

30403039
// zoom widget
@@ -3043,6 +3042,8 @@ void QgisApp::createStatusBar()
30433042
mMagnifierWidget->setFont( statusBarFont );
30443043
connect( mMapCanvas, &QgsMapCanvas::magnificationChanged, mMagnifierWidget, &QgsStatusBarMagnifierWidget::updateMagnification );
30453044
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::magnificationChanged, mMapCanvas, &QgsMapCanvas::setMagnificationFactor );
3045+
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::scaleLockChanged, mMapCanvas, &QgsMapCanvas::setScaleLocked );
3046+
connect( mMagnifierWidget, &QgsStatusBarMagnifierWidget::scaleLockChanged, mScaleWidget, &QgsStatusBarScaleWidget::setLocked );
30463047
mMagnifierWidget->updateMagnification( QSettings().value( QStringLiteral( "/qgis/magnifier_factor_default" ), 1.0 ).toDouble() );
30473048
mStatusBar->addPermanentWidget( mMagnifierWidget, 0 );
30483049

src/app/qgsstatusbarmagnifierwidget.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <QFont>
1818
#include <QHBoxLayout>
1919
#include <QLabel>
20+
#include <QToolButton>
2021

2122
#include "qgssettings.h"
2223
#include "qgsapplication.h"
@@ -55,8 +56,18 @@ QgsStatusBarMagnifierWidget::QgsStatusBarMagnifierWidget( QWidget *parent )
5556

5657
connect( mSpinBox, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, &QgsStatusBarMagnifierWidget::setMagnification );
5758

59+
mLockButton = new QToolButton();
60+
mLockButton->setIcon( QIcon( QgsApplication::getThemeIcon( "/lockedGray.svg" ) ) );
61+
mLockButton->setToolTip( tr( "Lock the scale to use magnifier to zoom in or out." ) );
62+
mLockButton->setCheckable( true );
63+
mLockButton->setChecked( false );
64+
mLockButton->setAutoRaise( true );
65+
66+
connect( mLockButton, &QAbstractButton::toggled, this, &QgsStatusBarMagnifierWidget::scaleLockChanged );
67+
5868
// layout
5969
mLayout = new QHBoxLayout( this );
70+
mLayout->addWidget( mLockButton );
6071
mLayout->addWidget( mLabel );
6172
mLayout->addWidget( mSpinBox );
6273
mLayout->setContentsMargins( 0, 0, 0, 0 );

src/app/qgsstatusbarmagnifierwidget.h

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
class QLabel;
2121
class QFont;
2222
class QHBoxLayout;
23+
class QToolButton;
2324
class QgsDoubleSpinBox;
2425

2526
#include <QWidget>
@@ -63,11 +64,13 @@ class APP_EXPORT QgsStatusBarMagnifierWidget : public QWidget
6364
signals:
6465
void magnificationChanged( double factor );
6566

67+
void scaleLockChanged( bool );
6668

6769
private:
6870
QHBoxLayout *mLayout = nullptr;
6971
QLabel *mLabel = nullptr;
7072
QgsDoubleSpinBox *mSpinBox = nullptr;
73+
QToolButton *mLockButton = nullptr;
7174
};
7275

7376
#endif

src/app/qgsstatusbarscalewidget.cpp

+6-13
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include <QHBoxLayout>
1818
#include <QLabel>
1919
#include <QLineEdit>
20-
#include <QToolButton>
2120
#include <QValidator>
2221

2322
#include "qgsstatusbarscalewidget.h"
@@ -49,28 +48,17 @@ QgsStatusBarScaleWidget::QgsStatusBarScaleWidget( QgsMapCanvas *canvas, QWidget
4948
mScale->setWhatsThis( tr( "Displays the current map scale" ) );
5049
mScale->setToolTip( tr( "Current map scale (formatted as x:y)" ) );
5150

52-
mLockButton = new QToolButton();
53-
mLockButton->setIcon( QIcon( QgsApplication::getThemeIcon( "/lockedGray.svg" ) ) );
54-
mLockButton->setToolTip( tr( "Lock the scale to use magnifier to zoom in or out." ) );
55-
mLockButton->setCheckable( true );
56-
mLockButton->setChecked( false );
57-
mLockButton->setAutoRaise( true );
58-
5951
// layout
6052
mLayout = new QHBoxLayout( this );
6153
mLayout->addWidget( mLabel );
6254
mLayout->addWidget( mScale );
63-
mLayout->addWidget( mLockButton );
6455
mLayout->setContentsMargins( 0, 0, 0, 0 );
6556
mLayout->setAlignment( Qt::AlignRight );
6657
mLayout->setSpacing( 0 );
6758

6859
setLayout( mLayout );
6960

7061
connect( mScale, &QgsScaleComboBox::scaleChanged, this, &QgsStatusBarScaleWidget::userScale );
71-
72-
connect( mLockButton, &QAbstractButton::toggled, this, &QgsStatusBarScaleWidget::scaleLockChanged );
73-
connect( mLockButton, &QAbstractButton::toggled, mScale, &QWidget::setDisabled );
7462
}
7563

7664
void QgsStatusBarScaleWidget::setScale( double scale )
@@ -87,7 +75,12 @@ void QgsStatusBarScaleWidget::setScale( double scale )
8775

8876
bool QgsStatusBarScaleWidget::isLocked() const
8977
{
90-
return mLockButton->isChecked();
78+
return !mScale->isEnabled();
79+
}
80+
81+
void QgsStatusBarScaleWidget::setLocked( bool state )
82+
{
83+
mScale->setDisabled( state );
9184
}
9285

9386
void QgsStatusBarScaleWidget::setFont( const QFont &font )

src/app/qgsstatusbarscalewidget.h

+7-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
class QFont;
2121
class QHBoxLayout;
2222
class QLabel;
23-
class QToolButton;
2423
class QValidator;
2524

2625
class QgsMapCanvas;
@@ -46,6 +45,13 @@ class APP_EXPORT QgsStatusBarScaleWidget : public QWidget
4645
*/
4746
void setScale( double scale );
4847

48+
/**
49+
* Lock the scale widget.
50+
* \param state the lock state
51+
* \since QGIS 3.4
52+
*/
53+
void setLocked( bool state );
54+
4955
/**
5056
* \brief isLocked check if the scale should be locked to use magnifier instead of scale to zoom in/out
5157
* \returns True if the scale shall be locked
@@ -64,13 +70,9 @@ class APP_EXPORT QgsStatusBarScaleWidget : public QWidget
6470
private slots:
6571
void userScale() const;
6672

67-
signals:
68-
void scaleLockChanged( bool );
69-
7073
private:
7174
QgsMapCanvas *mMapCanvas = nullptr;
7275
QHBoxLayout *mLayout = nullptr;
73-
QToolButton *mLockButton = nullptr;
7476

7577
//! Widget that will live on the statusbar to display "scale 1:"
7678
QLabel *mLabel = nullptr;

0 commit comments

Comments
 (0)