28
28
#include " qgisapp.h"
29
29
#include " qgsvertexmarker.h"
30
30
#include " qgsrubberband.h"
31
+ #include " qgsvectorlayer.h"
31
32
#include < QMessageBox>
32
33
#include < QMenu>
33
34
#include < QToolBar>
34
35
#include < QToolButton>
36
+ #include < QRadioButton>
37
+
35
38
36
39
QgsMapCanvasDockWidget::QgsMapCanvasDockWidget ( const QString &name, QWidget *parent )
37
40
: QgsDockWidget( parent )
@@ -119,16 +122,30 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
119
122
mActionShowLabels ->setChecked ( true );
120
123
connect ( mActionShowLabels , &QAction::toggled, this , &QgsMapCanvasDockWidget::showLabels );
121
124
122
- mSyncExtentCheckBox = settingsAction->syncExtentCheckBox ();
125
+
126
+ mSyncExtentRadio = settingsAction->syncExtentRadio ();
127
+ mSyncSelectionRadio = settingsAction->syncSelectionRadio ();
123
128
mScaleCombo = settingsAction->scaleCombo ();
124
129
mRotationEdit = settingsAction->rotationSpinBox ();
125
130
mMagnificationEdit = settingsAction->magnifierSpinBox ();
126
131
mSyncScaleCheckBox = settingsAction->syncScaleCheckBox ();
127
132
mScaleFactorWidget = settingsAction->scaleFactorSpinBox ();
128
133
129
- connect ( mSyncExtentCheckBox , &QCheckBox ::toggled, this , [ = ]
134
+ connect ( mSyncSelectionRadio , &QRadioButton ::toggled, this , [ = ]( bool checked )
130
135
{
131
- syncViewCenter ( mMainCanvas );
136
+ autoZoomToSelection ( checked );
137
+ if ( checked )
138
+ {
139
+ syncSelection ();
140
+ }
141
+ } );
142
+
143
+ connect ( mSyncExtentRadio , &QRadioButton::toggled, this , [ = ]( bool checked )
144
+ {
145
+ if ( checked )
146
+ {
147
+ syncViewCenter ( mMainCanvas );
148
+ }
132
149
} );
133
150
134
151
connect ( mScaleCombo , &QgsScaleComboBox::scaleChanged, this , [ = ]( double scale )
@@ -204,7 +221,7 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
204
221
connect ( &mResizeTimer , &QTimer::timeout, this , [ = ]
205
222
{
206
223
mBlockExtentSync = false ;
207
- if ( mSyncExtentCheckBox ->isChecked () )
224
+ if ( mSyncExtentRadio ->isChecked () )
208
225
syncViewCenter ( mMainCanvas );
209
226
} );
210
227
}
@@ -237,12 +254,22 @@ QgsMapCanvas *QgsMapCanvasDockWidget::mapCanvas()
237
254
238
255
void QgsMapCanvasDockWidget::setViewCenterSynchronized ( bool enabled )
239
256
{
240
- mSyncExtentCheckBox ->setChecked ( enabled );
257
+ mSyncExtentRadio ->setChecked ( enabled );
241
258
}
242
259
243
260
bool QgsMapCanvasDockWidget::isViewCenterSynchronized () const
244
261
{
245
- return mSyncExtentCheckBox ->isChecked ();
262
+ return mSyncExtentRadio ->isChecked ();
263
+ }
264
+
265
+ bool QgsMapCanvasDockWidget::isAutoZoomToSelected () const
266
+ {
267
+ return mSyncSelectionRadio ->isChecked ();
268
+ }
269
+
270
+ void QgsMapCanvasDockWidget::setAutoZoomToSelected ( bool autoZoom )
271
+ {
272
+ mSyncSelectionRadio ->setChecked ( autoZoom );
246
273
}
247
274
248
275
void QgsMapCanvasDockWidget::setCursorMarkerVisible ( bool visible )
@@ -336,6 +363,16 @@ void QgsMapCanvasDockWidget::syncViewCenter( QgsMapCanvas *sourceCanvas )
336
363
mBlockExtentSync = false ;
337
364
}
338
365
366
+ void QgsMapCanvasDockWidget::syncSelection ()
367
+ {
368
+ QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( mMapCanvas ->currentLayer () );
369
+
370
+ if ( !layer )
371
+ return ;
372
+
373
+ mMapCanvas ->zoomToSelected ( layer );
374
+ }
375
+
339
376
void QgsMapCanvasDockWidget::mapExtentChanged ()
340
377
{
341
378
if ( mBlockExtentSync )
@@ -351,7 +388,7 @@ void QgsMapCanvasDockWidget::mapExtentChanged()
351
388
mScaleFactorWidget ->setValue ( newScaleFactor );
352
389
}
353
390
354
- if ( mSyncExtentCheckBox ->isChecked () )
391
+ if ( mSyncExtentRadio ->isChecked () )
355
392
syncViewCenter ( sourceCanvas );
356
393
}
357
394
@@ -473,20 +510,31 @@ void QgsMapCanvasDockWidget::showLabels( bool show )
473
510
mMapCanvas ->setMapSettingsFlags ( flags );
474
511
}
475
512
513
+ void QgsMapCanvasDockWidget::autoZoomToSelection ( bool autoZoom )
514
+ {
515
+ if ( autoZoom )
516
+ connect ( mMapCanvas , &QgsMapCanvas::selectionChanged, mMapCanvas , &QgsMapCanvas::zoomToSelected );
517
+ else
518
+ disconnect ( mMapCanvas , &QgsMapCanvas::selectionChanged, mMapCanvas , &QgsMapCanvas::zoomToSelected );
519
+ }
520
+
476
521
QgsMapSettingsAction::QgsMapSettingsAction ( QWidget *parent )
477
522
: QWidgetAction( parent )
478
523
{
479
524
QGridLayout *gLayout = new QGridLayout ();
480
525
gLayout ->setContentsMargins ( 3 , 2 , 3 , 2 );
481
526
482
- mSyncExtentCheckBox = new QCheckBox ( tr ( " Synchronize View Center with Main Map" ) );
483
- gLayout ->addWidget ( mSyncExtentCheckBox , 0 , 0 , 1 , 2 );
527
+ mSyncExtentRadio = new QRadioButton ( tr ( " Synchronize View Center with Main Map" ) );
528
+ gLayout ->addWidget ( mSyncExtentRadio , 0 , 0 , 1 , 2 );
529
+
530
+ mSyncSelectionRadio = new QRadioButton ( tr ( " Synchronize View to Selection" ) );
531
+ gLayout ->addWidget ( mSyncSelectionRadio , 1 , 0 , 1 , 2 );
484
532
485
533
QLabel *label = new QLabel ( tr ( " Scale" ) );
486
- gLayout ->addWidget ( label, 1 , 0 );
534
+ gLayout ->addWidget ( label, 2 , 0 );
487
535
488
536
mScaleCombo = new QgsScaleComboBox ();
489
- gLayout ->addWidget ( mScaleCombo , 1 , 1 );
537
+ gLayout ->addWidget ( mScaleCombo , 2 , 1 );
490
538
491
539
mRotationWidget = new QgsDoubleSpinBox ();
492
540
mRotationWidget ->setClearValue ( 0.0 );
@@ -500,8 +548,8 @@ QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
500
548
mRotationWidget ->setToolTip ( tr ( " Current clockwise map rotation in degrees" ) );
501
549
502
550
label = new QLabel ( tr ( " Rotation" ) );
503
- gLayout ->addWidget ( label, 2 , 0 );
504
- gLayout ->addWidget ( mRotationWidget , 2 , 1 );
551
+ gLayout ->addWidget ( label, 3 , 0 );
552
+ gLayout ->addWidget ( mRotationWidget , 3 , 1 );
505
553
506
554
QgsSettings settings;
507
555
int minimumFactor = 100 * QgsGuiUtils::CANVAS_MAGNIFICATION_MIN;
@@ -521,11 +569,11 @@ QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
521
569
mMagnifierWidget ->setValue ( defaultFactor );
522
570
523
571
label = new QLabel ( tr ( " Magnification" ) );
524
- gLayout ->addWidget ( label, 3 , 0 );
525
- gLayout ->addWidget ( mMagnifierWidget , 3 , 1 );
572
+ gLayout ->addWidget ( label, 4 , 0 );
573
+ gLayout ->addWidget ( mMagnifierWidget , 4 , 1 );
526
574
527
575
mSyncScaleCheckBox = new QCheckBox ( tr ( " Synchronize Scale" ) );
528
- gLayout ->addWidget ( mSyncScaleCheckBox , 4 , 0 , 1 , 2 );
576
+ gLayout ->addWidget ( mSyncScaleCheckBox , 5 , 0 , 1 , 2 );
529
577
530
578
mScaleFactorWidget = new QgsDoubleSpinBox ();
531
579
mScaleFactorWidget ->setSuffix ( tr ( " ×" ) );
@@ -542,8 +590,8 @@ QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
542
590
connect ( mSyncScaleCheckBox , &QCheckBox::toggled, mScaleFactorWidget , &QgsDoubleSpinBox::setEnabled );
543
591
544
592
label = new QLabel ( tr ( " Scale Factor" ) );
545
- gLayout ->addWidget ( label, 5 , 0 );
546
- gLayout ->addWidget ( mScaleFactorWidget , 5 , 1 );
593
+ gLayout ->addWidget ( label, 6 , 0 );
594
+ gLayout ->addWidget ( mScaleFactorWidget , 6 , 1 );
547
595
548
596
QWidget *w = new QWidget ();
549
597
w->setLayout ( gLayout );
0 commit comments