Skip to content

Commit

Permalink
Merge pull request #6031 from elpaso/layouts-server
Browse files Browse the repository at this point in the history
[layouts][server] Composition -> layout
  • Loading branch information
elpaso committed Jan 10, 2018
2 parents 880d853 + f61a5f2 commit 0732754
Show file tree
Hide file tree
Showing 36 changed files with 297 additions and 275 deletions.
3 changes: 0 additions & 3 deletions .ci/travis/linux/blacklist.txt
Expand Up @@ -38,6 +38,3 @@ PyQgsAuthManagerPKIPostgresTest
PyQgsAuthManagerPasswordPostgresTest
PyQgsAuthManagerOgrPostgresTest

# temporary disable for composition -> layout transition
PyQgsServerWMS
PyQgsServerWMSGetPrint
5 changes: 5 additions & 0 deletions python/core/layout/qgslayoutmanager.sip
Expand Up @@ -84,6 +84,11 @@ Removes and deletes all layouts from the manager.
Returns a list of all layouts contained in the manager.
%End

QList< QgsPrintLayout * > printLayouts() const;
%Docstring
Returns a list of all print layouts contained in the manager.
%End


QgsMasterLayoutInterface *layoutByName( const QString &name ) const;
%Docstring
Expand Down
2 changes: 1 addition & 1 deletion src/core/layout/qgscompositionconverter.cpp
Expand Up @@ -782,7 +782,7 @@ bool QgsCompositionConverter::readMapXml( QgsLayoutItemMap *layoutItem, const QD
}
else
{
layoutItem->setKeepLayerSet( true );
layoutItem->setKeepLayerSet( false );
}

QString drawCanvasItemsFlag = itemElem.attribute( QStringLiteral( "drawCanvasItems" ), QStringLiteral( "true" ) );
Expand Down
13 changes: 13 additions & 0 deletions src/core/layout/qgslayoutmanager.cpp
Expand Up @@ -140,6 +140,19 @@ QList<QgsMasterLayoutInterface *> QgsLayoutManager::layouts() const
return mLayouts;
}

QList<QgsPrintLayout *> QgsLayoutManager::printLayouts() const
{
QList<QgsPrintLayout *> result;
const QList<QgsMasterLayoutInterface *> _layouts( mLayouts );
for ( const auto &layout : _layouts )
{
QgsPrintLayout *_item( dynamic_cast<QgsPrintLayout *>( layout ) );
if ( _item )
result.push_back( _item );
}
return result;
}

QgsComposition *QgsLayoutManager::compositionByName( const QString &name ) const
{
Q_FOREACH ( QgsComposition *c, mCompositions )
Expand Down
6 changes: 6 additions & 0 deletions src/core/layout/qgslayoutmanager.h
Expand Up @@ -23,6 +23,7 @@
#include <QObject>

class QgsProject;
class QgsPrintLayout;

/**
* \ingroup core
Expand Down Expand Up @@ -110,6 +111,11 @@ class CORE_EXPORT QgsLayoutManager : public QObject
*/
QList< QgsMasterLayoutInterface * > layouts() const;

/**
* Returns a list of all print layouts contained in the manager.
*/
QList< QgsPrintLayout * > printLayouts() const;

/**
* Returns the composition with a matching name, or nullptr if no matching compositions
* were found.
Expand Down
66 changes: 40 additions & 26 deletions src/server/services/wms/qgswmsgetcapabilities.cpp
Expand Up @@ -23,11 +23,12 @@
#include "qgsserverprojectutils.h"

#include "qgslayoutmanager.h"
#include "qgscomposition.h"
#include "qgscomposermap.h"
#include "qgscomposerlabel.h"
#include "qgscomposerhtml.h"
#include "qgscomposerframe.h"
#include "qgsprintlayout.h"
#include "qgslayoutitemmap.h"
#include "qgslayoutitemlabel.h"
#include "qgslayoutitemhtml.h"
#include "qgslayoutframe.h"
#include "qgslayoutpagecollection.h"

#include "qgslayertreenode.h"
#include "qgslayertreegroup.h"
Expand Down Expand Up @@ -624,48 +625,61 @@ namespace QgsWms

QDomElement getComposerTemplatesElement( QDomDocument &doc, const QgsProject *project )
{
QList<QgsComposition *> projectComposers = project->layoutManager()->compositions();
QList< QgsPrintLayout * > projectComposers = project->layoutManager()->printLayouts();
if ( projectComposers.size() == 0 )
return QDomElement();

QStringList restrictedComposers = QgsServerProjectUtils::wmsRestrictedComposers( *project );

QDomElement composerTemplatesElem = doc.createElement( QStringLiteral( "ComposerTemplates" ) );
QList<QgsComposition *>::const_iterator cIt = projectComposers.constBegin();
QList<QgsPrintLayout *>::const_iterator cIt = projectComposers.constBegin();
for ( ; cIt != projectComposers.constEnd(); ++cIt )
{
QgsComposition *composer = *cIt;
if ( restrictedComposers.contains( composer->name() ) )
QgsPrintLayout *layout = *cIt;
if ( restrictedComposers.contains( layout->name() ) )
continue;

// Check that we have at least one page
if ( layout->pageCollection()->pageCount() < 1 )
continue;

// Get width and height from first page of the collection
QgsLayoutSize layoutSize( layout->pageCollection()->page( 0 )->sizeWithUnits() );
QgsLayoutMeasurement width( layout->convertFromLayoutUnits( layoutSize.width(), QgsUnitTypes::LayoutUnit::LayoutMillimeters ) );
QgsLayoutMeasurement height( layout->convertFromLayoutUnits( layoutSize.height(), QgsUnitTypes::LayoutUnit::LayoutMillimeters ) );

QDomElement composerTemplateElem = doc.createElement( QStringLiteral( "ComposerTemplate" ) );
composerTemplateElem.setAttribute( QStringLiteral( "name" ), composer->name() );
composerTemplateElem.setAttribute( QStringLiteral( "name" ), layout->name() );

//get paper width and hight in mm from composition
composerTemplateElem.setAttribute( QStringLiteral( "width" ), composer->paperWidth() );
composerTemplateElem.setAttribute( QStringLiteral( "height" ), composer->paperHeight() );
//get paper width and height in mm from composition
composerTemplateElem.setAttribute( QStringLiteral( "width" ), width.length() );
composerTemplateElem.setAttribute( QStringLiteral( "height" ), height.length() );

//add available composer maps and their size in mm
QList<const QgsComposerMap *> composerMapList = composer->composerMapItems();
QList<const QgsComposerMap *>::const_iterator cmIt = composerMapList.constBegin();
for ( ; cmIt != composerMapList.constEnd(); ++cmIt )
QList<QgsLayoutItemMap *> layoutMapList;
layout->layoutItems<QgsLayoutItemMap>( layoutMapList );
QList<QgsLayoutItemMap *>::const_iterator cmIt = layoutMapList.constBegin();
// Add map id
int mapId = 0;
for ( ; cmIt != layoutMapList.constEnd(); ++cmIt )
{
const QgsComposerMap *composerMap = *cmIt;
const QgsLayoutItemMap *composerMap = *cmIt;

QDomElement composerMapElem = doc.createElement( QStringLiteral( "ComposerMap" ) );
composerMapElem.setAttribute( QStringLiteral( "name" ), QStringLiteral( "map%1" ).arg( composerMap->id() ) );
composerMapElem.setAttribute( QStringLiteral( "name" ), QStringLiteral( "map%1" ).arg( mapId ) );
mapId++;
composerMapElem.setAttribute( QStringLiteral( "width" ), composerMap->rect().width() );
composerMapElem.setAttribute( QStringLiteral( "height" ), composerMap->rect().height() );
composerTemplateElem.appendChild( composerMapElem );
}

//add available composer labels
QList<QgsComposerLabel *> composerLabelList;
composer->composerItems( composerLabelList );
QList<QgsComposerLabel *>::const_iterator clIt = composerLabelList.constBegin();
QList<QgsLayoutItemLabel *> composerLabelList;
layout->layoutItems<QgsLayoutItemLabel>( composerLabelList );
QList<QgsLayoutItemLabel *>::const_iterator clIt = composerLabelList.constBegin();
for ( ; clIt != composerLabelList.constEnd(); ++clIt )
{
QgsComposerLabel *composerLabel = *clIt;
QgsLayoutItemLabel *composerLabel = *clIt;
QString id = composerLabel->id();
if ( id.isEmpty() )
continue;
Expand All @@ -676,12 +690,12 @@ namespace QgsWms
}

//add available composer HTML
QList<QgsComposerHtml *> composerHtmlList;
composer->composerItems( composerHtmlList );
QList<QgsComposerHtml *>::const_iterator chIt = composerHtmlList.constBegin();
QList<QgsLayoutItemHtml *> composerHtmlList;
layout->layoutObjects<QgsLayoutItemHtml>( composerHtmlList );
QList<QgsLayoutItemHtml *>::const_iterator chIt = composerHtmlList.constBegin();
for ( ; chIt != composerHtmlList.constEnd(); ++chIt )
{
QgsComposerHtml *composerHtml = *chIt;
QgsLayoutItemHtml *composerHtml = *chIt;
if ( composerHtml->frameCount() == 0 )
continue;

Expand Down

0 comments on commit 0732754

Please sign in to comment.