mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Restore serialization for map items
This commit is contained in:
parent
e539022358
commit
48a45b3bff
@ -409,6 +409,10 @@ Returns true if the map contains layers with blend modes or flattened layers for
|
||||
|
||||
virtual void draw( QgsRenderContext &context, const QStyleOptionGraphicsItem *itemStyle = 0 );
|
||||
|
||||
virtual bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;
|
||||
|
||||
virtual bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context );
|
||||
|
||||
|
||||
QgsMapSettings mapSettings( const QgsRectangle &extent, QSizeF size, int dpi ) const;
|
||||
%Docstring
|
||||
@ -423,7 +427,6 @@ True if a draw is already in progress
|
||||
%End
|
||||
|
||||
|
||||
|
||||
virtual QRectF boundingRect() const;
|
||||
|
||||
|
||||
|
@ -94,7 +94,7 @@ class QgsLayoutItemMapGridStack : QgsLayoutItemMapItemStack
|
||||
:rtype: list of QgsLayoutItemMapGrid
|
||||
%End
|
||||
|
||||
virtual bool readXml( const QDomElement &elem, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
|
||||
|
||||
double maxGridExtension() const;
|
||||
@ -222,9 +222,9 @@ class QgsLayoutItemMapGrid : QgsLayoutItemMapItem
|
||||
|
||||
virtual void draw( QPainter *painter );
|
||||
|
||||
virtual bool writeXml( QDomElement &elem, QDomDocument &doc ) const;
|
||||
virtual bool writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;
|
||||
|
||||
virtual bool readXml( const QDomElement &itemElem, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
|
||||
|
||||
void setCrs( const QgsCoordinateReferenceSystem &crs );
|
||||
|
@ -33,7 +33,7 @@ class QgsLayoutItemMapItem : QgsLayoutObject
|
||||
Draws the item on to a destination ``painter``.
|
||||
%End
|
||||
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &document ) const;
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;
|
||||
%Docstring
|
||||
Stores map item state in a DOM element, where ``element`` is the DOM element
|
||||
corresponding to a 'LayoutMap' tag.
|
||||
@ -41,7 +41,7 @@ class QgsLayoutItemMapItem : QgsLayoutObject
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
%Docstring
|
||||
Sets the map item state from a DOM document, where ``element`` is the DOM
|
||||
node corresponding to a 'LayoutMapGrid' tag.
|
||||
@ -139,7 +139,7 @@ class QgsLayoutItemMapItemStack
|
||||
:rtype: int
|
||||
%End
|
||||
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &doc ) const;
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context ) const;
|
||||
%Docstring
|
||||
Stores the state of the item stack in a DOM node, where ``element`` is the DOM element corresponding to a 'LayoutMap' tag.
|
||||
Returns true if write was successful.
|
||||
@ -147,7 +147,7 @@ class QgsLayoutItemMapItemStack
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc ) = 0;
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc, const QgsReadWriteContext &context ) = 0;
|
||||
%Docstring
|
||||
Sets the item stack's state from a DOM document, where ``element`` is a DOM node corresponding to a 'LayoutMap' tag.
|
||||
Returns true if read was successful.
|
||||
|
@ -94,7 +94,7 @@ class QgsLayoutItemMapOverviewStack : QgsLayoutItemMapItemStack
|
||||
Returns a list of QgsLayoutItemMapOverviews contained by the stack.
|
||||
:rtype: list of QgsLayoutItemMapOverview
|
||||
%End
|
||||
virtual bool readXml( const QDomElement &elem, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
|
||||
|
||||
};
|
||||
@ -122,9 +122,9 @@ class QgsLayoutItemMapOverview : QgsLayoutItemMapItem
|
||||
|
||||
virtual void draw( QPainter *painter );
|
||||
|
||||
virtual bool writeXml( QDomElement &elem, QDomDocument &doc ) const;
|
||||
virtual bool writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;
|
||||
|
||||
virtual bool readXml( const QDomElement &itemElem, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
|
||||
virtual bool usesAdvancedEffects() const;
|
||||
|
||||
|
@ -80,7 +80,6 @@ class QgsLayoutItemPicture: QgsLayoutItem
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
|
||||
double pictureRotation() const;
|
||||
%Docstring
|
||||
Returns the rotation used for drawing the picture within the item's frame,
|
||||
|
@ -478,6 +478,250 @@ void QgsLayoutItemMap::draw( QgsRenderContext &, const QStyleOptionGraphicsItem
|
||||
{
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMap::writePropertiesToElement( QDomElement &composerMapElem, QDomDocument &doc, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
#if 0 //TODO - is this needed?
|
||||
composerMapElem.setAttribute( QStringLiteral( "id" ), mId );
|
||||
#endif
|
||||
|
||||
if ( mKeepLayerSet )
|
||||
{
|
||||
composerMapElem.setAttribute( QStringLiteral( "keepLayerSet" ), QStringLiteral( "true" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
composerMapElem.setAttribute( QStringLiteral( "keepLayerSet" ), QStringLiteral( "false" ) );
|
||||
}
|
||||
|
||||
if ( mDrawAnnotations )
|
||||
{
|
||||
composerMapElem.setAttribute( QStringLiteral( "drawCanvasItems" ), QStringLiteral( "true" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
composerMapElem.setAttribute( QStringLiteral( "drawCanvasItems" ), QStringLiteral( "false" ) );
|
||||
}
|
||||
|
||||
//extent
|
||||
QDomElement extentElem = doc.createElement( QStringLiteral( "Extent" ) );
|
||||
extentElem.setAttribute( QStringLiteral( "xmin" ), qgsDoubleToString( mExtent.xMinimum() ) );
|
||||
extentElem.setAttribute( QStringLiteral( "xmax" ), qgsDoubleToString( mExtent.xMaximum() ) );
|
||||
extentElem.setAttribute( QStringLiteral( "ymin" ), qgsDoubleToString( mExtent.yMinimum() ) );
|
||||
extentElem.setAttribute( QStringLiteral( "ymax" ), qgsDoubleToString( mExtent.yMaximum() ) );
|
||||
composerMapElem.appendChild( extentElem );
|
||||
|
||||
if ( mCrs.isValid() )
|
||||
{
|
||||
QDomElement crsElem = doc.createElement( QStringLiteral( "crs" ) );
|
||||
mCrs.writeXml( crsElem, doc );
|
||||
composerMapElem.appendChild( crsElem );
|
||||
}
|
||||
|
||||
// follow map theme
|
||||
composerMapElem.setAttribute( QStringLiteral( "followPreset" ), mFollowVisibilityPreset ? "true" : "false" );
|
||||
composerMapElem.setAttribute( QStringLiteral( "followPresetName" ), mFollowVisibilityPresetName );
|
||||
|
||||
//map rotation
|
||||
composerMapElem.setAttribute( QStringLiteral( "mapRotation" ), QString::number( mMapRotation ) );
|
||||
|
||||
//layer set
|
||||
QDomElement layerSetElem = doc.createElement( QStringLiteral( "LayerSet" ) );
|
||||
for ( const QgsMapLayerRef &layerRef : mLayers )
|
||||
{
|
||||
if ( !layerRef )
|
||||
continue;
|
||||
QDomElement layerElem = doc.createElement( QStringLiteral( "Layer" ) );
|
||||
QDomText layerIdText = doc.createTextNode( layerRef.layerId );
|
||||
layerElem.appendChild( layerIdText );
|
||||
|
||||
layerElem.setAttribute( QStringLiteral( "name" ), layerRef.name );
|
||||
layerElem.setAttribute( QStringLiteral( "source" ), layerRef.source );
|
||||
layerElem.setAttribute( QStringLiteral( "provider" ), layerRef.provider );
|
||||
|
||||
layerSetElem.appendChild( layerElem );
|
||||
}
|
||||
composerMapElem.appendChild( layerSetElem );
|
||||
|
||||
// override styles
|
||||
if ( mKeepLayerStyles )
|
||||
{
|
||||
QDomElement stylesElem = doc.createElement( QStringLiteral( "LayerStyles" ) );
|
||||
for ( auto styleIt = mLayerStyleOverrides.constBegin(); styleIt != mLayerStyleOverrides.constEnd(); ++styleIt )
|
||||
{
|
||||
QDomElement styleElem = doc.createElement( QStringLiteral( "LayerStyle" ) );
|
||||
|
||||
QgsMapLayerRef ref( styleIt.key() );
|
||||
ref.resolve( mLayout->project() );
|
||||
|
||||
styleElem.setAttribute( QStringLiteral( "layerid" ), ref.layerId );
|
||||
styleElem.setAttribute( QStringLiteral( "name" ), ref.name );
|
||||
styleElem.setAttribute( QStringLiteral( "source" ), ref.source );
|
||||
styleElem.setAttribute( QStringLiteral( "provider" ), ref.provider );
|
||||
|
||||
QgsMapLayerStyle style( styleIt.value() );
|
||||
style.writeXml( styleElem );
|
||||
stylesElem.appendChild( styleElem );
|
||||
}
|
||||
composerMapElem.appendChild( stylesElem );
|
||||
}
|
||||
|
||||
//grids
|
||||
mGridStack->writeXml( composerMapElem, doc, context );
|
||||
|
||||
//overviews
|
||||
mOverviewStack->writeXml( composerMapElem, doc, context );
|
||||
|
||||
//atlas
|
||||
QDomElement atlasElem = doc.createElement( QStringLiteral( "AtlasMap" ) );
|
||||
atlasElem.setAttribute( QStringLiteral( "atlasDriven" ), mAtlasDriven );
|
||||
atlasElem.setAttribute( QStringLiteral( "scalingMode" ), mAtlasScalingMode );
|
||||
atlasElem.setAttribute( QStringLiteral( "margin" ), qgsDoubleToString( mAtlasMargin ) );
|
||||
composerMapElem.appendChild( atlasElem );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMap::readPropertiesFromElement( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
mUpdatesEnabled = false;
|
||||
#if 0 //TODO
|
||||
QString idRead = itemElem.attribute( QStringLiteral( "id" ), QStringLiteral( "not found" ) );
|
||||
if ( idRead != QLatin1String( "not found" ) )
|
||||
{
|
||||
mId = idRead.toInt();
|
||||
updateToolTip();
|
||||
}
|
||||
#endif
|
||||
|
||||
//extent
|
||||
QDomNodeList extentNodeList = itemElem.elementsByTagName( QStringLiteral( "Extent" ) );
|
||||
if ( !extentNodeList.isEmpty() )
|
||||
{
|
||||
QDomElement extentElem = extentNodeList.at( 0 ).toElement();
|
||||
double xmin, xmax, ymin, ymax;
|
||||
xmin = extentElem.attribute( QStringLiteral( "xmin" ) ).toDouble();
|
||||
xmax = extentElem.attribute( QStringLiteral( "xmax" ) ).toDouble();
|
||||
ymin = extentElem.attribute( QStringLiteral( "ymin" ) ).toDouble();
|
||||
ymax = extentElem.attribute( QStringLiteral( "ymax" ) ).toDouble();
|
||||
setExtent( QgsRectangle( xmin, ymin, xmax, ymax ) );
|
||||
}
|
||||
|
||||
QDomNodeList crsNodeList = itemElem.elementsByTagName( QStringLiteral( "crs" ) );
|
||||
if ( !crsNodeList.isEmpty() )
|
||||
{
|
||||
QDomElement crsElem = crsNodeList.at( 0 ).toElement();
|
||||
mCrs.readXml( crsElem );
|
||||
}
|
||||
else
|
||||
{
|
||||
mCrs = QgsCoordinateReferenceSystem();
|
||||
}
|
||||
|
||||
//map rotation
|
||||
mMapRotation = itemElem.attribute( QStringLiteral( "mapRotation" ), QStringLiteral( "0" ) ).toDouble();
|
||||
|
||||
// follow map theme
|
||||
mFollowVisibilityPreset = itemElem.attribute( QStringLiteral( "followPreset" ) ).compare( QLatin1String( "true" ) ) == 0;
|
||||
mFollowVisibilityPresetName = itemElem.attribute( QStringLiteral( "followPresetName" ) );
|
||||
|
||||
//mKeepLayerSet flag
|
||||
QString keepLayerSetFlag = itemElem.attribute( QStringLiteral( "keepLayerSet" ) );
|
||||
if ( keepLayerSetFlag.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
mKeepLayerSet = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mKeepLayerSet = false;
|
||||
}
|
||||
|
||||
QString drawCanvasItemsFlag = itemElem.attribute( QStringLiteral( "drawCanvasItems" ), QStringLiteral( "true" ) );
|
||||
if ( drawCanvasItemsFlag.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
mDrawAnnotations = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mDrawAnnotations = false;
|
||||
}
|
||||
|
||||
mLayerStyleOverrides.clear();
|
||||
|
||||
//mLayers
|
||||
mLayers.clear();
|
||||
QDomNodeList layerSetNodeList = itemElem.elementsByTagName( QStringLiteral( "LayerSet" ) );
|
||||
if ( !layerSetNodeList.isEmpty() )
|
||||
{
|
||||
QDomElement layerSetElem = layerSetNodeList.at( 0 ).toElement();
|
||||
QDomNodeList layerIdNodeList = layerSetElem.elementsByTagName( QStringLiteral( "Layer" ) );
|
||||
mLayers.reserve( layerIdNodeList.size() );
|
||||
for ( int i = 0; i < layerIdNodeList.size(); ++i )
|
||||
{
|
||||
QDomElement layerElem = layerIdNodeList.at( i ).toElement();
|
||||
QString layerId = layerElem.text();
|
||||
QString layerName = layerElem.attribute( QStringLiteral( "name" ) );
|
||||
QString layerSource = layerElem.attribute( QStringLiteral( "source" ) );
|
||||
QString layerProvider = layerElem.attribute( QStringLiteral( "provider" ) );
|
||||
|
||||
QgsMapLayerRef ref( layerId, layerName, layerSource, layerProvider );
|
||||
ref.resolveWeakly( mLayout->project() );
|
||||
mLayers << ref;
|
||||
}
|
||||
}
|
||||
|
||||
// override styles
|
||||
QDomNodeList layerStylesNodeList = itemElem.elementsByTagName( QStringLiteral( "LayerStyles" ) );
|
||||
mKeepLayerStyles = !layerStylesNodeList.isEmpty();
|
||||
if ( mKeepLayerStyles )
|
||||
{
|
||||
QDomElement layerStylesElem = layerStylesNodeList.at( 0 ).toElement();
|
||||
QDomNodeList layerStyleNodeList = layerStylesElem.elementsByTagName( QStringLiteral( "LayerStyle" ) );
|
||||
for ( int i = 0; i < layerStyleNodeList.size(); ++i )
|
||||
{
|
||||
const QDomElement &layerStyleElement = layerStyleNodeList.at( i ).toElement();
|
||||
QString layerId = layerStyleElement.attribute( QStringLiteral( "layerid" ) );
|
||||
QString layerName = layerStyleElement.attribute( QStringLiteral( "name" ) );
|
||||
QString layerSource = layerStyleElement.attribute( QStringLiteral( "source" ) );
|
||||
QString layerProvider = layerStyleElement.attribute( QStringLiteral( "provider" ) );
|
||||
QgsMapLayerRef ref( layerId, layerName, layerSource, layerProvider );
|
||||
ref.resolveWeakly( mLayout->project() );
|
||||
|
||||
QgsMapLayerStyle style;
|
||||
style.readXml( layerStyleElement );
|
||||
mLayerStyleOverrides.insert( ref.layerId, style.xmlData() );
|
||||
}
|
||||
}
|
||||
|
||||
mDrawing = false;
|
||||
mNumCachedLayers = 0;
|
||||
mCacheInvalidated = true;
|
||||
|
||||
//overviews
|
||||
mOverviewStack->readXml( itemElem, doc, context );
|
||||
|
||||
//grids
|
||||
mGridStack->readXml( itemElem, doc, context );
|
||||
|
||||
//atlas
|
||||
QDomNodeList atlasNodeList = itemElem.elementsByTagName( QStringLiteral( "AtlasMap" ) );
|
||||
if ( !atlasNodeList.isEmpty() )
|
||||
{
|
||||
QDomElement atlasElem = atlasNodeList.at( 0 ).toElement();
|
||||
mAtlasDriven = ( atlasElem.attribute( QStringLiteral( "atlasDriven" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
|
||||
if ( atlasElem.hasAttribute( QStringLiteral( "fixedScale" ) ) ) // deprecated XML
|
||||
{
|
||||
mAtlasScalingMode = ( atlasElem.attribute( QStringLiteral( "fixedScale" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) ) ? Fixed : Auto;
|
||||
}
|
||||
else if ( atlasElem.hasAttribute( QStringLiteral( "scalingMode" ) ) )
|
||||
{
|
||||
mAtlasScalingMode = static_cast<AtlasScalingMode>( atlasElem.attribute( QStringLiteral( "scalingMode" ) ).toInt() );
|
||||
}
|
||||
mAtlasMargin = atlasElem.attribute( QStringLiteral( "margin" ), QStringLiteral( "0.1" ) ).toDouble();
|
||||
}
|
||||
mUpdatesEnabled = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsLayoutItemMap::paint( QPainter *painter, const QStyleOptionGraphicsItem *style, QWidget * )
|
||||
{
|
||||
if ( !mLayout || !painter || !painter->device() || !mUpdatesEnabled )
|
||||
|
@ -399,6 +399,8 @@ class CORE_EXPORT QgsLayoutItemMap : public QgsLayoutItem
|
||||
protected:
|
||||
|
||||
void draw( QgsRenderContext &context, const QStyleOptionGraphicsItem *itemStyle = nullptr ) override;
|
||||
bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
|
||||
bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
|
||||
|
||||
/**
|
||||
* Return map settings that will be used for drawing of the map.
|
||||
@ -415,23 +417,8 @@ class CORE_EXPORT QgsLayoutItemMap : public QgsLayoutItem
|
||||
Atlas preview extents are only temporary, and are regenerated whenever the atlas feature changes
|
||||
*/
|
||||
void setNewAtlasFeatureExtent( const QgsRectangle &extent );
|
||||
|
||||
/**
|
||||
* Stores state in Dom node
|
||||
* \param elem is Dom element corresponding to 'Composer' tag
|
||||
* \param doc Dom document
|
||||
*/
|
||||
bool writeXml( QDomElement &elem, QDomDocument &doc ) const override;
|
||||
|
||||
/**
|
||||
* Sets state from Dom document
|
||||
* \param itemElem is Dom node corresponding to 'ComposerMap' tag
|
||||
* \param doc is Dom document
|
||||
*/
|
||||
bool readXml( const QDomElement &itemElem, const QDomDocument &doc ) override;
|
||||
#endif
|
||||
|
||||
|
||||
// In case of annotations, the bounding rectangle can be larger than the map item rectangle
|
||||
QRectF boundingRect() const override;
|
||||
|
||||
|
@ -97,7 +97,7 @@ QgsLayoutItemMapGrid &QgsLayoutItemMapGridStack::operator[]( int idx )
|
||||
return *grid;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapGridStack::readXml( const QDomElement &elem, const QDomDocument &doc )
|
||||
bool QgsLayoutItemMapGridStack::readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
removeItems();
|
||||
|
||||
@ -107,7 +107,7 @@ bool QgsLayoutItemMapGridStack::readXml( const QDomElement &elem, const QDomDocu
|
||||
{
|
||||
QDomElement mapGridElem = mapGridNodeList.at( i ).toElement();
|
||||
QgsLayoutItemMapGrid *mapGrid = new QgsLayoutItemMapGrid( mapGridElem.attribute( QStringLiteral( "name" ) ), mMap );
|
||||
mapGrid->readXml( mapGridElem, doc );
|
||||
mapGrid->readXml( mapGridElem, doc, context );
|
||||
mItems.append( mapGrid );
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ void QgsLayoutItemMapGrid::setGridLineColor( const QColor &c )
|
||||
}
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapGrid::writeXml( QDomElement &elem, QDomDocument &doc ) const
|
||||
bool QgsLayoutItemMapGrid::writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
if ( elem.isNull() )
|
||||
{
|
||||
@ -220,9 +220,6 @@ bool QgsLayoutItemMapGrid::writeXml( QDomElement &elem, QDomDocument &doc ) cons
|
||||
mapGridElem.setAttribute( QStringLiteral( "offsetY" ), qgsDoubleToString( mGridOffsetY ) );
|
||||
mapGridElem.setAttribute( QStringLiteral( "crossLength" ), qgsDoubleToString( mCrossLength ) );
|
||||
|
||||
QgsReadWriteContext context;
|
||||
context.setPathResolver( mLayout->project()->pathResolver() );
|
||||
|
||||
QDomElement lineStyleElem = doc.createElement( QStringLiteral( "lineStyle" ) );
|
||||
QDomElement gridLineStyleElem = QgsSymbolLayerUtils::saveSymbol( QString(), mGridLineSymbol.get(), doc, context );
|
||||
lineStyleElem.appendChild( gridLineStyleElem );
|
||||
@ -271,12 +268,12 @@ bool QgsLayoutItemMapGrid::writeXml( QDomElement &elem, QDomDocument &doc ) cons
|
||||
mapGridElem.setAttribute( QStringLiteral( "unit" ), mGridUnit );
|
||||
mapGridElem.setAttribute( QStringLiteral( "blendMode" ), mBlendMode );
|
||||
|
||||
bool ok = QgsLayoutItemMapItem::writeXml( mapGridElem, doc );
|
||||
bool ok = QgsLayoutItemMapItem::writeXml( mapGridElem, doc, context );
|
||||
elem.appendChild( mapGridElem );
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapGrid::readXml( const QDomElement &itemElem, const QDomDocument &doc )
|
||||
bool QgsLayoutItemMapGrid::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
Q_UNUSED( doc );
|
||||
if ( itemElem.isNull() )
|
||||
@ -284,7 +281,7 @@ bool QgsLayoutItemMapGrid::readXml( const QDomElement &itemElem, const QDomDocum
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ok = QgsLayoutItemMapItem::readXml( itemElem, doc );
|
||||
bool ok = QgsLayoutItemMapItem::readXml( itemElem, doc, context );
|
||||
|
||||
//grid
|
||||
mGridStyle = QgsLayoutItemMapGrid::GridStyle( itemElem.attribute( QStringLiteral( "gridStyle" ), QStringLiteral( "0" ) ).toInt() );
|
||||
@ -305,9 +302,6 @@ bool QgsLayoutItemMapGrid::readXml( const QDomElement &itemElem, const QDomDocum
|
||||
mTopFrameDivisions = QgsLayoutItemMapGrid::DisplayMode( itemElem.attribute( QStringLiteral( "topFrameDivisions" ), QStringLiteral( "0" ) ).toInt() );
|
||||
mBottomFrameDivisions = QgsLayoutItemMapGrid::DisplayMode( itemElem.attribute( QStringLiteral( "bottomFrameDivisions" ), QStringLiteral( "0" ) ).toInt() );
|
||||
|
||||
QgsReadWriteContext context;
|
||||
context.setPathResolver( mLayout->project()->pathResolver() );
|
||||
|
||||
QDomElement lineStyleElem = itemElem.firstChildElement( QStringLiteral( "lineStyle" ) );
|
||||
if ( !lineStyleElem.isNull() )
|
||||
{
|
||||
@ -498,23 +492,23 @@ void QgsLayoutItemMapGrid::calculateCrsTransformLines() const
|
||||
QList< QPair< double, QPolygonF > >::const_iterator yGridIt = mTransformedYLines.constBegin();
|
||||
for ( ; yGridIt != mTransformedYLines.constEnd(); ++yGridIt )
|
||||
{
|
||||
QgsPolyline yLine;
|
||||
QgsPolylineXY yLine;
|
||||
for ( int i = 0; i < ( *yGridIt ).second.size(); ++i )
|
||||
{
|
||||
yLine.append( QgsPointXY( ( *yGridIt ).second.at( i ).x(), ( *yGridIt ).second.at( i ).y() ) );
|
||||
}
|
||||
yLines << QgsGeometry::fromPolyline( yLine );
|
||||
yLines << QgsGeometry::fromPolylineXY( yLine );
|
||||
}
|
||||
QList< QgsGeometry > xLines;
|
||||
QList< QPair< double, QPolygonF > >::const_iterator xGridIt = mTransformedXLines.constBegin();
|
||||
for ( ; xGridIt != mTransformedXLines.constEnd(); ++xGridIt )
|
||||
{
|
||||
QgsPolyline xLine;
|
||||
QgsPolylineXY xLine;
|
||||
for ( int i = 0; i < ( *xGridIt ).second.size(); ++i )
|
||||
{
|
||||
xLine.append( QgsPointXY( ( *xGridIt ).second.at( i ).x(), ( *xGridIt ).second.at( i ).y() ) );
|
||||
}
|
||||
xLines << QgsGeometry::fromPolyline( xLine );
|
||||
xLines << QgsGeometry::fromPolylineXY( xLine );
|
||||
}
|
||||
|
||||
//now, loop through geometries and calculate intersection points
|
||||
|
@ -109,7 +109,7 @@ class CORE_EXPORT QgsLayoutItemMapGridStack : public QgsLayoutItemMapItemStack
|
||||
*/
|
||||
QList< QgsLayoutItemMapGrid * > asList() const;
|
||||
|
||||
bool readXml( const QDomElement &elem, const QDomDocument &doc ) override;
|
||||
bool readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context ) override;
|
||||
|
||||
/**
|
||||
* Calculates the maximum distance grids within the stack extend
|
||||
@ -267,8 +267,8 @@ class CORE_EXPORT QgsLayoutItemMapGrid : public QgsLayoutItemMapItem
|
||||
QgsLayoutItemMapGrid( const QString &name, QgsLayoutItemMap *map );
|
||||
|
||||
void draw( QPainter *painter ) override;
|
||||
bool writeXml( QDomElement &elem, QDomDocument &doc ) const override;
|
||||
bool readXml( const QDomElement &itemElem, const QDomDocument &doc ) override;
|
||||
bool writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
|
||||
bool readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context ) override;
|
||||
|
||||
/**
|
||||
* Sets the \a crs for the grid.
|
||||
|
@ -29,7 +29,7 @@ QgsLayoutItemMapItem::QgsLayoutItemMapItem( const QString &name, QgsLayoutItemMa
|
||||
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &document ) const
|
||||
bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext & ) const
|
||||
{
|
||||
Q_UNUSED( document );
|
||||
element.setAttribute( QStringLiteral( "uuid" ), mUuid );
|
||||
@ -38,7 +38,7 @@ bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &documen
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapItem::readXml( const QDomElement &itemElem, const QDomDocument &doc )
|
||||
bool QgsLayoutItemMapItem::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext & )
|
||||
{
|
||||
Q_UNUSED( doc );
|
||||
mUuid = itemElem.attribute( QStringLiteral( "uuid" ) );
|
||||
@ -184,12 +184,12 @@ QList<QgsLayoutItemMapItem *> QgsLayoutItemMapItemStack::asList() const
|
||||
return list;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapItemStack::writeXml( QDomElement &elem, QDomDocument &doc ) const
|
||||
bool QgsLayoutItemMapItemStack::writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
//write item stack
|
||||
for ( QgsLayoutItemMapItem *item : mItems )
|
||||
{
|
||||
item->writeXml( elem, doc );
|
||||
item->writeXml( elem, doc, context );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -52,14 +52,14 @@ class CORE_EXPORT QgsLayoutItemMapItem : public QgsLayoutObject
|
||||
* corresponding to a 'LayoutMap' tag.
|
||||
* \see readXml()
|
||||
*/
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &document ) const;
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;
|
||||
|
||||
/**
|
||||
* Sets the map item state from a DOM document, where \a element is the DOM
|
||||
* node corresponding to a 'LayoutMapGrid' tag.
|
||||
* \see writeXml()
|
||||
*/
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc );
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc, const QgsReadWriteContext &context );
|
||||
|
||||
/**
|
||||
* Sets the corresponding layout \a map for the item.
|
||||
@ -156,14 +156,14 @@ class CORE_EXPORT QgsLayoutItemMapItemStack
|
||||
* Returns true if write was successful.
|
||||
* \see readXml()
|
||||
*/
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &doc ) const;
|
||||
virtual bool writeXml( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context ) const;
|
||||
|
||||
/**
|
||||
* Sets the item stack's state from a DOM document, where \a element is a DOM node corresponding to a 'LayoutMap' tag.
|
||||
* Returns true if read was successful.
|
||||
* \see writeXml()
|
||||
*/
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc ) = 0;
|
||||
virtual bool readXml( const QDomElement &element, const QDomDocument &doc, const QgsReadWriteContext &context ) = 0;
|
||||
|
||||
/**
|
||||
* Draws the items from the stack on a specified \a painter.
|
||||
|
@ -145,7 +145,7 @@ void QgsLayoutItemMapOverview::draw( QPainter *painter )
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapOverview::writeXml( QDomElement &elem, QDomDocument &doc ) const
|
||||
bool QgsLayoutItemMapOverview::writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const
|
||||
{
|
||||
if ( elem.isNull() )
|
||||
{
|
||||
@ -160,18 +160,15 @@ bool QgsLayoutItemMapOverview::writeXml( QDomElement &elem, QDomDocument &doc )
|
||||
overviewFrameElem.setAttribute( QStringLiteral( "inverted" ), mInverted );
|
||||
overviewFrameElem.setAttribute( QStringLiteral( "centered" ), mCentered );
|
||||
|
||||
QgsReadWriteContext context;
|
||||
context.setPathResolver( mLayout->project()->pathResolver() );
|
||||
|
||||
QDomElement frameStyleElem = QgsSymbolLayerUtils::saveSymbol( QString(), mFrameSymbol.get(), doc, context );
|
||||
overviewFrameElem.appendChild( frameStyleElem );
|
||||
|
||||
bool ok = QgsLayoutItemMapItem::writeXml( overviewFrameElem, doc );
|
||||
bool ok = QgsLayoutItemMapItem::writeXml( overviewFrameElem, doc, context );
|
||||
elem.appendChild( overviewFrameElem );
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapOverview::readXml( const QDomElement &itemElem, const QDomDocument &doc )
|
||||
bool QgsLayoutItemMapOverview::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
Q_UNUSED( doc );
|
||||
if ( itemElem.isNull() )
|
||||
@ -179,7 +176,7 @@ bool QgsLayoutItemMapOverview::readXml( const QDomElement &itemElem, const QDomD
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ok = QgsLayoutItemMapItem::readXml( itemElem, doc );
|
||||
bool ok = QgsLayoutItemMapItem::readXml( itemElem, doc, context );
|
||||
|
||||
#if 0 //TODO
|
||||
setFrameMapUuid( itemElem.attribute( QStringLiteral( "frameMap" ), QStringLiteral( "-1" ) ).toInt() );
|
||||
@ -188,9 +185,6 @@ bool QgsLayoutItemMapOverview::readXml( const QDomElement &itemElem, const QDomD
|
||||
mInverted = ( itemElem.attribute( QStringLiteral( "inverted" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
|
||||
mCentered = ( itemElem.attribute( QStringLiteral( "centered" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
|
||||
|
||||
QgsReadWriteContext context;
|
||||
context.setPathResolver( mLayout->project()->pathResolver() );
|
||||
|
||||
QDomElement frameStyleElem = itemElem.firstChildElement( QStringLiteral( "symbol" ) );
|
||||
if ( !frameStyleElem.isNull() )
|
||||
{
|
||||
@ -384,7 +378,7 @@ QList<QgsLayoutItemMapOverview *> QgsLayoutItemMapOverviewStack::asList() const
|
||||
return list;
|
||||
}
|
||||
|
||||
bool QgsLayoutItemMapOverviewStack::readXml( const QDomElement &elem, const QDomDocument &doc )
|
||||
bool QgsLayoutItemMapOverviewStack::readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context )
|
||||
{
|
||||
removeItems();
|
||||
|
||||
@ -394,7 +388,7 @@ bool QgsLayoutItemMapOverviewStack::readXml( const QDomElement &elem, const QDom
|
||||
{
|
||||
QDomElement mapOverviewElem = mapOverviewNodeList.at( i ).toElement();
|
||||
QgsLayoutItemMapOverview *mapOverview = new QgsLayoutItemMapOverview( mapOverviewElem.attribute( QStringLiteral( "name" ) ), mMap );
|
||||
mapOverview->readXml( mapOverviewElem, doc );
|
||||
mapOverview->readXml( mapOverviewElem, doc, context );
|
||||
mItems.append( mapOverview );
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ class CORE_EXPORT QgsLayoutItemMapOverviewStack : public QgsLayoutItemMapItemSta
|
||||
* Returns a list of QgsLayoutItemMapOverviews contained by the stack.
|
||||
*/
|
||||
QList< QgsLayoutItemMapOverview * > asList() const;
|
||||
bool readXml( const QDomElement &elem, const QDomDocument &doc ) override;
|
||||
bool readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context ) override;
|
||||
|
||||
};
|
||||
|
||||
@ -133,8 +133,8 @@ class CORE_EXPORT QgsLayoutItemMapOverview : public QgsLayoutItemMapItem
|
||||
QgsLayoutItemMapOverview( const QString &name, QgsLayoutItemMap *map );
|
||||
|
||||
void draw( QPainter *painter ) override;
|
||||
bool writeXml( QDomElement &elem, QDomDocument &doc ) const override;
|
||||
bool readXml( const QDomElement &itemElem, const QDomDocument &doc ) override;
|
||||
bool writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
|
||||
bool readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context ) override;
|
||||
bool usesAdvancedEffects() const override;
|
||||
|
||||
/**
|
||||
|
@ -98,15 +98,6 @@ class CORE_EXPORT QgsLayoutItemPicture: public QgsLayoutItem
|
||||
*/
|
||||
QString picturePath() const;
|
||||
|
||||
#if 0
|
||||
|
||||
/**
|
||||
* Sets this items bound in scene coordinates such that 1 item size units
|
||||
* corresponds to 1 scene size unit and resizes the svg symbol / image
|
||||
*/
|
||||
void setSceneRect( const QRectF &rectangle ) override;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Returns the rotation used for drawing the picture within the item's frame,
|
||||
* in degrees clockwise.
|
||||
|
Loading…
x
Reference in New Issue
Block a user