Skip to content

Commit

Permalink
Show a warning before printing WMS layers. Some WMS servers have a li…
Browse files Browse the repository at this point in the history
…mit for WIDTH and HEIGHT parameters

git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@9357 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mhugent committed Sep 19, 2008
1 parent 3e60778 commit 5403746
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/app/composer/qgscomposer.cpp
Expand Up @@ -435,6 +435,11 @@ void QgsComposer::on_mActionPrint_activated( void )
return;
}

if(containsWMSLayer())
{
showWMSPrintingWarning();
}

QPrinter printer;

//try to set most of the print dialog settings based on composer properties
Expand Down Expand Up @@ -487,6 +492,11 @@ void QgsComposer::on_mActionPrint_activated( void )

void QgsComposer::on_mActionExportAsImage_activated( void )
{
if(containsWMSLayer())
{
showWMSPrintingWarning();
}

// Image size
int width = ( int )( mComposition->printoutResolution() * mComposition->paperWidth() / 25.4 );
int height = ( int )( mComposition-> printoutResolution() * mComposition->paperHeight() / 25.4 );
Expand Down Expand Up @@ -608,6 +618,11 @@ void QgsComposer::on_mActionExportAsImage_activated( void )

void QgsComposer::on_mActionExportAsSVG_activated( void )
{
if(containsWMSLayer())
{
showWMSPrintingWarning();
}

QString myQSettingsLabel = "/UI/displaySVGWarning";
QSettings myQSettings;

Expand Down Expand Up @@ -1080,3 +1095,43 @@ void QgsComposer::setSelectionTool()
mActionSelectMoveItem->setChecked( true );
on_mActionSelectMoveItem_activated();
}

bool QgsComposer::containsWMSLayer() const
{
QMap<QgsComposerItem*, QWidget*>::const_iterator item_it = mItemWidgetMap.constBegin();
QgsComposerItem* currentItem = 0;
QgsComposerMap* currentMap = 0;

for(; item_it != mItemWidgetMap.constEnd(); ++item_it)
{
currentItem = item_it.key();
currentMap = dynamic_cast<QgsComposerMap*>(currentItem);
if(currentMap)
{
if(currentMap->containsWMSLayer())
{
return true;
}
}
}
return false;
}

void QgsComposer::showWMSPrintingWarning()
{
QString myQSettingsLabel = "/UI/displayComposerWMSWarning";
QSettings myQSettings;

bool displayWMSWarning = myQSettings.value( myQSettingsLabel, true ).toBool();
if(displayWMSWarning)
{
QgsMessageViewer* m = new QgsMessageViewer( this );
m->setWindowTitle( tr( "Project contains WMS layers" ) );
m->setMessage(tr("Some WMS servers (e.g. UMN mapserver) have a limit for the WIDTH and HEIGHT parameter. Printing layers from such servers may exceed this limit. If this is the case, the WMS layer will not be printed"), QgsMessageOutput::MessageText);
m->setCheckBoxText( tr( "Don't show this message again" ) );
m->setCheckBoxState( Qt::Unchecked );
m->setCheckBoxVisible( true );
m->setCheckBoxQSettingsLabel( myQSettingsLabel );
m->exec();
}
}
6 changes: 6 additions & 0 deletions src/app/composer/qgscomposer.h
Expand Up @@ -204,6 +204,12 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
//! returns new world matrix for canvas view after zoom with factor scaleChange
QMatrix updateMatrix( double scaleChange );

//! True if a composer map contains a WMS layer
bool containsWMSLayer() const;

//! Displays a warning because of possible min/max size in WMS
void showWMSPrintingWarning();

//! Pointer to composer view
QgsComposerView *mView;

Expand Down
35 changes: 35 additions & 0 deletions src/core/composer/qgscomposermap.cpp
Expand Up @@ -25,6 +25,7 @@
#include "qgsmaptopixel.h"
#include "qgsproject.h"
#include "qgsmaprenderer.h"
#include "qgsrasterlayer.h"
#include "qgsrendercontext.h"
#include "qgsscalecalculator.h"
#include "qgsvectorlayer.h"
Expand Down Expand Up @@ -402,6 +403,40 @@ void QgsComposerMap::setOffset( double xOffset, double yOffset )
mYOffset = yOffset;
}

bool QgsComposerMap::containsWMSLayer() const
{
if(!mMapRenderer)
{
return false;
}

QStringList layers = mMapRenderer->layerSet();

QStringList::const_iterator layer_it = layers.constBegin();
QgsMapLayer* currentLayer = 0;

for(; layer_it != layers.constEnd(); ++layer_it)
{
currentLayer = QgsMapLayerRegistry::instance()->mapLayer(*layer_it);
if(currentLayer)
{
QgsRasterLayer* currentRasterLayer = dynamic_cast<QgsRasterLayer*>(currentLayer);
if(currentRasterLayer)
{
const QgsRasterDataProvider* rasterProvider = 0;
if(rasterProvider = currentRasterLayer->dataProvider())
{
if(rasterProvider->name() == "wms")
{
return true;
}
}
}
}
}
return false;
}

double QgsComposerMap::horizontalViewScaleFactor() const
{
double result = 1;
Expand Down
3 changes: 3 additions & 0 deletions src/core/composer/qgscomposermap.h
Expand Up @@ -118,6 +118,9 @@ class CORE_EXPORT QgsComposerMap : /*public QWidget, private Ui::QgsComposerMapB
/**Sets offset values to shift image (useful for live updates when moving item content)*/
void setOffset( double xOffset, double yOffset );

/**True if composer map renders a WMS layer*/
bool containsWMSLayer() const;

/** stores state in Dom node
* @param elem is Dom element corresponding to 'Composer' tag
* @param temp write template file
Expand Down

0 comments on commit 5403746

Please sign in to comment.