@@ -315,6 +315,21 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
315
315
atlasMenu->addAction ( mActionAtlasPrev );
316
316
atlasMenu->addAction ( mActionAtlasNext );
317
317
atlasMenu->addAction ( mActionAtlasLast );
318
+ atlasMenu->addSeparator ();
319
+ atlasMenu->addAction ( mActionPrintAtlas );
320
+ atlasMenu->addAction ( mActionExportAtlasAsImage );
321
+ atlasMenu->addAction ( mActionExportAtlasAsSVG );
322
+ atlasMenu->addAction ( mActionExportAtlasAsPDF );
323
+
324
+ QToolButton* atlasExportToolButton = new QToolButton ( mAtlasToolbar );
325
+ atlasExportToolButton->setPopupMode ( QToolButton::InstantPopup );
326
+ atlasExportToolButton->setAutoRaise ( true );
327
+ atlasExportToolButton->setToolButtonStyle ( Qt::ToolButtonIconOnly );
328
+ atlasExportToolButton->addAction ( mActionExportAtlasAsImage );
329
+ atlasExportToolButton->addAction ( mActionExportAtlasAsSVG );
330
+ atlasExportToolButton->addAction ( mActionExportAtlasAsPDF );
331
+ atlasExportToolButton->setDefaultAction ( mActionExportAtlasAsImage );
332
+ mAtlasToolbar ->addWidget ( atlasExportToolButton );
318
333
319
334
QMenu *settingsMenu = menuBar ()->addMenu ( tr ( " Settings" ) );
320
335
settingsMenu->addAction ( mActionOptions );
@@ -486,6 +501,10 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
486
501
mActionAtlasLast ->setEnabled ( false );
487
502
mActionAtlasNext ->setEnabled ( false );
488
503
mActionAtlasPrev ->setEnabled ( false );
504
+ mActionPrintAtlas ->setEnabled ( false );
505
+ mActionExportAtlasAsImage ->setEnabled ( false );
506
+ mActionExportAtlasAsSVG ->setEnabled ( false );
507
+ mActionExportAtlasAsPDF ->setEnabled ( false );
489
508
490
509
// Create size grip (needed by Mac OS X for QMainWindow if QStatusBar is not visible)
491
510
// should not be needed now that composer has a status bar?
@@ -787,6 +806,10 @@ void QgsComposer::toggleAtlasControls( bool atlasEnabled )
787
806
// preview defaults to unchecked
788
807
mActionAtlasPreview ->setChecked ( false );
789
808
mActionAtlasPreview ->setEnabled ( atlasEnabled );
809
+ mActionPrintAtlas ->setEnabled ( atlasEnabled );
810
+ mActionExportAtlasAsImage ->setEnabled ( atlasEnabled );
811
+ mActionExportAtlasAsSVG ->setEnabled ( atlasEnabled );
812
+ mActionExportAtlasAsPDF ->setEnabled ( atlasEnabled );
790
813
}
791
814
792
815
void QgsComposer::on_mActionAtlasPreview_triggered ( bool checked )
@@ -1036,7 +1059,24 @@ void QgsComposer::toggleRulers( bool checked )
1036
1059
myQSettings.setValue ( " /Composer/showRulers" , checked );
1037
1060
}
1038
1061
1062
+ void QgsComposer::on_mActionExportAtlasAsPDF_triggered ()
1063
+ {
1064
+ exportCompositionAsPDF ( QgsComposer::Atlas );
1065
+
1066
+ if ( mComposition ->atlasPreviewEnabled () )
1067
+ {
1068
+ // after atlas output, jump back to preview first feature
1069
+ QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1070
+ atlasMap->firstFeature ();
1071
+ }
1072
+ }
1073
+
1039
1074
void QgsComposer::on_mActionExportAsPDF_triggered ()
1075
+ {
1076
+ exportCompositionAsPDF ( QgsComposer::Single );
1077
+ }
1078
+
1079
+ void QgsComposer::exportCompositionAsPDF ( QgsComposer::OutputMode mode )
1040
1080
{
1041
1081
if ( !mComposition || !mView )
1042
1082
{
@@ -1072,16 +1112,25 @@ void QgsComposer::on_mActionExportAsPDF_triggered()
1072
1112
QString outputFileName;
1073
1113
QString outputDir;
1074
1114
1075
- if ( !hasAnAtlas || atlasOnASingleFile )
1115
+ if ( mode == QgsComposer::Single || ( mode == QgsComposer::Atlas && atlasOnASingleFile ) )
1076
1116
{
1077
1117
QSettings myQSettings; // where we keep last used filter in persistent state
1078
1118
QString lastUsedFile = myQSettings.value ( " /UI/lastSaveAsPdfFile" , " qgis.pdf" ).toString ();
1079
1119
QFileInfo file ( lastUsedFile );
1080
1120
1121
+ if ( hasAnAtlas && !atlasOnASingleFile && ( mode == QgsComposer::Atlas || mComposition ->atlasPreviewEnabled () ) )
1122
+ {
1123
+ outputFileName = QDir ( file.path () ).filePath ( atlasMap->currentFilename () ) + " .pdf" ;
1124
+ }
1125
+ else
1126
+ {
1127
+ outputFileName = file.path ();
1128
+ }
1129
+
1081
1130
outputFileName = QFileDialog::getSaveFileName (
1082
1131
this ,
1083
1132
tr ( " Choose a file name to save the map as" ),
1084
- file. path () ,
1133
+ outputFileName ,
1085
1134
tr ( " PDF Format" ) + " (*.pdf *.PDF)" );
1086
1135
if ( outputFileName.isEmpty () )
1087
1136
{
@@ -1136,7 +1185,7 @@ void QgsComposer::on_mActionExportAsPDF_triggered()
1136
1185
1137
1186
mView ->setPaintingEnabled ( false );
1138
1187
1139
- if ( hasAnAtlas )
1188
+ if ( mode == QgsComposer::Atlas )
1140
1189
{
1141
1190
QPrinter printer;
1142
1191
@@ -1233,6 +1282,18 @@ void QgsComposer::on_mActionExportAsPDF_triggered()
1233
1282
}
1234
1283
1235
1284
void QgsComposer::on_mActionPrint_triggered ()
1285
+ {
1286
+ // print only current feature
1287
+ printComposition ( QgsComposer::Single );
1288
+ }
1289
+
1290
+ void QgsComposer::on_mActionPrintAtlas_triggered ()
1291
+ {
1292
+ // print whole atlas
1293
+ printComposition ( QgsComposer::Atlas );
1294
+ }
1295
+
1296
+ void QgsComposer::printComposition ( QgsComposer::OutputMode mode )
1236
1297
{
1237
1298
if ( !mComposition || !mView )
1238
1299
{
@@ -1272,7 +1333,7 @@ void QgsComposer::on_mActionPrint_triggered()
1272
1333
mView ->setPaintingEnabled ( false );
1273
1334
1274
1335
QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1275
- if ( !atlasMap-> enabled () )
1336
+ if ( mode == QgsComposer::Single )
1276
1337
{
1277
1338
mComposition ->print ( mPrinter );
1278
1339
}
@@ -1341,7 +1402,24 @@ void QgsComposer::on_mActionPrint_triggered()
1341
1402
QApplication::restoreOverrideCursor ();
1342
1403
}
1343
1404
1405
+ void QgsComposer::on_mActionExportAtlasAsImage_triggered ()
1406
+ {
1407
+ exportCompositionAsImage ( QgsComposer::Atlas );
1408
+
1409
+ if ( mComposition ->atlasPreviewEnabled () )
1410
+ {
1411
+ // after atlas output, jump back to preview first feature
1412
+ QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1413
+ atlasMap->firstFeature ();
1414
+ }
1415
+ }
1416
+
1344
1417
void QgsComposer::on_mActionExportAsImage_triggered ()
1418
+ {
1419
+ exportCompositionAsImage ( QgsComposer::Single );
1420
+ }
1421
+
1422
+ void QgsComposer::exportCompositionAsImage ( QgsComposer::OutputMode mode )
1345
1423
{
1346
1424
if ( !mComposition || !mView )
1347
1425
{
@@ -1353,6 +1431,8 @@ void QgsComposer::on_mActionExportAsImage_triggered()
1353
1431
showWMSPrintingWarning ();
1354
1432
}
1355
1433
1434
+ QSettings settings;
1435
+
1356
1436
// Image size
1357
1437
int width = ( int )( mComposition ->printResolution () * mComposition ->paperWidth () / 25.4 );
1358
1438
int height = ( int )( mComposition -> printResolution () * mComposition ->paperHeight () / 25.4 );
@@ -1375,9 +1455,17 @@ void QgsComposer::on_mActionExportAsImage_triggered()
1375
1455
}
1376
1456
1377
1457
QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1378
- if ( !atlasMap-> enabled () )
1458
+ if ( mode == QgsComposer::Single )
1379
1459
{
1380
- QPair<QString, QString> fileNExt = QgisGui::getSaveAsImageName ( this , tr ( " Choose a file name to save the map image as" ) );
1460
+ QString outputFileName = QString::null;
1461
+
1462
+ if ( atlasMap->enabled () && mComposition ->atlasPreviewEnabled () )
1463
+ {
1464
+ QString lastUsedDir = settings.value ( " /UI/lastSaveAsImageDir" , " ." ).toString ();
1465
+ outputFileName = QDir ( lastUsedDir ).filePath ( atlasMap->currentFilename () );
1466
+ }
1467
+
1468
+ QPair<QString, QString> fileNExt = QgisGui::getSaveAsImageName ( this , tr ( " Choose a file name to save the map image as" ), outputFileName );
1381
1469
1382
1470
if ( fileNExt.first .isEmpty () )
1383
1471
{
@@ -1591,8 +1679,24 @@ void QgsComposer::on_mActionExportAsImage_triggered()
1591
1679
}
1592
1680
}
1593
1681
1682
+ void QgsComposer::on_mActionExportAtlasAsSVG_triggered ()
1683
+ {
1684
+ exportCompositionAsSVG ( QgsComposer::Atlas );
1685
+
1686
+ if ( mComposition ->atlasPreviewEnabled () )
1687
+ {
1688
+ // after atlas output, jump back to preview first feature
1689
+ QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1690
+ atlasMap->firstFeature ();
1691
+ }
1692
+ }
1594
1693
1595
1694
void QgsComposer::on_mActionExportAsSVG_triggered ()
1695
+ {
1696
+ exportCompositionAsSVG ( QgsComposer::Single );
1697
+ }
1698
+
1699
+ void QgsComposer::exportCompositionAsSVG ( QgsComposer::OutputMode mode )
1596
1700
{
1597
1701
if ( containsWMSLayer () )
1598
1702
{
@@ -1626,20 +1730,28 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
1626
1730
}
1627
1731
1628
1732
QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1629
- bool hasAnAtlas = atlasMap->enabled ();
1630
1733
1631
1734
QString outputFileName;
1632
1735
QString outputDir;
1633
1736
1634
- if ( !hasAnAtlas )
1737
+ if ( mode == QgsComposer::Single )
1635
1738
{
1636
1739
QString lastUsedFile = settings.value ( " /UI/lastSaveAsSvgFile" , " qgis.svg" ).toString ();
1637
1740
QFileInfo file ( lastUsedFile );
1638
1741
1742
+ if ( atlasMap->enabled () )
1743
+ {
1744
+ outputFileName = QDir ( file.path () ).filePath ( atlasMap->currentFilename () ) + " .svg" ;
1745
+ }
1746
+ else
1747
+ {
1748
+ outputFileName = file.path ();
1749
+ }
1750
+
1639
1751
outputFileName = QFileDialog::getSaveFileName (
1640
1752
this ,
1641
1753
tr ( " Choose a file name to save the map as" ),
1642
- file. path () ,
1754
+ outputFileName ,
1643
1755
tr ( " SVG Format" ) + " (*.svg *.SVG)" );
1644
1756
if ( outputFileName.isEmpty () )
1645
1757
return ;
@@ -1694,7 +1806,7 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
1694
1806
mView ->setPaintingEnabled ( false );
1695
1807
1696
1808
int featureI = 0 ;
1697
- if ( hasAnAtlas )
1809
+ if ( mode == QgsComposer::Atlas )
1698
1810
{
1699
1811
try
1700
1812
{
@@ -1714,7 +1826,7 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
1714
1826
1715
1827
do
1716
1828
{
1717
- if ( hasAnAtlas )
1829
+ if ( mode == QgsComposer::Atlas )
1718
1830
{
1719
1831
if ( atlasMap->numFeatures () == 0 )
1720
1832
break ;
@@ -1772,9 +1884,9 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
1772
1884
}
1773
1885
featureI++;
1774
1886
}
1775
- while ( hasAnAtlas && featureI < atlasMap->numFeatures () );
1887
+ while ( mode == QgsComposer::Atlas && featureI < atlasMap->numFeatures () );
1776
1888
1777
- if ( hasAnAtlas )
1889
+ if ( mode == QgsComposer::Atlas )
1778
1890
atlasMap->endRender ();
1779
1891
1780
1892
mView ->setPaintingEnabled ( true );
@@ -2497,6 +2609,10 @@ void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument&
2497
2609
mActionAtlasLast ->setEnabled ( false );
2498
2610
mActionAtlasNext ->setEnabled ( false );
2499
2611
mActionAtlasPrev ->setEnabled ( false );
2612
+ mActionPrintAtlas ->setEnabled ( atlasMap->enabled () );
2613
+ mActionExportAtlasAsImage ->setEnabled ( atlasMap->enabled () );
2614
+ mActionExportAtlasAsSVG ->setEnabled ( atlasMap->enabled () );
2615
+ mActionExportAtlasAsPDF ->setEnabled ( atlasMap->enabled () );
2500
2616
connect ( atlasMap, SIGNAL ( toggled ( bool ) ), this , SLOT ( toggleAtlasControls ( bool ) ) );
2501
2617
2502
2618
setSelectionTool ();
0 commit comments