3232#include " qgscomposershape.h"
3333#include " qgspaperitem.h"
3434#include " qgsexpressionbuilderdialog.h"
35+ #include " qgsproject.h"
3536#include < QColorDialog>
3637#include < QFontDialog>
3738#include < QMessageBox>
@@ -92,8 +93,6 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ): QWidg
9293 connect ( mGridCheckBox , SIGNAL ( toggled ( bool ) ),
9394 mDrawAnnotationCheckableGroupBox , SLOT ( setEnabled ( bool ) ) );
9495
95- connect ( mAtlasCheckBox , SIGNAL ( toggled ( bool ) ), this , SLOT ( atlasToggled ( bool ) ) );
96-
9796 if ( composerMap )
9897 {
9998 connect ( composerMap, SIGNAL ( itemChanged () ), this , SLOT ( setGuiElementValues () ) );
@@ -133,27 +132,16 @@ void QgsComposerMapWidget::compositionAtlasToggled( bool atlasEnabled )
133132 }
134133}
135134
136- void QgsComposerMapWidget::atlasToggled ( bool checked )
135+ void QgsComposerMapWidget::on_mAtlasCheckBox_toggled ( bool checked )
137136{
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 )
152138 {
153- mAtlasMarginRadio -> setEnabled ( false ) ;
139+ return ;
154140 }
155141
156142 mAtlasFixedScaleRadio ->setEnabled ( checked );
143+ mAtlasMarginRadio ->setEnabled ( checked );
144+
157145 if ( mAtlasMarginRadio ->isEnabled () && mAtlasMarginRadio ->isChecked () )
158146 {
159147 mAtlasMarginSpinBox ->setEnabled ( true );
@@ -162,14 +150,23 @@ void QgsComposerMapWidget::atlasToggled( bool checked )
162150 {
163151 mAtlasMarginSpinBox ->setEnabled ( false );
164152 }
165- }
166153
154+ mAtlasPredefinedScaleRadio ->setEnabled ( checked );
167155
168- void QgsComposerMapWidget::on_mAtlasCheckBox_toggled ( bool checked )
169- {
170- if ( !mComposerMap )
156+ if ( checked )
171157 {
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 );
173170 }
174171
175172 mComposerMap ->setAtlasDriven ( checked );
@@ -201,6 +198,12 @@ void QgsComposerMapWidget::updateMapForAtlas()
201198void QgsComposerMapWidget::on_mAtlasMarginRadio_toggled ( bool checked )
202199{
203200 mAtlasMarginSpinBox ->setEnabled ( checked );
201+
202+ if (checked && mComposerMap )
203+ {
204+ mComposerMap ->setAtlasScalingMode ( QgsComposerMap::Auto );
205+ updateMapForAtlas ();
206+ }
204207}
205208
206209void QgsComposerMapWidget::on_mAtlasMarginSpinBox_valueChanged ( int value )
@@ -221,8 +224,36 @@ void QgsComposerMapWidget::on_mAtlasFixedScaleRadio_toggled( bool checked )
221224 return ;
222225 }
223226
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+ }
226257}
227258
228259void QgsComposerMapWidget::on_mPreviewModeComboBox_activated ( int i )
@@ -536,33 +567,30 @@ void QgsComposerMapWidget::updateGuiElements()
536567 // atlas controls
537568 mAtlasCheckBox ->setChecked ( mComposerMap ->atlasDriven () );
538569 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 () )
550580 {
551- mAtlasMarginSpinBox ->setEnabled ( false );
552- mAtlasMarginRadio ->setEnabled ( false );
553- mAtlasFixedScaleRadio ->setEnabled ( false );
581+ toggleAtlasScalingOptionsByLayerType ();
554582 }
555- else
583+ // disable predefined scales if none are defined
584+ if ( !hasPredefinedScales () )
556585 {
557- mAtlasFixedScaleRadio ->setEnabled ( true );
558- toggleAtlasMarginByLayerType ();
586+ mAtlasPredefinedScaleRadio ->setEnabled ( false );
559587 }
560588
561589 blockAllSignals ( false );
562590 }
563591}
564592
565- void QgsComposerMapWidget::toggleAtlasMarginByLayerType ()
593+ void QgsComposerMapWidget::toggleAtlasScalingOptionsByLayerType ()
566594{
567595 if ( !mComposerMap )
568596 {
@@ -593,10 +621,12 @@ void QgsComposerMapWidget::toggleAtlasMarginByLayerType()
593621 // For point layers buffer setting makes no sense, so set "fixed scale" on and disable margin control
594622 mAtlasFixedScaleRadio ->setChecked ( true );
595623 mAtlasMarginRadio ->setEnabled ( false );
624+ mAtlasPredefinedScaleRadio ->setEnabled ( false );
596625 break ;
597626 default :
598627 // Not a point layer, so enable changes to fixed scale control
599628 mAtlasMarginRadio ->setEnabled ( true );
629+ mAtlasPredefinedScaleRadio ->setEnabled ( true );
600630 }
601631}
602632
@@ -1396,5 +1426,21 @@ void QgsComposerMapWidget::atlasLayerChanged( QgsVectorLayer* layer )
13961426 return ;
13971427 }
13981428
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 ;
14001446}
0 commit comments