diff --git a/src/core/qgspropertycollection.cpp b/src/core/qgspropertycollection.cpp index b2f1244d414..a5b266de088 100644 --- a/src/core/qgspropertycollection.cpp +++ b/src/core/qgspropertycollection.cpp @@ -123,6 +123,7 @@ void QgsPropertyCollection::clear() mDirty = false; mHasActiveProperties = false; mHasDynamicProperties = false; + mCount = 0; } void QgsPropertyCollection::setProperty( int key, const QgsProperty& property ) diff --git a/tests/src/python/test_qgsarrowsymbollayer.py b/tests/src/python/test_qgsarrowsymbollayer.py index 7e732ee6711..c0147fe3e32 100644 --- a/tests/src/python/test_qgsarrowsymbollayer.py +++ b/tests/src/python/test_qgsarrowsymbollayer.py @@ -40,7 +40,8 @@ from qgis.core import ( QgsArrowSymbolLayer, QgsSymbol, QgsMultiRenderChecker, - QgsDataDefined + QgsProperty, + QgsSymbolLayer ) from qgis.testing import start_app, unittest @@ -78,12 +79,12 @@ class TestQgsArrowSymbolLayer(unittest.TestCase): def test_1(self): sym = self.lines_layer.renderer().symbol() sym_layer = QgsArrowSymbolLayer.create({'head_length': '6.5', 'head_thickness': '6.5'}) - dd = QgsDataDefined("(@geometry_point_num % 4) * 2") - sym_layer.setDataDefinedProperty("arrow_width", dd) - dd2 = QgsDataDefined("(@geometry_point_num % 4) * 2") - sym_layer.setDataDefinedProperty("head_length", dd2) - dd3 = QgsDataDefined("(@geometry_point_num % 4) * 2") - sym_layer.setDataDefinedProperty("head_thickness", dd3) + dd = QgsProperty.fromExpression("(@geometry_point_num % 4) * 2") + sym_layer.setDataDefinedProperty(QgsSymbolLayer.PropertyArrowWidth, dd) + dd2 = QgsProperty.fromExpression("(@geometry_point_num % 4) * 2") + sym_layer.setDataDefinedProperty(QgsSymbolLayer.PropertyArrowHeadLength, dd2) + dd3 = QgsProperty.fromExpression("(@geometry_point_num % 4) * 2") + sym_layer.setDataDefinedProperty(QgsSymbolLayer.PropertyArrowHeadThickness, dd3) fill_sym = QgsFillSymbol.createSimple({'color': '#8bcfff', 'outline_color': '#000000', 'outline_style': 'solid', 'outline_width': '1'}) sym_layer.setSubSymbol(fill_sym) sym.changeSymbolLayer(0, sym_layer) diff --git a/tests/src/python/test_qgscomposeritem.py b/tests/src/python/test_qgscomposeritem.py index 3c01ed07d1b..6e08b4cbd61 100644 --- a/tests/src/python/test_qgscomposeritem.py +++ b/tests/src/python/test_qgscomposeritem.py @@ -19,7 +19,7 @@ from qgis.core import (QgsProject, QgsComposition, QgsComposerLabel, QgsComposerObject, - QgsExpressionBasedProperty) + QgsProperty) from qgis.PyQt.QtGui import (QColor) start_app() @@ -39,7 +39,7 @@ class TestQgsComposerItem(unittest.TestCase): self.assertEqual(item.frameOutlineColor(), QColor(255, 0, 0)) self.assertEqual(item.pen().color().name(), QColor(255, 0, 0).name()) - item.dataDefinedProperties().setProperty(QgsComposerObject.FrameColor, QgsExpressionBasedProperty("'blue'")) + item.dataDefinedProperties().setProperty(QgsComposerObject.FrameColor, QgsProperty.fromExpression("'blue'")) item.refreshDataDefinedProperty() self.assertEqual(item.frameOutlineColor(), QColor(255, 0, 0)) # should not change self.assertEqual(item.pen().color().name(), QColor(0, 0, 255).name()) @@ -57,7 +57,7 @@ class TestQgsComposerItem(unittest.TestCase): self.assertEqual(item.backgroundColor(), QColor(255, 0, 0)) self.assertEqual(item.brush().color().name(), QColor(255, 0, 0).name()) - item.dataDefinedProperties().setProperty(QgsComposerObject.BackgroundColor, QgsExpressionBasedProperty("'blue'")) + item.dataDefinedProperties().setProperty(QgsComposerObject.BackgroundColor, QgsProperty.fromExpression("'blue'")) item.refreshDataDefinedProperty() self.assertEqual(item.backgroundColor(), QColor(255, 0, 0)) # should not change self.assertEqual(item.brush().color().name(), QColor(0, 0, 255).name()) diff --git a/tests/src/python/test_qgscomposerlegend.py b/tests/src/python/test_qgscomposerlegend.py index 365969ad036..b14a0144a7f 100644 --- a/tests/src/python/test_qgscomposerlegend.py +++ b/tests/src/python/test_qgscomposerlegend.py @@ -26,7 +26,7 @@ from qgis.core import (QgsComposerLegend, QgsRectangle, QgsProject, QgsComposerObject, - QgsExpressionBasedProperty + QgsProperty ) from qgis.testing import (start_app, unittest @@ -215,7 +215,7 @@ class TestQgsComposerLegend(unittest.TestCase): self.assertEqual(legend.title(), 'original') self.assertEqual(legend.legendSettings().title(), 'original') - legend.dataDefinedProperties().setProperty(QgsComposerObject.LegendTitle, QgsExpressionBasedProperty("'new'")) + legend.dataDefinedProperties().setProperty(QgsComposerObject.LegendTitle, QgsProperty.fromExpression("'new'")) legend.refreshDataDefinedProperty() self.assertEqual(legend.title(), 'original') self.assertEqual(legend.legendSettings().title(), 'new') @@ -233,7 +233,7 @@ class TestQgsComposerLegend(unittest.TestCase): self.assertEqual(legend.columnCount(), 2) self.assertEqual(legend.legendSettings().columnCount(), 2) - legend.dataDefinedProperties().setProperty(QgsComposerObject.LegendColumnCount, QgsExpressionBasedProperty("5")) + legend.dataDefinedProperties().setProperty(QgsComposerObject.LegendColumnCount, QgsProperty.fromExpression("5")) legend.refreshDataDefinedProperty() self.assertEqual(legend.columnCount(), 2) self.assertEqual(legend.legendSettings().columnCount(), 5) diff --git a/tests/src/python/test_qgspallabeling_placement.py b/tests/src/python/test_qgspallabeling_placement.py index 14368ba41d7..f2e5c782d4a 100644 --- a/tests/src/python/test_qgspallabeling_placement.py +++ b/tests/src/python/test_qgspallabeling_placement.py @@ -23,7 +23,10 @@ import sys from qgis.PyQt.QtCore import QThreadPool, qDebug -from qgis.core import QgsPalLayerSettings, QgsSingleSymbolRenderer, QgsMarkerSymbol +from qgis.core import (QgsPalLayerSettings, + QgsSingleSymbolRenderer, + QgsMarkerSymbol, + QgsProperty) from utilities import getTempfilePath, renderMapToImage, mapSettingsString from test_qgspallabeling_base import TestQgsPalLabeling, runSuite @@ -232,7 +235,7 @@ class TestPointPlacement(TestPlacementBase): self._TestMapSettings = self.cloneMapSettings(self._MapSettings) self.lyr.placement = QgsPalLayerSettings.OrderedPositionsAroundPoint self.lyr.dist = 2 - self.lyr.setDataDefinedProperty(QgsPalLayerSettings.PredefinedPositionOrder, True, True, "'T,B'", None) + self.lyr.properties().setProperty(QgsPalLayerSettings.PredefinedPositionOrder, QgsProperty.fromExpression("'T,B'")) self.checkTest() self.removeMapLayer(self.layer) self.lyr.removeDataDefinedProperty(QgsPalLayerSettings.PredefinedPositionOrder) @@ -245,7 +248,7 @@ class TestPointPlacement(TestPlacementBase): self._TestMapSettings = self.cloneMapSettings(self._MapSettings) self.lyr.placement = QgsPalLayerSettings.OrderedPositionsAroundPoint self.lyr.dist = 2 - self.lyr.setDataDefinedProperty(QgsPalLayerSettings.PredefinedPositionOrder, True, True, "'T,B'", None) + self.lyr.properties().setProperty(QgsPalLayerSettings.PredefinedPositionOrder, QgsProperty.fromExpression("'T,B'")) self.checkTest() self.removeMapLayer(obstacleLayer) self.removeMapLayer(self.layer) diff --git a/tests/src/python/test_qgspointclusterrenderer.py b/tests/src/python/test_qgspointclusterrenderer.py index 1341c259eb7..599723ba792 100644 --- a/tests/src/python/test_qgspointclusterrenderer.py +++ b/tests/src/python/test_qgspointclusterrenderer.py @@ -41,7 +41,8 @@ from qgis.core import (QgsVectorLayer, QgsSingleSymbolRenderer, QgsPointDisplacementRenderer, QgsMapSettings, - QgsDataDefined + QgsProperty, + QgsSymbolLayer ) from qgis.testing import start_app, unittest from utilities import (unitTestDataPath) @@ -170,8 +171,8 @@ class TestQgsPointClusterRenderer(unittest.TestCase): old_marker = self.layer.renderer().clusterSymbol().clone() new_marker = QgsMarkerSymbol.createSimple({'color': '#ffff00', 'size': '3', 'outline_style': 'no'}) - new_marker.symbolLayer(0).setDataDefinedProperty('color', QgsDataDefined('@cluster_color')) - new_marker.symbolLayer(0).setDataDefinedProperty('size', QgsDataDefined('@cluster_size*2')) + new_marker.symbolLayer(0).setDataDefinedProperty(QgsSymbolLayer.PropertyFillColor, QgsProperty.fromExpression('@cluster_color')) + new_marker.symbolLayer(0).setDataDefinedProperty(QgsSymbolLayer.PropertySize, QgsProperty.fromExpression('@cluster_size*2')) self.layer.renderer().setClusterSymbol(new_marker) renderchecker = QgsMultiRenderChecker() renderchecker.setMapSettings(self.mapsettings) diff --git a/tests/src/python/test_qgspointdisplacementrenderer.py b/tests/src/python/test_qgspointdisplacementrenderer.py index 89f4504673d..b55757578fd 100644 --- a/tests/src/python/test_qgspointdisplacementrenderer.py +++ b/tests/src/python/test_qgspointdisplacementrenderer.py @@ -43,7 +43,8 @@ from qgis.core import (QgsVectorLayer, QgsSingleSymbolRenderer, QgsPointClusterRenderer, QgsMapSettings, - QgsDataDefined + QgsProperty, + QgsSymbolLayer ) from qgis.testing import start_app, unittest from utilities import (unitTestDataPath) @@ -193,8 +194,8 @@ class TestQgsPointDisplacementRenderer(unittest.TestCase): old_marker = self.layer.renderer().centerSymbol().clone() new_marker = QgsMarkerSymbol.createSimple({'color': '#ffff00', 'size': '3', 'outline_style': 'no'}) - new_marker.symbolLayer(0).setDataDefinedProperty('color', QgsDataDefined('@cluster_color')) - new_marker.symbolLayer(0).setDataDefinedProperty('size', QgsDataDefined('@cluster_size*2')) + new_marker.symbolLayer(0).setDataDefinedProperty(QgsSymbolLayer.PropertyFillColor, QgsProperty.fromExpression('@cluster_color')) + new_marker.symbolLayer(0).setDataDefinedProperty(QgsSymbolLayer.PropertySize, QgsProperty.fromExpression('@cluster_size*2')) self.layer.renderer().setCenterSymbol(new_marker) renderchecker = QgsMultiRenderChecker() renderchecker.setMapSettings(self.mapsettings) diff --git a/tests/src/python/test_qgssymbolexpressionvariables.py b/tests/src/python/test_qgssymbolexpressionvariables.py index 780889906b7..9beb9b07c0b 100644 --- a/tests/src/python/test_qgssymbolexpressionvariables.py +++ b/tests/src/python/test_qgssymbolexpressionvariables.py @@ -37,7 +37,8 @@ from qgis.core import ( QgsSingleSymbolRenderer, QgsFillSymbol, QgsRenderContext, - QgsDataDefined + QgsProperty, + QgsSymbolLayer ) from qgis.testing import unittest, start_app @@ -71,7 +72,7 @@ class TestQgsSymbolExpressionVariables(unittest.TestCase): sym1 = QgsFillSymbol.createSimple({'color': '#fdbf6f'}) renderer = QgsSingleSymbolRenderer(sym1) - renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty('color', QgsDataDefined('color_rgb( (@geometry_part_num - 1) * 200, 0, 0 )')) + renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty(QgsSymbolLayer.PropertyFillColor, QgsProperty.fromExpression('color_rgb( (@geometry_part_num - 1) * 200, 0, 0 )')) self.layer.setRenderer(renderer) # Setup rendering check @@ -87,7 +88,7 @@ class TestQgsSymbolExpressionVariables(unittest.TestCase): sym1 = QgsFillSymbol.createSimple({'color': '#fdbf6f'}) renderer = QgsSingleSymbolRenderer(sym1) - renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty('color', QgsDataDefined('color_rgb( (@geometry_part_count - 1) * 200, 0, 0 )')) + renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty(QgsSymbolLayer.PropertyFillColor, QgsProperty.fromExpression('color_rgb( (@geometry_part_count - 1) * 200, 0, 0 )')) self.layer.setRenderer(renderer) # Setup rendering check @@ -103,7 +104,7 @@ class TestQgsSymbolExpressionVariables(unittest.TestCase): sym1 = QgsFillSymbol.createSimple({'color': '#ff0000'}) renderer = QgsSingleSymbolRenderer(sym1) - renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty('color', QgsDataDefined('set_color_part( @symbol_color, \'value\', "Value" * 4)')) + renderer.symbols(QgsRenderContext())[0].symbolLayers()[0].setDataDefinedProperty(QgsSymbolLayer.PropertyFillColor, QgsProperty.fromExpression('set_color_part( @symbol_color, \'value\', "Value" * 4)')) self.layer.setRenderer(renderer) # Setup rendering check diff --git a/tests/src/python/test_qgssymbollayer.py b/tests/src/python/test_qgssymbollayer.py index 45d07e13c80..3bf3e0ad597 100644 --- a/tests/src/python/test_qgssymbollayer.py +++ b/tests/src/python/test_qgssymbollayer.py @@ -70,7 +70,7 @@ from qgis.core import (QgsCentroidFillSymbolLayer, QgsProject, QgsMultiRenderChecker, QgsSingleSymbolRenderer, - QgsDataDefined + QgsProperty ) from qgis.testing import start_app, unittest from utilities import unitTestDataPath @@ -408,7 +408,7 @@ class TestQgsSymbolLayer(unittest.TestCase): QgsProject.instance().addMapLayer(polys_layer) layer = QgsSimpleFillSymbolLayer() - layer.setDataDefinedProperty("enabled", QgsDataDefined("Name='Lake'")) + layer.setDataDefinedProperty(QgsSymbolLayer.PropertyLayerEnabled, QgsProperty.fromExpression("Name='Lake'")) layer.setBorderStyle(Qt.NoPen) layer.setColor(QColor(100, 150, 150)) @@ -473,7 +473,7 @@ class TestQgsSymbolLayer(unittest.TestCase): QgsProject.instance().addMapLayer(lines_layer) layer = QgsSimpleLineSymbolLayer() - layer.setDataDefinedProperty("enabled", QgsDataDefined("Name='Highway'")) + layer.setDataDefinedProperty(QgsSymbolLayer.PropertyLayerEnabled, QgsProperty.fromExpression("Name='Highway'")) layer.setColor(QColor(100, 150, 150)) layer.setWidth(5) @@ -536,7 +536,7 @@ class TestQgsSymbolLayer(unittest.TestCase): QgsProject.instance().addMapLayer(points_layer) layer = QgsSimpleMarkerSymbolLayer() - layer.setDataDefinedProperty("enabled", QgsDataDefined("Class='Biplane'")) + layer.setDataDefinedProperty(QgsSymbolLayer.PropertyLayerEnabled, QgsProperty.fromExpression("Class='Biplane'")) layer.setColor(QColor(100, 150, 150)) layer.setSize(5) layer.setOutlineStyle(Qt.NoPen)