mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
[composer] Tweak interface for atlas previews, fix occasional wrong extent in atlas previews.
This commit is contained in:
parent
dcd8bc5c69
commit
22514b6dc1
@ -27,6 +27,14 @@ class QgsComposition : QGraphicsScene
|
||||
Dots,
|
||||
Crosses
|
||||
};
|
||||
|
||||
/**Composition atlas modes*/
|
||||
enum AtlasMode
|
||||
{
|
||||
AtlasOff, // Composition is not being controlled by an atlas
|
||||
PreviewAtlas, // An atlas composition is being previewed in the app
|
||||
ExportAtlas // The composition is being exported as an atlas
|
||||
};
|
||||
|
||||
QgsComposition( QgsMapRenderer* mapRenderer );
|
||||
~QgsComposition();
|
||||
@ -306,6 +314,11 @@ class QgsComposition : QGraphicsScene
|
||||
void computeWorldFileParameters( double& a, double& b, double& c, double& d, double& e, double& f ) const;
|
||||
|
||||
QgsAtlasComposition& atlasComposition();
|
||||
|
||||
/** Returns the current atlas mode of the composition */
|
||||
QgsComposition::AtlasMode atlasMode() const;
|
||||
/** Sets the current atlas mode of the composition. Returns false if the mode could not be changed. */
|
||||
bool setAtlasMode( QgsComposition::AtlasMode mode );
|
||||
|
||||
public slots:
|
||||
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
|
||||
|
@ -341,7 +341,7 @@ void QgsAtlasCompositionWidget::on_mAtlasSortFeatureCheckBox_stateChanged( int s
|
||||
void QgsAtlasCompositionWidget::updateAtlasFeatures()
|
||||
{
|
||||
//only do this if composer mode is preview
|
||||
if ( !mComposition->atlasPreviewEnabled() )
|
||||
if ( !mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -808,7 +808,13 @@ void QgsComposer::on_mActionOptions_triggered()
|
||||
void QgsComposer::toggleAtlasControls( bool atlasEnabled )
|
||||
{
|
||||
//preview defaults to unchecked
|
||||
mActionAtlasPreview->blockSignals( true );
|
||||
mActionAtlasPreview->setChecked( false );
|
||||
mActionAtlasFirst->setEnabled( false );
|
||||
mActionAtlasLast->setEnabled( false );
|
||||
mActionAtlasNext->setEnabled( false );
|
||||
mActionAtlasPrev->setEnabled( false );
|
||||
mActionAtlasPreview->blockSignals( false );
|
||||
mActionAtlasPreview->setEnabled( atlasEnabled );
|
||||
mActionPrintAtlas->setEnabled( atlasEnabled );
|
||||
mActionExportAtlasAsImage->setEnabled( atlasEnabled );
|
||||
@ -841,7 +847,7 @@ void QgsComposer::on_mActionAtlasPreview_triggered( bool checked )
|
||||
mActionAtlasNext->setEnabled( checked );
|
||||
mActionAtlasPrev->setEnabled( checked );
|
||||
|
||||
bool previewEnabled = mComposition->setAtlasPreviewEnabled( checked );
|
||||
bool previewEnabled = mComposition->setAtlasMode( checked ? QgsComposition::PreviewAtlas : QgsComposition::AtlasOff );
|
||||
if ( !previewEnabled )
|
||||
{
|
||||
//something went wrong, eg, no matching features
|
||||
@ -1082,9 +1088,12 @@ void QgsComposer::on_mActionAtlasSettings_triggered()
|
||||
|
||||
void QgsComposer::on_mActionExportAtlasAsPDF_triggered()
|
||||
{
|
||||
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
|
||||
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
|
||||
exportCompositionAsPDF( QgsComposer::Atlas );
|
||||
mComposition->setAtlasMode( previousMode );
|
||||
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
//after atlas output, jump back to preview first feature
|
||||
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
|
||||
@ -1139,7 +1148,8 @@ void QgsComposer::exportCompositionAsPDF( QgsComposer::OutputMode mode )
|
||||
QString lastUsedFile = myQSettings.value( "/UI/lastSaveAsPdfFile", "qgis.pdf" ).toString();
|
||||
QFileInfo file( lastUsedFile );
|
||||
|
||||
if ( hasAnAtlas && !atlasOnASingleFile && ( mode == QgsComposer::Atlas || mComposition->atlasPreviewEnabled() ) )
|
||||
if ( hasAnAtlas && !atlasOnASingleFile &&
|
||||
( mode == QgsComposer::Atlas || mComposition->atlasMode() == QgsComposition::PreviewAtlas ) )
|
||||
{
|
||||
outputFileName = QDir( file.path() ).filePath( atlasMap->currentFilename() ) + ".pdf";
|
||||
}
|
||||
@ -1311,7 +1321,10 @@ void QgsComposer::on_mActionPrint_triggered()
|
||||
void QgsComposer::on_mActionPrintAtlas_triggered()
|
||||
{
|
||||
//print whole atlas
|
||||
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
|
||||
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
|
||||
printComposition( QgsComposer::Atlas );
|
||||
mComposition->setAtlasMode( previousMode );
|
||||
}
|
||||
|
||||
void QgsComposer::printComposition( QgsComposer::OutputMode mode )
|
||||
@ -1425,9 +1438,13 @@ void QgsComposer::printComposition( QgsComposer::OutputMode mode )
|
||||
|
||||
void QgsComposer::on_mActionExportAtlasAsImage_triggered()
|
||||
{
|
||||
//print whole atlas
|
||||
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
|
||||
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
|
||||
exportCompositionAsImage( QgsComposer::Atlas );
|
||||
mComposition->setAtlasMode( previousMode );
|
||||
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
//after atlas output, jump back to preview first feature
|
||||
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
|
||||
@ -1480,7 +1497,7 @@ void QgsComposer::exportCompositionAsImage( QgsComposer::OutputMode mode )
|
||||
{
|
||||
QString outputFileName = QString::null;
|
||||
|
||||
if ( atlasMap->enabled() && mComposition->atlasPreviewEnabled() )
|
||||
if ( atlasMap->enabled() && mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
QString lastUsedDir = settings.value( "/UI/lastSaveAsImageDir", "." ).toString();
|
||||
outputFileName = QDir( lastUsedDir ).filePath( atlasMap->currentFilename() );
|
||||
@ -1702,9 +1719,12 @@ void QgsComposer::exportCompositionAsImage( QgsComposer::OutputMode mode )
|
||||
|
||||
void QgsComposer::on_mActionExportAtlasAsSVG_triggered()
|
||||
{
|
||||
QgsComposition::AtlasMode previousMode = mComposition->atlasMode();
|
||||
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
|
||||
exportCompositionAsSVG( QgsComposer::Atlas );
|
||||
mComposition->setAtlasMode( previousMode );
|
||||
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
//after atlas output, jump back to preview first feature
|
||||
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
|
||||
|
@ -52,6 +52,7 @@ QgsAtlasComposition::~QgsAtlasComposition()
|
||||
void QgsAtlasComposition::setEnabled( bool e )
|
||||
{
|
||||
mEnabled = e;
|
||||
mComposition->setAtlasMode( QgsComposition::AtlasOff );
|
||||
emit toggled( e );
|
||||
}
|
||||
|
||||
@ -170,7 +171,7 @@ int QgsAtlasComposition::updateFeatures()
|
||||
|
||||
//jump to first feature if currently using an atlas preview
|
||||
//need to do this in case filtering/layer change has altered matching features
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
firstFeature();
|
||||
}
|
||||
@ -488,7 +489,7 @@ void QgsAtlasComposition::setHideCoverage( bool hide )
|
||||
{
|
||||
mHideCoverage = hide;
|
||||
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
//an atlas preview is enabled, so reflect changes in coverage layer visibility immediately
|
||||
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
|
||||
@ -541,7 +542,7 @@ void QgsAtlasComposition::updateFilenameExpression()
|
||||
}
|
||||
|
||||
//if atlas preview is currently enabled, regenerate filename for current feature
|
||||
if ( mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
|
||||
{
|
||||
evalFeatureFilename();
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ void QgsComposerLabel::paint( QPainter* painter, const QStyleOptionGraphicsItem*
|
||||
QRectF painterRect( penWidth + mMargin, penWidth + mMargin, rect().width() - 2 * penWidth - 2 * mMargin, rect().height() - 2 * penWidth - 2 * mMargin );
|
||||
|
||||
QString textToDraw;
|
||||
if ( mComposition->plotStyle() != QgsComposition::Preview || mComposition->atlasPreviewEnabled() )
|
||||
if ( mComposition->atlasMode() != QgsComposition::AtlasOff )
|
||||
{
|
||||
//render text with expressions evaluated
|
||||
textToDraw = displayText();
|
||||
|
@ -654,8 +654,7 @@ QgsRectangle* QgsComposerMap::currentMapExtent()
|
||||
|
||||
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
|
||||
|
||||
if ( atlasMap->enabled() && atlasMap->composerMap() == this &&
|
||||
( mComposition->atlasPreviewEnabled() || mComposition->plotStyle() != QgsComposition::Preview ) )
|
||||
if ( atlasMap->composerMap() == this && mComposition->atlasMode() != QgsComposition::AtlasOff )
|
||||
{
|
||||
//if atlas is enabled, and we are either exporting the composition or previewing the atlas, then
|
||||
//return the current temporary atlas feature extent
|
||||
@ -673,8 +672,7 @@ const QgsRectangle* QgsComposerMap::currentMapExtent() const
|
||||
//const version
|
||||
|
||||
QgsAtlasComposition* atlasMap = &mComposition->atlasComposition();
|
||||
if ( atlasMap->enabled() && atlasMap->composerMap() == this &&
|
||||
( mComposition->atlasPreviewEnabled() || mComposition->plotStyle() != QgsComposition::Preview ) )
|
||||
if ( atlasMap->composerMap() == this && mComposition->atlasMode() != QgsComposition::AtlasOff )
|
||||
{
|
||||
//if atlas is enabled, and we are either exporting the composition or previewing the atlas, then
|
||||
//return the current temporary atlas feature extent
|
||||
|
@ -75,7 +75,7 @@ QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer )
|
||||
, mActiveItemCommand( 0 )
|
||||
, mActiveMultiFrameCommand( 0 )
|
||||
, mAtlasComposition( this )
|
||||
, mAtlasPreviewEnabled( false )
|
||||
, mAtlasMode( QgsComposition::AtlasOff )
|
||||
, mPreventCursorChange( false )
|
||||
{
|
||||
setBackgroundBrush( QColor( 215, 215, 215 ) );
|
||||
@ -121,7 +121,7 @@ QgsComposition::QgsComposition()
|
||||
mActiveItemCommand( 0 ),
|
||||
mActiveMultiFrameCommand( 0 ),
|
||||
mAtlasComposition( this ),
|
||||
mAtlasPreviewEnabled( false ),
|
||||
mAtlasMode( QgsComposition::AtlasOff ),
|
||||
mPreventCursorChange( false )
|
||||
{
|
||||
//load default composition settings
|
||||
@ -2327,11 +2327,11 @@ void QgsComposition::computeWorldFileParameters( double& a, double& b, double& c
|
||||
f = r[3] * s[2] + r[4] * s[5] + r[5];
|
||||
}
|
||||
|
||||
bool QgsComposition::setAtlasPreviewEnabled( bool e )
|
||||
bool QgsComposition::setAtlasMode( QgsComposition::AtlasMode mode )
|
||||
{
|
||||
mAtlasPreviewEnabled = e;
|
||||
mAtlasMode = mode;
|
||||
|
||||
if ( !mAtlasPreviewEnabled )
|
||||
if ( mode == QgsComposition::AtlasOff )
|
||||
{
|
||||
mAtlasComposition.endRender();
|
||||
}
|
||||
@ -2340,7 +2340,7 @@ bool QgsComposition::setAtlasPreviewEnabled( bool e )
|
||||
bool atlasHasFeatures = mAtlasComposition.beginRender();
|
||||
if ( ! atlasHasFeatures )
|
||||
{
|
||||
mAtlasPreviewEnabled = false;
|
||||
mAtlasMode = QgsComposition::AtlasOff;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -90,6 +90,14 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
|
||||
ZValueAbove
|
||||
};
|
||||
|
||||
/**Composition atlas modes*/
|
||||
enum AtlasMode
|
||||
{
|
||||
AtlasOff, // Composition is not being controlled by an atlas
|
||||
PreviewAtlas, // An atlas composition is being previewed in the app
|
||||
ExportAtlas // The composition is being exported as an atlas
|
||||
};
|
||||
|
||||
QgsComposition( QgsMapRenderer* mapRenderer );
|
||||
~QgsComposition();
|
||||
|
||||
@ -425,11 +433,10 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
|
||||
/**Returns a scaled position given a before and after range*/
|
||||
static double relativePosition( double position, double beforeMin, double beforeMax, double afterMin, double afterMax );
|
||||
|
||||
/** Is the atlas preview enabled ? */
|
||||
bool atlasPreviewEnabled() const { return mAtlasPreviewEnabled; }
|
||||
/** Set atlas preview enabled. Returns false if atlas preview could not be enabled */
|
||||
bool setAtlasPreviewEnabled( bool e );
|
||||
|
||||
/** Returns the current atlas mode of the composition */
|
||||
QgsComposition::AtlasMode atlasMode() const { return mAtlasMode; }
|
||||
/** Sets the current atlas mode of the composition. Returns false if the mode could not be changed. */
|
||||
bool setAtlasMode( QgsComposition::AtlasMode mode );
|
||||
|
||||
public slots:
|
||||
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
|
||||
@ -497,7 +504,7 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene
|
||||
/** The atlas composition object. It is held by the QgsComposition */
|
||||
QgsAtlasComposition mAtlasComposition;
|
||||
|
||||
bool mAtlasPreviewEnabled;
|
||||
QgsComposition::AtlasMode mAtlasMode;
|
||||
|
||||
QgsComposition(); //default constructor is forbidden
|
||||
|
||||
|
@ -105,7 +105,7 @@ void TestQgsAtlasComposition::initTestCase()
|
||||
mAtlas = &mComposition->atlasComposition();
|
||||
mAtlas->setCoverageLayer( mVectorLayer );
|
||||
mAtlas->setComposerMap( mAtlasMap );
|
||||
mAtlas->setEnabled( true );
|
||||
mComposition->setAtlasMode( QgsComposition::ExportAtlas );
|
||||
|
||||
// an overview
|
||||
mOverview = new QgsComposerMap( mComposition, 180, 20, 50, 50 );
|
||||
|
@ -64,7 +64,7 @@ class TestQgsAtlasComposition(unittest.TestCase):
|
||||
self.mAtlas = self.mComposition.atlasComposition()
|
||||
self.mAtlas.setCoverageLayer( mVectorLayer )
|
||||
self.mAtlas.setComposerMap( self.mAtlasMap )
|
||||
self.mAtlas.setEnabled( True )
|
||||
self.mComposition.setAtlasMode( QgsComposition.ExportAtlas )
|
||||
|
||||
# an overview
|
||||
mOverview = QgsComposerMap( self.mComposition, 180, 20, 50, 50 )
|
||||
|
Loading…
x
Reference in New Issue
Block a user