Skip to content

Commit 22514b6

Browse files
committed
[composer] Tweak interface for atlas previews, fix occasional wrong extent in atlas previews.
1 parent dcd8bc5 commit 22514b6

10 files changed

+68
-29
lines changed

python/core/composer/qgscomposition.sip

+13
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ class QgsComposition : QGraphicsScene
2727
Dots,
2828
Crosses
2929
};
30+
31+
/**Composition atlas modes*/
32+
enum AtlasMode
33+
{
34+
AtlasOff, // Composition is not being controlled by an atlas
35+
PreviewAtlas, // An atlas composition is being previewed in the app
36+
ExportAtlas // The composition is being exported as an atlas
37+
};
3038

3139
QgsComposition( QgsMapRenderer* mapRenderer );
3240
~QgsComposition();
@@ -306,6 +314,11 @@ class QgsComposition : QGraphicsScene
306314
void computeWorldFileParameters( double& a, double& b, double& c, double& d, double& e, double& f ) const;
307315

308316
QgsAtlasComposition& atlasComposition();
317+
318+
/** Returns the current atlas mode of the composition */
319+
QgsComposition::AtlasMode atlasMode() const;
320+
/** Sets the current atlas mode of the composition. Returns false if the mode could not be changed. */
321+
bool setAtlasMode( QgsComposition::AtlasMode mode );
309322

310323
public slots:
311324
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/

src/app/composer/qgsatlascompositionwidget.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ void QgsAtlasCompositionWidget::on_mAtlasSortFeatureCheckBox_stateChanged( int s
341341
void QgsAtlasCompositionWidget::updateAtlasFeatures()
342342
{
343343
//only do this if composer mode is preview
344-
if ( !mComposition->atlasPreviewEnabled() )
344+
if ( !mComposition->atlasMode() == QgsComposition::PreviewAtlas )
345345
{
346346
return;
347347
}

src/app/composer/qgscomposer.cpp

+26-6
Original file line numberDiff line numberDiff line change
@@ -808,7 +808,13 @@ void QgsComposer::on_mActionOptions_triggered()
808808
void QgsComposer::toggleAtlasControls( bool atlasEnabled )
809809
{
810810
//preview defaults to unchecked
811+
mActionAtlasPreview->blockSignals( true );
811812
mActionAtlasPreview->setChecked( false );
813+
mActionAtlasFirst->setEnabled( false );
814+
mActionAtlasLast->setEnabled( false );
815+
mActionAtlasNext->setEnabled( false );
816+
mActionAtlasPrev->setEnabled( false );
817+
mActionAtlasPreview->blockSignals( false );
812818
mActionAtlasPreview->setEnabled( atlasEnabled );
813819
mActionPrintAtlas->setEnabled( atlasEnabled );
814820
mActionExportAtlasAsImage->setEnabled( atlasEnabled );
@@ -841,7 +847,7 @@ void QgsComposer::on_mActionAtlasPreview_triggered( bool checked )
841847
mActionAtlasNext->setEnabled( checked );
842848
mActionAtlasPrev->setEnabled( checked );
843849

844-
bool previewEnabled = mComposition->setAtlasPreviewEnabled( checked );
850+
bool previewEnabled = mComposition->setAtlasMode( checked ? QgsComposition::PreviewAtlas : QgsComposition::AtlasOff );
845851
if ( !previewEnabled )
846852
{
847853
//something went wrong, eg, no matching features
@@ -1082,9 +1088,12 @@ void QgsComposer::on_mActionAtlasSettings_triggered()
10821088

10831089
void QgsComposer::on_mActionExportAtlasAsPDF_triggered()
10841090
{
1091+
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
1092+
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
10851093
exportCompositionAsPDF( QgsComposer::Atlas );
1094+
mComposition->setAtlasMode( previousMode );
10861095

1087-
if ( mComposition->atlasPreviewEnabled() )
1096+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
10881097
{
10891098
//after atlas output, jump back to preview first feature
10901099
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
@@ -1139,7 +1148,8 @@ void QgsComposer::exportCompositionAsPDF( QgsComposer::OutputMode mode )
11391148
QString lastUsedFile = myQSettings.value( "/UI/lastSaveAsPdfFile", "qgis.pdf" ).toString();
11401149
QFileInfo file( lastUsedFile );
11411150

1142-
if ( hasAnAtlas && !atlasOnASingleFile && ( mode == QgsComposer::Atlas || mComposition->atlasPreviewEnabled() ) )
1151+
if ( hasAnAtlas && !atlasOnASingleFile &&
1152+
( mode == QgsComposer::Atlas || mComposition->atlasMode() == QgsComposition::PreviewAtlas ) )
11431153
{
11441154
outputFileName = QDir( file.path() ).filePath( atlasMap->currentFilename() ) + ".pdf";
11451155
}
@@ -1311,7 +1321,10 @@ void QgsComposer::on_mActionPrint_triggered()
13111321
void QgsComposer::on_mActionPrintAtlas_triggered()
13121322
{
13131323
//print whole atlas
1324+
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
1325+
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
13141326
printComposition( QgsComposer::Atlas );
1327+
mComposition->setAtlasMode( previousMode );
13151328
}
13161329

13171330
void QgsComposer::printComposition( QgsComposer::OutputMode mode )
@@ -1425,9 +1438,13 @@ void QgsComposer::printComposition( QgsComposer::OutputMode mode )
14251438

14261439
void QgsComposer::on_mActionExportAtlasAsImage_triggered()
14271440
{
1441+
//print whole atlas
1442+
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
1443+
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
14281444
exportCompositionAsImage( QgsComposer::Atlas );
1445+
mComposition->setAtlasMode( previousMode );
14291446

1430-
if ( mComposition->atlasPreviewEnabled() )
1447+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
14311448
{
14321449
//after atlas output, jump back to preview first feature
14331450
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
@@ -1480,7 +1497,7 @@ void QgsComposer::exportCompositionAsImage( QgsComposer::OutputMode mode )
14801497
{
14811498
QString outputFileName = QString::null;
14821499

1483-
if ( atlasMap->enabled() && mComposition->atlasPreviewEnabled() )
1500+
if ( atlasMap->enabled() && mComposition->atlasMode() == QgsComposition::PreviewAtlas )
14841501
{
14851502
QString lastUsedDir = settings.value( "/UI/lastSaveAsImageDir", "." ).toString();
14861503
outputFileName = QDir( lastUsedDir ).filePath( atlasMap->currentFilename() );
@@ -1702,9 +1719,12 @@ void QgsComposer::exportCompositionAsImage( QgsComposer::OutputMode mode )
17021719

17031720
void QgsComposer::on_mActionExportAtlasAsSVG_triggered()
17041721
{
1722+
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
1723+
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
17051724
exportCompositionAsSVG( QgsComposer::Atlas );
1725+
mComposition->setAtlasMode( previousMode );
17061726

1707-
if ( mComposition->atlasPreviewEnabled() )
1727+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
17081728
{
17091729
//after atlas output, jump back to preview first feature
17101730
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();

src/core/composer/qgsatlascomposition.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ QgsAtlasComposition::~QgsAtlasComposition()
5252
void QgsAtlasComposition::setEnabled( bool e )
5353
{
5454
mEnabled = e;
55+
mComposition->setAtlasMode( QgsComposition::AtlasOff );
5556
emit toggled( e );
5657
}
5758

@@ -170,7 +171,7 @@ int QgsAtlasComposition::updateFeatures()
170171

171172
//jump to first feature if currently using an atlas preview
172173
//need to do this in case filtering/layer change has altered matching features
173-
if ( mComposition->atlasPreviewEnabled() )
174+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
174175
{
175176
firstFeature();
176177
}
@@ -488,7 +489,7 @@ void QgsAtlasComposition::setHideCoverage( bool hide )
488489
{
489490
mHideCoverage = hide;
490491

491-
if ( mComposition->atlasPreviewEnabled() )
492+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
492493
{
493494
//an atlas preview is enabled, so reflect changes in coverage layer visibility immediately
494495
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
@@ -541,7 +542,7 @@ void QgsAtlasComposition::updateFilenameExpression()
541542
}
542543

543544
//if atlas preview is currently enabled, regenerate filename for current feature
544-
if ( mComposition->atlasPreviewEnabled() )
545+
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
545546
{
546547
evalFeatureFilename();
547548
}

src/core/composer/qgscomposerlabel.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void QgsComposerLabel::paint( QPainter* painter, const QStyleOptionGraphicsItem*
6767
QRectF painterRect( penWidth + mMargin, penWidth + mMargin, rect().width() - 2 * penWidth - 2 * mMargin, rect().height() - 2 * penWidth - 2 * mMargin );
6868

6969
QString textToDraw;
70-
if ( mComposition->plotStyle() != QgsComposition::Preview || mComposition->atlasPreviewEnabled() )
70+
if ( mComposition->atlasMode() != QgsComposition::AtlasOff )
7171
{
7272
//render text with expressions evaluated
7373
textToDraw = displayText();

src/core/composer/qgscomposermap.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -654,8 +654,7 @@ QgsRectangle* QgsComposerMap::currentMapExtent()
654654

655655
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
656656

657-
if ( atlasMap->enabled() && atlasMap->composerMap() == this &&
658-
( mComposition->atlasPreviewEnabled() || mComposition->plotStyle() != QgsComposition::Preview ) )
657+
if ( atlasMap->composerMap() == this && mComposition->atlasMode() != QgsComposition::AtlasOff )
659658
{
660659
//if atlas is enabled, and we are either exporting the composition or previewing the atlas, then
661660
//return the current temporary atlas feature extent
@@ -673,8 +672,7 @@ const QgsRectangle* QgsComposerMap::currentMapExtent() const
673672
//const version
674673

675674
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
676-
if ( atlasMap->enabled() && atlasMap->composerMap() == this &&
677-
( mComposition->atlasPreviewEnabled() || mComposition->plotStyle() != QgsComposition::Preview ) )
675+
if ( atlasMap->composerMap() == this && mComposition->atlasMode() != QgsComposition::AtlasOff )
678676
{
679677
//if atlas is enabled, and we are either exporting the composition or previewing the atlas, then
680678
//return the current temporary atlas feature extent

src/core/composer/qgscomposition.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer )
7575
, mActiveItemCommand( 0 )
7676
, mActiveMultiFrameCommand( 0 )
7777
, mAtlasComposition( this )
78-
, mAtlasPreviewEnabled( false )
78+
, mAtlasMode( QgsComposition::AtlasOff )
7979
, mPreventCursorChange( false )
8080
{
8181
setBackgroundBrush( QColor( 215, 215, 215 ) );
@@ -121,7 +121,7 @@ QgsComposition::QgsComposition()
121121
mActiveItemCommand( 0 ),
122122
mActiveMultiFrameCommand( 0 ),
123123
mAtlasComposition( this ),
124-
mAtlasPreviewEnabled( false ),
124+
mAtlasMode( QgsComposition::AtlasOff ),
125125
mPreventCursorChange( false )
126126
{
127127
//load default composition settings
@@ -2327,11 +2327,11 @@ void QgsComposition::computeWorldFileParameters( double& a, double& b, double& c
23272327
f = r[3] * s[2] + r[4] * s[5] + r[5];
23282328
}
23292329

2330-
bool QgsComposition::setAtlasPreviewEnabled( bool e )
2330+
bool QgsComposition::setAtlasMode( QgsComposition::AtlasMode mode )
23312331
{
2332-
mAtlasPreviewEnabled = e;
2332+
mAtlasMode = mode;
23332333

2334-
if ( !mAtlasPreviewEnabled )
2334+
if ( mode == QgsComposition::AtlasOff )
23352335
{
23362336
mAtlasComposition.endRender();
23372337
}
@@ -2340,7 +2340,7 @@ bool QgsComposition::setAtlasPreviewEnabled( bool e )
23402340
bool atlasHasFeatures = mAtlasComposition.beginRender();
23412341
if ( ! atlasHasFeatures )
23422342
{
2343-
mAtlasPreviewEnabled = false;
2343+
mAtlasMode = QgsComposition::AtlasOff;
23442344
return false;
23452345
}
23462346
}

src/core/composer/qgscomposition.h

+13-6
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
9090
ZValueAbove
9191
};
9292

93+
/**Composition atlas modes*/
94+
enum AtlasMode
95+
{
96+
AtlasOff, // Composition is not being controlled by an atlas
97+
PreviewAtlas, // An atlas composition is being previewed in the app
98+
ExportAtlas // The composition is being exported as an atlas
99+
};
100+
93101
QgsComposition( QgsMapRenderer* mapRenderer );
94102
~QgsComposition();
95103

@@ -425,11 +433,10 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
425433
/**Returns a scaled position given a before and after range*/
426434
static double relativePosition( double position, double beforeMin, double beforeMax, double afterMin, double afterMax );
427435

428-
/** Is the atlas preview enabled ? */
429-
bool atlasPreviewEnabled() const { return mAtlasPreviewEnabled; }
430-
/** Set atlas preview enabled. Returns false if atlas preview could not be enabled */
431-
bool setAtlasPreviewEnabled( bool e );
432-
436+
/** Returns the current atlas mode of the composition */
437+
QgsComposition::AtlasMode atlasMode() const { return mAtlasMode; }
438+
/** Sets the current atlas mode of the composition. Returns false if the mode could not be changed. */
439+
bool setAtlasMode( QgsComposition::AtlasMode mode );
433440

434441
public slots:
435442
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
@@ -497,7 +504,7 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
497504
/** The atlas composition object. It is held by the QgsComposition */
498505
QgsAtlasComposition mAtlasComposition;
499506

500-
bool mAtlasPreviewEnabled;
507+
QgsComposition::AtlasMode mAtlasMode;
501508

502509
QgsComposition(); //default constructor is forbidden
503510

tests/src/core/testqgsatlascomposition.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ void TestQgsAtlasComposition::initTestCase()
105105
mAtlas = &mComposition->atlasComposition();
106106
mAtlas->setCoverageLayer( mVectorLayer );
107107
mAtlas->setComposerMap( mAtlasMap );
108-
mAtlas->setEnabled( true );
108+
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
109109

110110
// an overview
111111
mOverview = new QgsComposerMap( mComposition, 180, 20, 50, 50 );

tests/src/python/test_qgsatlascomposition.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def testCase(self):
6464
self.mAtlas = self.mComposition.atlasComposition()
6565
self.mAtlas.setCoverageLayer( mVectorLayer )
6666
self.mAtlas.setComposerMap( self.mAtlasMap )
67-
self.mAtlas.setEnabled( True )
67+
self.mComposition.setAtlasMode( QgsComposition.ExportAtlas )
6868

6969
# an overview
7070
mOverview = QgsComposerMap( self.mComposition, 180, 20, 50, 50 )

0 commit comments

Comments
 (0)