32
32
#include " qgscomposershape.h"
33
33
#include " qgspaperitem.h"
34
34
#include " qgsexpressionbuilderdialog.h"
35
+ #include " qgsproject.h"
35
36
#include < QColorDialog>
36
37
#include < QFontDialog>
37
38
#include < QMessageBox>
@@ -92,8 +93,6 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ): QWidg
92
93
connect ( mGridCheckBox , SIGNAL ( toggled ( bool ) ),
93
94
mDrawAnnotationCheckableGroupBox , SLOT ( setEnabled ( bool ) ) );
94
95
95
- connect ( mAtlasCheckBox , SIGNAL ( toggled ( bool ) ), this , SLOT ( atlasToggled ( bool ) ) );
96
-
97
96
if ( composerMap )
98
97
{
99
98
connect ( composerMap, SIGNAL ( itemChanged () ), this , SLOT ( setGuiElementValues () ) );
@@ -133,27 +132,16 @@ void QgsComposerMapWidget::compositionAtlasToggled( bool atlasEnabled )
133
132
}
134
133
}
135
134
136
- void QgsComposerMapWidget::atlasToggled ( bool checked )
135
+ void QgsComposerMapWidget::on_mAtlasCheckBox_toggled ( bool checked )
137
136
{
138
- if ( checked && mComposerMap )
139
- {
140
- // check atlas coverage layer type
141
- QgsComposition* composition = mComposerMap ->composition ();
142
- if ( composition )
143
- {
144
- toggleAtlasMarginByLayerType ();
145
- }
146
- else
147
- {
148
- mAtlasMarginRadio ->setEnabled ( false );
149
- }
150
- }
151
- else
137
+ if ( !mComposerMap )
152
138
{
153
- mAtlasMarginRadio -> setEnabled ( false ) ;
139
+ return ;
154
140
}
155
141
156
142
mAtlasFixedScaleRadio ->setEnabled ( checked );
143
+ mAtlasMarginRadio ->setEnabled ( checked );
144
+
157
145
if ( mAtlasMarginRadio ->isEnabled () && mAtlasMarginRadio ->isChecked () )
158
146
{
159
147
mAtlasMarginSpinBox ->setEnabled ( true );
@@ -162,14 +150,23 @@ void QgsComposerMapWidget::atlasToggled( bool checked )
162
150
{
163
151
mAtlasMarginSpinBox ->setEnabled ( false );
164
152
}
165
- }
166
153
154
+ mAtlasPredefinedScaleRadio ->setEnabled ( checked );
167
155
168
- void QgsComposerMapWidget::on_mAtlasCheckBox_toggled ( bool checked )
169
- {
170
- if ( !mComposerMap )
156
+ if ( checked )
171
157
{
172
- return ;
158
+ // check atlas coverage layer type
159
+ QgsComposition* composition = mComposerMap ->composition ();
160
+ if ( composition )
161
+ {
162
+ toggleAtlasScalingOptionsByLayerType ();
163
+ }
164
+ }
165
+
166
+ // disable predefined scales if none are defined
167
+ if ( !hasPredefinedScales () )
168
+ {
169
+ mAtlasPredefinedScaleRadio ->setEnabled ( false );
173
170
}
174
171
175
172
mComposerMap ->setAtlasDriven ( checked );
@@ -201,6 +198,12 @@ void QgsComposerMapWidget::updateMapForAtlas()
201
198
void QgsComposerMapWidget::on_mAtlasMarginRadio_toggled ( bool checked )
202
199
{
203
200
mAtlasMarginSpinBox ->setEnabled ( checked );
201
+
202
+ if (checked && mComposerMap )
203
+ {
204
+ mComposerMap ->setAtlasScalingMode ( QgsComposerMap::Auto );
205
+ updateMapForAtlas ();
206
+ }
204
207
}
205
208
206
209
void QgsComposerMapWidget::on_mAtlasMarginSpinBox_valueChanged ( int value )
@@ -221,8 +224,36 @@ void QgsComposerMapWidget::on_mAtlasFixedScaleRadio_toggled( bool checked )
221
224
return ;
222
225
}
223
226
224
- mComposerMap ->setAtlasFixedScale ( checked );
225
- updateMapForAtlas ();
227
+ if (checked)
228
+ {
229
+ mComposerMap ->setAtlasScalingMode ( QgsComposerMap::Fixed );
230
+ updateMapForAtlas ();
231
+ }
232
+ }
233
+
234
+ void QgsComposerMapWidget::on_mAtlasPredefinedScaleRadio_toggled ( bool checked )
235
+ {
236
+ if ( !mComposerMap )
237
+ {
238
+ return ;
239
+ }
240
+
241
+ if ( hasPredefinedScales () )
242
+ {
243
+ if ( checked )
244
+ {
245
+ mComposerMap ->setAtlasScalingMode ( QgsComposerMap::Predefined );
246
+ updateMapForAtlas ();
247
+ }
248
+ }
249
+ else
250
+ {
251
+ // restore to fixed scale if no predefined scales exist
252
+ mAtlasFixedScaleRadio ->blockSignals ( true );
253
+ mAtlasFixedScaleRadio ->setChecked ( Qt::Checked );
254
+ mAtlasFixedScaleRadio ->blockSignals ( false );
255
+ mComposerMap ->setAtlasScalingMode ( QgsComposerMap::Fixed );
256
+ }
226
257
}
227
258
228
259
void QgsComposerMapWidget::on_mPreviewModeComboBox_activated ( int i )
@@ -536,33 +567,30 @@ void QgsComposerMapWidget::updateGuiElements()
536
567
// atlas controls
537
568
mAtlasCheckBox ->setChecked ( mComposerMap ->atlasDriven () );
538
569
mAtlasMarginSpinBox ->setValue ( static_cast <int >( mComposerMap ->atlasMargin () * 100 ) );
539
- if ( mComposerMap ->atlasFixedScale () )
540
- {
541
- mAtlasFixedScaleRadio ->setChecked ( true );
542
- mAtlasMarginSpinBox ->setEnabled ( false );
543
- }
544
- else
545
- {
546
- mAtlasMarginRadio ->setChecked ( true );
547
- mAtlasMarginSpinBox ->setEnabled ( true );
548
- }
549
- if ( !mComposerMap ->atlasDriven () )
570
+
571
+ mAtlasFixedScaleRadio ->setEnabled ( mComposerMap ->atlasDriven () );
572
+ mAtlasFixedScaleRadio ->setChecked ( mComposerMap ->atlasScalingMode () == QgsComposerMap::Fixed );
573
+ mAtlasMarginSpinBox ->setEnabled ( mComposerMap ->atlasScalingMode () == QgsComposerMap::Auto );
574
+ mAtlasMarginRadio ->setEnabled ( mComposerMap ->atlasDriven () );
575
+ mAtlasMarginRadio ->setChecked ( mComposerMap ->atlasScalingMode () == QgsComposerMap::Auto );
576
+ mAtlasPredefinedScaleRadio ->setEnabled ( mComposerMap ->atlasDriven () );
577
+ mAtlasPredefinedScaleRadio ->setChecked ( mComposerMap ->atlasScalingMode () == QgsComposerMap::Predefined );
578
+
579
+ if ( mComposerMap ->atlasDriven () )
550
580
{
551
- mAtlasMarginSpinBox ->setEnabled ( false );
552
- mAtlasMarginRadio ->setEnabled ( false );
553
- mAtlasFixedScaleRadio ->setEnabled ( false );
581
+ toggleAtlasScalingOptionsByLayerType ();
554
582
}
555
- else
583
+ // disable predefined scales if none are defined
584
+ if ( !hasPredefinedScales () )
556
585
{
557
- mAtlasFixedScaleRadio ->setEnabled ( true );
558
- toggleAtlasMarginByLayerType ();
586
+ mAtlasPredefinedScaleRadio ->setEnabled ( false );
559
587
}
560
588
561
589
blockAllSignals ( false );
562
590
}
563
591
}
564
592
565
- void QgsComposerMapWidget::toggleAtlasMarginByLayerType ()
593
+ void QgsComposerMapWidget::toggleAtlasScalingOptionsByLayerType ()
566
594
{
567
595
if ( !mComposerMap )
568
596
{
@@ -593,10 +621,12 @@ void QgsComposerMapWidget::toggleAtlasMarginByLayerType()
593
621
// For point layers buffer setting makes no sense, so set "fixed scale" on and disable margin control
594
622
mAtlasFixedScaleRadio ->setChecked ( true );
595
623
mAtlasMarginRadio ->setEnabled ( false );
624
+ mAtlasPredefinedScaleRadio ->setEnabled ( false );
596
625
break ;
597
626
default :
598
627
// Not a point layer, so enable changes to fixed scale control
599
628
mAtlasMarginRadio ->setEnabled ( true );
629
+ mAtlasPredefinedScaleRadio ->setEnabled ( true );
600
630
}
601
631
}
602
632
@@ -1396,5 +1426,21 @@ void QgsComposerMapWidget::atlasLayerChanged( QgsVectorLayer* layer )
1396
1426
return ;
1397
1427
}
1398
1428
1399
- toggleAtlasMarginByLayerType ();
1429
+ toggleAtlasScalingOptionsByLayerType ();
1430
+ }
1431
+
1432
+ bool QgsComposerMapWidget::hasPredefinedScales () const
1433
+ {
1434
+ // first look at project's scales
1435
+ QStringList scales ( QgsProject::instance ()->readListEntry ( " Scales" , " /ScalesList" ) );
1436
+ bool hasProjectScales ( QgsProject::instance ()->readBoolEntry ( " Scales" , " /useProjectScales" ) );
1437
+ if ( !hasProjectScales || scales.isEmpty () )
1438
+ {
1439
+ // default to global map tool scales
1440
+ QSettings settings;
1441
+ QString scalesStr ( settings.value ( " Map/scales" , PROJECT_SCALES ).toString () );
1442
+ QStringList myScalesList = scalesStr.split ( " ," );
1443
+ return myScalesList.size () > 0 && myScalesList[0 ] != " " ;
1444
+ }
1445
+ return true ;
1400
1446
}
0 commit comments