Skip to content

Commit 843a72e

Browse files
committedMar 13, 2017
Allow setting magnification factor for map views
1 parent fa46e5a commit 843a72e

File tree

2 files changed

+63
-13
lines changed

2 files changed

+63
-13
lines changed
 

‎src/app/qgsmapcanvasdockwidget.cpp

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
#include "qgsmapcanvas.h"
1717
#include "qgsprojectionselectiondialog.h"
1818
#include "qgsscalecombobox.h"
19+
#include "qgsstatusbarmagnifierwidget.h"
1920
#include "qgsdoublespinbox.h"
21+
#include "qgssettings.h"
2022
#include <QMessageBox>
2123
#include <QMenu>
2224
#include <QToolBar>
@@ -55,7 +57,8 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
5557
QgsMapSettingsAction *settingsAction = new QgsMapSettingsAction( menu );
5658
menu->addAction( settingsAction );
5759
mScaleCombo = settingsAction->scaleCombo();
58-
mRotationEdit = settingsAction->rotationEdit();
60+
mRotationEdit = settingsAction->rotationSpinBox();
61+
mMagnificationEdit = settingsAction->magnifierSpinBox();
5962
connect( mScaleCombo, &QgsScaleComboBox::scaleChanged, this, [ = ]( double scale )
6063
{
6164
if ( !mBlockScaleUpdate )
@@ -95,6 +98,27 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
9598
mBlockRotationUpdate = false;
9699
}
97100
} );
101+
102+
connect( mMagnificationEdit, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, [ = ]( double value )
103+
{
104+
if ( !mBlockMagnificationUpdate )
105+
{
106+
mBlockMagnificationUpdate = true;
107+
mMapCanvas->setMagnificationFactor( value / 100 );
108+
mMapCanvas->refresh();
109+
mBlockMagnificationUpdate = false;
110+
}
111+
} );
112+
113+
connect( mMapCanvas, &QgsMapCanvas::magnificationChanged, this, [ = ]( double factor )
114+
{
115+
if ( !mBlockMagnificationUpdate )
116+
{
117+
mBlockMagnificationUpdate = true;
118+
mMagnificationEdit->setValue( factor * 100 );
119+
mBlockMagnificationUpdate = false;
120+
}
121+
} );
98122
}
99123

100124
QgsMapCanvas *QgsMapCanvasDockWidget::mapCanvas()
@@ -175,19 +199,40 @@ QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
175199
mScaleCombo = new QgsScaleComboBox();
176200
gLayout->addWidget( mScaleCombo, 0, 1 );
177201

178-
mRotationEdit = new QgsDoubleSpinBox();
179-
mRotationEdit->setClearValue( 0.0 );
180-
mRotationEdit->setKeyboardTracking( false );
181-
mRotationEdit->setMaximumWidth( 120 );
182-
mRotationEdit->setDecimals( 1 );
183-
mRotationEdit->setRange( -180.0, 180.0 );
184-
mRotationEdit->setWrapping( true );
185-
mRotationEdit->setSingleStep( 5.0 );
186-
mRotationEdit->setToolTip( tr( "Current clockwise map rotation in degrees" ) );
202+
mRotationWidget = new QgsDoubleSpinBox();
203+
mRotationWidget->setClearValue( 0.0 );
204+
mRotationWidget->setKeyboardTracking( false );
205+
mRotationWidget->setMaximumWidth( 120 );
206+
mRotationWidget->setDecimals( 1 );
207+
mRotationWidget->setRange( -180.0, 180.0 );
208+
mRotationWidget->setWrapping( true );
209+
mRotationWidget->setSingleStep( 5.0 );
210+
mRotationWidget->setToolTip( tr( "Current clockwise map rotation in degrees" ) );
187211

188212
label = new QLabel( tr( "Rotation" ) );
189213
gLayout->addWidget( label, 1, 0 );
190-
gLayout->addWidget( mRotationEdit, 1, 1 );
214+
gLayout->addWidget( mRotationWidget, 1, 1 );
215+
216+
QgsSettings settings;
217+
int minimumFactor = 100 * QgisGui::CANVAS_MAGNIFICATION_MIN;
218+
int maximumFactor = 100 * QgisGui::CANVAS_MAGNIFICATION_MAX;
219+
int defaultFactor = 100 * settings.value( QStringLiteral( "/qgis/magnifier_factor_default" ), 1.0 ).toDouble();
220+
221+
mMagnifierWidget = new QgsDoubleSpinBox();
222+
mMagnifierWidget->setSuffix( QStringLiteral( "%" ) );
223+
mMagnifierWidget->setKeyboardTracking( false );
224+
mMagnifierWidget->setDecimals( 0 );
225+
mMagnifierWidget->setRange( minimumFactor, maximumFactor );
226+
mMagnifierWidget->setWrapping( false );
227+
mMagnifierWidget->setSingleStep( 50 );
228+
mMagnifierWidget->setToolTip( tr( "Magnifier level" ) );
229+
mMagnifierWidget->setClearValueMode( QgsDoubleSpinBox::CustomValue );
230+
mMagnifierWidget->setClearValue( defaultFactor );
231+
mMagnifierWidget->setValue( defaultFactor );
232+
233+
label = new QLabel( tr( "Magnification" ) );
234+
gLayout->addWidget( label, 2, 0 );
235+
gLayout->addWidget( mMagnifierWidget, 2, 1 );
191236

192237
QWidget *w = new QWidget();
193238
w->setLayout( gLayout );

‎src/app/qgsmapcanvasdockwidget.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
class QgsMapCanvas;
2525
class QgsScaleComboBox;
2626
class QgsDoubleSpinBox;
27+
class QgsStatusBarMagnifierWidget;
2728

2829
/**
2930
* \class QgsMapCanvasDockWidget
@@ -68,8 +69,10 @@ class APP_EXPORT QgsMapCanvasDockWidget : public QgsDockWidget, private Ui::QgsM
6869
bool mShowCloseWarning = true;
6970
QgsScaleComboBox *mScaleCombo = nullptr;
7071
QgsDoubleSpinBox *mRotationEdit = nullptr;
72+
QgsDoubleSpinBox *mMagnificationEdit = nullptr;
7173
bool mBlockScaleUpdate = false;
7274
bool mBlockRotationUpdate = false;
75+
bool mBlockMagnificationUpdate = false;
7376
};
7477

7578
/**
@@ -87,11 +90,13 @@ class QgsMapSettingsAction: public QWidgetAction
8790
QgsMapSettingsAction( QWidget *parent = nullptr );
8891

8992
QgsScaleComboBox *scaleCombo() { return mScaleCombo; }
90-
QgsDoubleSpinBox *rotationEdit() { return mRotationEdit; }
93+
QgsDoubleSpinBox *rotationSpinBox() { return mRotationWidget; }
94+
QgsDoubleSpinBox *magnifierSpinBox() { return mMagnifierWidget; }
9195

9296
private:
9397
QgsScaleComboBox *mScaleCombo = nullptr;
94-
QgsDoubleSpinBox *mRotationEdit = nullptr;
98+
QgsDoubleSpinBox *mRotationWidget = nullptr;
99+
QgsDoubleSpinBox *mMagnifierWidget = nullptr;
95100
};
96101

97102

0 commit comments

Comments
 (0)
Please sign in to comment.