Skip to content

Commit 9f0d858

Browse files
committed
Merge pull request #274 from Oslandia/atlas_integration
Add access to the atlas layer in the expression builder GUI for labels.
2 parents 0d4b6f6 + 9135226 commit 9f0d858

8 files changed

Lines changed: 58 additions & 48 deletions

File tree

‎python/core/composer/qgscomposition.sip‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ class QgsComposition : QGraphicsScene
253253
@note added in version 1.9*/
254254
void renderPage( QPainter* p, int page );
255255

256+
QgsAtlasComposition& atlasComposition();
257+
256258
public slots:
257259
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
258260
void sendItemAddedSignal( QgsComposerItem* item );

‎src/app/composer/qgsatlascompositionwidget.cpp‎

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#include "qgsexpressionbuilderdialog.h"
2323
#include "qgscomposermap.h"
2424

25-
QgsAtlasCompositionWidget::QgsAtlasCompositionWidget( QWidget* parent, QgsAtlasComposition* atlas, QgsComposition* c ):
26-
QWidget( parent ), mAtlas( atlas ), mComposition( c )
25+
QgsAtlasCompositionWidget::QgsAtlasCompositionWidget( QWidget* parent, QgsComposition* c ):
26+
QWidget( parent ), mComposition( c )
2727
{
2828
setupUi( this );
2929

@@ -63,7 +63,7 @@ QgsAtlasCompositionWidget::QgsAtlasCompositionWidget( QWidget* parent, QgsAtlasC
6363
connect( mComposition, SIGNAL( itemRemoved( QgsComposerItem* ) ), this, SLOT( onItemRemoved( QgsComposerItem* ) ) );
6464

6565
// connect to updates
66-
connect( mAtlas, SIGNAL( parameterChanged() ), this, SLOT( updateGuiElements() ) );
66+
connect( &mComposition->atlasComposition(), SIGNAL( parameterChanged() ), this, SLOT( updateGuiElements() ) );
6767

6868
updateGuiElements();
6969
}
@@ -74,7 +74,7 @@ QgsAtlasCompositionWidget::~QgsAtlasCompositionWidget()
7474

7575
void QgsAtlasCompositionWidget::on_mUseAtlasCheckBox_stateChanged( int state )
7676
{
77-
QgsAtlasComposition* atlasMap = mAtlas;
77+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
7878
if ( state == Qt::Checked )
7979
{
8080
atlasMap->setEnabled( true );
@@ -89,6 +89,7 @@ void QgsAtlasCompositionWidget::on_mUseAtlasCheckBox_stateChanged( int state )
8989

9090
void QgsAtlasCompositionWidget::onLayerRemoved( QString layerName )
9191
{
92+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
9293
// update the atlas coverage layer combo box
9394
for ( int i = 0; i < mAtlasCoverageLayerComboBox->count(); ++i )
9495
{
@@ -100,12 +101,13 @@ void QgsAtlasCompositionWidget::onLayerRemoved( QString layerName )
100101
}
101102
if ( mAtlasCoverageLayerComboBox->count() == 0 )
102103
{
103-
mAtlas->setCoverageLayer( 0 );
104+
atlasMap->setCoverageLayer( 0 );
104105
}
105106
}
106107

107108
void QgsAtlasCompositionWidget::onLayerAdded( QgsMapLayer* map )
108109
{
110+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
109111
// update the atlas coverage layer combo box
110112
QgsVectorLayer* vectorLayer = dynamic_cast<QgsVectorLayer*>( map );
111113
if ( vectorLayer )
@@ -114,21 +116,23 @@ void QgsAtlasCompositionWidget::onLayerAdded( QgsMapLayer* map )
114116
}
115117
if ( mAtlasCoverageLayerComboBox->count() == 1 )
116118
{
117-
mAtlas->setCoverageLayer( vectorLayer );
119+
atlasMap->setCoverageLayer( vectorLayer );
118120
}
119121
}
120122

121123
void QgsAtlasCompositionWidget::onComposerMapAdded( QgsComposerMap* map )
122124
{
125+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
123126
mComposerMapComboBox->addItem( tr( "Map %1" ).arg( map->id() ), qVariantFromValue( (void*)map ) );
124127
if ( mComposerMapComboBox->count() == 1 )
125128
{
126-
mAtlas->setComposerMap( map );
129+
atlasMap->setComposerMap( map );
127130
}
128131
}
129132

130133
void QgsAtlasCompositionWidget::onItemRemoved( QgsComposerItem* item )
131134
{
135+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
132136
QgsComposerMap* map = dynamic_cast<QgsComposerMap*>( item );
133137
if ( map )
134138
{
@@ -140,13 +144,13 @@ void QgsAtlasCompositionWidget::onItemRemoved( QgsComposerItem* item )
140144
}
141145
if ( mComposerMapComboBox->count() == 0 )
142146
{
143-
mAtlas->setComposerMap( 0 );
147+
atlasMap->setComposerMap( 0 );
144148
}
145149
}
146150

147151
void QgsAtlasCompositionWidget::on_mAtlasCoverageLayerComboBox_currentIndexChanged( int index )
148152
{
149-
QgsAtlasComposition* atlasMap = mAtlas;
153+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
150154
if ( !atlasMap )
151155
{
152156
return;
@@ -164,7 +168,7 @@ void QgsAtlasCompositionWidget::on_mAtlasCoverageLayerComboBox_currentIndexChang
164168

165169
void QgsAtlasCompositionWidget::on_mComposerMapComboBox_currentIndexChanged( int index )
166170
{
167-
QgsAtlasComposition* atlasMap = mAtlas;
171+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
168172
if ( !atlasMap )
169173
{
170174
return;
@@ -182,7 +186,7 @@ void QgsAtlasCompositionWidget::on_mComposerMapComboBox_currentIndexChanged( int
182186

183187
void QgsAtlasCompositionWidget::on_mAtlasFilenamePatternEdit_textChanged( const QString& text )
184188
{
185-
QgsAtlasComposition* atlasMap = mAtlas;
189+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
186190
if ( !atlasMap )
187191
{
188192
return;
@@ -193,7 +197,7 @@ void QgsAtlasCompositionWidget::on_mAtlasFilenamePatternEdit_textChanged( const
193197

194198
void QgsAtlasCompositionWidget::on_mAtlasFilenameExpressionButton_clicked()
195199
{
196-
QgsAtlasComposition* atlasMap = mAtlas;
200+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
197201
if ( !atlasMap || !atlasMap->coverageLayer() )
198202
{
199203
return;
@@ -214,7 +218,7 @@ void QgsAtlasCompositionWidget::on_mAtlasFilenameExpressionButton_clicked()
214218

215219
void QgsAtlasCompositionWidget::on_mAtlasHideCoverageCheckBox_stateChanged( int state )
216220
{
217-
QgsAtlasComposition* atlasMap = mAtlas;
221+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
218222
if ( !atlasMap )
219223
{
220224
return;
@@ -224,7 +228,7 @@ void QgsAtlasCompositionWidget::on_mAtlasHideCoverageCheckBox_stateChanged( int
224228

225229
void QgsAtlasCompositionWidget::on_mAtlasFixedScaleCheckBox_stateChanged( int state )
226230
{
227-
QgsAtlasComposition* atlasMap = mAtlas;
231+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
228232
if ( !atlasMap )
229233
{
230234
return;
@@ -244,7 +248,7 @@ void QgsAtlasCompositionWidget::on_mAtlasFixedScaleCheckBox_stateChanged( int st
244248

245249
void QgsAtlasCompositionWidget::on_mAtlasSingleFileCheckBox_stateChanged( int state )
246250
{
247-
QgsAtlasComposition* atlasMap = mAtlas;
251+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
248252
if ( !atlasMap )
249253
{
250254
return;
@@ -254,7 +258,8 @@ void QgsAtlasCompositionWidget::on_mAtlasSingleFileCheckBox_stateChanged( int st
254258

255259
void QgsAtlasCompositionWidget::updateGuiElements()
256260
{
257-
if ( mAtlas->enabled() )
261+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
262+
if ( atlasMap->enabled() )
258263
{
259264
mUseAtlasCheckBox->setCheckState( Qt::Checked );
260265
}
@@ -263,22 +268,22 @@ void QgsAtlasCompositionWidget::updateGuiElements()
263268
mUseAtlasCheckBox->setCheckState( Qt::Unchecked );
264269
}
265270

266-
int idx = mAtlasCoverageLayerComboBox->findData( qVariantFromValue( (void*)mAtlas->coverageLayer() ));
271+
int idx = mAtlasCoverageLayerComboBox->findData( qVariantFromValue( (void*)atlasMap->coverageLayer() ));
267272
if ( idx != -1 )
268273
{
269274
mAtlasCoverageLayerComboBox->setCurrentIndex( idx );
270275
}
271-
idx = mComposerMapComboBox->findData( qVariantFromValue( (void*)mAtlas->composerMap() ));
276+
idx = mComposerMapComboBox->findData( qVariantFromValue( (void*)atlasMap->composerMap() ));
272277
if ( idx != -1 )
273278
{
274279
mComposerMapComboBox->setCurrentIndex( idx );
275280
}
276281

277-
mAtlasMarginSpinBox->setValue( static_cast<int>(mAtlas->margin() * 100) );
278-
mAtlasFilenamePatternEdit->setText( mAtlas->filenamePattern() );
279-
mAtlasFixedScaleCheckBox->setCheckState( mAtlas->fixedScale() ? Qt::Checked : Qt::Unchecked );
280-
mAtlasHideCoverageCheckBox->setCheckState( mAtlas->hideCoverage() ? Qt::Checked : Qt::Unchecked );
281-
mAtlasSingleFileCheckBox->setCheckState( mAtlas->singleFile() ? Qt::Checked : Qt::Unchecked );
282+
mAtlasMarginSpinBox->setValue( static_cast<int>(atlasMap->margin() * 100) );
283+
mAtlasFilenamePatternEdit->setText( atlasMap->filenamePattern() );
284+
mAtlasFixedScaleCheckBox->setCheckState( atlasMap->fixedScale() ? Qt::Checked : Qt::Unchecked );
285+
mAtlasHideCoverageCheckBox->setCheckState( atlasMap->hideCoverage() ? Qt::Checked : Qt::Unchecked );
286+
mAtlasSingleFileCheckBox->setCheckState( atlasMap->singleFile() ? Qt::Checked : Qt::Unchecked );
282287
}
283288

284289
void QgsAtlasCompositionWidget::blockAllSignals( bool b )

‎src/app/composer/qgsatlascompositionwidget.h‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "ui_qgsatlascompositionwidgetbase.h"
1818

1919
class QgsComposition;
20-
class QgsAtlasComposition;
2120
class QgsMapLayer;
2221
class QgsComposerMap;
2322
class QgsComposerItem;
@@ -31,7 +30,7 @@ class QgsAtlasCompositionWidget:
3130
{
3231
Q_OBJECT
3332
public:
34-
QgsAtlasCompositionWidget( QWidget* parent, QgsAtlasComposition* atlas, QgsComposition* c );
33+
QgsAtlasCompositionWidget( QWidget* parent, QgsComposition* c );
3534
~QgsAtlasCompositionWidget();
3635

3736
public slots:
@@ -53,7 +52,6 @@ private slots:
5352
void updateGuiElements();
5453

5554
private:
56-
QgsAtlasComposition* mAtlas;
5755
QgsComposition* mComposition;
5856

5957
void blockAllSignals( bool b );

‎src/app/composer/qgscomposer.cpp‎

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
286286
addDockWidget( Qt::RightDockWidgetArea, mUndoDock );
287287
addDockWidget( Qt::RightDockWidgetArea, mAtlasDock );
288288

289-
mAtlasComposition = new QgsAtlasComposition( mComposition );
290-
QgsAtlasCompositionWidget* atlasWidget = new QgsAtlasCompositionWidget( mGeneralDock, mAtlasComposition, mComposition );
289+
QgsAtlasCompositionWidget* atlasWidget = new QgsAtlasCompositionWidget( mGeneralDock, mComposition );
291290
mAtlasDock->setWidget( atlasWidget );
292291

293292
mItemDock->show();
@@ -325,7 +324,6 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
325324
QgsComposer::~QgsComposer()
326325
{
327326
deleteItemWidgets();
328-
delete mAtlasComposition;
329327
}
330328

331329
void QgsComposer::setupTheme()
@@ -581,9 +579,9 @@ void QgsComposer::on_mActionExportAsPDF_triggered()
581579
showWMSPrintingWarning();
582580
}
583581

584-
bool hasAnAtlas = mAtlasComposition->enabled();
585-
bool atlasOnASingleFile = hasAnAtlas && mAtlasComposition->singleFile();
586-
QgsAtlasComposition* atlasMap = mAtlasComposition;
582+
bool hasAnAtlas = mComposition->atlasComposition().enabled();
583+
bool atlasOnASingleFile = hasAnAtlas && mComposition->atlasComposition().singleFile();
584+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
587585

588586
QString outputFileName;
589587
QString outputDir;
@@ -747,7 +745,7 @@ void QgsComposer::on_mActionPrint_triggered()
747745
QApplication::setOverrideCursor( Qt::BusyCursor );
748746
mView->setPaintingEnabled( false );
749747

750-
QgsAtlasComposition* atlasMap = mAtlasComposition;
748+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
751749
if ( atlasMap == 0 )
752750
{
753751
mComposition->print( mPrinter );
@@ -831,7 +829,7 @@ void QgsComposer::on_mActionExportAsImage_triggered()
831829
return;
832830
}
833831

834-
QgsAtlasComposition* atlasMap = mAtlasComposition;
832+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
835833
if ( 0 == atlasMap )
836834
{
837835
QPair<QString, QString> fileNExt = QgisGui::getSaveAsImageName( this, tr( "Choose a file name to save the map image as" ) );
@@ -1027,7 +1025,7 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
10271025
m->exec();
10281026
}
10291027

1030-
QgsAtlasComposition* atlasMap = mAtlasComposition;
1028+
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
10311029
bool hasAnAtlas = atlasMap->enabled();
10321030

10331031
QString outputFileName;
@@ -1561,7 +1559,7 @@ void QgsComposer::writeXML( QDomNode& parentNode, QDomDocument& doc )
15611559
}
15621560

15631561
// store atlas
1564-
mAtlasComposition->writeXML( composerElem, doc );
1562+
mComposition->atlasComposition().writeXML( composerElem, doc );
15651563
}
15661564

15671565
void QgsComposer::readXML( const QDomDocument& doc )
@@ -1647,16 +1645,12 @@ void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument&
16471645
// atlas properties reading
16481646
QDomNodeList atlasNodeList = composerElem.elementsByTagName( "Atlas" );
16491647

1650-
// delete the old atlas object
1651-
delete mAtlasComposition;
1652-
mAtlasComposition = new QgsAtlasComposition( mComposition );
1653-
16541648
//delete old atlas composition widget
16551649
QgsAtlasCompositionWidget* oldAtlasWidget = qobject_cast<QgsAtlasCompositionWidget *>( mAtlasDock->widget() );
16561650
delete oldAtlasWidget;
1657-
mAtlasDock->setWidget( new QgsAtlasCompositionWidget( mAtlasDock, mAtlasComposition, mComposition ) );
1651+
mAtlasDock->setWidget( new QgsAtlasCompositionWidget( mAtlasDock, mComposition ) );
16581652

1659-
mAtlasComposition->readXML( atlasNodeList.at( 0 ).toElement(), doc );
1653+
mComposition->atlasComposition().readXML( atlasNodeList.at( 0 ).toElement(), doc );
16601654

16611655
setSelectionTool();
16621656
}

‎src/app/composer/qgscomposer.h‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,6 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
312312
//! Current composition
313313
QgsComposition *mComposition;
314314

315-
//! Atlas map
316-
QgsAtlasComposition* mAtlasComposition;
317-
318315
//! Pointer to QGIS application
319316
QgisApp *mQgis;
320317

‎src/app/composer/qgscomposerlabelwidget.cpp‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,13 @@ void QgsComposerLabelWidget::on_mInsertExpressionButton_clicked()
113113
if ( selText.startsWith( "[%" ) && selText.endsWith( "%]" ) )
114114
selText = selText.mid( 2, selText.size() - 4 );
115115

116-
QgsExpressionBuilderDialog exprDlg( /* layer = */ 0, selText, this );
116+
QgsVectorLayer* coverageLayer = 0;
117+
// use the atlas coverage layer, if any
118+
if ( mComposerLabel->composition()->atlasComposition().enabled() )
119+
{
120+
coverageLayer = mComposerLabel->composition()->atlasComposition().coverageLayer();
121+
}
122+
QgsExpressionBuilderDialog exprDlg( coverageLayer, selText, this );
117123
exprDlg.setWindowTitle( tr( "Insert expression" ) );
118124
if ( exprDlg.exec() == QDialog::Accepted )
119125
{

‎src/core/composer/qgscomposition.cpp‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@
4949

5050
QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ) :
5151
QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mSpaceBetweenPages( 10 ), mPrintAsRaster( false ), mSelectionTolerance( 0.0 ),
52-
mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveItemCommand( 0 ), mActiveMultiFrameCommand( 0 )
52+
mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveItemCommand( 0 ), mActiveMultiFrameCommand( 0 ),
53+
mAtlasComposition( this )
5354
{
5455
setBackgroundBrush( Qt::gray );
5556
addPaperItem();
@@ -60,7 +61,8 @@ QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ) :
6061

6162
QgsComposition::QgsComposition():
6263
QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mSpaceBetweenPages( 10 ), mPrintAsRaster( false ),
63-
mSelectionTolerance( 0.0 ), mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveItemCommand( 0 ), mActiveMultiFrameCommand( 0 )
64+
mSelectionTolerance( 0.0 ), mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveItemCommand( 0 ), mActiveMultiFrameCommand( 0 ),
65+
mAtlasComposition( this )
6466
{
6567
loadSettings();
6668
}

‎src/core/composer/qgscomposition.h‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#include "qgsaddremoveitemcommand.h"
3030
#include "qgscomposeritemcommand.h"
31+
#include "qgsatlascomposition.h"
3132

3233
class QgsComposerFrame;
3334
class QgsComposerItem;
@@ -303,6 +304,8 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
303304
@note added in version 1.9*/
304305
void renderPage( QPainter* p, int page );
305306

307+
QgsAtlasComposition& atlasComposition() { return mAtlasComposition; }
308+
306309
public slots:
307310
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
308311
void sendItemAddedSignal( QgsComposerItem* item );
@@ -344,6 +347,9 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
344347
QgsComposerItemCommand* mActiveItemCommand;
345348
QgsComposerMultiFrameCommand* mActiveMultiFrameCommand;
346349

350+
/** The atlas composition object. It is held by the QgsComposition */
351+
QgsAtlasComposition mAtlasComposition;
352+
347353
QgsComposition(); //default constructor is forbidden
348354

349355
/**Reset z-values of items based on position in z list*/

0 commit comments

Comments
 (0)