40 changes: 0 additions & 40 deletions src/core/composer/qgsatlascomposition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,19 +270,6 @@ bool QgsAtlasComposition::beginRender()
return false;
}

mRestoreLayer = false;
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
if ( mHideCoverage )
{
// look for the layer in the renderer's set
int removeAt = layerSet.indexOf( mCoverageLayer->id() );
if ( removeAt != -1 )
{
mRestoreLayer = true;
layerSet.removeAt( removeAt );
}
}

// special columns for expressions
QgsExpression::setSpecialColumn( "$numpages", QVariant( mComposition->numPages() ) );
QgsExpression::setSpecialColumn( "$numfeatures", QVariant(( int )mFeatureIds.size() ) );
Expand All @@ -305,14 +292,6 @@ void QgsAtlasComposition::endRender()
( *lit )->setExpressionContext( 0, 0 );
}

// restore the coverage visibility
if ( mRestoreLayer )
{
QStringList& layerSet = mComposition->mapRenderer()->layerSet();

layerSet.push_back( mCoverageLayer->id() );
}

updateAtlasMaps();
}

Expand Down Expand Up @@ -669,25 +648,6 @@ void QgsAtlasComposition::setHideCoverage( bool hide )
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
{
//an atlas preview is enabled, so reflect changes in coverage layer visibility immediately
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
if ( hide )
{
// look for the layer in the renderer's set
int removeAt = layerSet.indexOf( mCoverageLayer->id() );
if ( removeAt != -1 )
{
mRestoreLayer = true;
layerSet.removeAt( removeAt );
}
}
else
{
if ( mRestoreLayer )
{
layerSet.push_back( mCoverageLayer->id() );
mRestoreLayer = false;
}
}
updateAtlasMaps();
mComposition->update();
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/composer/qgsatlascomposition.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ class CORE_EXPORT QgsAtlasComposition : public QObject
QVector<QgsFeatureId> mFeatureIds;

QgsFeature mCurrentFeature;
bool mRestoreLayer;

std::auto_ptr<QgsExpression> mFilenameExpr;

// bounding box of the current feature transformed into map crs
Expand Down
43 changes: 34 additions & 9 deletions src/core/composer/qgscomposermap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,15 +184,9 @@ void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const
if ( mMapRenderer->labelingEngine() )
theMapRenderer.setLabelingEngine( mMapRenderer->labelingEngine()->clone() );

//use stored layer set or read current set from main canvas
if ( mKeepLayerSet )
{
theMapRenderer.setLayerSet( mLayerSet );
}
else
{
theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
}
//set layers to render
theMapRenderer.setLayerSet( layersToRender() );

theMapRenderer.setDestinationCrs( mMapRenderer->destinationCrs() );
theMapRenderer.setProjectionsEnabled( mMapRenderer->hasCrsTransformEnabled() );

Expand Down Expand Up @@ -470,6 +464,37 @@ void QgsComposerMap::setCacheUpdated( bool u )
mCacheUpdated = u;
}

QStringList QgsComposerMap::layersToRender()
{
//use stored layer set or read current set from main canvas
QStringList renderLayerSet;
if ( mKeepLayerSet )
{
renderLayerSet = mLayerSet;
}
else
{
renderLayerSet = mMapRenderer->layerSet();
}

//remove atlas coverage layer if required
//TODO - move setting for hiding coverage layer to map item properties
if ( mComposition->atlasMode() != QgsComposition::AtlasOff )
{
if ( mComposition->atlasComposition().hideCoverage() )
{
//hiding coverage layer
int removeAt = renderLayerSet.indexOf( mComposition->atlasComposition().coverageLayer()->id() );
if ( removeAt != -1 )
{
renderLayerSet.removeAt( removeAt );
}
}
}

return renderLayerSet;
}

double QgsComposerMap::scale() const
{
QgsScaleCalculator calculator;
Expand Down
3 changes: 3 additions & 0 deletions src/core/composer/qgscomposermap.h
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,9 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
/**Margin size for atlas driven extents (percentage of feature size)*/
double mAtlasMargin;

/**Returns a list of the layers to render for this map item*/
QStringList layersToRender();

/**Draws the map grid*/
void drawGrid( QPainter* p );
void drawGridFrame( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines );
Expand Down
8 changes: 4 additions & 4 deletions tests/src/core/testqgsatlascomposition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,15 @@ void TestQgsAtlasComposition::initTestCase()
mLabel1 = new QgsComposerLabel( mComposition );
mComposition->addComposerLabel( mLabel1 );
mLabel1->setText( "[% \"NAME_1\" %] area" );
mLabel1->adjustSizeToText();
mLabel1->setItemPosition( 150, 5 );
//next to explicetly set width, since expression isn't yet evaulated against
//an atlas feature and will be shorter then required
mLabel1->setSceneRect( QRectF( 150, 5, 60, 15 ) );

// feature number label
mLabel2 = new QgsComposerLabel( mComposition );
mComposition->addComposerLabel( mLabel2 );
mLabel2->setText( "# [%$feature || ' / ' || $numfeatures%]" );
mLabel2->adjustSizeToText();
mLabel2->setItemPosition( 150, 200 );
mLabel2->setSceneRect( QRectF( 150, 200, 60, 15 ) );

qWarning() << "header label font: " << mLabel1->font().toString() << " exactMatch:" << mLabel1->font().exactMatch();
qWarning() << "feature number label font: " << mLabel2->font().toString() << " exactMatch:" << mLabel2->font().exactMatch();
Expand Down
4 changes: 2 additions & 2 deletions tests/src/python/test_qgsatlascomposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def testCase(self):
self.mComposition.addComposerLabel( self.mLabel1 )
self.mLabel1.setText( "[% \"NAME_1\" %] area" )
self.mLabel1.adjustSizeToText()
self.mLabel1.setItemPosition( 150, 5 )
self.mLabel1.setSceneRect( QRectF( 150, 5, 60, 15 ) )

qWarning( "header label font: %s exactMatch:%s" % ( self.mLabel1.font().toString(), self.mLabel1.font().exactMatch() ) )

Expand All @@ -92,7 +92,7 @@ def testCase(self):
self.mComposition.addComposerLabel( self.mLabel2 )
self.mLabel2.setText( "# [%$feature || ' / ' || $numfeatures%]" )
self.mLabel2.adjustSizeToText()
self.mLabel2.setItemPosition( 150, 200 )
self.mLabel2.setSceneRect( QRectF( 150, 200, 60, 15 ) )

qWarning( "feature number label font: %s exactMatch:%s" % ( self.mLabel2.font().toString(), self.mLabel2.font().exactMatch() ) )

Expand Down