Skip to content

Commit 2857ef5

Browse files
authored
Merge pull request #4426 from wonder-sk/fix-relative-paths-svg
Fix relative paths to SVG files in embedded projects
2 parents 93c59f4 + 590526e commit 2857ef5

File tree

145 files changed

+1334
-931
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+1334
-931
lines changed

doc/api_break.dox

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,16 @@ all these item added events.
762762
- addComposerMap no longer takes a setDefaultPreviewStyle argument.
763763
- the mapsToRestore parameter has been removed from addItemsFromXml
764764

765+
QgsConditionalLayerStyle {#qgis_api_break_3_0_QgsConditionalLayerStyle}
766+
------------------------
767+
768+
- readXml() and writeXml() require a new argument: a reference to QgsReadWriteContext
769+
770+
QgsConditionalStyle {#qgis_api_break_3_0_QgsConditionalStyle}
771+
-------------------
772+
773+
- readXml() and writeXml() require a new argument: a reference to QgsReadWriteContext
774+
765775
QgsCoordinateReferenceSystem {#qgis_api_break_3_0_QgsCoordinateReferenceSystem}
766776
----------------------------
767777

@@ -920,6 +930,9 @@ QgsDiagramRenderer {#qgis_api_break_3_0_QgsDiagramRenderer}
920930
- xform, fields were no longer required and are removed.
921931
- referencedFields() no longer takes a QgsFields argument.
922932
- renderDiagram() now takes an optional data defined overrides collection argument.
933+
- readXml(), _readXml(), writeXml(), _writeXml() do not take QgsVectorLayer as an argument anymore.
934+
- readXml(), _readXml(), writeXml(), _writeXml() require a new argument: a reference to QgsReadWriteContext
935+
923936

924937

925938
QgsDiagramLayerSettings {#qgis_api_break_3_0_QgsDiagramLayerSettings}
@@ -951,11 +964,13 @@ setting data defined properties instead.
951964
- The renderer member variable was removed, and getRenderer() was renamed to renderer()
952965
- The showAll member variable was removed. setShowAllDiagrams() and showAllDiagrams() should be used instead.
953966
- referencedFields() no longer requires a QgsFields argument.
967+
- readXml() and writeXml() do not take QgsVectorLayer as an argument anymore.
954968

955969
QgsDiagramSettings {#qgis_api_break_3_0_QgsDiagramSettings}
956970
------------------
957971

958972
- The SizeType enum was removed. Use QgsUnitTypes.RenderUnit instead.
973+
- readXml() and writeXml() do not take QgsVectorLayer as an argument anymore.
959974

960975
QgsDial {#qgis_api_break_3_0_QgsDial}
961976
-------
@@ -1095,6 +1110,8 @@ QgsFeatureRendererV2 {#qgis_api_break_3_0_QgsFeatureRendererV2}
10951110
- originalSymbolsForFeature( QgsFeature& feat ) has been removed. The originalSymbolsForFeature( QgsFeature& feat, QgsRenderContext& context ) method should be used instead (previously available as originalSymbolsForFeature2 in PyQGIS bindings).
10961111
- copyPaintEffect() was removed. copyRendererData() should be used instead.
10971112
- usedAttributes() now requires a QgsRenderContext argument.
1113+
- save() expects QgsReadWriteContext reference as the last argument
1114+
- static create() method in subclasses expects QgsReadWriteContext reference as the last argument
10981115

10991116

11001117
QgsFeatureRequest {#qgis_api_break_3_0_QgsFeatureRequest}
@@ -1280,7 +1297,7 @@ QgsLayerDefinition {#qgis_api_break_3_0_QgsLayerDefinition}
12801297
------------------
12811298

12821299
- loadLayerDefinition() now also requires QgsProject as the second argument
1283-
- loadLayerDefinition() and exportLayerDefinition() variants that take QDomDocument as the first argument now expect QgsPathResolver as the last argument
1300+
- loadLayerDefinition() and exportLayerDefinition() variants that take QDomDocument as the first argument now expect QgsReadWriteContext as the last argument
12841301

12851302

12861303
QgsLayerPropertiesWidget {#qgis_api_break_3_0_QgsLayerPropertiesWidget}
@@ -1413,7 +1430,10 @@ screenUpdateRequested() were removed. These members have had no effect for a num
14131430
- capitaliseLayerName() was renamed to capitalizeLayerName() <!--#spellok-->
14141431
- asLayerDefinition(), fromLayerDefinition(), fromLayerDefinitionFile() were moved to QgsLayerDefinition class and renamed to exportLayerDefinitionLayers() resp. loadLayerDefinitionLayers()
14151432
- loadNamedStyleFromDb() was renamed to loadNamedStyleFromDatabase()
1416-
- readLayerXml() and writeLayerXml() expect QgsPathResolver reference as the last argument
1433+
- readLayerXml() and writeLayerXml() expect QgsReadWriteContext reference as the last argument
1434+
- readSymbology() and writeSymbology() expect QgsReadWriteContext reference as the last argument
1435+
- readStyle() and writeStyle() expect QgsReadWriteContext reference as the last argument
1436+
- readXml() and writeXml() expect QgsReadWriteContext reference as the last argument
14171437
- the invalidTransformInput() slot was removed - calling this slot had no effect
14181438
- metadata() was renamed to htmlMetadata()
14191439

@@ -1624,6 +1644,7 @@ dataDefinedValue(), dataDefinedEvaluate(), dataDefinedIsActive(),
16241644
dataDefinedUseExpression(), dataDefinedProperties() and dataDefinedNames()
16251645
members were removed. Use the QgsProperty framework through dataDefinedProperties()
16261646
and setDataDefinedProperties() instead.
1647+
- readXml() and writeXml() now expect a reference to QgsReadWriteContext.
16271648

16281649

16291650
QgsPanelWidgetStack {#qgis_api_break_3_0_QgsPanelWidgetStack}
@@ -1941,11 +1962,39 @@ QgsSvgCache {#qgis_api_break_3_0_QgsSvgCache}
19411962
- This class is no longer a singleton and instance() has been removed. Instead use QgsApplication::svgCache() to access an application-wide cache.
19421963
- containsParamsV2() was removed. Use containsParamsV3() instead.
19431964
- The rasterScaleFactor parameter was removed from all methods
1965+
- svgAsImage(), svgAsPicture(), svgViewboxSize(), svgContent(), insertSvg(), cacheEntry() only accept absolute path to SVG file (relative paths will not be resolved).
19441966

19451967
QgsSvgCacheEntry {#qgis_api_break_3_0_QgsSvgCacheEntry}
19461968
----------------
19471969

19481970
- The rasterScaleFactor member was removed.
1971+
- The lookupKey member was removed.
1972+
- The "file" member has been renamed to "path".
1973+
- Constructor does not take lookup key as an optional last argument
1974+
1975+
1976+
QgsSVGFillSymbolLayer {#qgis_api_break_3_0_QgsSVGFillSymbolLayer}
1977+
---------------------
1978+
1979+
- The first argument of the constructor (svgFilePath) does not have default value anymore.
1980+
1981+
QgsSvgMarkerSymbolLayer {#qgis_api_break_3_0_QgsSvgMarkerSymbolLayer}
1982+
-----------------------
1983+
1984+
- The first argument of the constructor (path) does not have a default value anymore.
1985+
1986+
QgsSvgSelectorWidget {#qgis_api_break_3_0_QgsSvgSelectorWidget}
1987+
--------------------
1988+
1989+
- create() has been removed - use ordinary constructor instead.
1990+
- currentSvgPathToName() has been removed - absolute paths are always used.
1991+
- groupsTreeView(), imagesListView(), filePathLineEdit(), filePathButton(), relativePathCheckbox(), selectorLayout() have been removed as they were leaking implementation details.
1992+
1993+
QgsSvgSelectorDialog {#qgis_api_break_3_0_QgsSvgSelectorDialog}
1994+
--------------------
1995+
1996+
- layout(), buttonBox() has been removed as they were leaking implementation details.
1997+
19491998

19501999
QgsStyle (renamed from QgsStyleV2) {#qgis_api_break_3_0_QgsStyle}
19512000
----------------------------------
@@ -2022,6 +2071,8 @@ QgsSymbolLayerUtils (renamed from QgsSymbolLayerUtilsV2) {#qgis_api_break
20222071
- pixelSizeScaleFactor() was removed. Use QgsRenderContext::convertToPainterUnits() instead.
20232072
- mapUnitScaleFactor() was removed. Use QgsRenderContext::convertToMapUnits() instead.
20242073
- estimateMaxSymbolBleed() now requires a QgsRenderContext argument (since the bleed depends on render context for non-pixel units)
2074+
- loadSymbol(), saveSymbol(), loadSymbols(), saveSymbols(), loadSymbolLayer() now require a reference to QgsReadWriteContext
2075+
- symbolNameToPath() and symbolPathToName() have been renamed to svgSymbolNameToPath() and svgSymbolPathToName() and they require reference to QgsPathResolver
20252076

20262077

20272078
QgsSymbolSelectorWidget {#qgis_api_break_3_0_QgsSymbolSelectorWidget}
@@ -2251,6 +2302,11 @@ optional property map passing down layer level properties to the SLD encoders. I
22512302
- setScaleMethodToSymbol was removed. This is now handled using data defined scaling at a symbol layer level
22522303
- usedAttributes is now a const method and returns QSet<QString> instead of QStringList
22532304

2305+
QgsRendererAbstractMetadata {#qgis_api_break_3_0_QgsRendererAbstractMetadata}
2306+
---------------------------
2307+
2308+
- createRenderer() now expects a reference to QgsReadWriteContext as the second argument
2309+
22542310

22552311
Processing {#qgis_api_break_3_0_Processing}
22562312
----------

python/core/annotations/qgsannotation.sip

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ class QgsAnnotation : QObject
5656

5757
void render( QgsRenderContext &context ) const;
5858

59-
virtual void writeXml( QDomElement &elem, QDomDocument &doc ) const = 0;
60-
virtual void readXml( const QDomElement &itemElem, const QDomDocument &doc ) = 0;
59+
virtual void writeXml( QDomElement& elem, QDomDocument & doc, const QgsReadWriteContext &context ) const = 0;
60+
virtual void readXml( const QDomElement& itemElem, const QgsReadWriteContext &context ) = 0;
6161

6262
void setMarkerSymbol( QgsMarkerSymbol *symbol /Transfer/ );
6363
QgsMarkerSymbol *markerSymbol() const;
@@ -80,8 +80,8 @@ class QgsAnnotation : QObject
8080

8181
virtual QSizeF minimumFrameSize() const;
8282

83-
void _writeXml( QDomElement &itemElem, QDomDocument &doc ) const;
84-
void _readXml( const QDomElement &annotationElem, const QDomDocument &doc );
83+
void _writeXml( QDomElement& itemElem, QDomDocument& doc, const QgsReadWriteContext &context ) const;
84+
void _readXml( const QDomElement& annotationElem, const QgsReadWriteContext &context );
8585

8686
void copyCommonProperties( QgsAnnotation *target ) const;
8787

python/core/annotations/qgsannotationmanager.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ class QgsAnnotationManager : QObject
8181
:rtype: list of QgsAnnotation
8282
%End
8383

84-
bool readXml( const QDomElement &element, const QDomDocument &doc );
84+
bool readXml( const QDomElement &element, const QgsReadWriteContext &context );
8585
%Docstring
8686
Reads the manager's state from a DOM element, restoring all annotations
8787
present in the XML document.
8888
.. seealso:: writeXml()
8989
:rtype: bool
9090
%End
9191

92-
QDomElement writeXml( QDomDocument &doc ) const;
92+
QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
9393
%Docstring
9494
Returns a DOM element representing the state of the manager.
9595
.. seealso:: readXml()

python/core/annotations/qgshtmlannotation.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ class QgsHtmlAnnotation: QgsAnnotation
5050
:rtype: str
5151
%End
5252

53-
virtual void writeXml( QDomElement &elem, QDomDocument &doc ) const;
54-
virtual void readXml( const QDomElement &itemElem, const QDomDocument &doc );
53+
virtual void writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;
54+
virtual void readXml( const QDomElement &itemElem, const QgsReadWriteContext &context );
5555

5656
virtual void setAssociatedFeature( const QgsFeature &feature );
5757

python/core/annotations/qgssvgannotation.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ class QgsSvgAnnotation: QgsAnnotation
2929
virtual QgsSvgAnnotation *clone() const /Factory/;
3030

3131

32-
virtual void writeXml( QDomElement &elem, QDomDocument &doc ) const;
33-
virtual void readXml( const QDomElement &itemElem, const QDomDocument &doc );
32+
virtual void writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;
33+
virtual void readXml( const QDomElement &itemElem, const QgsReadWriteContext &context );
3434

3535
void setFilePath( const QString &file );
3636
%Docstring

python/core/annotations/qgstextannotation.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ class QgsTextAnnotation: QgsAnnotation
4444
.. seealso:: document()
4545
%End
4646

47-
virtual void writeXml( QDomElement &elem, QDomDocument &doc ) const;
48-
virtual void readXml( const QDomElement &itemElem, const QDomDocument &doc );
47+
virtual void writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;
48+
virtual void readXml( const QDomElement &itemElem, const QgsReadWriteContext &context );
4949

5050
static QgsTextAnnotation *create() /Factory/;
5151
%Docstring

python/core/core.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
%Include qgsproviderregistry.sip
137137
%Include qgspythonrunner.sip
138138
%Include qgsrange.sip
139+
%Include qgsreadwritecontext.sip
139140
%Include qgsrelation.sip
140141
%Include qgsrelationmanager.sip
141142
%Include qgsrenderchecker.sip

python/core/qgsconditionalstyle.sip

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ class QgsConditionalLayerStyles
5252
:rtype: list of QgsConditionalStyle
5353
%End
5454

55-
bool readXml( const QDomNode &node );
55+
bool readXml( const QDomNode &node, const QgsReadWriteContext &context );
5656
%Docstring
5757
Reads field ui properties specific state from Dom node.
5858
:rtype: bool
5959
%End
6060

61-
bool writeXml( QDomNode &node, QDomDocument &doc ) const;
61+
bool writeXml( QDomNode &node, QDomDocument &doc, const QgsReadWriteContext &context ) const;
6262
%Docstring
6363
Write field ui properties specific state from Dom node.
6464
:rtype: bool
@@ -244,13 +244,13 @@ class QgsConditionalStyle
244244
:rtype: QgsConditionalStyle
245245
%End
246246

247-
bool readXml( const QDomNode &node );
247+
bool readXml( const QDomNode &node, const QgsReadWriteContext &context );
248248
%Docstring
249249
Reads vector conditional style specific state from layer Dom node.
250250
:rtype: bool
251251
%End
252252

253-
bool writeXml( QDomNode &node, QDomDocument &doc ) const;
253+
bool writeXml( QDomNode &node, QDomDocument &doc, const QgsReadWriteContext &context ) const;
254254
%Docstring
255255
Write vector conditional style specific state from layer Dom node.
256256
:rtype: bool

python/core/qgsdiagramrenderer.sip

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ class QgsDiagramLayerSettings
199199
*/
200200
void setShowAllDiagrams( bool showAllDiagrams );
201201

202-
void readXml( const QDomElement &elem, const QgsVectorLayer *layer );
203-
void writeXml( QDomElement &layerElem, QDomDocument &doc, const QgsVectorLayer *layer ) const;
204-
bool prepare( const QgsExpressionContext &context = QgsExpressionContext() ) const;
202+
void readXml( const QDomElement& elem );
203+
void writeXml( QDomElement& layerElem, QDomDocument& doc ) const;
204+
bool prepare( const QgsExpressionContext& context = QgsExpressionContext() ) const;
205205

206206
/** Returns the set of any fields referenced by the layer's diagrams.
207207
* @param context expression context the diagrams will be drawn using
@@ -294,8 +294,8 @@ class QgsDiagramSettings
294294
//! Scale diagrams smaller than mMinimumSize to mMinimumSize
295295
double minimumSize;
296296

297-
void readXml( const QDomElement &elem, const QgsVectorLayer *layer );
298-
void writeXml( QDomElement &rendererElem, QDomDocument &doc, const QgsVectorLayer *layer ) const;
297+
void readXml( const QDomElement& elem );
298+
void writeXml( QDomElement& rendererElem, QDomDocument& doc ) const;
299299

300300
/** Returns list of legend nodes for the diagram
301301
* @note caller is responsible for deletion of QgsLayerTreeModelLegendNodes
@@ -365,8 +365,8 @@ class QgsDiagramRenderer
365365
/** Returns list with all diagram settings in the renderer*/
366366
virtual QList<QgsDiagramSettings> diagramSettings() const = 0;
367367

368-
virtual void readXml( const QDomElement &elem, const QgsVectorLayer *layer ) = 0;
369-
virtual void writeXml( QDomElement &layerElem, QDomDocument &doc, const QgsVectorLayer *layer ) const = 0;
368+
virtual void readXml( const QDomElement& elem, const QgsReadWriteContext &context ) = 0;
369+
virtual void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsReadWriteContext &context ) const = 0;
370370

371371
/** Returns list of legend nodes for the diagram
372372
* @note caller is responsible for deletion of QgsLayerTreeModelLegendNodes
@@ -442,8 +442,8 @@ class QgsDiagramRenderer
442442
static int dpiPaintDevice( const QPainter* );
443443

444444
//read / write diagram
445-
void _readXml( const QDomElement &elem, const QgsVectorLayer *layer );
446-
void _writeXml( QDomElement &rendererElem, QDomDocument &doc, const QgsVectorLayer *layer ) const;
445+
void _readXml( const QDomElement& elem, const QgsReadWriteContext &context );
446+
void _writeXml( QDomElement& rendererElem, QDomDocument& doc, const QgsReadWriteContext &context ) const;
447447
};
448448

449449
/** Renders the diagrams for all features with the same settings*/
@@ -467,8 +467,8 @@ class QgsSingleCategoryDiagramRenderer : QgsDiagramRenderer
467467

468468
QList<QgsDiagramSettings> diagramSettings() const;
469469

470-
void readXml( const QDomElement &elem, const QgsVectorLayer *layer );
471-
void writeXml( QDomElement &layerElem, QDomDocument &doc, const QgsVectorLayer *layer ) const;
470+
void readXml( const QDomElement& elem, const QgsReadWriteContext &context );
471+
void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsReadWriteContext &context ) const;
472472

473473
virtual QList< QgsLayerTreeModelLegendNode * > legendItems( QgsLayerTreeLayer *nodeLayer ) const /Factory/;
474474

@@ -533,8 +533,8 @@ class QgsLinearlyInterpolatedDiagramRenderer : QgsDiagramRenderer
533533
bool classificationAttributeIsExpression() const;
534534
void setClassificationAttributeIsExpression( bool isExpression );
535535

536-
void readXml( const QDomElement &elem, const QgsVectorLayer *layer );
537-
void writeXml( QDomElement &layerElem, QDomDocument &doc, const QgsVectorLayer *layer ) const;
536+
void readXml( const QDomElement& elem, const QgsReadWriteContext &context );
537+
void writeXml( QDomElement& layerElem, QDomDocument& doc, const QgsReadWriteContext &context ) const;
538538

539539
virtual QList< QgsLayerTreeModelLegendNode * > legendItems( QgsLayerTreeLayer *nodeLayer ) const /Factory/;
540540

python/core/qgslayerdefinition.sip

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ class QgsLayerDefinition
1111
#include <qgslayerdefinition.h>
1212
%End
1313
public:
14-
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/ );
15-
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, const QgsPathResolver &pathResolver );
16-
static bool exportLayerDefinition( QString path, const QList<QgsLayerTreeNode*> &selectedTreeNodes, QString &errorMessage /Out/ );
17-
static bool exportLayerDefinition( QDomDocument doc, const QList<QgsLayerTreeNode*> &selectedTreeNodes, QString &errorMessage /Out/, const QgsPathResolver &pathResolver );
14+
static bool loadLayerDefinition( const QString & path, QgsProject* project, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/ );
15+
static bool loadLayerDefinition( QDomDocument doc, QgsProject* project, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/, const QgsReadWriteContext &context );
16+
static bool exportLayerDefinition( QString path, const QList<QgsLayerTreeNode*>& selectedTreeNodes, QString &errorMessage /Out/ );
17+
static bool exportLayerDefinition( QDomDocument doc, const QList<QgsLayerTreeNode*>& selectedTreeNodes, QString &errorMessage /Out/, const QgsReadWriteContext &context );
1818

19-
static QDomDocument exportLayerDefinitionLayers( const QList<QgsMapLayer*> &layers, const QgsPathResolver &pathResolver );
20-
static QList<QgsMapLayer*> loadLayerDefinitionLayers( QDomDocument &document, const QgsPathResolver &pathResolver ) /Factory/;
19+
static QDomDocument exportLayerDefinitionLayers( const QList<QgsMapLayer*>& layers, const QgsReadWriteContext &context );
20+
static QList<QgsMapLayer*> loadLayerDefinitionLayers( QDomDocument& document, const QgsReadWriteContext &context ) /Factory/;
2121
static QList<QgsMapLayer*> loadLayerDefinitionLayers( const QString &qlrfile ) /Factory/;
2222

2323
/**

0 commit comments

Comments
 (0)