From 771b03348ff386e44efffdb35e625a70f8d198f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Carrillo?= Date: Mon, 30 Sep 2024 10:07:39 -0500 Subject: [PATCH 01/43] [core] Fix restoring projects using stacked bar diagrams --- python/PyQt6/core/auto_generated/diagram/qgsdiagram.sip.in | 4 ++-- python/core/auto_generated/diagram/qgsdiagram.sip.in | 4 ++-- src/core/diagram/qgsdiagram.h | 4 ++-- src/core/diagram/qgsstackedbardiagram.cpp | 2 +- src/core/diagram/qgsstackeddiagram.cpp | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/python/PyQt6/core/auto_generated/diagram/qgsdiagram.sip.in b/python/PyQt6/core/auto_generated/diagram/qgsdiagram.sip.in index 3198a5e9ef4d..39ba28e4a10c 100644 --- a/python/PyQt6/core/auto_generated/diagram/qgsdiagram.sip.in +++ b/python/PyQt6/core/auto_generated/diagram/qgsdiagram.sip.in @@ -27,9 +27,9 @@ Base class for all diagram types. sipType = sipType_QgsHistogramDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Text" ) ) sipType = sipType_QgsTextDiagram; - else if ( sipCpp->diagramName() == QLatin1String( "StackedBar" ) ) - sipType = sipType_QgsStackedBarDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Stacked" ) ) + sipType = sipType_QgsStackedBarDiagram; + else if ( sipCpp->diagramName() == QLatin1String( "StackedDiagram" ) ) sipType = sipType_QgsStackedDiagram; else sipType = NULL; diff --git a/python/core/auto_generated/diagram/qgsdiagram.sip.in b/python/core/auto_generated/diagram/qgsdiagram.sip.in index 3198a5e9ef4d..39ba28e4a10c 100644 --- a/python/core/auto_generated/diagram/qgsdiagram.sip.in +++ b/python/core/auto_generated/diagram/qgsdiagram.sip.in @@ -27,9 +27,9 @@ Base class for all diagram types. sipType = sipType_QgsHistogramDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Text" ) ) sipType = sipType_QgsTextDiagram; - else if ( sipCpp->diagramName() == QLatin1String( "StackedBar" ) ) - sipType = sipType_QgsStackedBarDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Stacked" ) ) + sipType = sipType_QgsStackedBarDiagram; + else if ( sipCpp->diagramName() == QLatin1String( "StackedDiagram" ) ) sipType = sipType_QgsStackedDiagram; else sipType = NULL; diff --git a/src/core/diagram/qgsdiagram.h b/src/core/diagram/qgsdiagram.h index 8d5f3dd57c2d..5c9df65f31f9 100644 --- a/src/core/diagram/qgsdiagram.h +++ b/src/core/diagram/qgsdiagram.h @@ -48,9 +48,9 @@ class CORE_EXPORT QgsDiagram SIP_NODEFAULTCTORS sipType = sipType_QgsHistogramDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Text" ) ) sipType = sipType_QgsTextDiagram; - else if ( sipCpp->diagramName() == QLatin1String( "StackedBar" ) ) - sipType = sipType_QgsStackedBarDiagram; else if ( sipCpp->diagramName() == QLatin1String( "Stacked" ) ) + sipType = sipType_QgsStackedBarDiagram; + else if ( sipCpp->diagramName() == QLatin1String( "StackedDiagram" ) ) sipType = sipType_QgsStackedDiagram; else sipType = NULL; diff --git a/src/core/diagram/qgsstackedbardiagram.cpp b/src/core/diagram/qgsstackedbardiagram.cpp index 5b8acd864db2..2c65d7b7da7d 100644 --- a/src/core/diagram/qgsstackedbardiagram.cpp +++ b/src/core/diagram/qgsstackedbardiagram.cpp @@ -22,7 +22,7 @@ #include -const QString QgsStackedBarDiagram::DIAGRAM_NAME_STACKED_BAR = QStringLiteral( "StackedBar" ); +const QString QgsStackedBarDiagram::DIAGRAM_NAME_STACKED_BAR = QStringLiteral( "Stacked" ); QgsStackedBarDiagram::QgsStackedBarDiagram() { diff --git a/src/core/diagram/qgsstackeddiagram.cpp b/src/core/diagram/qgsstackeddiagram.cpp index fb64b61bc1df..2f96537c15f5 100644 --- a/src/core/diagram/qgsstackeddiagram.cpp +++ b/src/core/diagram/qgsstackeddiagram.cpp @@ -16,7 +16,7 @@ #include "qgsdiagramrenderer.h" #include "qgsrendercontext.h" -const QString QgsStackedDiagram::DIAGRAM_NAME_STACKED = QStringLiteral( "Stacked" ); +const QString QgsStackedDiagram::DIAGRAM_NAME_STACKED = QStringLiteral( "StackedDiagram" ); QgsStackedDiagram::QgsStackedDiagram() { From b144272277547e9ed7fa2149b3f31dfff182f2f1 Mon Sep 17 00:00:00 2001 From: Harrissou Sant-anna Date: Mon, 30 Sep 2024 17:31:12 +0200 Subject: [PATCH 02/43] Fix buttons tab order and vertical expansion --- src/ui/qgssensorthingssubseteditorbase.ui | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/ui/qgssensorthingssubseteditorbase.ui b/src/ui/qgssensorthingssubseteditorbase.ui index 2c1987ea7995..4dd9fa80d2cc 100644 --- a/src/ui/qgssensorthingssubseteditorbase.ui +++ b/src/ui/qgssensorthingssubseteditorbase.ui @@ -235,6 +235,19 @@ p, li { white-space: pre-wrap; } + + + + Qt::Vertical + + + + 20 + 0 + + + + @@ -248,6 +261,25 @@ p, li { white-space: pre-wrap; } 1 + + lstFields + groupBox4 + mButtonEq + mButtonNe + mButtonGt + mButtonGe + mButtonLt + mButtonLe + mButtonAnd + mButtonOr + mButtonNot + mButtonNow + mButtonAdd + mButtonSub + mButtonMul + mButtonDiv + mButtonMod + From 4800c7717b91af5994dec12e72a0c9566785e2a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Carrillo?= Date: Mon, 30 Sep 2024 08:55:22 -0500 Subject: [PATCH 03/43] [gui] Add icon for Stacked Diagrams --- images/images.qrc | 1 + images/themes/default/stacked-diagram.svg | 1 + src/gui/vector/qgsdiagramwidget.cpp | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 images/themes/default/stacked-diagram.svg diff --git a/images/images.qrc b/images/images.qrc index fe20fe0a5868..117010e8d713 100644 --- a/images/images.qrc +++ b/images/images.qrc @@ -1008,6 +1008,7 @@ themes/default/mIconCloud.svg themes/default/mActionTextInsideRect.svg themes/default/mIconLabelingRules.svg + themes/default/stacked-diagram.svg qgis_tips/symbol_levels.png diff --git a/images/themes/default/stacked-diagram.svg b/images/themes/default/stacked-diagram.svg new file mode 100644 index 000000000000..117ab3be2de0 --- /dev/null +++ b/images/themes/default/stacked-diagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/gui/vector/qgsdiagramwidget.cpp b/src/gui/vector/qgsdiagramwidget.cpp index 4cb0bc72ff03..473852a0b214 100644 --- a/src/gui/vector/qgsdiagramwidget.cpp +++ b/src/gui/vector/qgsdiagramwidget.cpp @@ -48,7 +48,7 @@ QgsDiagramWidget::QgsDiagramWidget( QgsVectorLayer *layer, QgsMapCanvas *canvas, mDiagramTypeComboBox->addItem( QgsApplication::getThemeIcon( QStringLiteral( "text.svg" ) ), tr( "Text Diagram" ), ModeText ); mDiagramTypeComboBox->addItem( QgsApplication::getThemeIcon( QStringLiteral( "histogram.svg" ) ), tr( "Histogram" ), ModeHistogram ); mDiagramTypeComboBox->addItem( QgsApplication::getThemeIcon( QStringLiteral( "stacked-bar.svg" ) ), tr( "Stacked Bars" ), ModeStackedBar ); - mDiagramTypeComboBox->addItem( QgsApplication::getThemeIcon( QStringLiteral( "diagramNone.svg" ) ), tr( "Stacked Diagram" ), ModeStacked ); + mDiagramTypeComboBox->addItem( QgsApplication::getThemeIcon( QStringLiteral( "stacked-diagram.svg" ) ), tr( "Stacked Diagram" ), ModeStacked ); connect( mEngineSettingsButton, &QAbstractButton::clicked, this, &QgsDiagramWidget::showEngineConfigDialog ); From 1fd614b0ef3d7d1d5cf3daaa7ad7e33b39444dae Mon Sep 17 00:00:00 2001 From: Florian Neukirchen Date: Fri, 27 Sep 2024 15:36:43 +0200 Subject: [PATCH 04/43] Fix AttributeError: module 'plotly.graph_objs' has no attribute 'Area': it is go.Barplot in recent plotly versions --- python/plugins/processing/algs/qgis/PolarPlot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/plugins/processing/algs/qgis/PolarPlot.py b/python/plugins/processing/algs/qgis/PolarPlot.py index a2e2100488a2..33bb9db0353d 100644 --- a/python/plugins/processing/algs/qgis/PolarPlot.py +++ b/python/plugins/processing/algs/qgis/PolarPlot.py @@ -89,8 +89,9 @@ def processAlgorithm(self, parameters, context, feedback): values = vector.values(source, valuefieldname) - data = [go.Area(r=values[valuefieldname], - t=np.degrees(np.arange(0.0, 2 * np.pi, 2 * np.pi / len(values[valuefieldname]))))] + data = [go.Barpolar(r=values[valuefieldname], + theta=np.degrees(np.arange(0.0, 2 * np.pi, 2 * np.pi / len(values[valuefieldname]))))] + plt.offline.plot(data, filename=output, auto_open=False) return {self.OUTPUT: output} From b8ca25da95937a51fa4f1a6e041ec8aae4981ef1 Mon Sep 17 00:00:00 2001 From: Florian Neukirchen Date: Fri, 27 Sep 2024 15:41:22 +0200 Subject: [PATCH 05/43] value field must be numeric --- python/plugins/processing/algs/qgis/PolarPlot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/plugins/processing/algs/qgis/PolarPlot.py b/python/plugins/processing/algs/qgis/PolarPlot.py index 33bb9db0353d..2d89b08540c7 100644 --- a/python/plugins/processing/algs/qgis/PolarPlot.py +++ b/python/plugins/processing/algs/qgis/PolarPlot.py @@ -52,7 +52,9 @@ def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterField(self.NAME_FIELD, self.tr('Category name field'), parentLayerParameterName=self.INPUT)) # FIXME unused? self.addParameter(QgsProcessingParameterField(self.VALUE_FIELD, - self.tr('Value field'), parentLayerParameterName=self.INPUT)) + self.tr('Value field'), + parentLayerParameterName=self.INPUT, + type=QgsProcessingParameterField.DataType.Numeric)) self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Polar plot'), self.tr('HTML files (*.html)'))) From dd4f71c1f3b9e3251b748bb25f1df31d57b59112 Mon Sep 17 00:00:00 2001 From: Florian Neukirchen Date: Mon, 30 Sep 2024 09:09:15 +0200 Subject: [PATCH 06/43] Fix indentation --- python/plugins/processing/algs/qgis/PolarPlot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/plugins/processing/algs/qgis/PolarPlot.py b/python/plugins/processing/algs/qgis/PolarPlot.py index 2d89b08540c7..07fa5e5e55ee 100644 --- a/python/plugins/processing/algs/qgis/PolarPlot.py +++ b/python/plugins/processing/algs/qgis/PolarPlot.py @@ -92,7 +92,7 @@ def processAlgorithm(self, parameters, context, feedback): values = vector.values(source, valuefieldname) data = [go.Barpolar(r=values[valuefieldname], - theta=np.degrees(np.arange(0.0, 2 * np.pi, 2 * np.pi / len(values[valuefieldname]))))] + theta=np.degrees(np.arange(0.0, 2 * np.pi, 2 * np.pi / len(values[valuefieldname]))))] plt.offline.plot(data, filename=output, auto_open=False) From 671e976a42105efeab9fe7e48cec9fd0cbbcece1 Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 29 Sep 2024 16:20:53 +0930 Subject: [PATCH 07/43] Fix issue whereby toggling the 'Move selected to top' action in the attribute table dialog breaks the current sort column and sort order due to the column and order being hard-coded to 0 and Qt::AscendingOrder respectively. --- src/gui/attributetable/qgsattributetablefiltermodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/attributetable/qgsattributetablefiltermodel.cpp b/src/gui/attributetable/qgsattributetablefiltermodel.cpp index 4e479356914f..b39914699dcc 100644 --- a/src/gui/attributetable/qgsattributetablefiltermodel.cpp +++ b/src/gui/attributetable/qgsattributetablefiltermodel.cpp @@ -281,7 +281,7 @@ void QgsAttributeTableFilterModel::setSelectedOnTop( bool selectedOnTop ) if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder ) order = Qt::AscendingOrder; - sort( 0, Qt::AscendingOrder ); + sort( column, order ); invalidate(); } } From b9ad6ac3c8dfd1b30f70c97e78f5057e32f9c404 Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 30 Sep 2024 20:25:09 +0930 Subject: [PATCH 08/43] Update unit tests --- tests/src/app/testqgsattributetable.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/src/app/testqgsattributetable.cpp b/tests/src/app/testqgsattributetable.cpp index b595a42fb788..b7f1095bb49f 100644 --- a/tests/src/app/testqgsattributetable.cpp +++ b/tests/src/app/testqgsattributetable.cpp @@ -398,6 +398,19 @@ void TestQgsAttributeTable::testSelectedOnTop() QCOMPARE( dlg->mMainView->mFilterModel->index( 1, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 1 ) ); QCOMPARE( dlg->mMainView->mFilterModel->index( 2, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 2 ) ); + dlg->mMainView->setSelectedOnTop( false ); + dlg->mMainView->tableView()->sortByColumn( 1, Qt::DescendingOrder ); + + QCOMPARE( dlg->mMainView->mFilterModel->index( 0, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 3 ) ); + QCOMPARE( dlg->mMainView->mFilterModel->index( 1, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 1 ) ); + QCOMPARE( dlg->mMainView->mFilterModel->index( 2, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 2 ) ); + + tempLayer->selectByIds( QgsFeatureIds() << 2 ); + dlg->mMainView->setSelectedOnTop( true ); + + QCOMPARE( dlg->mMainView->mFilterModel->index( 0, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 2 ) ); + QCOMPARE( dlg->mMainView->mFilterModel->index( 1, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 3 ) ); + QCOMPARE( dlg->mMainView->mFilterModel->index( 2, 0 ).data( static_cast< int >( QgsAttributeTableModel::CustomRole::FeatureId ) ), QVariant( 1 ) ); } void TestQgsAttributeTable::testSortByDisplayExpression() From b31dc5af3bda06d706bb1f1b744359ae547456cd Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Thu, 19 Sep 2024 09:43:46 +0200 Subject: [PATCH 09/43] fix(LayoutLegend): Correctly fix position while painting While painting, it happens that other code can modify current item position, but this new position will be really used on the new draw, not the current one. So we have to backup it early enough (at the very beginning of paint) so we can translate to this new position at the end of the paint method. Fixes #37566 (Again) --- src/core/layout/qgslayoutitemlegend.cpp | 4 ++-- tests/src/python/test_qgslayoutlegend.py | 13 +++++++++++++ ..._composer_legend_reference_point_newsize.png | Bin 0 -> 13222 bytes 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/testdata/control_images/composer_legend/expected_composer_legend_reference_point_newsize/expected_composer_legend_reference_point_newsize.png diff --git a/src/core/layout/qgslayoutitemlegend.cpp b/src/core/layout/qgslayoutitemlegend.cpp index 3c2803e2f653..eb5a0c6b224c 100644 --- a/src/core/layout/qgslayoutitemlegend.cpp +++ b/src/core/layout/qgslayoutitemlegend.cpp @@ -106,6 +106,8 @@ void QgsLayoutItemLegend::paint( QPainter *painter, const QStyleOptionGraphicsIt if ( !painter ) return; + const QPointF oldPos = pos(); + ensureModelIsInitialized(); if ( mFilterAskedForUpdate ) @@ -157,8 +159,6 @@ void QgsLayoutItemLegend::paint( QPainter *painter, const QStyleOptionGraphicsIt QgsLegendRenderer legendRenderer = createRenderer(); legendRenderer.setLegendSize( mForceResize && mSizeToContents ? QSize() : rect().size() ); - const QPointF oldPos = pos(); - //adjust box if width or height is too small if ( mSizeToContents ) { diff --git a/tests/src/python/test_qgslayoutlegend.py b/tests/src/python/test_qgslayoutlegend.py index 1ab07f27c2a6..953fa8742b05 100644 --- a/tests/src/python/test_qgslayoutlegend.py +++ b/tests/src/python/test_qgslayoutlegend.py @@ -1098,6 +1098,19 @@ def testReferencePoint(self): ) ) + # re-render with filtering to trigger mapHitTest which ends up by calling adjustBoxSize(). + # These last change the box size and therefore position (because our reference point is lower left) + # So check that the legend position is according to what we expect (change also marker size + # so we are sure that it's size and position have correcly been updated) + legend.setLegendFilterByMapEnabled(True) + marker_symbol.setSize(10) + + self.assertTrue( + self.render_layout_check( + 'composer_legend_reference_point_newsize', layout + ) + ) + QgsProject.instance().clear() def test_rulebased_child_filter(self): diff --git a/tests/testdata/control_images/composer_legend/expected_composer_legend_reference_point_newsize/expected_composer_legend_reference_point_newsize.png b/tests/testdata/control_images/composer_legend/expected_composer_legend_reference_point_newsize/expected_composer_legend_reference_point_newsize.png new file mode 100644 index 0000000000000000000000000000000000000000..bb15a0192439c11b5b3204167155be447ea2b057 GIT binary patch literal 13222 zcmeHthgVZs*Y{P&GGk#JABRDjO4C6_Lz5a*6e9sQl%9q z^am%W1wNV|oXXyQcGIRG_MP5wT;g2Hz8f>Y-oE(6dguDtO?&t5)|!2IniOR8Y2UBE z|Fv(e$$eL&zjjS;dVKkKyxcLP8#jJjORXi`?^-_A}2=d$gf1m#E#^IMg@J6gJ98Q{!zbkjA5pl~e zhcCWDL`71_LwWaUY>JNm$fws)o<#_e{rK)7rc<1OM-hS~*ZoY-vhE8Ricu}9_T%pS z&^<668{C{XxT5?57S3}{H^TOAcE1HNAT9I_|bzsm)?Gmq-HIjixT{)|4))Xb-+Vr6Mi&>?v zE-EZ!U^e@noWYV){Z@5X?1pXmCDKTwTs-E3lZ7EUuZXrVErm9WGt?C|1P8f(>Fkl6 zQ!_o75L~U`)ZiK|%S$Yu?LQ9_GgE#o#Aarw7PY**Rxy%NE#$qC-^our-D<9kKj`_Xtd`E7a4-LD#b!xk8hoD zSZ%A}Q3R<`B3(3>!yky2O+05sy`wVH@NQ+IXldznu$59-$p9_T3_U5h;2=={@z zYzsPJ*?NGNm=+Q05b_8&%H_1g5z@A5w?w1UR5HB=aBGl|t>o|e?Sk#QZPgqX&t_W` zl?~!q&0}pk^L^Hi+7d{lYdq$@B3bL;Mw$D;HLCOd*7!5L7ImG4PhJ$WxWb%`h|v?O z;_1m+y;Pr+8G2F8lYohWo{Ld-;elLP1o1XeZsQ-S+y@_4O%>KSnP)`k>P;p)#ZvQa zN^=mTWINdyuP0!0O0Bca@@kwiV$p_6+$1S=k0}IkmqgtO()6^7J-Rn@*^4V{FjFt@ zI-0H?=&?HVG3B;IUA>v38`Pb$BTlCvn{<6kyoo|UkZWc* z3g;)DU;#$CO{;d{9X9zlyz!8}z?nbLd-nl?EMCVxHV_U{yW4dFCJ4; zIo@HbuSnBV+o94ew+8ue*7>J`$tqUsP#i<9EeQe?9P0Ny*(qO(!H^?0HvO3r3|&e7&yoPY1cxGahR0iPwfu-WSA?ICxySt#YzT zt-Rj~Z%o0GiOp(72C&*rHY#3Vyu4N_sliw;+35hW+za3Sn?m8D#uq1M%Ij7~`~lwk zGJv0XwXW1egOP7jF?frq0QvY6`}kyxyd(bDR_%fF_%(=;Dokk~R4^l7s^W#;-P}?) z)JI8_y<0L~gUlWw8>=q%vUr`Ar6zy)G3-kv5o8vRx?`nruPr7xP5$nPlg*AfAu0F0t$gP1Q!XjZd4?={N zxD_)rY>LLx(2E9MyQzN&`@A36o<}$96-GoirpZ?rKHYKOmr@4xi9;4OtG|6?OrPhEkLmzEXr!YMP9~=Bc%i;LKM8-(^hY^+`^6EGV z<3Ih;sV9(8&Gi-t=&7LtNe)frb?KUnmNt|5*_#&CR;lRlYagF8H^a)-CeQ9tt4p)A zXif1PX+RfN4BpsLOw+C4HF-!cmIl$X2J6*d5sKCzKmR44b4Eh{enDB&V6@wpPNpR> zTCNGtO0AjqnXqQg(i-DSB|AH4EIq_1sxiywP}KoxpJdib89%oDrljjoj5J~VcDI(t zACU5rZ}C60DMOL0qi!M--(e1w!-dyg&yU6Z`Xb%(Qmdw?8iI_?GxbOr_(Q$kNus4X zs84Tg++4nNrV&;i+n#}JOcXZ5x)SoRnFEpQXlZ0ek#5~eU@gBCRx!U{8$Xr4(<+&f zl>g$?I$Ey zyq7b62TIyrXi>Q&9Q7Z6T5572O(CwON!5*EuSy@|wCuEITV{HklC9~6XHBY?O}8JGO+U0xvG?>kFelkq|qR|la+ZRw@yZ5*COsW`1tnzCvmQ#WzRVG`}-|n_u;1B>AKa8JS+?K+m<1&pFc1UkX&1v2JoZfIi6GQX)KXp=8_%7Vi7{P@JS4K=HC2VaQSZ~P=ZV$n{`>4T)Q1ufBbq|ZM!_*AHS-LeNH+ap)T}z85^E)hyFGk-vt#3Cwb{XG!hDri zxqWkxD`7rc8~0uoFQ4CbAqW$m6{YMbk!yS{k03Td+3 zc#MR>gUxFB29KxGLoR39$q0Q3%~b;lIT;?p_$#-!EAZOlzQGn#fkZRVR(I?u9<3$lF(XsuJNHWSLe&KvIR*fwg+HbYrEg^$0%vR4p9;z?D&dh{swu{ zExn0+PKBFm%d?twfJ!AM%4Vrna8+LfUfJC1V_U>x2XLYK*i)I6v+ZFE^=6fa^Z`XZ zUHLP^s2tLK_LG#@{lmofmPjwj(CK+^8TK1l%VCawY95<40S6# zcqGP`GoFM^d2nsWug68u>==q`SIKA$WB_|1I10W$ zEvx{M98H6JDPtLy_qAKQtwF}tp>lT`h{A%H`$a-G-&#J=l*g#k3jI+N$e3LCY*(;( zdJ3Ijs9NyADXvwWu5pE0${6AL())w8#{&>#vzc<~Gob44rAIUHKXdYQ^_G9l4b&Hf z87_|#L@y}nN%o1Q3>u>@BiB-uLqVR^tXt8v^)9_=kz2XU7mizmYu(OX znvV0Y--_WiD)d}y2>Tj^W5+X70p`|_JKKST_4=fG7IDXir02Rz4(P&-0qNEHxEn3P zarXn(-oknW7FC-A0U8xGN~!y`oeW3c9;uw`=Dc)TnT``v(ZwC)&J7Ns`=5G9|Usv z1G&>2z;2`L0~$>y>H?gT!fm;#ez;WlZ(t5)WK!y=<{C`2pno&&wRN znTg4NU-~jj`ut4)=cQu#K+3Twam9%|c@w)AM4B(|+lSBYV-zLOX*;d+fu|XF;Qtn&G#!*oH0f3h#Q~zA&DNgUry(IVh4RXytsIsqb_M55^e3qoNpDEo4tXhq# zxC=G~(K+E9ud8UJh|p@LJsi1?_g=d@V?FE~S15BO_c5emsxpT6(FvlcJ&-&-qz-Dv z2C{I``KK8F23Z`BYIpV6%j^6$y#vjMQUe(U2J2xQ_c*NX;0@vO6o>{0 zMbDL->cOq08`~mkg~L6fukT~OT_(0fC|iEHf5ZvpiiKjNC>TYn|6@UnRE(lr&Saan zcIJvL3lrK(@(~5M%=G=19u_$wTh9WSppTqh(UfTTp8DT~YmkeEOl6XT3ss5I;|gj- zpzkGGrY!Su3xnBSj|0=ggKljhhcBg1wX~Z8`N-S07P;ua9KrP7DU*%K2*nH}c%x%8z;TPLst z4U|Zs7hgrnga`Q40u!{v|FGP2d%K`5u6W^dQ7wVeDzsgToPR*glI!(r?z?7UuDicJ znvroFJ)J(~JUgb-$7+iQE;8;3i)TN%WcLOM+IAD?&u;;Yr8*0(>mEj%8)#N>wHWlt zTD+BQ!5z5pJObLP;Q4VH8a>~iWD$Wn5#8-jzjyrEla=uGUv+kA>}!ze$k&9z^9#At z7LY-m-V!A-a%0EapKh*`Xqj%Hi!Q+qDP>G9i7z@#F1ea$uVo^qBbs-793HkZ10WO- z&?1VD+BnLgEJgeXn*pn=`9`cko^Ki(Ym{@rpBM>6xHD%k{f4TN!vn@7NYq3O*}wm>>=cDH0zP1WKj3d&a)^1=Oq zjK7@5)NZL*O3r%f>iUg6(iyyQpzQpVMRkX{j_@n2z8W+XhONVx;19OazG>g@@MB)t z+;zI>=t_v>+BL}efJVjhSHZHP&}lcm?+NI5FLSl=zTLH(+G*>N^TzPukIe^@Nao-L z3=hfEU;P=Q&x09NP84&BWAv55e%ecV=+Cu@66h8;;Maf}qT z4*B3zfct)+vj(P|aUEGCm~l``+c3T@%Yw^vsn9 zwMz%b){X~@#=*Jx3oZg)_JeAt+-ti7RbGa?c&0+A%gvpB<4?sl;qbvOEhrH6+nQnV zsyb399IU-JAV!vrS+{nf6vYnM_Lg^UhNMR)Jmb!9nhLdES!e(@OR)@l6$zwwVoR5UmL5 zBInYsMPUFe|HyTyYnKmIAD$>&np!fs2PtOPE0W;e3WR6e zC(T&BLkcFq*ms|}#eO2+nuP&Rhg0r&OTt&UUu)oKPG$yR5!eM?)|oR-y1K=~iNF9XQ0faj~)hT%PniR zaU13}`}YTmnF7vlO5$k9)v}L!frZ%z?T-l7aD+Jk5$t7U05b$nW3uX7eKnY8x0$HB zG;!jfYp|?^M2-+K;ZVcU!h^J!`#^AH9B*%n_YGHFx3PPm%?;$M;S%s-@QmBHE4D!&%`7G-^ zVOb{dkJ^k)WFmYu!-rJR+ zUHy7}?HXj{wDKIeC`_qN_%vtWTp3jv_Bm7GiZywRN?0Rtb5O15h zX3VYx(?itDce}tAGD0hm7Tf<)b?tk(<*U5kR#{na7pu!9VC#NTSuo^J21A7d?P>~{ znXf70ZvqagMDCp5rn}EkaE80xdnDNjDw!DeJ~&ddvKKx}E_V*-ZLvkBorA zc+$iKywmlp!GP@nvu!$~GK`81$i+)9cZXyGL+%T4QpPsEy+b~Fgrvfd>)ZeZJzCaE z46Mr;umzGFX>*KGUNblWlT}6hlpt_opt4s@UH~r)DKJvjY?KWalb5!WP%N01Oga$g zc2h9kN`qI8#r8MjoE8|u)3F&CTSj}~HvPjn>4{=oUx!3??;(ZeQPi#N6N(}<%UKTi zGt#}jb!m7XFIHf;h)*%n9ZLD@RVL30C-3z5$w1PV_^ugi*7+S2%3J^vZ*IxX>}wsRPIJF zQ7=Wi&<(^+_5OgFKPA{qPtQ2uz3Zu20x%3q6j8}~EAYbjKo>OCFvieNBsm|9|OuZEM?tGbm-(csZr;9CgFlyWT%u*9& zgBlm6OM?&GZjh&gR^6`PG38#U7I7q6HXBT5_y3SJBtek%2h)op&fy!b z)@XWP2VMN}h!22R#+RBQX`+Z%l=$Fzm#Z zH?o|7{UUau*!SW6G#~>VIbyrTs7{eo88##>m~aG3LjB39E{6{R^Q_Dr7Gh=^8G%t& z!hmE`$pml3F_hnPPtG21+!4M!0i;Q6LXQ!g&l1@s9T!AQ_o$6-oR3U}l!smCP=k}=WCqV2E{8|>n(NA#yr{psMN|0gGncvsD*Nc9|; zh`te&)s03jqi4}*VWWCre>Z!V4?|^rFD0dYC~70aq2s`48cEXOnRv1*SzPriZ*KGj zJ94+11-xF5DP}m}>ZLs_t|X3TH1D)t{WU^6pRD0y$6ep5>0<{z6O8ww0WNuL{TcX6 zXm*YIm5~-ZKMZ$!>s+Hk#awsU-FnZW)vkazT5SX503h>=<8Ysoixd8W;eR}NUejtg zw82yKseZw~zN@hER|`WM2v+GR3+Pi#`v6%3OuY4)(82(Z7JyXj0zt+I?nBVoQ!np3 zi#Og%aqZHbSx+6Ym#_2T0m#h5S|HKChbU=+As-6e6mg@*7*9^aj#Vyu`AYbm;}wn4 zWr_KnGeyEyUvQ0U3_#s_XT_*r`TUl-c`U}3Xj$nqRcu5Cr{9sY26;HwsF>nb?i^Lv zE3GY>6}$ZzSB9{>6Ek-DY1qli8gtZM@_nH)Io>Pzp4kT4cwUC7kNG4fTj>dLE3uXI zdf4e_(?m|?a*;(%a$j5E(j3);iYDd}8;D)R0@84$;nF<22s2;)ZrQTDS2|dhqAoD= zv*3lGcH``eJ&J!vHL;*2XVCGU+<8m#-6WYp+EM8vLJ7?Mj+N7ERV!ZFausnpf(w3r zs8W5}U)257!v0CAq_DyXKAprRDH2S}#wz_q&MfC7cBcLOy)%bS2bmM?$YJ^VC+E?I z1WtkwXU<}1PgYGm(;)y-{^mZU+HXcai$8|`8ebewv`ej46)@iMT$Pp-8)~!T ziTXrNVwmSK^I%I}p-;>Mc8{}&mw`);=V&CII)icV8D3#Oq0&h+ z#HUr0LT}zsVQ-RRQb51MuYyc=H@mrisxMvMH_DZm8fb%+f<2 znSW(Y6~S-p!38t8{=|Nw;%E^5tAM&hRJ2vHB>F029L~@zYTJj@9eM);qjwVLgZpug zL}x5YS>Wd9&sbhkN)29O=2Z2|B~zZKA9bs0B-%d|TK`z{c*&F)x?*0O8c?-%Af@m}yE2VG!4vDn(9K!C>DHe}+)2CdII9%mpVeWvz`!RJR(_ff|gp? z@7WgAbr{$Zbmd^>bPO@pdCob{CvNI|_0m)xD0&)m;Y@H|kpnEp!wNV@lp?u}OLHOC zSNRZh1(z5JV?L&dris61UMu%3HanpbSXa_7QWm8u;!ON3dB^?WUop1$axvDAz+)6{ zjN^=byjZ_gx)PGu-3dv&;NL1hXLHjt^R2YnCrHhe_B@|I{KCtdJDz%F)sUt%L)(+t zjTLC6sht)|!HSGv&#XsO7pM1I0>1|`5&AHOkg5oRb&hRK&87MhrKq>4@zm7jhWs?_ z>4-$T^uAOqCh^RB#VTdrgYtqhcC&pst3A+(>J#kqf&1Dtpo-AXJF23%q*7-pXYMe` z{MrP%1huC^L4fD|fjVGg*mG3yTk-5j>bGB0A3x|zef8&n!Ij#9`!eXdhAr5E)au{} z3A`<@jL}!&?8ixytA1-YNqEQfuSC6l=uB~@RD`#VwarKa0Ap;?<33{_yehA7w`;T| z9})XhAJ8S&l$CmddYPL&&byMuf4yFKy*RlFtP1D(^adjFXmkcM`c)fr^?-OT$a&FW&B-o*9CY%b3X2ye=>UY3&P2khAF4glg z=7A8{nI4Ew52k7L0zV4q^>q{*B+IApZfA+%^93~zE8vj9UA2KA)*Q&9p_oz8VFWq7 zmju$zCR7Y2(4!!-LHv9jEX~nqTUp9^66oN%9x-zCT*88k!A}B|Q1XkLI1}1i&$Hy86@T({;Mzsg*j!fFCKLL;4fi+;nU@aWmcrLx&SdaT)r`0!rG*(v1D@>{3 zL;qvyV7VPADX=k`56-}85!()9adTWe>3i5SL>YhVL|xFZdM0j8dSm#?OhUFsTTrhH zrMu#99Rz9JLn11A7WRBrbA+Q8GGSlyri5{##_ZJY^Bu+!3Ev^Fu9GnK=K4ogMUERV zS%p*8i?rC-G`}-3nyp}+ixcw?eMlNkqFdKpz#FqZLeI8#DGgmZ*G*B|J`f5zSIVtq z#ee@de>)Xe%R~{N-;=F!X%t$D^+D)?or>}J{LocrBsss*V>P#?sNB?JQM@Sm>P6j+ z%l%-N&W_;>F7~+i^Qf&CIu1Ri;9x*(-<(k$u3~Z9?)rn1Fj-*}K3B`?{0|8GQbyrF zM8D>gi3v?7hvm2*&u+8}vPrz)u||$C{!~gUUrk%{U9{l?iSTEu6VN7WsMJS~{+(AW zX6dut_xC`*(W|8GdU#jz5y5mEcu6cTkH6q}#%PA^KT06wE|>&xW<$I71wVE@qb**3 z<*-u&f5bER*4VLDUU&J33YrStF){I7hH8l%&!Lva4#TuF{z-3*h-}w(GY<;=%b})Lh&tLta zNZ9+)ivlKcqD?k`8<1aPk>K~2i94-Z3d&t6tsYa!nNJg&pf@8M49)t|;FkXE)Dh8&nypt`qf^AEbrma%AoUgE zdaeS=RV{3UZ6Usyv(9JfTVzw9I}J_vJ4zlFxEKq9F4)-TtgZ;-%LjCW2gu&#-okjv zf!o_FzP?HGH{T#pDE1pc8T|bAP!$_m|NTLw!2!6L)EP?Va4L&a-&_TIp|H--afSDI z?(EY!27M|b$zVQzRTh=(Tjunt!Qz4oB<&vzC+6umeRv2y9vt1#oBTLBy6foS2Dwz& z@QMx(HNDQ8AKg>V%4mBcc9kExP_x7tGT?)*)A@XRi?r3HSLS-d5`@O-2JJab9cgHR zE&n>2o&@F>P9;1+B5XH7U>d96o~i&&SdQ~qUl6I^d?n~9KKs4(sFR5a9GW34oG7eD zc^38GQ?G4`T=VS!g3jbiSI2Ph%4oo8A^)kYzRsDo$cIGd_BS@JWFdnvJQ(f&UaH5L zRIA&}YaXR!w!XbnvG5sMu#V|ZqZ92=nW8Ycu){eS%+WTK`)^RO>O|qdV{Ls_4@X5F zLgj7;yEj^f*y~Hr6s0|h^ZD59nrNd8y>Q^j3UTbWJ3w#7=y;ug8U=>TItliB>6!RA zXqs)17Zv!nlHFW+Y~h$m&(-=3@-hfAas|xu0vB$nzi?V-WdWO!Chgm@Fik$Z2byY=m4va*mVI92vOwzaGmM5biHL~~7djr?f6uDD-VBtNdCYV2!aIF{bir@YOxN>F)Xuyi|Pi9B1 zUW6jnuCxZW-{1kJS~%2T_e%bvcRM(s7w}+AK7TgTtN7nWN(qBBc~QA@!zxZ|G&Y(S5a?~6CfrMd2FS-YV^0C*C6-A2>S1z|I;zRj(5J_amjtX8)Oc_ NoHREsJbv-|{{wS-=|cbj literal 0 HcmV?d00001 From c6c755b51aa2f82d48b3cb84d63fd56deb238c10 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Thu, 29 Aug 2024 17:55:11 +0200 Subject: [PATCH 10/43] feat(Expression): Add ramp_color_object function Which contrary to ramp_color doesn't return a string representation there is no rgb conversion involved --- .../function_help/json/ramp_color_object | 37 +++++++++++++++++++ src/core/expression/qgsexpressionfunction.cpp | 13 ++++++- tests/src/core/testqgsexpression.cpp | 3 ++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 resources/function_help/json/ramp_color_object diff --git a/resources/function_help/json/ramp_color_object b/resources/function_help/json/ramp_color_object new file mode 100644 index 000000000000..ae35f2a29980 --- /dev/null +++ b/resources/function_help/json/ramp_color_object @@ -0,0 +1,37 @@ +{ + "name": "ramp_color_object", + "type": "function", + "groups": ["Color"], + "description": "Returns a color object from a color ramp. Contrary to ramp_color which returns a color string representation, ramp_color_object returns a color object.", + "variants": [{ + "variant": "Saved ramp variant", + "variant_description": "Returns a color object from a saved ramp", + "arguments": [{ + "arg": "ramp_name", + "description": "the name of the color ramp as a string, for example 'Spectral'" + }, { + "arg": "value", + "description": "the position on the ramp to select the color from as a real number between 0 and 1" + }], + "examples": [{ + "expression": "ramp_color_object('Spectral',0.3)", + "returns": "RGBA: 0.99,0.75,0.45,1.00" + }], + "notes": "The color ramps available vary between QGIS installations. This function may not give the expected results if you move your QGIS project between installations." + }, { + "variant": "Expression-created ramp variant", + "variant_description": "Returns a color object from an expression-created ramp", + "arguments": [{ + "arg": "ramp", + "description": "the color ramp" + }, { + "arg": "value", + "description": "the position on the ramp to select the color from as a real number between 0 and 1" + }], + "examples": [{ + "expression": "ramp_color_object(create_ramp(map(0,color_rgbf(0,0,0),1,color_rgbf(1,0,0))),1)", + "returns": "RGBA: 1.00,0.00,0.00,1.00" + }] + }], + "tags": ["ramp", "color"] +} diff --git a/src/core/expression/qgsexpressionfunction.cpp b/src/core/expression/qgsexpressionfunction.cpp index bb6eaf55a11c..add3c78dd654 100644 --- a/src/core/expression/qgsexpressionfunction.cpp +++ b/src/core/expression/qgsexpressionfunction.cpp @@ -6073,7 +6073,7 @@ static QVariant fncColorRgba( const QVariantList &values, const QgsExpressionCon return QgsSymbolLayerUtils::encodeColor( color ); } -QVariant fcnRampColor( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent, const QgsExpressionNodeFunction * ) +QVariant fcnRampColorObject( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent, const QgsExpressionNodeFunction * ) { QgsGradientColorRamp expRamp; const QgsColorRamp *ramp = nullptr; @@ -6095,7 +6095,13 @@ QVariant fcnRampColor( const QVariantList &values, const QgsExpressionContext *, double value = QgsExpressionUtils::getDoubleValue( values.at( 1 ), parent ); QColor color = ramp->color( value ); - return QgsSymbolLayerUtils::encodeColor( color ); + return color; +} + +QVariant fcnRampColor( const QVariantList &values, const QgsExpressionContext *context, QgsExpression *parent, const QgsExpressionNodeFunction *node ) +{ + QColor color = fcnRampColorObject( values, context, parent, node ).value(); + return color.isValid() ? QgsSymbolLayerUtils::encodeColor( color ) : QVariant(); } static QVariant fcnColorHsl( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent, const QgsExpressionNodeFunction * ) @@ -8572,6 +8578,9 @@ const QList &QgsExpression::Functions() << new QgsStaticExpressionFunction( QStringLiteral( "ramp_color" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "ramp_name" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "value" ) ), fcnRampColor, QStringLiteral( "Color" ) ) + << new QgsStaticExpressionFunction( QStringLiteral( "ramp_color_object" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "ramp_name" ) ) + << QgsExpressionFunction::Parameter( QStringLiteral( "value" ) ), + fcnRampColorObject, QStringLiteral( "Color" ) ) << new QgsStaticExpressionFunction( QStringLiteral( "create_ramp" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "map" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "discrete" ), true, false ), fcnCreateRamp, QStringLiteral( "Color" ) ) diff --git a/tests/src/core/testqgsexpression.cpp b/tests/src/core/testqgsexpression.cpp index a31965615688..641e592c58f8 100644 --- a/tests/src/core/testqgsexpression.cpp +++ b/tests/src/core/testqgsexpression.cpp @@ -1888,6 +1888,9 @@ class TestQgsExpression: public QObject // Color functions QTest::newRow( "ramp color" ) << "ramp_color('Spectral',0.3)" << false << QVariant( "253,190,116,255" ); + QTest::newRow( "ramp color error" ) << "ramp_color('NotExistingRamp',0.3)" << true << QVariant(); + QTest::newRow( "ramp color object" ) << "ramp_color_object('Spectral',0.3)" << false << QVariant( QColor::fromRgbF( 0.994, 0.746, 0.454 ) ); + QTest::newRow( "ramp color object error" ) << "ramp_color_object('NotExistingRamp',0.3)" << true << QVariant(); QTest::newRow( "create ramp color, wrong parameter" ) << "create_ramp(1)" << true << QVariant(); QTest::newRow( "create ramp color, no color" ) << "create_ramp(map())" << true << QVariant(); QTest::newRow( "create ramp color, one color" ) << "ramp_color(create_ramp(map(0,'0,0,0')),0.5)" << false << QVariant( "0,0,0,255" ); From 6c2c9b7750dad35692fba6a4748de67ee6cff878 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Thu, 29 Aug 2024 17:56:38 +0200 Subject: [PATCH 11/43] feat(Expression): Add project_color_object function Which contrary to project_color doesn't return a string representation there is no rgb conversion involved --- .../db_plugins/vlayers/sql_dictionary.py | 2 +- .../function_help/json/project_color_object | 15 ++++++ .../expression/qgsexpressioncontextutils.cpp | 2 +- src/core/project/qgsproject.cpp | 53 +++++++++++++++++-- src/core/project/qgsproject.h | 20 +++++++ src/core/qgsproperty.cpp | 2 +- tests/src/core/testqgsexpressioncontext.cpp | 9 ++++ tests/src/core/testqgsproperty.cpp | 4 ++ 8 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 resources/function_help/json/project_color_object diff --git a/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py b/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py index 26c935b7c0e4..b76e56156ac0 100644 --- a/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py +++ b/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py @@ -130,7 +130,7 @@ "geomFromWKT", "geom_from_gml", "relate", "intersects_bbox", "bbox", "translate", "buffer", "point_on_surface", "reverse", "exterior_ring", "interior_ring_n", "geometry_n", "bounds", "num_points", "num_interior_rings", "num_rings", "num_geometries", "bounds_width", "bounds_height", "is_closed", "convex_hull", "sym_difference", "combine", "_union", "geom_to_wkt", "geomToWKT", - "transform", "uuid", "_uuid", "layer_property", "var", "_specialcol_", "project_color"] + "transform", "uuid", "_uuid", "layer_property", "var", "_specialcol_", "project_color", "project_color_object"] # constants diff --git a/resources/function_help/json/project_color_object b/resources/function_help/json/project_color_object new file mode 100644 index 000000000000..f971ac6c2219 --- /dev/null +++ b/resources/function_help/json/project_color_object @@ -0,0 +1,15 @@ +{ + "name": "project_color_object", + "type": "function", + "groups": ["Color"], + "description": "Returns a color from the project's color scheme. Contrary to project_color which returns a color string representation, project_color_object returns a color object.", + "arguments": [{ + "arg": "name", + "description": "a color name" + }], + "examples": [{ + "expression": "project_color_object('Logo color')", + "returns": "RGBA: 0.08,0.55,0.20,1.00" + }], + "tags": ["scheme", "project", "color"] +} diff --git a/src/core/expression/qgsexpressioncontextutils.cpp b/src/core/expression/qgsexpressioncontextutils.cpp index 89dba92bce95..43b07ae9cfcb 100644 --- a/src/core/expression/qgsexpressioncontextutils.cpp +++ b/src/core/expression/qgsexpressioncontextutils.cpp @@ -954,6 +954,7 @@ QgsExpressionContextScope *QgsExpressionContextUtils::notificationScope( const Q void QgsExpressionContextUtils::registerContextFunctions() { QgsExpression::registerFunction( new GetNamedProjectColor( nullptr ) ); + QgsExpression::registerFunction( new GetNamedProjectColorObject( nullptr ) ); QgsExpression::registerFunction( new GetSensorData( ) ); QgsExpression::registerFunction( new GetLayoutItemVariables( nullptr ) ); QgsExpression::registerFunction( new GetLayoutMapLayerCredits( nullptr ) ); @@ -1430,4 +1431,3 @@ QgsScopedExpressionFunction *LoadLayerFunction::clone() const return new LoadLayerFunction(); } ///@endcond - diff --git a/src/core/project/qgsproject.cpp b/src/core/project/qgsproject.cpp index a24a61ef81eb..b7cb65dbfc16 100644 --- a/src/core/project/qgsproject.cpp +++ b/src/core/project/qgsproject.cpp @@ -2936,6 +2936,7 @@ QgsExpressionContextScope *QgsProject::createExpressionContextScope() const mProjectScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "layers" ), layers, true ) ); mProjectScope->addFunction( QStringLiteral( "project_color" ), new GetNamedProjectColor( this ) ); + mProjectScope->addFunction( QStringLiteral( "project_color_object" ), new GetNamedProjectColorObject( this ) ); return createExpressionContextScope(); } @@ -5320,11 +5321,10 @@ void QgsProject::cleanFunctionsFromProject() } /// @cond PRIVATE -GetNamedProjectColor::GetNamedProjectColor( const QgsProject *project ) - : QgsScopedExpressionFunction( QStringLiteral( "project_color" ), 1, QStringLiteral( "Color" ) ) + +QHash< QString, QColor > loadColorsFromProject( const QgsProject *project ) { - if ( !project ) - return; + QHash< QString, QColor > colors; //build up color list from project. Do this in advance for speed QStringList colorStrings = project->readListEntry( QStringLiteral( "Palette" ), QStringLiteral( "/Colors" ) ); @@ -5342,9 +5342,21 @@ GetNamedProjectColor::GetNamedProjectColor( const QgsProject *project ) label = colorLabels.at( colorIndex ); } - mColors.insert( label.toLower(), color ); + colors.insert( label.toLower(), color ); colorIndex++; } + + return colors; +} + + +GetNamedProjectColor::GetNamedProjectColor( const QgsProject *project ) + : QgsScopedExpressionFunction( QStringLiteral( "project_color" ), 1, QStringLiteral( "Color" ) ) +{ + if ( !project ) + return; + + mColors = loadColorsFromProject( project ); } GetNamedProjectColor::GetNamedProjectColor( const QHash &colors ) @@ -5369,6 +5381,37 @@ QgsScopedExpressionFunction *GetNamedProjectColor::clone() const return new GetNamedProjectColor( mColors ); } +GetNamedProjectColorObject::GetNamedProjectColorObject( const QgsProject *project ) + : QgsScopedExpressionFunction( QStringLiteral( "project_color_object" ), 1, QStringLiteral( "Color" ) ) +{ + if ( !project ) + return; + + mColors = loadColorsFromProject( project ); +} + +GetNamedProjectColorObject::GetNamedProjectColorObject( const QHash &colors ) + : QgsScopedExpressionFunction( QStringLiteral( "project_color_object" ), 1, QStringLiteral( "Color" ) ) + , mColors( colors ) +{ +} + +QVariant GetNamedProjectColorObject::func( const QVariantList &values, const QgsExpressionContext *, QgsExpression *, const QgsExpressionNodeFunction * ) +{ + const QString colorName = values.at( 0 ).toString().toLower(); + if ( mColors.contains( colorName ) ) + { + return mColors.value( colorName ); + } + else + return QVariant(); +} + +QgsScopedExpressionFunction *GetNamedProjectColorObject::clone() const +{ + return new GetNamedProjectColorObject( mColors ); +} + // ---------------- GetSensorData::GetSensorData( const QMap &sensorData ) diff --git a/src/core/project/qgsproject.h b/src/core/project/qgsproject.h index daa688003838..0248d8064d8e 100644 --- a/src/core/project/qgsproject.h +++ b/src/core/project/qgsproject.h @@ -2583,9 +2583,29 @@ class GetNamedProjectColor : public QgsScopedExpressionFunction private: QHash< QString, QColor > mColors; +}; + +class GetNamedProjectColorObject : public QgsScopedExpressionFunction +{ + public: + GetNamedProjectColorObject( const QgsProject *project ); + + /** + * Optimized constructor for GetNamedProjectColor when a list of map is already available + * and does not need to be read from a project. + */ + GetNamedProjectColorObject( const QHash< QString, QColor > &colors ); + QVariant func( const QVariantList &values, const QgsExpressionContext *, QgsExpression *, const QgsExpressionNodeFunction * ) override; + QgsScopedExpressionFunction *clone() const override; + + private: + + QHash< QString, QColor > mColors; }; + + class GetSensorData : public QgsScopedExpressionFunction { public: diff --git a/src/core/qgsproperty.cpp b/src/core/qgsproperty.cpp index 7078790403e4..da85a5c30150 100644 --- a/src/core/qgsproperty.cpp +++ b/src/core/qgsproperty.cpp @@ -505,7 +505,7 @@ QSet QgsProperty::referencedFields( const QgsExpressionContext &context bool QgsProperty::isProjectColor() const { - const thread_local QRegularExpression rx( QStringLiteral( "^project_color\\('.*'\\)$" ) ); + const thread_local QRegularExpression rx( QStringLiteral( "^project_color(_object|)\\('.*'\\)$" ) ); return d->type == Qgis::PropertyType::Expression && !d->expressionString.isEmpty() && rx.match( d->expressionString ).hasMatch(); } diff --git a/tests/src/core/testqgsexpressioncontext.cpp b/tests/src/core/testqgsexpressioncontext.cpp index 9191c3190554..661ae3cdf527 100644 --- a/tests/src/core/testqgsexpressioncontext.cpp +++ b/tests/src/core/testqgsexpressioncontext.cpp @@ -823,6 +823,15 @@ void TestQgsExpressionContext::projectScope() QCOMPARE( expProjectColorCaseInsensitive.evaluate( &contextColors ).toString(), QString( "30,60,20" ) ); QgsExpression badProjectColor( QStringLiteral( "project_color('dusk falls in san juan del sur')" ) ); QCOMPARE( badProjectColor.evaluate( &contextColors ), QVariant() ); + + QgsExpression expProjectColorObject( QStringLiteral( "project_color_object('murky depths of hades')" ) ); + QCOMPARE( expProjectColorObject.evaluate( &contextColors ), QVariant( QColor::fromRgb( 30, 60, 20 ) ) ); + //matching color names should be case insensitive + QgsExpression expProjectColorObjectCaseInsensitive( QStringLiteral( "project_color_object('Murky Depths of hades')" ) ); + QCOMPARE( expProjectColorObjectCaseInsensitive.evaluate( &contextColors ), QVariant( QColor::fromRgb( 30, 60, 20 ) ) ); + QgsExpression badProjectColorObject( QStringLiteral( "project_color_object('dusk falls in san juan del sur')" ) ); + QCOMPARE( badProjectColorObject.evaluate( &contextColors ), QVariant() ); + } void TestQgsExpressionContext::layerScope() diff --git a/tests/src/core/testqgsproperty.cpp b/tests/src/core/testqgsproperty.cpp index 8f6c531a8e0f..1aec57aa930b 100644 --- a/tests/src/core/testqgsproperty.cpp +++ b/tests/src/core/testqgsproperty.cpp @@ -1946,6 +1946,10 @@ void TestQgsProperty::isProjectColor() QVERIFY( p.isProjectColor() ); p = QgsProperty::fromExpression( QStringLiteral( "project_color('burnt pineapple Skin 76')" ), true ); QVERIFY( p.isProjectColor() ); + p = QgsProperty::fromExpression( QStringLiteral( "project_color_object('mine')" ), true ); + QVERIFY( p.isProjectColor() ); + p = QgsProperty::fromExpression( QStringLiteral( "project_color_object('burnt pineapple Skin 76')" ), true ); + QVERIFY( p.isProjectColor() ); p.setActive( false ); QVERIFY( p.isProjectColor() ); } From ea055506836b7f3976b06bd75c7f2adf3f31707c Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Mon, 2 Sep 2024 14:52:03 +0200 Subject: [PATCH 12/43] fix(ColorProject): Don't convert color to RGB on writing --- src/core/qgscolorscheme.cpp | 3 ++- tests/src/core/testqgsexpressioncontext.cpp | 4 +++- tests/src/python/test_qgsproject.py | 19 +++++++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/core/qgscolorscheme.cpp b/src/core/qgscolorscheme.cpp index a382e63a2283..d19a5fc474db 100644 --- a/src/core/qgscolorscheme.cpp +++ b/src/core/qgscolorscheme.cpp @@ -22,6 +22,7 @@ #include "qgssymbollayerutils.h" #include "qgsapplication.h" #include "qgssettings.h" +#include "qgscolorutils.h" #include #include @@ -206,7 +207,7 @@ QgsNamedColorList QgsProjectColorScheme::fetchColors( const QString &context, co for ( QStringList::iterator it = colorStrings.begin(); it != colorStrings.end(); ++it ) { - const QColor color = QgsSymbolLayerUtils::decodeColor( *it ); + const QColor color = QgsColorUtils::colorFromString( *it ); QString label; if ( colorLabels.length() > colorIndex ) { diff --git a/tests/src/core/testqgsexpressioncontext.cpp b/tests/src/core/testqgsexpressioncontext.cpp index 661ae3cdf527..cfa86b5ba944 100644 --- a/tests/src/core/testqgsexpressioncontext.cpp +++ b/tests/src/core/testqgsexpressioncontext.cpp @@ -812,6 +812,7 @@ void TestQgsExpressionContext::projectScope() QgsNamedColorList colorList; colorList << qMakePair( QColor( 200, 255, 0 ), QStringLiteral( "vomit yellow" ) ); colorList << qMakePair( QColor( 30, 60, 20 ), QStringLiteral( "murky depths of hades" ) ); + colorList << qMakePair( QColor::fromCmykF( 1., 0.9, 0.8, 0.7 ), QStringLiteral( "cmyk colors" ) ); s.setColors( colorList ); QgsExpressionContext contextColors; contextColors << QgsExpressionContextUtils::projectScope( QgsProject::instance() ); @@ -829,9 +830,10 @@ void TestQgsExpressionContext::projectScope() //matching color names should be case insensitive QgsExpression expProjectColorObjectCaseInsensitive( QStringLiteral( "project_color_object('Murky Depths of hades')" ) ); QCOMPARE( expProjectColorObjectCaseInsensitive.evaluate( &contextColors ), QVariant( QColor::fromRgb( 30, 60, 20 ) ) ); + QgsExpression expProjectColorCmyk( QStringLiteral( "project_color_object('cmyk colors')" ) ); + QCOMPARE( expProjectColorCmyk.evaluate( &contextColors ), QVariant( QColor::fromCmykF( 1., 0.9, 0.8, 0.7 ) ) ); QgsExpression badProjectColorObject( QStringLiteral( "project_color_object('dusk falls in san juan del sur')" ) ); QCOMPARE( badProjectColorObject.evaluate( &contextColors ), QVariant() ); - } void TestQgsExpressionContext::layerScope() diff --git a/tests/src/python/test_qgsproject.py b/tests/src/python/test_qgsproject.py index b6f1579bddb7..3184a0ccd355 100644 --- a/tests/src/python/test_qgsproject.py +++ b/tests/src/python/test_qgsproject.py @@ -45,7 +45,7 @@ import unittest from qgis.testing import start_app, QgisTestCase -from utilities import unitTestDataPath +from utilities import unitTestDataPath, getTempfilePath app = start_app() TEST_DATA_DIR = unitTestDataPath() @@ -1610,11 +1610,15 @@ def testSelectionColor(self): def testColorScheme(self): p = QgsProject.instance() spy = QSignalSpy(p.projectColorsChanged) - p.setProjectColors([[QColor(255, 0, 0), 'red'], [QColor(0, 255, 0), 'green']]) + p.setProjectColors([[QColor(255, 0, 0), 'red'], [QColor(0, 255, 0), 'green'], [QColor.fromCmykF(1, 0.9, 0.8, 0.7), 'TestCmyk']]) self.assertEqual(len(spy), 1) scheme = [s for s in QgsApplication.colorSchemeRegistry().schemes() if isinstance(s, QgsProjectColorScheme)][0] - self.assertEqual([[c[0].name(), c[1]] for c in scheme.fetchColors()], - [['#ff0000', 'red'], ['#00ff00', 'green']]) + self.assertEqual([[c[0], c[1]] for c in scheme.fetchColors()], + [[QColor(255, 0, 0), 'red'], [QColor(0, 255, 0), 'green'], [QColor.fromCmykF(1, 0.9, 0.8, 0.7), 'TestCmyk']]) + + project_filepath = getTempfilePath("qgs") + p.write(project_filepath) + # except color changed signal when clearing project p.clear() self.assertEqual(len(spy), 2) @@ -1627,6 +1631,13 @@ def testColorScheme(self): del p self.assertEqual(len(spy), 0) + # Test that write/read doesn't convert color to RGB always + p = QgsProject.instance() + p.read(project_filepath) + scheme = [s for s in QgsApplication.colorSchemeRegistry().schemes() if isinstance(s, QgsProjectColorScheme)][0] + self.assertEqual([[c[0], c[1]] for c in scheme.fetchColors()], + [[QColor(255, 0, 0), 'red'], [QColor(0, 255, 0), 'green'], [QColor.fromCmykF(1, 0.9, 0.8, 0.7), 'TestCmyk']]) + def testTransformContextSignalIsEmitted(self): """Test that when a project transform context changes a transformContextChanged signal is emitted""" From b264c34245225fc3bdbcf627cf817add3db27be3 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Mon, 2 Sep 2024 15:44:19 +0200 Subject: [PATCH 13/43] fix(ColorProject): Add new methods in sql_dictionary --- .../plugins/db_manager/db_plugins/vlayers/sql_dictionary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py b/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py index b76e56156ac0..0b177b52ce9e 100644 --- a/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py +++ b/python/plugins/db_manager/db_plugins/vlayers/sql_dictionary.py @@ -123,8 +123,8 @@ "to_string", "tostring", "to_datetime", "todatetime", "to_date", "todate", "to_time", "totime", "to_interval", "tointerval", "regexp_match", "now", "_now", "age", "year", "month", "week", "day", "hour", "minute", "second", "day_of_week", "title", "levenshtein", "longest_common_substring", "hamming_distance", "wordwrap", "regexp_replace", "regexp_substr", "concat", - "strpos", "_left", "_right", "rpad", "lpad", "format", "format_number", "format_date", "color_rgb", "color_rgba", "ramp_color", - "color_hsl", "color_hsla", "color_hsv", "color_hsva", "color_cmyk", "color_cmyka", "color_part", "darker", "lighter", + "strpos", "_left", "_right", "rpad", "lpad", "format", "format_number", "format_date", "color_rgb", "color_rgba", "color_rgbf", "ramp_color", "ramp_color_object", + "color_hsl", "color_hsla", "color_hslf", "color_hsv", "color_hsva", "color_hsvf", "color_cmyk", "color_cmyka", "color_cmykf", "color_part", "darker", "lighter", "set_color_part", "point_n", "start_point", "end_point", "nodes_to_points", "segments_to_lines", "make_point", "make_point_m", "make_line", "make_polygon", "x_min", "xmin", "x_max", "xmax", "y_min", "ymin", "y_max", "ymax", "geom_from_wkt", "geomFromWKT", "geom_from_gml", "relate", "intersects_bbox", "bbox", "translate", "buffer", "point_on_surface", "reverse", From d98b3b753e1978dc65723a405f63e7c50d52e32a Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Mon, 2 Sep 2024 17:13:21 +0200 Subject: [PATCH 14/43] feat(OverrideButton): Support also project_color_object function --- src/gui/qgspropertyoverridebutton.cpp | 27 +++++++++++-------- src/gui/qgspropertyoverridebutton.h | 2 ++ .../python/test_qgspropertyoverridebutton.py | 12 ++++++--- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/gui/qgspropertyoverridebutton.cpp b/src/gui/qgspropertyoverridebutton.cpp index 927780959f42..232a5bda3686 100644 --- a/src/gui/qgspropertyoverridebutton.cpp +++ b/src/gui/qgspropertyoverridebutton.cpp @@ -439,7 +439,7 @@ void QgsPropertyOverrideButton::aboutToShowMenu() QPixmap icon = QgsColorButton::createMenuIcon( color.first, mDefinition.standardTemplate() == QgsPropertyDefinition::ColorWithAlpha ); QAction *act = mColorsMenu->addAction( color.second ); act->setIcon( icon ); - if ( mProperty.propertyType() == Qgis::PropertyType::Expression && hasExp && mExpressionString == QStringLiteral( "project_color('%1')" ).arg( color.second ) ) + if ( mProperty.propertyType() == Qgis::PropertyType::Expression && hasExp && getColor() == color.second ) { act->setCheckable( true ); act->setChecked( true ); @@ -643,9 +643,9 @@ void QgsPropertyOverrideButton::menuActionTriggered( QAction *action ) } else if ( mColorsMenu->actions().contains( action ) ) // a color name clicked { - if ( mExpressionString != QStringLiteral( "project_color('%1')" ).arg( action->text() ) ) + if ( getColor() != action->text() ) { - mExpressionString = QStringLiteral( "project_color('%1')" ).arg( action->text() ); + mExpressionString = QStringLiteral( "project_color_object('%1')" ).arg( action->text() ); } mProperty.setExpressionString( mExpressionString ); mProperty.setTransformer( nullptr ); @@ -769,12 +769,11 @@ void QgsPropertyOverrideButton::updateGui() { icon = mProperty.isActive() ? QgsApplication::getThemeIcon( QStringLiteral( "/mIconDataDefineExpressionOn.svg" ) ) : QgsApplication::getThemeIcon( QStringLiteral( "/mIconDataDefineExpression.svg" ) ); - const thread_local QRegularExpression rx( QStringLiteral( "^project_color\\('(.*)'\\)$" ) ); - QRegularExpressionMatch match = rx.match( mExpressionString ); - if ( match.hasMatch() ) + const QString colorName = getColor(); + if ( !colorName.isEmpty() ) { icon = mProperty.isActive() ? QgsApplication::getThemeIcon( QStringLiteral( "/mIconDataDefineColorOn.svg" ) ) : QgsApplication::getThemeIcon( QStringLiteral( "/mIconDataDefineColor.svg" ) ); - deftip = match.captured( 1 ); + deftip = colorName; deftype = tr( "project color" ); } else @@ -925,11 +924,10 @@ void QgsPropertyOverrideButton::updateSiblingWidgets( bool state ) { if ( state && mProperty.isProjectColor() ) { - const thread_local QRegularExpression rx( QStringLiteral( "^project_color\\('(.*)'\\)$" ) ); - QRegularExpressionMatch match = rx.match( mExpressionString ); - if ( match.hasMatch() ) + const QString colorName = getColor(); + if ( !colorName.isEmpty() ) { - cb->linkToProjectColor( match.captured( 1 ) ); + cb->linkToProjectColor( colorName ); } } else @@ -986,3 +984,10 @@ void QgsPropertyOverrideButton::showHelp() { QgsHelp::openHelp( QStringLiteral( "introduction/general_tools.html#data-defined" ) ); } + +QString QgsPropertyOverrideButton::getColor() const +{ + const thread_local QRegularExpression rx( QStringLiteral( "^project_color(_object|)\\('(.*)'\\)$" ) ); + QRegularExpressionMatch match = rx.match( mExpressionString ); + return match.hasMatch() ? match.captured( 2 ) : QString(); +} diff --git a/src/gui/qgspropertyoverridebutton.h b/src/gui/qgspropertyoverridebutton.h index 30482403d3be..3ef21f18ec32 100644 --- a/src/gui/qgspropertyoverridebutton.h +++ b/src/gui/qgspropertyoverridebutton.h @@ -264,6 +264,8 @@ class GUI_EXPORT QgsPropertyOverrideButton: public QToolButton */ void setActivePrivate( bool active ); + // Returns color name if current expression is a reference to a color + QString getColor() const; int mPropertyKey = -1; diff --git a/tests/src/python/test_qgspropertyoverridebutton.py b/tests/src/python/test_qgspropertyoverridebutton.py index c37b29cadab2..29ce4ae8a8c4 100644 --- a/tests/src/python/test_qgspropertyoverridebutton.py +++ b/tests/src/python/test_qgspropertyoverridebutton.py @@ -51,18 +51,24 @@ def testProjectColor(self): button.menuActionTriggered(color_action.menu().actions()[1]) self.assertTrue(button.toProperty().isActive()) - self.assertEqual(button.toProperty().asExpression(), 'project_color(\'burnt marigold\')') + self.assertEqual(button.toProperty().asExpression(), 'project_color_object(\'burnt marigold\')') button.menuActionTriggered(color_action.menu().actions()[0]) self.assertTrue(button.toProperty().isActive()) - self.assertEqual(button.toProperty().asExpression(), 'project_color(\'color 1\')') + self.assertEqual(button.toProperty().asExpression(), 'project_color_object(\'color 1\')') - button.setToProperty(QgsProperty.fromExpression('project_color(\'burnt marigold\')')) + button.setToProperty(QgsProperty.fromExpression('project_color_object(\'burnt marigold\')')) button.aboutToShowMenu() color_action = [a for a in button.menu().actions() if a.text() == 'Color'][0] self.assertTrue(color_action.isChecked()) self.assertEqual([a.isChecked() for a in color_action.menu().actions()], [False, True]) + button.setToProperty(QgsProperty.fromExpression('project_color(\'color 1\')')) + button.aboutToShowMenu() + color_action = [a for a in button.menu().actions() if a.text() == 'Color'][0] + self.assertTrue(color_action.isChecked()) + self.assertEqual([a.isChecked() for a in color_action.menu().actions()], [True, False]) + # should also see color menu for ColorNoAlpha properties definition = QgsPropertyDefinition('test', 'test', QgsPropertyDefinition.StandardPropertyTemplate.ColorNoAlpha) button = QgsPropertyOverrideButton() From 7c7f24f081f80e45e2e8ed357d1e079ab1439cf9 Mon Sep 17 00:00:00 2001 From: ViperMiniQ Date: Fri, 6 Sep 2024 20:31:36 +0200 Subject: [PATCH 15/43] fix vector digitizing truncating geometry precision decimals --- src/app/qgsvectorlayerdigitizingproperties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/qgsvectorlayerdigitizingproperties.cpp b/src/app/qgsvectorlayerdigitizingproperties.cpp index 610aef331896..dcfc01f4d8ee 100644 --- a/src/app/qgsvectorlayerdigitizingproperties.cpp +++ b/src/app/qgsvectorlayerdigitizingproperties.cpp @@ -44,7 +44,7 @@ QgsVectorLayerDigitizingPropertiesPage::QgsVectorLayerDigitizingPropertiesPage( const double precision( vlayer->geometryOptions()->geometryPrecision() ); const bool ok = true; - QString precisionStr( QLocale().toString( precision, ok ) ); + QString precisionStr( QLocale().toString( precision, 'g', 15 ) ); if ( precision == 0.0 || ! ok ) precisionStr = QString(); mGeometryPrecisionLineEdit->setText( precisionStr ); From 88ad7cb1a0667103584b6201ddb6b13209c32431 Mon Sep 17 00:00:00 2001 From: ViperMiniQ Date: Mon, 9 Sep 2024 18:00:30 +0200 Subject: [PATCH 16/43] remove unnecessary const bool ok --- src/app/qgsvectorlayerdigitizingproperties.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/qgsvectorlayerdigitizingproperties.cpp b/src/app/qgsvectorlayerdigitizingproperties.cpp index dcfc01f4d8ee..3f15ebf3f8cf 100644 --- a/src/app/qgsvectorlayerdigitizingproperties.cpp +++ b/src/app/qgsvectorlayerdigitizingproperties.cpp @@ -43,9 +43,8 @@ QgsVectorLayerDigitizingPropertiesPage::QgsVectorLayerDigitizingPropertiesPage( mGeometryPrecisionLineEdit->setValidator( new QDoubleValidator( mGeometryPrecisionLineEdit ) ); const double precision( vlayer->geometryOptions()->geometryPrecision() ); - const bool ok = true; QString precisionStr( QLocale().toString( precision, 'g', 15 ) ); - if ( precision == 0.0 || ! ok ) + if ( precision == 0.0 ) precisionStr = QString(); mGeometryPrecisionLineEdit->setText( precisionStr ); From b130896143c089e745926e6041e983cdca9aab25 Mon Sep 17 00:00:00 2001 From: Viper MiniQ Date: Mon, 16 Sep 2024 14:47:46 +0200 Subject: [PATCH 17/43] change to 17 decimals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Loïc Bartoletti --- src/app/qgsvectorlayerdigitizingproperties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/qgsvectorlayerdigitizingproperties.cpp b/src/app/qgsvectorlayerdigitizingproperties.cpp index 3f15ebf3f8cf..1c4362424123 100644 --- a/src/app/qgsvectorlayerdigitizingproperties.cpp +++ b/src/app/qgsvectorlayerdigitizingproperties.cpp @@ -43,7 +43,7 @@ QgsVectorLayerDigitizingPropertiesPage::QgsVectorLayerDigitizingPropertiesPage( mGeometryPrecisionLineEdit->setValidator( new QDoubleValidator( mGeometryPrecisionLineEdit ) ); const double precision( vlayer->geometryOptions()->geometryPrecision() ); - QString precisionStr( QLocale().toString( precision, 'g', 15 ) ); + QString precisionStr( QLocale().toString( precision, 'g', 17 ) ); if ( precision == 0.0 ) precisionStr = QString(); mGeometryPrecisionLineEdit->setText( precisionStr ); From 8f7dad4906c7909d023451704290ea0790b427f1 Mon Sep 17 00:00:00 2001 From: Juho Ervasti Date: Fri, 27 Sep 2024 12:23:32 +0300 Subject: [PATCH 18/43] Vertex tool: Test topopoints with multiple layers --- tests/src/app/testqgsvertextool.cpp | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/src/app/testqgsvertextool.cpp b/tests/src/app/testqgsvertextool.cpp index cd3a2cfbfabe..dfaa08146f3e 100644 --- a/tests/src/app/testqgsvertextool.cpp +++ b/tests/src/app/testqgsvertextool.cpp @@ -87,6 +87,7 @@ class TestQgsVertexTool : public QObject void testAddVertexTopo(); void testMoveEdgeTopo(); void testAddVertexTopoFirstSegment(); + void testAddVertexTopoMultipleLayers(); void testAvoidIntersectionsWithMultiPolygons(); void testActiveLayerPriority(); void testSelectedFeaturesPriority(); @@ -1182,6 +1183,63 @@ void TestQgsVertexTool::testAddVertexTopoFirstSegment() QgsProject::instance()->setTopologicalEditing( false ); } +void TestQgsVertexTool::testAddVertexTopoMultipleLayers() +{ + // check that when adding a vertex to a segment which is shared by more than one layer + // a topological point is added to all editable layers + + QgsFeature fTmp; + fTmp.setGeometry( QgsGeometry::fromWkt( "POLYGON((1 8, 0 8, 0 5, 1 5, 1 8))" ) ); + const bool resAdd = mLayerPolygon->addFeature( fTmp ); + QVERIFY( resAdd ); + const QgsFeatureId fTmpId = fTmp.id(); + + const bool topologicalEditing = QgsProject::instance()->topologicalEditing(); + QgsProject::instance()->setTopologicalEditing( true ); + QgsSnappingConfig cfg = mCanvas->snappingUtils()->config(); + cfg.setMode( Qgis::SnappingMode::AllLayers ); + cfg.setTolerance( 10 ); + cfg.setTypeFlag( static_cast( Qgis::SnappingType::Vertex | Qgis::SnappingType::Segment ) ); + cfg.setEnabled( true ); + mCanvas->snappingUtils()->setConfig( cfg ); + + QCOMPARE( mLayerPolygon->undoStack()->index(), 2 ); + QCOMPARE( mLayerLine->undoStack()->index(), 1 ); + QCOMPARE( mLayerMultiPolygon->undoStack()->index(), 1 ); + + mouseClick( 1, 3, Qt::LeftButton, Qt::KeyboardModifiers(), true ); + mouseClick( 1, 6, Qt::LeftButton, Qt::KeyboardModifiers(), true ); + + QCOMPARE( mLayerPolygon->undoStack()->index(), 3 ); + QCOMPARE( mLayerLine->undoStack()->index(), 2 ); + QCOMPARE( mLayerMultiPolygon->undoStack()->index(), 2 ); + + QCOMPARE( mLayerPolygon->getFeature( fTmpId ).geometry().asWkt( 2 ), QStringLiteral( "Polygon ((1 8, 0 8, 0 5, 1 5, 1 6, 1 8))" ) ); + QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry().asWkt( 2 ), QStringLiteral( "LineString (2 1, 1 1, 1 6)" ) ); + QCOMPARE( mLayerMultiPolygon->getFeature( mFidMultiPolygonF1 ).geometry().asWkt( 2 ), QStringLiteral( "MultiPolygon (((1 5, 2 5, 2 6.5, 2 8, 1 8, 1 6.5, 1 6, 1 5),(1.25 5.5, 1.25 6, 1.75 6, 1.75 5.5, 1.25 5.5),(1.25 7, 1.75 7, 1.75 7.5, 1.25 7.5, 1.25 7)),((3 5, 3 6.5, 3 8, 4 8, 4 6.5, 4 5, 3 5),(3.25 5.5, 3.75 5.5, 3.75 6, 3.25 6, 3.25 5.5),(3.25 7, 3.75 7, 3.75 7.5, 3.25 7.5, 3.25 7)))" ) ); + + mLayerPolygon->undoStack()->undo(); + mLayerLine->undoStack()->undo(); + mLayerMultiPolygon->undoStack()->undo(); + + QCOMPARE( mLayerPolygon->undoStack()->index(), 2 ); + QCOMPARE( mLayerLine->undoStack()->index(), 1 ); + QCOMPARE( mLayerMultiPolygon->undoStack()->index(), 1 ); + + QCOMPARE( mLayerPolygon->getFeature( fTmpId ).geometry().asWkt( 2 ), QStringLiteral( "Polygon ((1 8, 0 8, 0 5, 1 5, 1 8))" ) ); + QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry().asWkt( 2 ), QStringLiteral( "LineString (2 1, 1 1, 1 3)" ) ); + QCOMPARE( mLayerMultiPolygon->getFeature( mFidMultiPolygonF1 ).geometry().asWkt( 2 ), QStringLiteral( "MultiPolygon (((1 5, 2 5, 2 6.5, 2 8, 1 8, 1 6.5, 1 5),(1.25 5.5, 1.25 6, 1.75 6, 1.75 5.5, 1.25 5.5),(1.25 7, 1.75 7, 1.75 7.5, 1.25 7.5, 1.25 7)),((3 5, 3 6.5, 3 8, 4 8, 4 6.5, 4 5, 3 5),(3.25 5.5, 3.75 5.5, 3.75 6, 3.25 6, 3.25 5.5),(3.25 7, 3.75 7, 3.75 7.5, 3.25 7.5, 3.25 7)))" ) ); + + // undo to remove temp feature + mLayerPolygon->undoStack()->undo(); + + QCOMPARE( mLayerPolygon->undoStack()->index(), 1 ); + + QgsProject::instance()->setTopologicalEditing( topologicalEditing ); + cfg.setEnabled( false ); + mCanvas->snappingUtils()->setConfig( cfg ); +} + void TestQgsVertexTool::testAvoidIntersections() { // There is one feature in the layer From 48ae8e282bf6c2858a4d02f012ad55e8967a7e3b Mon Sep 17 00:00:00 2001 From: Juho Ervasti Date: Mon, 30 Sep 2024 16:44:56 +0300 Subject: [PATCH 19/43] Vertex tool: add topopoints to all editable layers --- src/app/vertextool/qgsvertextool.cpp | 31 +++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/app/vertextool/qgsvertextool.cpp b/src/app/vertextool/qgsvertextool.cpp index aff531ec1444..a8208b90bf3a 100644 --- a/src/app/vertextool/qgsvertextool.cpp +++ b/src/app/vertextool/qgsvertextool.cpp @@ -2258,19 +2258,28 @@ void QgsVertexTool::moveVertex( const QgsPointXY &mapPoint, const QgsPointLocato { // topo editing: add vertex to existing segments when moving/adding a vertex to such segment. - // compute layers we have to add topological point on (modified ones + snapped one) - QSet targetLayers( edits.keyBegin(), edits.keyEnd() ); - if ( mapPointMatch->layer() ) - targetLayers << mapPointMatch->layer(); + const QList targetLayers = canvas()->layers( true ); for ( auto itLayerEdits = edits.begin(); itLayerEdits != edits.end(); ++itLayerEdits ) { - for ( QgsVectorLayer *targetLayer : targetLayers ) + for ( QgsMapLayer *targetLayer : targetLayers ) { + QgsVectorLayer *vectorLayer = qobject_cast( targetLayer ); + + if ( !vectorLayer || !vectorLayer->isEditable() ) + continue; + + if ( !( vectorLayer->geometryType() == Qgis::GeometryType::Polygon || vectorLayer->geometryType() == Qgis::GeometryType::Line ) ) + continue; + // layer's CRS need to be the the same (otherwise we would need to reproject the point and it will not be coincident) - if ( targetLayer->crs() != itLayerEdits.key()->crs() ) + if ( vectorLayer->crs() != itLayerEdits.key()->crs() ) continue; + vectorLayer->beginEditCommand( tr( "Topological points added by 'Vertex Tool'" ) ); + + bool topoPointsAdded = false; + for ( auto itFeatEdit = itLayerEdits->begin(); itFeatEdit != itLayerEdits->end(); ++itFeatEdit ) { for ( QgsPoint point : itFeatEdit->newPoints ) @@ -2278,9 +2287,17 @@ void QgsVertexTool::moveVertex( const QgsPointXY &mapPoint, const QgsPointLocato if ( !point.is3D() ) point.addZValue( defaultZValue() ); - targetLayer->addTopologicalPoints( point ); + int res = vectorLayer->addTopologicalPoints( point ); + + if ( res == 0 ) + topoPointsAdded = true; } } + + if ( topoPointsAdded ) + vectorLayer->endEditCommand(); + else + vectorLayer->destroyEditCommand(); } } } From 75e699a3b147960a06146be82262e7e5d8b05701 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Mon, 30 Sep 2024 12:14:38 +0200 Subject: [PATCH 20/43] [gui] Fix attr property load Fix #58887 by reverting #58787, with this modification I cannot reproduce #58767 anymore. --- src/gui/vector/qgsattributesformproperties.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/gui/vector/qgsattributesformproperties.cpp b/src/gui/vector/qgsattributesformproperties.cpp index 8eb641dd3cfc..1e4ccabf814d 100644 --- a/src/gui/vector/qgsattributesformproperties.cpp +++ b/src/gui/vector/qgsattributesformproperties.cpp @@ -616,13 +616,6 @@ void QgsAttributesFormProperties::loadAttributeSpecificEditor( QgsAttributesDnDT if ( layout == Qgis::AttributeFormLayout::DragAndDrop ) storeAttributeWidgetEdit(); - // Do not store while initializing! - if ( !mAvailableWidgetsTree->selectedItems().empty() ) - { - storeAttributeTypeDialog(); - storeAttributeContainerEdit(); - } - clearAttributeTypeFrame(); if ( emitter->selectedItems().count() != 1 ) From 95c9bb56b2f8aec7cb892e4125bce36eece82b02 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 09:19:40 +1000 Subject: [PATCH 21/43] Remove unused code --- python/plugins/processing/gui/BatchPanel.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 51af139c258d..3f328da531dd 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -602,15 +602,6 @@ def save(self): col = self.parameter_to_column[param.name()] wrapper = self.wrappers[row][col] - # For compatibility with 3.x API, we need to check whether the wrapper is - # the deprecated WidgetWrapper class. If not, it's the newer - # QgsAbstractProcessingParameterWidgetWrapper class - # TODO QGIS 4.0 - remove - if issubclass(wrapper.__class__, WidgetWrapper): - widget = wrapper.widget - else: - widget = wrapper.wrappedWidget() - value = wrapper.parameterValue() if not param.checkValueIsAcceptable(value, context): From 6c1de7f70ae56fa87ca7372fec37d7113b6b9ec7 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 11:13:35 +1000 Subject: [PATCH 22/43] [processing] Replace format for saving batch processing parameters The older approach of storing parameters was insecure, and required eval()ing the unchecked contents of the batch parameter file. This is a security risk, as a malicious file could leak user information or damage the system. So, - Switch to a newer ".batch" format which uses safe JSON objects only for serializing parameter values. - Allow loading the older .json files, but first show a warning that they are a security risk and require to user to explicitly agree to open the file --- python/plugins/processing/gui/BatchPanel.py | 126 +++++++++++++++----- 1 file changed, 98 insertions(+), 28 deletions(-) diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 3f328da531dd..8369075c00d3 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -23,7 +23,7 @@ import json import warnings from pathlib import Path -from typing import Optional +from typing import Optional, List, Dict from qgis.PyQt import uic from qgis.PyQt.QtWidgets import ( @@ -83,7 +83,8 @@ QgsRasterLayer, QgsProcessingUtils, QgsFileFilterGenerator, - QgsProcessingContext + QgsProcessingContext, + QgsFileUtils ) from qgis.gui import ( QgsProcessingParameterWidgetContext, @@ -440,6 +441,9 @@ def populateByExpression(self, adding=False): class BatchPanel(QgsPanelWidget, WIDGET): PARAMETERS = "PARAMETERS" OUTPUTS = "OUTPUTS" + ROWS = "rows" + FORMAT = "format" + CURRENT_FORMAT = "batch_3.40" def __init__(self, parent, alg): super().__init__(None) @@ -543,22 +547,82 @@ def clear(self): self.wrappers = [] def load(self): - context = dataobjects.createContext() settings = QgsSettings() last_path = settings.value("/Processing/LastBatchPath", QDir.homePath()) - filename, selected_filter = QFileDialog.getOpenFileName(self, - self.tr('Open Batch'), last_path, - self.tr('JSON files (*.json)')) - if filename: - last_path = QFileInfo(filename).path() - settings.setValue('/Processing/LastBatchPath', last_path) - with open(filename) as f: - values = json.load(f) + filters = ';;'.join([self.tr('Batch Processing files (*.batch)'), + self.tr('JSON files (*.json)')]) + filename, _ = QFileDialog.getOpenFileName(self, + self.tr('Open Batch'), + last_path, + filters) + if not filename: + return + + last_path = QFileInfo(filename).path() + settings.setValue('/Processing/LastBatchPath', last_path) + with open(filename) as f: + values = json.load(f) + + if isinstance(values, dict): + if values.get(self.FORMAT) == self.CURRENT_FORMAT: + self.load_batch_file_3_40_version(values) + else: + QMessageBox.critical( + self, + self.tr('Load Batch Parameters'), + self.tr('This file format is unknown and cannot be opened as batch parameters.')) else: - # If the user clicked on the cancel button. + self.load_old_json_batch_file(values) + + def load_batch_file_3_40_version(self, values: Dict): + """ + Loads the newer version 3.40 batch parameter JSON format + """ + context = dataobjects.createContext() + rows: List = values.get(self.ROWS, []) + + self.clear() + for row_number, row in enumerate(rows): + self.addRow() + this_row_params = row[self.PARAMETERS] + this_row_outputs = row[self.OUTPUTS] + + for param in self.alg.parameterDefinitions(): + if param.isDestination(): + continue + if param.name() in this_row_params: + column = self.parameter_to_column[param.name()] + value = this_row_params[param.name()] + wrapper = self.wrappers[row_number][column] + wrapper.setParameterValue(value, context) + + for out in self.alg.destinationParameterDefinitions(): + if out.flags() & QgsProcessingParameterDefinition.Flag.FlagHidden: + continue + if out.name() in this_row_outputs: + column = self.parameter_to_column[out.name()] + value = this_row_outputs[out.name()].strip("'") + widget = self.tblParameters.cellWidget(row_number + 1, column) + widget.setValue(value) + + def load_old_json_batch_file(self, values: List): + """ + Loads the old, insecure batch parameter JSON format + """ + message_box = QMessageBox() + message_box.setWindowTitle(self.tr("Security warning")) + message_box.setText( + self.tr("Opening older QGIS batch Processing files from an untrusted source can harm your computer. Only continue if you trust the source of the file. Continue?")) + message_box.setIcon(QMessageBox.Icon.Warning) + message_box.addButton(QMessageBox.StandardButton.Yes) + message_box.addButton(QMessageBox.StandardButton.No) + message_box.setDefaultButton(QMessageBox.StandardButton.No) + message_box.exec() + if message_box.result() != QMessageBox.StandardButton.Yes: return self.clear() + context = dataobjects.createContext() try: for row, alg in enumerate(values): self.addRow() @@ -585,15 +649,15 @@ def load(self): except TypeError: QMessageBox.critical( self, - self.tr('Error'), - self.tr('An error occurred while reading your file.')) + self.tr('Load Batch Parameters'), + self.tr('An error occurred while reading the batch parameters file.')) def save(self): - toSave = [] + row_parameters = [] context = dataobjects.createContext() for row in range(self.batchRowCount()): - algParams = {} - algOutputs = {} + this_row_params = {} + this_row_outputs = {} alg = self.alg for param in alg.parameterDefinitions(): if param.isDestination(): @@ -609,7 +673,7 @@ def save(self): param.description(), row + 2) self.parent.messageBar().pushMessage("", msg, level=Qgis.MessageLevel.Warning, duration=5) return - algParams[param.name()] = param.valueAsPythonString(value, context) + this_row_params[param.name()] = param.valueAsJsonObject(value, context) for out in alg.destinationParameterDefinitions(): if out.flags() & QgsProcessingParameterDefinition.Flag.FlagHidden: @@ -618,28 +682,34 @@ def save(self): widget = self.tblParameters.cellWidget(row + 1, col) text = widget.getValue() if text.strip() != '': - algOutputs[out.name()] = text.strip() + this_row_outputs[out.name()] = text.strip() else: self.parent.messageBar().pushMessage("", self.tr('Wrong or missing output value: {0} (row {1})').format( out.description(), row + 2), level=Qgis.MessageLevel.Warning, duration=5) return - toSave.append({self.PARAMETERS: algParams, self.OUTPUTS: algOutputs}) + row_parameters.append({self.PARAMETERS: this_row_params, self.OUTPUTS: this_row_outputs}) + + output_json = { + self.FORMAT: self.CURRENT_FORMAT, + self.ROWS: row_parameters + } settings = QgsSettings() last_path = settings.value("/Processing/LastBatchPath", QDir.homePath()) filename, __ = QFileDialog.getSaveFileName(self, self.tr('Save Batch'), last_path, - self.tr('JSON files (*.json)')) - if filename: - if not filename.endswith('.json'): - filename += '.json' - last_path = QFileInfo(filename).path() - settings.setValue('/Processing/LastBatchPath', last_path) - with open(filename, 'w') as f: - json.dump(toSave, f) + self.tr('Batch Processing files (*.batch)')) + if not filename: + return + + filename = QgsFileUtils.ensureFileNameHasExtension(filename, ['batch']) + last_path = QFileInfo(filename).path() + settings.setValue('/Processing/LastBatchPath', last_path) + with open(filename, 'w') as f: + json.dump(output_json, f, indent=2) def setCellWrapper(self, row, column, wrapper, context): self.wrappers[row - 1][column] = wrapper From 7c569ca7e7ba33e6852170a649813f0f53e2d783 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 30 Sep 2024 13:41:02 +1000 Subject: [PATCH 23/43] Fix missing canvas variables in some expression editors Always use the canvas method to create an expression context for expression widgets (when available), as it will always contain all the available variables. Fixes missing variables (eg @animation_*) in some contexts, eg in the labeling widget. --- src/app/labeling/qgslabelpropertydialog.cpp | 8 ++----- src/app/qgspointmarkeritem.cpp | 12 +++++----- src/gui/labeling/qgslabelinggui.cpp | 13 ++++++---- .../labeling/qgsrulebasedlabelingwidget.cpp | 23 +++++++++--------- src/gui/qgstextformatwidget.cpp | 14 +++++++---- src/gui/raster/qgsrasterlayerproperties.cpp | 17 +++++++------ .../raster/qgsrastertransparencywidget.cpp | 15 ++++-------- .../qgscategorizedsymbolrendererwidget.cpp | 16 ++++--------- .../qgsdatadefinedsizelegendwidget.cpp | 14 +++++++---- .../qgsgraduatedsymbolrendererwidget.cpp | 15 ++++-------- .../symbology/qgsheatmaprendererwidget.cpp | 15 ++++-------- .../symbology/qgslayerpropertieswidget.cpp | 16 ++++--------- src/gui/symbology/qgsrendererwidget.cpp | 16 ++++--------- src/gui/vector/qgsdiagramproperties.cpp | 24 ++++++++++--------- src/gui/vector/qgsvectorlayerproperties.cpp | 17 +++++++++---- 15 files changed, 113 insertions(+), 122 deletions(-) diff --git a/src/app/labeling/qgslabelpropertydialog.cpp b/src/app/labeling/qgslabelpropertydialog.cpp index 79f0db0c50f0..e64cfafbc091 100644 --- a/src/app/labeling/qgslabelpropertydialog.cpp +++ b/src/app/labeling/qgslabelpropertydialog.cpp @@ -360,12 +360,8 @@ void QgsLabelPropertyDialog::setDataDefinedValues( QgsVectorLayer *vlayer ) //even if the data defined property is set to an expression, as it's useful to show //users what the evaluated property is... - QgsExpressionContext context; - context << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ) - << QgsExpressionContextUtils::mapSettingsScope( QgisApp::instance()->mapCanvas()->mapSettings() ) - << QgsExpressionContextUtils::layerScope( vlayer ); + QgsExpressionContext context = QgisApp::instance()->mapCanvas()->createExpressionContext(); + context << QgsExpressionContextUtils::layerScope( vlayer ); context.setFeature( mCurLabelFeat ); const auto constPropertyKeys = mDataDefinedProperties.propertyKeys(); diff --git a/src/app/qgspointmarkeritem.cpp b/src/app/qgspointmarkeritem.cpp index f1a6d448aa6e..4136afbb5518 100644 --- a/src/app/qgspointmarkeritem.cpp +++ b/src/app/qgspointmarkeritem.cpp @@ -42,17 +42,17 @@ QgsMapCanvasSymbolItem::~QgsMapCanvasSymbolItem() = default; QgsRenderContext QgsMapCanvasSymbolItem::renderContext( QPainter *painter ) { QgsExpressionContext context; - context << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); + if ( mMapCanvas ) { - context << QgsExpressionContextUtils::mapSettingsScope( mMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( mMapCanvas->expressionContextScope() ); + context = mMapCanvas->createExpressionContext(); } else { - context << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + context << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } //context << QgsExpressionContextUtils::layerScope( mLayer ); context.setFeature( mFeature ); diff --git a/src/gui/labeling/qgslabelinggui.cpp b/src/gui/labeling/qgslabelinggui.cpp index 22ce101b47e3..a210b3527ad1 100644 --- a/src/gui/labeling/qgslabelinggui.cpp +++ b/src/gui/labeling/qgslabelinggui.cpp @@ -40,11 +40,16 @@ QgsExpressionContext QgsLabelingGui::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( mCanvas ) - expContext << QgsExpressionContextUtils::mapSettingsScope( mCanvas->mapSettings() ); + { + expContext = mCanvas->createExpressionContext(); + } + else + { + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ); + } if ( mLayer ) expContext << QgsExpressionContextUtils::layerScope( mLayer ); diff --git a/src/gui/labeling/qgsrulebasedlabelingwidget.cpp b/src/gui/labeling/qgsrulebasedlabelingwidget.cpp index 55197d8785ea..fe1ae20b9d9d 100644 --- a/src/gui/labeling/qgsrulebasedlabelingwidget.cpp +++ b/src/gui/labeling/qgsrulebasedlabelingwidget.cpp @@ -33,23 +33,22 @@ const double ICON_PADDING_FACTOR = 0.16; -static QList _globalProjectAtlasMapLayerScopes( QgsMapCanvas *mapCanvas, const QgsMapLayer *layer ) +static QgsExpressionContext _createExpressionContext( QgsMapCanvas *mapCanvas, const QgsMapLayer *layer ) { - QList scopes; - scopes << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); + QgsExpressionContext context; if ( mapCanvas ) { - scopes << QgsExpressionContextUtils::mapSettingsScope( mapCanvas->mapSettings() ) - << new QgsExpressionContextScope( mapCanvas->expressionContextScope() ); + context = mapCanvas->createExpressionContext(); } else { - scopes << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + context << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } - scopes << QgsExpressionContextUtils::layerScope( layer ); - return scopes; + context << QgsExpressionContextUtils::layerScope( layer ); + return context; } @@ -739,7 +738,7 @@ void QgsLabelingRulePropsWidget::testFilter() return; } - QgsExpressionContext context( _globalProjectAtlasMapLayerScopes( mMapCanvas, mLayer ) ); + QgsExpressionContext context( _createExpressionContext( mMapCanvas, mLayer ) ); if ( !filter.prepare( &context ) ) { @@ -772,7 +771,7 @@ void QgsLabelingRulePropsWidget::testFilter() void QgsLabelingRulePropsWidget::buildExpression() { - const QgsExpressionContext context( _globalProjectAtlasMapLayerScopes( mMapCanvas, mLayer ) ); + const QgsExpressionContext context( _createExpressionContext( mMapCanvas, mLayer ) ); QgsExpressionBuilderDialog dlg( mLayer, editFilter->text(), this, QStringLiteral( "generic" ), context ); diff --git a/src/gui/qgstextformatwidget.cpp b/src/gui/qgstextformatwidget.cpp index 1eb0d1da83ee..f28628003c26 100644 --- a/src/gui/qgstextformatwidget.cpp +++ b/src/gui/qgstextformatwidget.cpp @@ -2176,11 +2176,17 @@ QgsExpressionContext QgsTextFormatWidget::createExpressionContext() const return *lExpressionContext; QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( mMapCanvas ) - expContext << QgsExpressionContextUtils::mapSettingsScope( mMapCanvas->mapSettings() ); + { + expContext = mMapCanvas->createExpressionContext(); + } + else + { + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + } if ( mLayer ) expContext << QgsExpressionContextUtils::layerScope( mLayer ); diff --git a/src/gui/raster/qgsrasterlayerproperties.cpp b/src/gui/raster/qgsrasterlayerproperties.cpp index bd8f68b75749..d598d3a7cff9 100644 --- a/src/gui/raster/qgsrasterlayerproperties.cpp +++ b/src/gui/raster/qgsrasterlayerproperties.cpp @@ -272,17 +272,20 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv } ); } - mContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); - if ( mCanvas ) { - mContext << QgsExpressionContextUtils::mapSettingsScope( mCanvas->mapSettings() ); - // Initialize with layer center - mContext << QgsExpressionContextUtils::mapLayerPositionScope( mRasterLayer->extent().center() ); + mContext = mCanvas->createExpressionContext(); + } + else + { + mContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } + // Initialize with layer center + mContext << QgsExpressionContextUtils::mapLayerPositionScope( mRasterLayer->extent().center() ); mContext << QgsExpressionContextUtils::layerScope( mRasterLayer ); connect( mInsertExpressionButton, &QAbstractButton::clicked, this, [ = ] diff --git a/src/gui/raster/qgsrastertransparencywidget.cpp b/src/gui/raster/qgsrastertransparencywidget.cpp index 5ab2bd27ebc8..005161c2d6de 100644 --- a/src/gui/raster/qgsrastertransparencywidget.cpp +++ b/src/gui/raster/qgsrastertransparencywidget.cpp @@ -82,22 +82,17 @@ void QgsRasterTransparencyWidget::setContext( const QgsSymbolWidgetContext &cont QgsExpressionContext QgsRasterTransparencyWidget::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( QgsMapCanvas *canvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( canvas->mapSettings() ) - << new QgsExpressionContextScope( canvas->expressionContextScope() ); - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( canvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = canvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } if ( mRasterLayer ) diff --git a/src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp b/src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp index fb1fa29d806a..e01a2e0598c8 100644 --- a/src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp +++ b/src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp @@ -1343,22 +1343,16 @@ void QgsCategorizedSymbolRendererWidget::keyPressEvent( QKeyEvent *event ) QgsExpressionContext QgsCategorizedSymbolRendererWidget::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); - if ( auto *lMapCanvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( lMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( lMapCanvas->expressionContextScope() ); - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( lMapCanvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = lMapCanvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } if ( auto *lVectorLayer = vectorLayer() ) diff --git a/src/gui/symbology/qgsdatadefinedsizelegendwidget.cpp b/src/gui/symbology/qgsdatadefinedsizelegendwidget.cpp index 9920085c0e1c..35a8c30d7718 100644 --- a/src/gui/symbology/qgsdatadefinedsizelegendwidget.cpp +++ b/src/gui/symbology/qgsdatadefinedsizelegendwidget.cpp @@ -190,11 +190,17 @@ void QgsDataDefinedSizeLegendWidget::changeSymbol() context.setMapCanvas( mMapCanvas ); QgsExpressionContext ec; - ec << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( mMapCanvas ) - ec << QgsExpressionContextUtils::mapSettingsScope( mMapCanvas->mapSettings() ); + { + ec = mMapCanvas->createExpressionContext(); + } + else + { + ec << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + } context.setExpressionContext( &ec ); const QString crsAuthId = mMapCanvas ? mMapCanvas->mapSettings().destinationCrs().authid() : QString(); diff --git a/src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp b/src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp index 2e4c6966ba15..32d1c320d92a 100644 --- a/src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp +++ b/src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp @@ -419,22 +419,17 @@ QgsRendererWidget *QgsGraduatedSymbolRendererWidget::create( QgsVectorLayer *lay QgsExpressionContext QgsGraduatedSymbolRendererWidget::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( auto *lMapCanvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( lMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( lMapCanvas->expressionContextScope() ); - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( lMapCanvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = lMapCanvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } if ( auto *lVectorLayer = vectorLayer() ) diff --git a/src/gui/symbology/qgsheatmaprendererwidget.cpp b/src/gui/symbology/qgsheatmaprendererwidget.cpp index bdb1d01676aa..fa5532c5d319 100644 --- a/src/gui/symbology/qgsheatmaprendererwidget.cpp +++ b/src/gui/symbology/qgsheatmaprendererwidget.cpp @@ -34,22 +34,17 @@ QgsRendererWidget *QgsHeatmapRendererWidget::create( QgsVectorLayer *layer, QgsS QgsExpressionContext QgsHeatmapRendererWidget::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( auto *lMapCanvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( lMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( lMapCanvas->expressionContextScope() ); - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( lMapCanvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = lMapCanvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } if ( auto *lVectorLayer = vectorLayer() ) diff --git a/src/gui/symbology/qgslayerpropertieswidget.cpp b/src/gui/symbology/qgslayerpropertieswidget.cpp index 72b2654b4d94..749b47e25eae 100644 --- a/src/gui/symbology/qgslayerpropertieswidget.cpp +++ b/src/gui/symbology/qgslayerpropertieswidget.cpp @@ -246,22 +246,16 @@ QgsExpressionContext QgsLayerPropertiesWidget::createExpressionContext() const return *lExpressionContext; QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); - if ( auto *lMapCanvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( lMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( lMapCanvas->expressionContextScope() ); - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( lMapCanvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = lMapCanvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } expContext << QgsExpressionContextUtils::layerScope( mVectorLayer ); diff --git a/src/gui/symbology/qgsrendererwidget.cpp b/src/gui/symbology/qgsrendererwidget.cpp index d7bc2c63e602..e252500d1362 100644 --- a/src/gui/symbology/qgsrendererwidget.cpp +++ b/src/gui/symbology/qgsrendererwidget.cpp @@ -467,22 +467,16 @@ QgsSymbolWidgetContext QgsDataDefinedValueDialog::context() const QgsExpressionContext QgsDataDefinedValueDialog::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ); if ( auto *lMapCanvas = mContext.mapCanvas() ) { - expContext << QgsExpressionContextUtils::mapSettingsScope( lMapCanvas->mapSettings() ) - << new QgsExpressionContextScope( lMapCanvas->expressionContextScope() ); - - if ( const QgsExpressionContextScopeGenerator *generator = dynamic_cast< const QgsExpressionContextScopeGenerator * >( lMapCanvas->temporalController() ) ) - { - expContext << generator->createExpressionContextScope(); - } + expContext = lMapCanvas->createExpressionContext(); } else { - expContext << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); } if ( auto *lVectorLayer = vectorLayer() ) diff --git a/src/gui/vector/qgsdiagramproperties.cpp b/src/gui/vector/qgsdiagramproperties.cpp index a89a9523fe05..2dc6edb4c65d 100644 --- a/src/gui/vector/qgsdiagramproperties.cpp +++ b/src/gui/vector/qgsdiagramproperties.cpp @@ -49,11 +49,18 @@ QgsExpressionContext QgsDiagramProperties::createExpressionContext() const { QgsExpressionContext expContext; - expContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ) - << QgsExpressionContextUtils::mapSettingsScope( mMapCanvas->mapSettings() ) - << QgsExpressionContextUtils::layerScope( mLayer ); + if ( mMapCanvas ) + { + expContext = mMapCanvas->createExpressionContext(); + } + else + { + expContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + } + expContext << QgsExpressionContextUtils::layerScope( mLayer ); return expContext; } @@ -1064,12 +1071,7 @@ void QgsDiagramProperties::apply() QString QgsDiagramProperties::showExpressionBuilder( const QString &initialExpression ) { - QgsExpressionContext context; - context << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ) - << QgsExpressionContextUtils::mapSettingsScope( mMapCanvas->mapSettings() ) - << QgsExpressionContextUtils::layerScope( mLayer ); + QgsExpressionContext context = createExpressionContext(); QgsExpressionBuilderDialog dlg( mLayer, initialExpression, this, QStringLiteral( "generic" ), context ); dlg.setWindowTitle( tr( "Expression Based Attribute" ) ); diff --git a/src/gui/vector/qgsvectorlayerproperties.cpp b/src/gui/vector/qgsvectorlayerproperties.cpp index ead248999eaa..5bbb4ed4703f 100644 --- a/src/gui/vector/qgsvectorlayerproperties.cpp +++ b/src/gui/vector/qgsvectorlayerproperties.cpp @@ -150,11 +150,18 @@ QgsVectorLayerProperties::QgsVectorLayerProperties( connect( this, &QDialog::accepted, this, &QgsVectorLayerProperties::apply ); connect( this, &QDialog::rejected, this, &QgsVectorLayerProperties::rollback ); - mContext << QgsExpressionContextUtils::globalScope() - << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) - << QgsExpressionContextUtils::atlasScope( nullptr ) - << QgsExpressionContextUtils::mapSettingsScope( mCanvas->mapSettings() ) - << QgsExpressionContextUtils::layerScope( mLayer ); + if ( mCanvas ) + { + mContext = mCanvas->createExpressionContext(); + } + else + { + mContext << QgsExpressionContextUtils::globalScope() + << QgsExpressionContextUtils::projectScope( QgsProject::instance() ) + << QgsExpressionContextUtils::atlasScope( nullptr ) + << QgsExpressionContextUtils::mapSettingsScope( QgsMapSettings() ); + } + mContext << QgsExpressionContextUtils::layerScope( mLayer ); mMapTipFieldComboBox->setLayer( lyr ); mDisplayExpressionWidget->setLayer( lyr ); From bbf159b818a64ac4ac2fd93dfab20205b6d43421 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 08:32:14 +1000 Subject: [PATCH 24/43] Don't use reserved identifier in global namespace --- src/gui/labeling/qgsrulebasedlabelingwidget.cpp | 6 +++--- src/gui/labeling/qgsrulebasedlabelingwidget.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/labeling/qgsrulebasedlabelingwidget.cpp b/src/gui/labeling/qgsrulebasedlabelingwidget.cpp index fe1ae20b9d9d..0b7f2fe6dd73 100644 --- a/src/gui/labeling/qgsrulebasedlabelingwidget.cpp +++ b/src/gui/labeling/qgsrulebasedlabelingwidget.cpp @@ -33,7 +33,7 @@ const double ICON_PADDING_FACTOR = 0.16; -static QgsExpressionContext _createExpressionContext( QgsMapCanvas *mapCanvas, const QgsMapLayer *layer ) +QgsExpressionContext QgsLabelingRulePropsWidget::createExpressionContext( QgsMapCanvas *mapCanvas, const QgsMapLayer *layer ) { QgsExpressionContext context; if ( mapCanvas ) @@ -738,7 +738,7 @@ void QgsLabelingRulePropsWidget::testFilter() return; } - QgsExpressionContext context( _createExpressionContext( mMapCanvas, mLayer ) ); + QgsExpressionContext context( createExpressionContext( mMapCanvas, mLayer ) ); if ( !filter.prepare( &context ) ) { @@ -771,7 +771,7 @@ void QgsLabelingRulePropsWidget::testFilter() void QgsLabelingRulePropsWidget::buildExpression() { - const QgsExpressionContext context( _createExpressionContext( mMapCanvas, mLayer ) ); + const QgsExpressionContext context( createExpressionContext( mMapCanvas, mLayer ) ); QgsExpressionBuilderDialog dlg( mLayer, editFilter->text(), this, QStringLiteral( "generic" ), context ); diff --git a/src/gui/labeling/qgsrulebasedlabelingwidget.h b/src/gui/labeling/qgsrulebasedlabelingwidget.h index 6139db195f65..078d7929f665 100644 --- a/src/gui/labeling/qgsrulebasedlabelingwidget.h +++ b/src/gui/labeling/qgsrulebasedlabelingwidget.h @@ -195,6 +195,8 @@ class GUI_EXPORT QgsLabelingRulePropsWidget : public QgsPanelWidget, private Ui: void buildExpression(); private: + static QgsExpressionContext createExpressionContext( QgsMapCanvas *mapCanvas, const QgsMapLayer *layer ); + QgsRuleBasedLabeling::Rule *mRule; // borrowed QgsVectorLayer *mLayer = nullptr; From 0d55518c24fa703043deac97320844b8bbe08722 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 16:04:58 +1000 Subject: [PATCH 25/43] [processing] Fix translation of elapsed strings Fixes #58635 --- .../plugins/processing/gui/AlgorithmDialog.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/python/plugins/processing/gui/AlgorithmDialog.py b/python/plugins/processing/gui/AlgorithmDialog.py index bac2f1725e9e..091f61df28d0 100644 --- a/python/plugins/processing/gui/AlgorithmDialog.py +++ b/python/plugins/processing/gui/AlgorithmDialog.py @@ -226,7 +226,7 @@ def runAlgorithm(self): self.feedback.pushInfo('') start_time = time.time() - def elapsed_time(start_time, result): + def elapsed_time(start_time) -> str: delta_t = time.time() - start_time hours = int(delta_t / 3600) minutes = int((delta_t % 3600) / 60) @@ -237,14 +237,14 @@ def elapsed_time(start_time, result): str_seconds = [self.tr("second"), self.tr("seconds")][seconds != 1] if hours > 0: - elapsed = '{0} {1:0.2f} {2} ({3} {4} {5} {6} {7:0.0f} {2})'.format( - result, delta_t, str_seconds, hours, str_hours, minutes, str_minutes, seconds) + elapsed = '{0:0.2f} {1} ({2} {3} {4} {5} {6:0.0f} {1})'.format( + delta_t, str_seconds, hours, str_hours, minutes, str_minutes, seconds) elif minutes > 0: - elapsed = '{0} {1:0.2f} {2} ({3} {4} {5:0.0f} {2})'.format( - result, delta_t, str_seconds, minutes, str_minutes, seconds) + elapsed = '{0:0.2f} {1} ({2} {3} {4:0.0f} {1})'.format( + delta_t, str_seconds, minutes, str_minutes, seconds) else: - elapsed = '{} {:0.2f} {}'.format( - result, delta_t, str_seconds) + elapsed = '{:0.2f} {}'.format( + delta_t, str_seconds) return elapsed @@ -259,7 +259,7 @@ def elapsed_time(start_time, result): self.cancelButton().setEnabled(self.algorithm().flags() & QgsProcessingAlgorithm.Flag.FlagCanCancel) if executeIterating(self.algorithm(), parameters, self.iterateParam, self.context, self.feedback): self.feedback.pushInfo( - self.tr(elapsed_time(start_time, 'Execution completed in'))) + self.tr('Execution completed in {}').format(elapsed_time(start_time))) self.cancelButton().setEnabled(False) self.finish(True, parameters, self.context, self.feedback) else: @@ -282,11 +282,11 @@ def elapsed_time(start_time, result): def on_complete(ok, results): if ok: self.feedback.pushInfo( - self.tr(elapsed_time(start_time, 'Execution completed in'))) + self.tr('Execution completed in {}').format(elapsed_time(start_time))) self.feedback.pushFormattedResults(self.algorithm(), self.context, results) else: self.feedback.reportError( - self.tr(elapsed_time(start_time, 'Execution failed after'))) + self.tr('Execution failed after {}').format(elapsed_time(start_time))) self.feedback.pushInfo('') if self.history_log_id is not None: From 1ae55e251a46a1e1432577ce87d98cd20329e1f8 Mon Sep 17 00:00:00 2001 From: DelazJ Date: Tue, 1 Oct 2024 09:50:02 +0200 Subject: [PATCH 26/43] Use bold font for Date group in sensors filter dialog operators widget --- src/gui/providers/sensorthings/qgssensorthingssubseteditor.cpp | 1 + src/ui/qgssensorthingssubseteditorbase.ui | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/providers/sensorthings/qgssensorthingssubseteditor.cpp b/src/gui/providers/sensorthings/qgssensorthingssubseteditor.cpp index 5ddde9550ec3..74abc3c8ceb3 100644 --- a/src/gui/providers/sensorthings/qgssensorthingssubseteditor.cpp +++ b/src/gui/providers/sensorthings/qgssensorthingssubseteditor.cpp @@ -55,6 +55,7 @@ QgsSensorThingsSubsetEditor::QgsSensorThingsSubsetEditor( QgsVectorLayer *layer, boldFont.setBold( true ); mLabelComparisons->setFont( boldFont ); mLabelLogical->setFont( boldFont ); + mLabelDate->setFont( boldFont ); mLabelArithmetic->setFont( boldFont ); mButtonEq->setToolTip( tr( "Equal" ) ); diff --git a/src/ui/qgssensorthingssubseteditorbase.ui b/src/ui/qgssensorthingssubseteditorbase.ui index 4dd9fa80d2cc..1c93e853b62b 100644 --- a/src/ui/qgssensorthingssubseteditorbase.ui +++ b/src/ui/qgssensorthingssubseteditorbase.ui @@ -131,7 +131,7 @@ p, li { white-space: pre-wrap; } - + Date From 1c7bd342cacc172eebc45b699222af15a0bbe05e Mon Sep 17 00:00:00 2001 From: Raymond Nijssen Date: Tue, 1 Oct 2024 11:40:05 +0200 Subject: [PATCH 27/43] Added hackfest Bratislava --- resources/data/qgis-hackfests.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/data/qgis-hackfests.json b/resources/data/qgis-hackfests.json index fe3c8861be65..c26c5951e1fc 100644 --- a/resources/data/qgis-hackfests.json +++ b/resources/data/qgis-hackfests.json @@ -27,6 +27,7 @@ { "type": "Feature", "properties": { "year": 2019, "month": "August", "hackfest_number": "23", "place": "Bucharest", "notes": "A lot of us got (temporary) QGIS tattoos here.", "month_int": 8, "day_int": 23, "date_nice": "2019\/08\/23" }, "geometry": { "type": "Point", "coordinates": [ 26.101816993272479, 44.43597873093433 ] } }, { "type": "Feature", "properties": { "year": 2022, "month": "August", "hackfest_number": "24", "place": "Firenze", "notes": "Along with the FOSS4G and SotM. Many pizzas, but hard to find the Hawaii", "month_int": 8, "day_int": 19, "date_nice": "2022\/08\/19" }, "geometry": { "type": "Point", "coordinates": [ 11.2453847, 43.8007724 ] } }, { "type": "Feature", "properties": { "year": 2023, "month": "August", "hackfest_number": "25", "place": "'s-Hertogenbosch", "notes": "Fifth User Conference (sold out), with bossche bollen and jogging in the rain.", "month_int": 4, "day_int": 20, "date_nice": "2023\/04\/20" }, "geometry": { "type": "Point", "coordinates": [ 5.292566, 51.695442 ] } }, -{ "type": "Feature", "properties": { "year": 2023, "month": "November", "hackfest_number": "26", "place": "Wien", "notes": "Aligning with other OSGeo software during OSGeo code sprint. The Big Data from Space (BiDS) conference was our side event ;).", "month_int": 11, "day_int": 6, "date_nice": "2023\/11\/06" }, "geometry": { "type": "Point", "coordinates": [ 16.4144871, 48.2354494 ] } } +{ "type": "Feature", "properties": { "year": 2023, "month": "November", "hackfest_number": "26", "place": "Wien", "notes": "Aligning with other OSGeo software during OSGeo code sprint. The Big Data from Space (BiDS) conference was our side event.", "month_int": 11, "day_int": 6, "date_nice": "2023\/11\/06" }, "geometry": { "type": "Point", "coordinates": [ 16.4144871, 48.2354494 ] } }, +{ "type": "Feature", "properties": { "year": 2024, "month": "September", "hackfest_number": "27", "place": "Bratislava", "notes": "Along with the 6th User Conference. Many local snacks and drinks provided, including Rožky, Kofola and Pipi.", "month_int": 9, "day_int": 11, "date_nice": "2024\/09\/11" }, "geometry": { "type": "Point", "coordinates": [ 17.114705, 48.152071 ] } } ] } From 560bc72bf5f5acab25af5cf854f052f533452c77 Mon Sep 17 00:00:00 2001 From: Raymond Nijssen Date: Tue, 1 Oct 2024 12:10:18 +0200 Subject: [PATCH 28/43] Put back the removed wink, this time including a nose ;-) --- resources/data/qgis-hackfests.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/data/qgis-hackfests.json b/resources/data/qgis-hackfests.json index c26c5951e1fc..53c69105132a 100644 --- a/resources/data/qgis-hackfests.json +++ b/resources/data/qgis-hackfests.json @@ -27,7 +27,7 @@ { "type": "Feature", "properties": { "year": 2019, "month": "August", "hackfest_number": "23", "place": "Bucharest", "notes": "A lot of us got (temporary) QGIS tattoos here.", "month_int": 8, "day_int": 23, "date_nice": "2019\/08\/23" }, "geometry": { "type": "Point", "coordinates": [ 26.101816993272479, 44.43597873093433 ] } }, { "type": "Feature", "properties": { "year": 2022, "month": "August", "hackfest_number": "24", "place": "Firenze", "notes": "Along with the FOSS4G and SotM. Many pizzas, but hard to find the Hawaii", "month_int": 8, "day_int": 19, "date_nice": "2022\/08\/19" }, "geometry": { "type": "Point", "coordinates": [ 11.2453847, 43.8007724 ] } }, { "type": "Feature", "properties": { "year": 2023, "month": "August", "hackfest_number": "25", "place": "'s-Hertogenbosch", "notes": "Fifth User Conference (sold out), with bossche bollen and jogging in the rain.", "month_int": 4, "day_int": 20, "date_nice": "2023\/04\/20" }, "geometry": { "type": "Point", "coordinates": [ 5.292566, 51.695442 ] } }, -{ "type": "Feature", "properties": { "year": 2023, "month": "November", "hackfest_number": "26", "place": "Wien", "notes": "Aligning with other OSGeo software during OSGeo code sprint. The Big Data from Space (BiDS) conference was our side event.", "month_int": 11, "day_int": 6, "date_nice": "2023\/11\/06" }, "geometry": { "type": "Point", "coordinates": [ 16.4144871, 48.2354494 ] } }, +{ "type": "Feature", "properties": { "year": 2023, "month": "November", "hackfest_number": "26", "place": "Wien", "notes": "Aligning with other OSGeo software during OSGeo code sprint. The Big Data from Space (BiDS) conference was our side event. ;-)", "month_int": 11, "day_int": 6, "date_nice": "2023\/11\/06" }, "geometry": { "type": "Point", "coordinates": [ 16.4144871, 48.2354494 ] } }, { "type": "Feature", "properties": { "year": 2024, "month": "September", "hackfest_number": "27", "place": "Bratislava", "notes": "Along with the 6th User Conference. Many local snacks and drinks provided, including Rožky, Kofola and Pipi.", "month_int": 9, "day_int": 11, "date_nice": "2024\/09\/11" }, "geometry": { "type": "Point", "coordinates": [ 17.114705, 48.152071 ] } } ] } From ddc0d1fadbb34bc6bf29488f69a421c3124a9107 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Oct 2024 11:11:39 +0200 Subject: [PATCH 29/43] make create annotation map tools available in public API --- src/gui/CMakeLists.txt | 1 + .../qgscreateannotationitemmaptool_impl.h | 106 ++++++++++++++---- 2 files changed, 84 insertions(+), 23 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index ddaeede527be..dc1ee15a7a2d 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1062,6 +1062,7 @@ set(QGIS_GUI_HDRS annotations/qgsannotationitemguiregistry.h annotations/qgsannotationitemwidget.h annotations/qgscreateannotationitemmaptool.h + annotations/qgscreateannotationitemmaptool_impl.h annotations/qgsmaptoolmodifyannotation.h attributeformconfig/qgsattributeformcontaineredit.h diff --git a/src/gui/annotations/qgscreateannotationitemmaptool_impl.h b/src/gui/annotations/qgscreateannotationitemmaptool_impl.h index 9f9544ad2f6e..6e6e9b365434 100644 --- a/src/gui/annotations/qgscreateannotationitemmaptool_impl.h +++ b/src/gui/annotations/qgscreateannotationitemmaptool_impl.h @@ -16,22 +16,30 @@ #define QGSCREATEANNOTATIONITEMMAPTOOLIMPL_H #include "qgis_gui.h" -#include "qgis_sip.h" #include "qgscreateannotationitemmaptool.h" #include "qgsmaptoolcapture.h" -#include "qgssettingstree.h" #define SIP_NO_FILE class QgsSettingsEntryString; class QgsSettingsTreeNode; -///@cond PRIVATE -class QgsMapToolCaptureAnnotationItem: public QgsMapToolCapture, public QgsCreateAnnotationItemMapToolInterface +/** + * \class QgsMapToolCaptureAnnotationItem + * \ingroup gui + * + * \brief A base class to digitize annotation items using QgsMapToolCapture + * + * \note Not available in Python bindings. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsMapToolCaptureAnnotationItem: public QgsMapToolCapture, public QgsCreateAnnotationItemMapToolInterface { Q_OBJECT public: + //! Constructor QgsMapToolCaptureAnnotationItem( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget, CaptureMode mode ); QgsCreateAnnotationItemMapToolHandler *handler() override; QgsMapTool *mapTool() override; @@ -45,12 +53,20 @@ class QgsMapToolCaptureAnnotationItem: public QgsMapToolCapture, public QgsCreat }; -class QgsCreatePointTextItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface +/** + * \class QgsCreatePointTextItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize point text items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreatePointTextItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface { Q_OBJECT public: - + //! Constructor QgsCreatePointTextItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); ~QgsCreatePointTextItemMapTool() override; @@ -65,49 +81,80 @@ class QgsCreatePointTextItemMapTool: public QgsMapToolAdvancedDigitizing, public }; -class QgsCreateMarkerItemMapTool: public QgsMapToolCaptureAnnotationItem +/** + * \class QgsCreateMarkerItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize marker items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreateMarkerItemMapTool: public QgsMapToolCaptureAnnotationItem { Q_OBJECT public: - + //! Constructor QgsCreateMarkerItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); void cadCanvasReleaseEvent( QgsMapMouseEvent *event ) override; }; -class QgsCreateLineItemMapTool: public QgsMapToolCaptureAnnotationItem +/** + * \class QgsCreateLineItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize line items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreateLineItemMapTool: public QgsMapToolCaptureAnnotationItem { Q_OBJECT public: - + //! Constructor QgsCreateLineItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); private slots: void lineCaptured( const QgsCurve *line ) override; }; -class QgsCreatePolygonItemMapTool: public QgsMapToolCaptureAnnotationItem +/** + * \class QgsCreatePolygonItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize polygon items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreatePolygonItemMapTool: public QgsMapToolCaptureAnnotationItem { Q_OBJECT public: - + //! Constructor QgsCreatePolygonItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); private slots: void polygonCaptured( const QgsCurvePolygon *polygon ) override; }; - -class QgsCreateRectangleTextItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface +/** + * \class QgsCreateRectangleTextItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize rectangle text items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreateRectangleTextItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface { Q_OBJECT public: - + //! Constructor QgsCreateRectangleTextItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); void cadCanvasPressEvent( QgsMapMouseEvent *event ) override; @@ -118,7 +165,6 @@ class QgsCreateRectangleTextItemMapTool: public QgsMapToolAdvancedDigitizing, pu QgsMapTool *mapTool() override; private: - QgsCreateAnnotationItemMapToolHandler *mHandler = nullptr; QRectF mRect; @@ -126,8 +172,15 @@ class QgsCreateRectangleTextItemMapTool: public QgsMapToolAdvancedDigitizing, pu QObjectUniquePtr< QgsRubberBand > mRubberBand; }; - -class QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface +/** + * \class QgsCreatePictureItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize picture items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizing, public QgsCreateAnnotationItemMapToolInterface { Q_OBJECT @@ -135,6 +188,7 @@ class QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizing, public Q static inline QgsSettingsTreeNode *sTreePicture = QgsCreateAnnotationItemMapToolInterface::sTreeAnnotationTools->createChildNode( QStringLiteral( "picture-item" ) ); static const QgsSettingsEntryString *settingLastSourceFolder; + //! Constructor QgsCreatePictureItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); void cadCanvasPressEvent( QgsMapMouseEvent *event ) override; @@ -145,7 +199,7 @@ class QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizing, public Q QgsMapTool *mapTool() override; private: - + //! Constructor QgsCreateAnnotationItemMapToolHandler *mHandler = nullptr; QRectF mRect; @@ -153,19 +207,25 @@ class QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizing, public Q QObjectUniquePtr< QgsRubberBand > mRubberBand; }; - -class QgsCreateLineTextItemMapTool: public QgsMapToolCaptureAnnotationItem +/** + * \class QgsCreateLineTextItemMapTool + * \ingroup gui + * + * \brief A map tool to digitize line text items. + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsCreateLineTextItemMapTool: public QgsMapToolCaptureAnnotationItem { Q_OBJECT public: - + //! Constructor QgsCreateLineTextItemMapTool( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget ); private slots: void lineCaptured( const QgsCurve *line ) override; }; -///@endcond PRIVATE #endif // QGSCREATEANNOTATIONITEMMAPTOOLIMPL_H From 4afbf9e1bb9a700d53281e7d6e9024f319d0cdcd Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 1 Oct 2024 15:26:28 +0200 Subject: [PATCH 30/43] const fixes --- .../annotations/qgscreateannotationitemmaptool.sip.in | 2 +- .../annotations/qgscreateannotationitemmaptool.sip.in | 2 +- src/gui/annotations/qgscreateannotationitemmaptool.h | 2 +- .../annotations/qgscreateannotationitemmaptool_impl.cpp | 8 ++++---- src/gui/annotations/qgscreateannotationitemmaptool_impl.h | 8 ++++---- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/python/PyQt6/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in b/python/PyQt6/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in index 4ce0ef752282..8073617b9f01 100644 --- a/python/PyQt6/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in +++ b/python/PyQt6/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in @@ -88,7 +88,7 @@ whenever this signal is emitted. virtual ~QgsCreateAnnotationItemMapToolInterface(); - virtual QgsCreateAnnotationItemMapToolHandler *handler() = 0; + virtual QgsCreateAnnotationItemMapToolHandler *handler() const = 0; %Docstring Returns the handler object for the map tool. %End diff --git a/python/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in b/python/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in index 4ce0ef752282..8073617b9f01 100644 --- a/python/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in +++ b/python/gui/auto_generated/annotations/qgscreateannotationitemmaptool.sip.in @@ -88,7 +88,7 @@ whenever this signal is emitted. virtual ~QgsCreateAnnotationItemMapToolInterface(); - virtual QgsCreateAnnotationItemMapToolHandler *handler() = 0; + virtual QgsCreateAnnotationItemMapToolHandler *handler() const = 0; %Docstring Returns the handler object for the map tool. %End diff --git a/src/gui/annotations/qgscreateannotationitemmaptool.h b/src/gui/annotations/qgscreateannotationitemmaptool.h index 9fe5c618edad..e6d97355e1cf 100644 --- a/src/gui/annotations/qgscreateannotationitemmaptool.h +++ b/src/gui/annotations/qgscreateannotationitemmaptool.h @@ -113,7 +113,7 @@ class GUI_EXPORT QgsCreateAnnotationItemMapToolInterface /** * Returns the handler object for the map tool. */ - virtual QgsCreateAnnotationItemMapToolHandler *handler() = 0; + virtual QgsCreateAnnotationItemMapToolHandler *handler() const = 0; /** * Returns a reference to the associated map tool. diff --git a/src/gui/annotations/qgscreateannotationitemmaptool_impl.cpp b/src/gui/annotations/qgscreateannotationitemmaptool_impl.cpp index 5ebdf01c1927..f2af1e0876ec 100644 --- a/src/gui/annotations/qgscreateannotationitemmaptool_impl.cpp +++ b/src/gui/annotations/qgscreateannotationitemmaptool_impl.cpp @@ -52,7 +52,7 @@ QgsMapToolCaptureAnnotationItem::QgsMapToolCaptureAnnotationItem( QgsMapCanvas * mToolName = tr( "Annotation tool" ); } -QgsCreateAnnotationItemMapToolHandler *QgsMapToolCaptureAnnotationItem::handler() +QgsCreateAnnotationItemMapToolHandler *QgsMapToolCaptureAnnotationItem::handler() const { return mHandler; } @@ -120,7 +120,7 @@ void QgsCreatePointTextItemMapTool::cadCanvasPressEvent( QgsMapMouseEvent *event mHandler->pushCreatedItem( createdItem.release() ); } -QgsCreateAnnotationItemMapToolHandler *QgsCreatePointTextItemMapTool::handler() +QgsCreateAnnotationItemMapToolHandler *QgsCreatePointTextItemMapTool::handler() const { return mHandler; } @@ -369,7 +369,7 @@ void QgsCreatePictureItemMapTool::keyPressEvent( QKeyEvent *event ) } } -QgsCreateAnnotationItemMapToolHandler *QgsCreatePictureItemMapTool::handler() +QgsCreateAnnotationItemMapToolHandler *QgsCreatePictureItemMapTool::handler() const { return mHandler; } @@ -472,7 +472,7 @@ void QgsCreateRectangleTextItemMapTool::keyPressEvent( QKeyEvent *event ) } } -QgsCreateAnnotationItemMapToolHandler *QgsCreateRectangleTextItemMapTool::handler() +QgsCreateAnnotationItemMapToolHandler *QgsCreateRectangleTextItemMapTool::handler() const { return mHandler; } diff --git a/src/gui/annotations/qgscreateannotationitemmaptool_impl.h b/src/gui/annotations/qgscreateannotationitemmaptool_impl.h index 6e6e9b365434..c0884cbe05d2 100644 --- a/src/gui/annotations/qgscreateannotationitemmaptool_impl.h +++ b/src/gui/annotations/qgscreateannotationitemmaptool_impl.h @@ -41,7 +41,7 @@ class GUI_EXPORT QgsMapToolCaptureAnnotationItem: public QgsMapToolCapture, publ public: //! Constructor QgsMapToolCaptureAnnotationItem( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget, CaptureMode mode ); - QgsCreateAnnotationItemMapToolHandler *handler() override; + QgsCreateAnnotationItemMapToolHandler *handler() const override; QgsMapTool *mapTool() override; QgsMapLayer *layer() const override; QgsMapToolCapture::Capabilities capabilities() const override; @@ -71,7 +71,7 @@ class GUI_EXPORT QgsCreatePointTextItemMapTool: public QgsMapToolAdvancedDigitiz ~QgsCreatePointTextItemMapTool() override; void cadCanvasPressEvent( QgsMapMouseEvent *event ) override; - QgsCreateAnnotationItemMapToolHandler *handler() override; + QgsCreateAnnotationItemMapToolHandler *handler() const override; QgsMapTool *mapTool() override; private: @@ -161,7 +161,7 @@ class GUI_EXPORT QgsCreateRectangleTextItemMapTool: public QgsMapToolAdvancedDig void cadCanvasMoveEvent( QgsMapMouseEvent *event ) override; void keyPressEvent( QKeyEvent *event ) override; - QgsCreateAnnotationItemMapToolHandler *handler() override; + QgsCreateAnnotationItemMapToolHandler *handler() const override; QgsMapTool *mapTool() override; private: @@ -195,7 +195,7 @@ class GUI_EXPORT QgsCreatePictureItemMapTool: public QgsMapToolAdvancedDigitizin void cadCanvasMoveEvent( QgsMapMouseEvent *event ) override; void keyPressEvent( QKeyEvent *event ) override; - QgsCreateAnnotationItemMapToolHandler *handler() override; + QgsCreateAnnotationItemMapToolHandler *handler() const override; QgsMapTool *mapTool() override; private: From 6dc4547e94c81f7486af7ed6d60a84c05d66d804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vedran=20Stojnovi=C4=87?= Date: Thu, 12 Sep 2024 11:12:13 +0200 Subject: [PATCH 31/43] added Page Properties qAction to layout main menu --- src/app/layout/qgslayoutdesignerdialog.cpp | 11 +++++++++++ src/app/layout/qgslayoutdesignerdialog.h | 1 + src/ui/layout/qgslayoutdesignerbase.ui | 9 ++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/app/layout/qgslayoutdesignerdialog.cpp b/src/app/layout/qgslayoutdesignerdialog.cpp index 04a30b31c51b..381f0d6fc3dd 100644 --- a/src/app/layout/qgslayoutdesignerdialog.cpp +++ b/src/app/layout/qgslayoutdesignerdialog.cpp @@ -753,6 +753,7 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla mView->resizeSelectedItems( QgsLayoutAligner::ResizeToSquare ); } ); + connect( mActionPageProperties, &QAction::triggered, this, &QgsLayoutDesignerDialog::showPageProperties ); connect( mActionAddPages, &QAction::triggered, this, &QgsLayoutDesignerDialog::addPages ); connect( mActionUnlockAll, &QAction::triggered, this, &QgsLayoutDesignerDialog::unlockAllItems ); @@ -1921,6 +1922,16 @@ void QgsLayoutDesignerDialog::addPages() } } +void QgsLayoutDesignerDialog::showPageProperties() +{ + QgsLayoutItemPage *page = mLayout->pageCollection()->page( 0 ); + + if ( page ) + { + showItemOptions( page, true ); + } +} + void QgsLayoutDesignerDialog::statusMessageReceived( const QString &message ) { mStatusBar->showMessage( message ); diff --git a/src/app/layout/qgslayoutdesignerdialog.h b/src/app/layout/qgslayoutdesignerdialog.h index cefd2c32f7a1..97325944062d 100644 --- a/src/app/layout/qgslayoutdesignerdialog.h +++ b/src/app/layout/qgslayoutdesignerdialog.h @@ -381,6 +381,7 @@ class QgsLayoutDesignerDialog: public QMainWindow, public Ui::QgsLayoutDesignerB void toggleFullScreen( bool enabled ); void addPages(); + void showPageProperties(); void statusMessageReceived( const QString &message ); void dockVisibilityChanged( bool visible ); void undoRedoOccurredForItems( const QSet< QString > &itemUuids ); diff --git a/src/ui/layout/qgslayoutdesignerbase.ui b/src/ui/layout/qgslayoutdesignerbase.ui index f8dbcfb31932..c2e095a1bad4 100644 --- a/src/ui/layout/qgslayoutdesignerbase.ui +++ b/src/ui/layout/qgslayoutdesignerbase.ui @@ -182,7 +182,7 @@ 0 0 2180 - 22 + 32 @@ -204,6 +204,7 @@ + @@ -1585,9 +1586,15 @@ &Keyboard Shortcuts... + + + Page Properties… + + + From 1224a5ef57d3b35c37949f0af8fb1960546d92bd Mon Sep 17 00:00:00 2001 From: DelazJ Date: Wed, 28 Aug 2024 13:48:57 +0200 Subject: [PATCH 32/43] Allow line symbol to appear in mesh elevation tab Also fix and rename widgets in GUI for easy identification --- .../qgsmeshelevationpropertieswidgetbase.ui | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui index f45fbedce54f..056b5b2b29e8 100644 --- a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui +++ b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui @@ -11,7 +11,7 @@ - Raster Elevation Properties + Mesh Elevation Properties @@ -27,7 +27,7 @@ 0 - + Configuration @@ -46,7 +46,7 @@ - + Style @@ -64,7 +64,7 @@ 0 - + 0 @@ -78,7 +78,7 @@ 0 - + Line style @@ -114,14 +114,14 @@ 0 - + Limit - + Fill style @@ -196,14 +196,14 @@ - + Scale - + 0 @@ -232,7 +232,7 @@ - + Offset @@ -268,7 +268,7 @@ - + Lower @@ -278,7 +278,7 @@ - + Upper @@ -318,7 +318,7 @@ - + 0 From 67e891be5b8f905a19b4d01b843bba35f81dc199 Mon Sep 17 00:00:00 2001 From: DelazJ Date: Wed, 28 Aug 2024 13:56:40 +0200 Subject: [PATCH 33/43] Make the Profile Chart Appearance group collapsible --- src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui index 056b5b2b29e8..ad47e29a21a2 100644 --- a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui +++ b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui @@ -37,7 +37,7 @@ - + Profile Chart Appearance @@ -405,6 +405,12 @@ QDoubleSpinBox
qgsdoublespinbox.h
+ + QgsCollapsibleGroupBox + QGroupBox +
qgscollapsiblegroupbox.h
+ 1 +
QgsSymbolButton QToolButton From b07bcca8d25f37ccd273fd19dd037daa389f1313 Mon Sep 17 00:00:00 2001 From: Jean Felder Date: Tue, 16 Jul 2024 10:20:37 +0200 Subject: [PATCH 34/43] testqgs3drendering: Add a unit test for phong textured material This test does not work on CI for Qt 5. --- tests/src/3d/testqgs3drendering.cpp | 55 ++++++++++++++++++ ...ted_polygon3d_extrusion_textured_phong.png | Bin 0 -> 239973 bytes ...ted_polygon3d_extrusion_textured_phong.png | Bin 0 -> 240561 bytes 3 files changed, 55 insertions(+) create mode 100644 tests/testdata/control_images/3d/expected_polygon3d_extrusion_textured_phong/default/expected_polygon3d_extrusion_textured_phong.png create mode 100644 tests/testdata/control_images/3d/expected_polygon3d_extrusion_textured_phong/qt6/expected_polygon3d_extrusion_textured_phong.png diff --git a/tests/src/3d/testqgs3drendering.cpp b/tests/src/3d/testqgs3drendering.cpp index 9d2d2529c8fa..e9a6013cc8a4 100644 --- a/tests/src/3d/testqgs3drendering.cpp +++ b/tests/src/3d/testqgs3drendering.cpp @@ -52,6 +52,7 @@ #include "qgsdirectionallightsettings.h" #include "qgsmetalroughmaterialsettings.h" #include "qgspointlightsettings.h" +#include "qgsphongtexturedmaterialsettings.h" #include #include @@ -76,6 +77,7 @@ class TestQgs3DRendering : public QgsTest void testEpsg4978LineRendering(); void testExtrudedPolygons(); void testPhongShading(); + void testExtrudedPolygonsTexturedPhong(); void testExtrudedPolygonsDataDefinedPhong(); void testExtrudedPolygonsDataDefinedGooch(); void testExtrudedPolygonsGoochShading(); @@ -492,6 +494,59 @@ void TestQgs3DRendering::testPhongShading() QGSVERIFYIMAGECHECK( "phong_shading", "phong_shading", img, QString(), 40, QSize( 0, 0 ), 2 ); } +void TestQgs3DRendering::testExtrudedPolygonsTexturedPhong() +{ + // In Qt 5, this test does not work on CI +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if ( QgsTest::isCIRun() ) + { + QSKIP( "fails on CI" ); + } +#endif + + QgsPhongTexturedMaterialSettings materialSettings; + materialSettings.setAmbient( QColor( 26, 26, 26 ) ); + materialSettings.setSpecular( QColor( 10, 10, 10 ) ); + materialSettings.setShininess( 1.0 ); + materialSettings.setDiffuseTexturePath( testDataPath( "/sample_image.png" ) ); + QgsPolygon3DSymbol *symbol3d = new QgsPolygon3DSymbol; + symbol3d->setMaterialSettings( materialSettings.clone() ); + symbol3d->setExtrusionHeight( 10.f ); + QgsVectorLayer3DRenderer *renderer3d = new QgsVectorLayer3DRenderer( symbol3d ); + mLayerBuildings->setRenderer3D( renderer3d ); + + const QgsRectangle fullExtent = mLayerDtm->extent(); + + Qgs3DMapSettings *map = new Qgs3DMapSettings; + map->setCrs( mProject->crs() ); + map->setExtent( fullExtent ); + map->setLayers( QList() << mLayerBuildings << mLayerRgb ); + QgsPointLightSettings defaultLight; + defaultLight.setIntensity( 1.0 ); + defaultLight.setPosition( QgsVector3D( 0, 1000, 0 ) ); + map->setLightSources( { defaultLight.clone() } ); + + QgsFlatTerrainGenerator *flatTerrain = new QgsFlatTerrainGenerator; + flatTerrain->setCrs( map->crs() ); + map->setTerrainGenerator( flatTerrain ); + + QgsOffscreen3DEngine engine; + Qgs3DMapScene *scene = new Qgs3DMapScene( *map, &engine ); + engine.setRootEntity( scene ); + + scene->cameraController()->setLookingAtPoint( QgsVector3D( -60, 10, 360 ), 100, 45, 0 ); + + // When running the test on Travis, it would initially return empty rendered image. + // Capturing the initial image and throwing it away fixes that. Hopefully we will + // find a better fix in the future. + Qgs3DUtils::captureSceneImage( engine, scene ); + QImage img = Qgs3DUtils::captureSceneImage( engine, scene ); + + delete scene; + delete map; + QGSVERIFYIMAGECHECK( "polygon3d_extrusion_textured_phong", "polygon3d_extrusion_textured_phong", img, QString(), 40, QSize( 0, 0 ), 2 ); +} + void TestQgs3DRendering::testExtrudedPolygonsDataDefinedPhong() { QgsPropertyCollection propertyColection; diff --git a/tests/testdata/control_images/3d/expected_polygon3d_extrusion_textured_phong/default/expected_polygon3d_extrusion_textured_phong.png b/tests/testdata/control_images/3d/expected_polygon3d_extrusion_textured_phong/default/expected_polygon3d_extrusion_textured_phong.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe83dc9a89f034db6b82e357239c62a0ef6ef6a GIT binary patch literal 239973 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 z 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

RRP65lud-tu-#v70XVB&CIAr*se$cLF1H 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 literal 0 HcmV?d00001 From 2fdb2cad80fb0c126a03de9d7531b7b68205246c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 11:38:35 +1000 Subject: [PATCH 35/43] Add processing algorithm flag for SecurityRisk And add to "Advanced Python field calculator" algorithm, as that algorithm uses the Python exec() function and is a security risk if run with untrusted/unchecked inputs --- python/PyQt6/core/auto_additions/qgis.py | 7 +++++++ python/PyQt6/core/auto_generated/qgis.sip.in | 1 + python/core/auto_additions/qgis.py | 7 +++++++ python/core/auto_generated/qgis.sip.in | 1 + python/plugins/processing/algs/qgis/FieldPyculator.py | 8 +++++++- src/core/qgis.h | 1 + 6 files changed, 24 insertions(+), 1 deletion(-) diff --git a/python/PyQt6/core/auto_additions/qgis.py b/python/PyQt6/core/auto_additions/qgis.py index 0f59f8308705..b8201f90ad7d 100644 --- a/python/PyQt6/core/auto_additions/qgis.py +++ b/python/PyQt6/core/auto_additions/qgis.py @@ -6228,6 +6228,9 @@ QgsProcessingAlgorithm.Flag.FlagRequiresProject = Qgis.ProcessingAlgorithmFlag.RequiresProject QgsProcessingAlgorithm.FlagRequiresProject.is_monkey_patched = True QgsProcessingAlgorithm.FlagRequiresProject.__doc__ = "The algorithm requires that a valid QgsProject is available from the processing context in order to execute" +QgsProcessingAlgorithm.SecurityRisk = Qgis.ProcessingAlgorithmFlag.SecurityRisk +QgsProcessingAlgorithm.SecurityRisk.is_monkey_patched = True +QgsProcessingAlgorithm.SecurityRisk.__doc__ = "The algorithm represents a potential security risk if executed with untrusted inputs. \n.. versionadded:: 3.40" QgsProcessingAlgorithm.FlagDeprecated = Qgis.ProcessingAlgorithmFlag.Deprecated QgsProcessingAlgorithm.Flag.FlagDeprecated = Qgis.ProcessingAlgorithmFlag.Deprecated QgsProcessingAlgorithm.FlagDeprecated.is_monkey_patched = True @@ -6296,6 +6299,10 @@ Available as ``QgsProcessingAlgorithm.FlagRequiresProject`` in older QGIS releases. +* ``SecurityRisk``: The algorithm represents a potential security risk if executed with untrusted inputs. + + .. versionadded:: 3.40 + * ``Deprecated``: Algorithm is deprecated Available as ``QgsProcessingAlgorithm.FlagDeprecated`` in older QGIS releases. diff --git a/python/PyQt6/core/auto_generated/qgis.sip.in b/python/PyQt6/core/auto_generated/qgis.sip.in index 4de51989d532..7f7611f34e52 100644 --- a/python/PyQt6/core/auto_generated/qgis.sip.in +++ b/python/PyQt6/core/auto_generated/qgis.sip.in @@ -1922,6 +1922,7 @@ The development version SkipGenericModelLogging, NotAvailableInStandaloneTool, RequiresProject, + SecurityRisk, Deprecated, }; diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index db67ec7a24bb..095bf396602b 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -6171,6 +6171,9 @@ QgsProcessingAlgorithm.Flag.FlagRequiresProject = Qgis.ProcessingAlgorithmFlag.RequiresProject QgsProcessingAlgorithm.FlagRequiresProject.is_monkey_patched = True QgsProcessingAlgorithm.FlagRequiresProject.__doc__ = "The algorithm requires that a valid QgsProject is available from the processing context in order to execute" +QgsProcessingAlgorithm.SecurityRisk = Qgis.ProcessingAlgorithmFlag.SecurityRisk +QgsProcessingAlgorithm.SecurityRisk.is_monkey_patched = True +QgsProcessingAlgorithm.SecurityRisk.__doc__ = "The algorithm represents a potential security risk if executed with untrusted inputs. \n.. versionadded:: 3.40" QgsProcessingAlgorithm.FlagDeprecated = Qgis.ProcessingAlgorithmFlag.Deprecated QgsProcessingAlgorithm.Flag.FlagDeprecated = Qgis.ProcessingAlgorithmFlag.Deprecated QgsProcessingAlgorithm.FlagDeprecated.is_monkey_patched = True @@ -6239,6 +6242,10 @@ Available as ``QgsProcessingAlgorithm.FlagRequiresProject`` in older QGIS releases. +* ``SecurityRisk``: The algorithm represents a potential security risk if executed with untrusted inputs. + + .. versionadded:: 3.40 + * ``Deprecated``: Algorithm is deprecated Available as ``QgsProcessingAlgorithm.FlagDeprecated`` in older QGIS releases. diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index 8d685aaa33f7..fdbaad9f57a2 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -1922,6 +1922,7 @@ The development version SkipGenericModelLogging, NotAvailableInStandaloneTool, RequiresProject, + SecurityRisk, Deprecated, }; diff --git a/python/plugins/processing/algs/qgis/FieldPyculator.py b/python/plugins/processing/algs/qgis/FieldPyculator.py index a626d0f592c1..72fed984c2b3 100644 --- a/python/plugins/processing/algs/qgis/FieldPyculator.py +++ b/python/plugins/processing/algs/qgis/FieldPyculator.py @@ -22,7 +22,8 @@ import sys from qgis.PyQt.QtCore import QMetaType -from qgis.core import (QgsProcessingException, +from qgis.core import (Qgis, + QgsProcessingException, QgsField, QgsFields, QgsFeatureSink, @@ -47,6 +48,11 @@ class FieldsPyculator(QgisAlgorithm): OUTPUT = 'OUTPUT' RESULT_VAR_NAME = 'value' + def flags(self): + # This algorithm represents a security risk, due to the use + # of the Python "exec" function + return super().flags() | Qgis.ProcessingAlgorithmFlag.SecurityRisk + def group(self): return self.tr('Vector table') diff --git a/src/core/qgis.h b/src/core/qgis.h index 14ea99d1f3d4..397a5bf681fa 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -3303,6 +3303,7 @@ class CORE_EXPORT Qgis SkipGenericModelLogging SIP_MONKEYPATCH_COMPAT_NAME( FlagSkipGenericModelLogging ) = 1 << 12, //!< When running as part of a model, the generic algorithm setup and results logging should be skipped NotAvailableInStandaloneTool SIP_MONKEYPATCH_COMPAT_NAME( FlagNotAvailableInStandaloneTool ) = 1 << 13, //!< Algorithm should not be available from the standalone "qgis_process" tool. Used to flag algorithms which make no sense outside of the QGIS application, such as "select by..." style algorithms. RequiresProject SIP_MONKEYPATCH_COMPAT_NAME( FlagRequiresProject ) = 1 << 14, //!< The algorithm requires that a valid QgsProject is available from the processing context in order to execute + SecurityRisk = 1 << 15, //!< The algorithm represents a potential security risk if executed with untrusted inputs. \since QGIS 3.40 Deprecated SIP_MONKEYPATCH_COMPAT_NAME( FlagDeprecated ) = HideFromToolbox | HideFromModeler, //!< Algorithm is deprecated }; Q_ENUM( ProcessingAlgorithmFlag ); From 0969806f89c3aadf3f293deae0b4978f5b2637a1 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 11:46:18 +1000 Subject: [PATCH 36/43] Show warning in help for algorithms for known issues or security risk --- .../processing/qgsprocessingalgorithmdialogbase.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp index 2fdf1ce19147..391b4e443a65 100644 --- a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp +++ b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp @@ -796,6 +796,19 @@ QString QgsProcessingAlgorithmDialogBase::formatHelp( QgsProcessingAlgorithm *al } result += QStringLiteral( "

" ).arg( flags.join( QLatin1String( "

pZmkFI6~JC+5i9` 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%0DvpG-Yn%dNHrtal5}rJgfw%x4Nrhk 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

  • " ) ) ); } + if ( algorithm->flags() & Qgis::ProcessingAlgorithmFlag::SecurityRisk ) + { + result += QStringLiteral( "

    %1

    " ).arg( + tr( "Warning: This algorithm is a potential security risk if executed with unchecked inputs, and may result in system damage or data leaks." ) + ); + } + if ( algorithm->flags() & Qgis::ProcessingAlgorithmFlag::KnownIssues ) + { + result += QStringLiteral( "

    %1

    " ).arg( + tr( "Warning: This algorithm has known issues. The results must be carefully validated by the user." ) + ); + } + return result; } From 578aa207d065379cd7016a986891863631a9014f Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 11:48:55 +1000 Subject: [PATCH 37/43] Show warning when loading batch params for algs with security risk If the algorithm has the security risk flag, warn the user before they can open stored batch parameter files --- python/plugins/processing/gui/BatchPanel.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 8369075c00d3..b3e66e6f42ae 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -547,6 +547,20 @@ def clear(self): self.wrappers = [] def load(self): + if self.alg.flags() & Qgis.ProcessingAlgorithmFlag.SecurityRisk: + message_box = QMessageBox() + message_box.setWindowTitle(self.tr("Security warning")) + message_box.setText( + self.tr( + "This algorithm is a potential security risk if executed with unchecked inputs, and may result in system damage or data leaks. Only continue if you trust the source of the file. Continue?")) + message_box.setIcon(QMessageBox.Icon.Warning) + message_box.addButton(QMessageBox.StandardButton.Yes) + message_box.addButton(QMessageBox.StandardButton.No) + message_box.setDefaultButton(QMessageBox.StandardButton.No) + message_box.exec() + if message_box.result() != QMessageBox.StandardButton.Yes: + return + settings = QgsSettings() last_path = settings.value("/Processing/LastBatchPath", QDir.homePath()) filters = ';;'.join([self.tr('Batch Processing files (*.batch)'), From 52226f0b9c0858ac743c59c292b797f694fec995 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 1 Oct 2024 12:03:02 +1000 Subject: [PATCH 38/43] Mark models as security risk if they contain algs with security risks --- .../models/qgsprocessingmodelalgorithm.sip.in | 2 + .../models/qgsprocessingmodelalgorithm.sip.in | 2 + .../models/qgsprocessingmodelalgorithm.cpp | 17 +++++++ .../models/qgsprocessingmodelalgorithm.h | 1 + .../testqgsprocessingmodelalgorithm.cpp | 45 +++++++++++++++++++ 5 files changed, 67 insertions(+) diff --git a/python/PyQt6/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in b/python/PyQt6/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in index bdaa3285fffa..fabbecbc9f5d 100644 --- a/python/PyQt6/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in +++ b/python/PyQt6/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in @@ -32,6 +32,8 @@ Constructor for QgsProcessingModelAlgorithm. virtual void initAlgorithm( const QVariantMap &configuration = QVariantMap() ); //#spellok + virtual Qgis::ProcessingAlgorithmFlags flags() const; + virtual QString name() const; virtual QString displayName() const; diff --git a/python/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in b/python/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in index bdaa3285fffa..fabbecbc9f5d 100644 --- a/python/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in +++ b/python/core/auto_generated/processing/models/qgsprocessingmodelalgorithm.sip.in @@ -32,6 +32,8 @@ Constructor for QgsProcessingModelAlgorithm. virtual void initAlgorithm( const QVariantMap &configuration = QVariantMap() ); //#spellok + virtual Qgis::ProcessingAlgorithmFlags flags() const; + virtual QString name() const; virtual QString displayName() const; diff --git a/src/core/processing/models/qgsprocessingmodelalgorithm.cpp b/src/core/processing/models/qgsprocessingmodelalgorithm.cpp index d83c86cbfd31..d09266e1352b 100644 --- a/src/core/processing/models/qgsprocessingmodelalgorithm.cpp +++ b/src/core/processing/models/qgsprocessingmodelalgorithm.cpp @@ -45,6 +45,23 @@ void QgsProcessingModelAlgorithm::initAlgorithm( const QVariantMap & ) { } +Qgis::ProcessingAlgorithmFlags QgsProcessingModelAlgorithm::flags() const +{ + Qgis::ProcessingAlgorithmFlags res = QgsProcessingAlgorithm::flags(); + + // don't force algorithm attachment here, that's potentially too expensive + QMap< QString, QgsProcessingModelChildAlgorithm >::const_iterator childIt = mChildAlgorithms.constBegin(); + for ( ; childIt != mChildAlgorithms.constEnd(); ++childIt ) + { + if ( childIt->algorithm() && childIt->algorithm()->flags().testFlag( Qgis::ProcessingAlgorithmFlag::SecurityRisk ) ) + { + // security risk flag propagates from child algorithms to model + res |= Qgis::ProcessingAlgorithmFlag::SecurityRisk; + } + } + return res; +} + QString QgsProcessingModelAlgorithm::name() const { return mModelName; diff --git a/src/core/processing/models/qgsprocessingmodelalgorithm.h b/src/core/processing/models/qgsprocessingmodelalgorithm.h index 9f4c1a4e5d62..82f94244ca72 100644 --- a/src/core/processing/models/qgsprocessingmodelalgorithm.h +++ b/src/core/processing/models/qgsprocessingmodelalgorithm.h @@ -47,6 +47,7 @@ class CORE_EXPORT QgsProcessingModelAlgorithm : public QgsProcessingAlgorithm void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; //#spellok + Qgis::ProcessingAlgorithmFlags flags() const override; QString name() const override; QString displayName() const override; QString group() const override; diff --git a/tests/src/analysis/testqgsprocessingmodelalgorithm.cpp b/tests/src/analysis/testqgsprocessingmodelalgorithm.cpp index cd4fd760af22..e6acd88e8919 100644 --- a/tests/src/analysis/testqgsprocessingmodelalgorithm.cpp +++ b/tests/src/analysis/testqgsprocessingmodelalgorithm.cpp @@ -51,6 +51,28 @@ class DummyAlgorithm2 : public QgsProcessingAlgorithm }; + +class DummySecurityRiskAlgorithm : public QgsProcessingAlgorithm +{ + public: + + DummySecurityRiskAlgorithm( const QString &name ) : mName( name ) { } + + void initAlgorithm( const QVariantMap & = QVariantMap() ) override + { + addParameter( new QgsProcessingParameterVectorDestination( QStringLiteral( "vector_dest" ) ) ); + } + QString name() const override { return mName; } + QString displayName() const override { return mName; } + QVariantMap processAlgorithm( const QVariantMap &, QgsProcessingContext &, QgsProcessingFeedback * ) override { return QVariantMap(); } + + Qgis::ProcessingAlgorithmFlags flags() const override { return QgsProcessingAlgorithm::flags() | Qgis::ProcessingAlgorithmFlag::SecurityRisk; } + DummySecurityRiskAlgorithm *createInstance() const override { return new DummySecurityRiskAlgorithm( name() ); } + + QString mName; + +}; + class DummyRaiseExceptionAlgorithm : public QgsProcessingAlgorithm { public: @@ -116,6 +138,7 @@ class DummyProvider4 : public QgsProcessingProvider // clazy:exclude=missing-qob { QVERIFY( addAlgorithm( new DummyAlgorithm2( QStringLiteral( "alg1" ) ) ) ); QVERIFY( addAlgorithm( new DummyRaiseExceptionAlgorithm( QStringLiteral( "raise" ) ) ) ); + QVERIFY( addAlgorithm( new DummySecurityRiskAlgorithm( QStringLiteral( "risky" ) ) ) ); } }; @@ -155,6 +178,7 @@ class TestQgsProcessingModelAlgorithm: public QgsTest void renameModelParameter(); void internalVersion(); void modelChildOrderWithVariables(); + void flags(); private: @@ -2744,5 +2768,26 @@ void TestQgsProcessingModelAlgorithm::modelChildOrderWithVariables() QVERIFY( model.dependsOnChildAlgorithms( QStringLiteral( "c2" ) ).contains( QStringLiteral( "c3" ) ) ); } +void TestQgsProcessingModelAlgorithm::flags() +{ + QgsProcessingModelAlgorithm model( "test", "testGroup" ); + + const QgsProcessingModelParameter stringParam( "a_parameter" ); + model.addModelParameter( new QgsProcessingParameterString( "a_parameter" ), stringParam ); + + QgsProcessingModelChildAlgorithm c1; + c1.setChildId( QStringLiteral( "c1" ) ); + c1.setAlgorithmId( QStringLiteral( "native:stringconcatenation" ) ); + model.addChildAlgorithm( c1 ); + QVERIFY( !model.flags().testFlag( Qgis::ProcessingAlgorithmFlag::SecurityRisk ) ); + + // add algorithm with security risk + QgsProcessingModelChildAlgorithm c2; + c2.setChildId( QStringLiteral( "c2" ) ); + c2.setAlgorithmId( QStringLiteral( "dummy4:risky" ) ); + model.addChildAlgorithm( c2 ); + QVERIFY( model.flags().testFlag( Qgis::ProcessingAlgorithmFlag::SecurityRisk ) ); +} + QGSTEST_MAIN( TestQgsProcessingModelAlgorithm ) #include "testqgsprocessingmodelalgorithm.moc" From 56b6dc7ed20c00c7a3a626cd64765f5ddcaf4221 Mon Sep 17 00:00:00 2001 From: qgis-bot Date: Wed, 2 Oct 2024 00:39:14 +0000 Subject: [PATCH 39/43] =?UTF-8?q?auto=20sipify=20=F0=9F=8D=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/PyQt6/core/class_map.yaml | 125 ++++++++++++++++--------------- python/core/class_map.yaml | 125 ++++++++++++++++--------------- 2 files changed, 126 insertions(+), 124 deletions(-) diff --git a/python/PyQt6/core/class_map.yaml b/python/PyQt6/core/class_map.yaml index 45eb580b62a2..74b87c4eadd3 100644 --- a/python/PyQt6/core/class_map.yaml +++ b/python/PyQt6/core/class_map.yaml @@ -1,10 +1,10 @@ -Qgis.defaultProjectScales: src/core/qgis.h#L5607 +Qgis.defaultProjectScales: src/core/qgis.h#L5608 Qgis.devVersion: src/core/qgis.h#L89 -Qgis.geosVersion: src/core/qgis.h#L5642 -Qgis.geosVersionInt: src/core/qgis.h#L5614 -Qgis.geosVersionMajor: src/core/qgis.h#L5621 -Qgis.geosVersionMinor: src/core/qgis.h#L5628 -Qgis.geosVersionPatch: src/core/qgis.h#L5635 +Qgis.geosVersion: src/core/qgis.h#L5643 +Qgis.geosVersionInt: src/core/qgis.h#L5615 +Qgis.geosVersionMajor: src/core/qgis.h#L5622 +Qgis.geosVersionMinor: src/core/qgis.h#L5629 +Qgis.geosVersionPatch: src/core/qgis.h#L5636 Qgis.releaseName: src/core/qgis.h#L79 Qgis.version: src/core/qgis.h#L65 Qgis.versionInt: src/core/qgis.h#L72 @@ -11851,63 +11851,64 @@ QgsProcessingFeedback.textLog: src/core/processing/qgsprocessingfeedback.h#L165 QgsProcessingFeedback: src/core/processing/qgsprocessingfeedback.h#L37 QgsProcessingLayerPostProcessorInterface.postProcessLayer: src/core/processing/qgsprocessingcontext.h#L875 QgsProcessingLayerPostProcessorInterface: src/core/processing/qgsprocessingcontext.h#L855 -QgsProcessingModelAlgorithm.VariableDefinition: src/core/processing/models/qgsprocessingmodelalgorithm.h#L465 -QgsProcessingModelAlgorithm.activateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L157 -QgsProcessingModelAlgorithm.addChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L123 -QgsProcessingModelAlgorithm.addGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L349 -QgsProcessingModelAlgorithm.addModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L202 -QgsProcessingModelAlgorithm.asPythonCode: src/core/processing/models/qgsprocessingmodelalgorithm.h#L448 -QgsProcessingModelAlgorithm.asPythonCommand: src/core/processing/models/qgsprocessingmodelalgorithm.h#L61 -QgsProcessingModelAlgorithm.canExecute: src/core/processing/models/qgsprocessingmodelalgorithm.h#L60 -QgsProcessingModelAlgorithm.changeParameterName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L227 -QgsProcessingModelAlgorithm.childAlgorithmsDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L234 -QgsProcessingModelAlgorithm.createExpressionContext: src/core/processing/models/qgsprocessingmodelalgorithm.h#L62 -QgsProcessingModelAlgorithm.createExpressionContextScopeForChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L509 -QgsProcessingModelAlgorithm.createInstance: src/core/processing/models/qgsprocessingmodelalgorithm.h#L590 -QgsProcessingModelAlgorithm.deactivateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L149 -QgsProcessingModelAlgorithm.designerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L545 -QgsProcessingModelAlgorithm.displayName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L51 -QgsProcessingModelAlgorithm.fromFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L378 -QgsProcessingModelAlgorithm.group: src/core/processing/models/qgsprocessingmodelalgorithm.h#L52 -QgsProcessingModelAlgorithm.groupId: src/core/processing/models/qgsprocessingmodelalgorithm.h#L53 -QgsProcessingModelAlgorithm.helpUrl: src/core/processing/models/qgsprocessingmodelalgorithm.h#L58 -QgsProcessingModelAlgorithm.icon: src/core/processing/models/qgsprocessingmodelalgorithm.h#L54 +QgsProcessingModelAlgorithm.VariableDefinition: src/core/processing/models/qgsprocessingmodelalgorithm.h#L466 +QgsProcessingModelAlgorithm.activateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L158 +QgsProcessingModelAlgorithm.addChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L124 +QgsProcessingModelAlgorithm.addGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L350 +QgsProcessingModelAlgorithm.addModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L203 +QgsProcessingModelAlgorithm.asPythonCode: src/core/processing/models/qgsprocessingmodelalgorithm.h#L449 +QgsProcessingModelAlgorithm.asPythonCommand: src/core/processing/models/qgsprocessingmodelalgorithm.h#L62 +QgsProcessingModelAlgorithm.canExecute: src/core/processing/models/qgsprocessingmodelalgorithm.h#L61 +QgsProcessingModelAlgorithm.changeParameterName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L228 +QgsProcessingModelAlgorithm.childAlgorithmsDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L235 +QgsProcessingModelAlgorithm.createExpressionContext: src/core/processing/models/qgsprocessingmodelalgorithm.h#L63 +QgsProcessingModelAlgorithm.createExpressionContextScopeForChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L510 +QgsProcessingModelAlgorithm.createInstance: src/core/processing/models/qgsprocessingmodelalgorithm.h#L591 +QgsProcessingModelAlgorithm.deactivateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L150 +QgsProcessingModelAlgorithm.designerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L546 +QgsProcessingModelAlgorithm.displayName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L52 +QgsProcessingModelAlgorithm.flags: src/core/processing/models/qgsprocessingmodelalgorithm.h#L50 +QgsProcessingModelAlgorithm.fromFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L379 +QgsProcessingModelAlgorithm.group: src/core/processing/models/qgsprocessingmodelalgorithm.h#L53 +QgsProcessingModelAlgorithm.groupId: src/core/processing/models/qgsprocessingmodelalgorithm.h#L54 +QgsProcessingModelAlgorithm.helpUrl: src/core/processing/models/qgsprocessingmodelalgorithm.h#L59 +QgsProcessingModelAlgorithm.icon: src/core/processing/models/qgsprocessingmodelalgorithm.h#L55 QgsProcessingModelAlgorithm.initAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L48 -QgsProcessingModelAlgorithm.loadVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L396 -QgsProcessingModelAlgorithm.modelNameMatchesFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L439 -QgsProcessingModelAlgorithm.modelParameterFromChildIdAndOutputName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L565 -QgsProcessingModelAlgorithm.name: src/core/processing/models/qgsprocessingmodelalgorithm.h#L50 -QgsProcessingModelAlgorithm.otherParametersDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L242 -QgsProcessingModelAlgorithm.outputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L324 -QgsProcessingModelAlgorithm.processAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L592 -QgsProcessingModelAlgorithm.removeChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L140 -QgsProcessingModelAlgorithm.removeGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L366 -QgsProcessingModelAlgorithm.removeModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L218 -QgsProcessingModelAlgorithm.safeName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L574 -QgsProcessingModelAlgorithm.setChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L111 -QgsProcessingModelAlgorithm.setChildAlgorithms: src/core/processing/models/qgsprocessingmodelalgorithm.h#L103 -QgsProcessingModelAlgorithm.setDesignerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L558 -QgsProcessingModelAlgorithm.setGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L74 -QgsProcessingModelAlgorithm.setHelpContent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L417 -QgsProcessingModelAlgorithm.setName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L68 -QgsProcessingModelAlgorithm.setOutputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L332 -QgsProcessingModelAlgorithm.setOutputOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L316 -QgsProcessingModelAlgorithm.setParameterComponent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L269 -QgsProcessingModelAlgorithm.setParameterComponents: src/core/processing/models/qgsprocessingmodelalgorithm.h#L260 -QgsProcessingModelAlgorithm.setParameterOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L297 -QgsProcessingModelAlgorithm.setSourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L429 -QgsProcessingModelAlgorithm.setVariables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L532 -QgsProcessingModelAlgorithm.shortDescription: src/core/processing/models/qgsprocessingmodelalgorithm.h#L57 -QgsProcessingModelAlgorithm.shortHelpString: src/core/processing/models/qgsprocessingmodelalgorithm.h#L56 -QgsProcessingModelAlgorithm.sourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L423 -QgsProcessingModelAlgorithm.svgIconPath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L55 -QgsProcessingModelAlgorithm.toFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L372 -QgsProcessingModelAlgorithm.toVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L387 -QgsProcessingModelAlgorithm.updateDestinationParameters: src/core/processing/models/qgsprocessingmodelalgorithm.h#L339 -QgsProcessingModelAlgorithm.updateModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L210 -QgsProcessingModelAlgorithm.validate: src/core/processing/models/qgsprocessingmodelalgorithm.h#L83 -QgsProcessingModelAlgorithm.validateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L194 -QgsProcessingModelAlgorithm.variables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L521 +QgsProcessingModelAlgorithm.loadVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L397 +QgsProcessingModelAlgorithm.modelNameMatchesFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L440 +QgsProcessingModelAlgorithm.modelParameterFromChildIdAndOutputName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L566 +QgsProcessingModelAlgorithm.name: src/core/processing/models/qgsprocessingmodelalgorithm.h#L51 +QgsProcessingModelAlgorithm.otherParametersDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L243 +QgsProcessingModelAlgorithm.outputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L325 +QgsProcessingModelAlgorithm.processAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L593 +QgsProcessingModelAlgorithm.removeChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L141 +QgsProcessingModelAlgorithm.removeGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L367 +QgsProcessingModelAlgorithm.removeModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L219 +QgsProcessingModelAlgorithm.safeName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L575 +QgsProcessingModelAlgorithm.setChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L112 +QgsProcessingModelAlgorithm.setChildAlgorithms: src/core/processing/models/qgsprocessingmodelalgorithm.h#L104 +QgsProcessingModelAlgorithm.setDesignerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L559 +QgsProcessingModelAlgorithm.setGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L75 +QgsProcessingModelAlgorithm.setHelpContent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L418 +QgsProcessingModelAlgorithm.setName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L69 +QgsProcessingModelAlgorithm.setOutputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L333 +QgsProcessingModelAlgorithm.setOutputOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L317 +QgsProcessingModelAlgorithm.setParameterComponent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L270 +QgsProcessingModelAlgorithm.setParameterComponents: src/core/processing/models/qgsprocessingmodelalgorithm.h#L261 +QgsProcessingModelAlgorithm.setParameterOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L298 +QgsProcessingModelAlgorithm.setSourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L430 +QgsProcessingModelAlgorithm.setVariables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L533 +QgsProcessingModelAlgorithm.shortDescription: src/core/processing/models/qgsprocessingmodelalgorithm.h#L58 +QgsProcessingModelAlgorithm.shortHelpString: src/core/processing/models/qgsprocessingmodelalgorithm.h#L57 +QgsProcessingModelAlgorithm.sourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L424 +QgsProcessingModelAlgorithm.svgIconPath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L56 +QgsProcessingModelAlgorithm.toFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L373 +QgsProcessingModelAlgorithm.toVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L388 +QgsProcessingModelAlgorithm.updateDestinationParameters: src/core/processing/models/qgsprocessingmodelalgorithm.h#L340 +QgsProcessingModelAlgorithm.updateModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L211 +QgsProcessingModelAlgorithm.validate: src/core/processing/models/qgsprocessingmodelalgorithm.h#L84 +QgsProcessingModelAlgorithm.validateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L195 +QgsProcessingModelAlgorithm.variables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L522 QgsProcessingModelAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L37 QgsProcessingModelChildAlgorithm.addParameterSources: src/core/processing/models/qgsprocessingmodelchildalgorithm.h#L177 QgsProcessingModelChildAlgorithm.algorithm: src/core/processing/models/qgsprocessingmodelchildalgorithm.h#L150 diff --git a/python/core/class_map.yaml b/python/core/class_map.yaml index f6be2bf81ef7..59729590a9be 100644 --- a/python/core/class_map.yaml +++ b/python/core/class_map.yaml @@ -1,10 +1,10 @@ -Qgis.defaultProjectScales: src/core/qgis.h#L5607 +Qgis.defaultProjectScales: src/core/qgis.h#L5608 Qgis.devVersion: src/core/qgis.h#L89 -Qgis.geosVersion: src/core/qgis.h#L5642 -Qgis.geosVersionInt: src/core/qgis.h#L5614 -Qgis.geosVersionMajor: src/core/qgis.h#L5621 -Qgis.geosVersionMinor: src/core/qgis.h#L5628 -Qgis.geosVersionPatch: src/core/qgis.h#L5635 +Qgis.geosVersion: src/core/qgis.h#L5643 +Qgis.geosVersionInt: src/core/qgis.h#L5615 +Qgis.geosVersionMajor: src/core/qgis.h#L5622 +Qgis.geosVersionMinor: src/core/qgis.h#L5629 +Qgis.geosVersionPatch: src/core/qgis.h#L5636 Qgis.releaseName: src/core/qgis.h#L79 Qgis.version: src/core/qgis.h#L65 Qgis.versionInt: src/core/qgis.h#L72 @@ -11851,63 +11851,64 @@ QgsProcessingFeedback.textLog: src/core/processing/qgsprocessingfeedback.h#L165 QgsProcessingFeedback: src/core/processing/qgsprocessingfeedback.h#L37 QgsProcessingLayerPostProcessorInterface.postProcessLayer: src/core/processing/qgsprocessingcontext.h#L875 QgsProcessingLayerPostProcessorInterface: src/core/processing/qgsprocessingcontext.h#L855 -QgsProcessingModelAlgorithm.VariableDefinition: src/core/processing/models/qgsprocessingmodelalgorithm.h#L465 -QgsProcessingModelAlgorithm.activateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L157 -QgsProcessingModelAlgorithm.addChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L123 -QgsProcessingModelAlgorithm.addGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L349 -QgsProcessingModelAlgorithm.addModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L202 -QgsProcessingModelAlgorithm.asPythonCode: src/core/processing/models/qgsprocessingmodelalgorithm.h#L448 -QgsProcessingModelAlgorithm.asPythonCommand: src/core/processing/models/qgsprocessingmodelalgorithm.h#L61 -QgsProcessingModelAlgorithm.canExecute: src/core/processing/models/qgsprocessingmodelalgorithm.h#L60 -QgsProcessingModelAlgorithm.changeParameterName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L227 -QgsProcessingModelAlgorithm.childAlgorithmsDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L234 -QgsProcessingModelAlgorithm.createExpressionContext: src/core/processing/models/qgsprocessingmodelalgorithm.h#L62 -QgsProcessingModelAlgorithm.createExpressionContextScopeForChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L509 -QgsProcessingModelAlgorithm.createInstance: src/core/processing/models/qgsprocessingmodelalgorithm.h#L590 -QgsProcessingModelAlgorithm.deactivateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L149 -QgsProcessingModelAlgorithm.designerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L545 -QgsProcessingModelAlgorithm.displayName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L51 -QgsProcessingModelAlgorithm.fromFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L378 -QgsProcessingModelAlgorithm.group: src/core/processing/models/qgsprocessingmodelalgorithm.h#L52 -QgsProcessingModelAlgorithm.groupId: src/core/processing/models/qgsprocessingmodelalgorithm.h#L53 -QgsProcessingModelAlgorithm.helpUrl: src/core/processing/models/qgsprocessingmodelalgorithm.h#L58 -QgsProcessingModelAlgorithm.icon: src/core/processing/models/qgsprocessingmodelalgorithm.h#L54 +QgsProcessingModelAlgorithm.VariableDefinition: src/core/processing/models/qgsprocessingmodelalgorithm.h#L466 +QgsProcessingModelAlgorithm.activateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L158 +QgsProcessingModelAlgorithm.addChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L124 +QgsProcessingModelAlgorithm.addGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L350 +QgsProcessingModelAlgorithm.addModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L203 +QgsProcessingModelAlgorithm.asPythonCode: src/core/processing/models/qgsprocessingmodelalgorithm.h#L449 +QgsProcessingModelAlgorithm.asPythonCommand: src/core/processing/models/qgsprocessingmodelalgorithm.h#L62 +QgsProcessingModelAlgorithm.canExecute: src/core/processing/models/qgsprocessingmodelalgorithm.h#L61 +QgsProcessingModelAlgorithm.changeParameterName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L228 +QgsProcessingModelAlgorithm.childAlgorithmsDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L235 +QgsProcessingModelAlgorithm.createExpressionContext: src/core/processing/models/qgsprocessingmodelalgorithm.h#L63 +QgsProcessingModelAlgorithm.createExpressionContextScopeForChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L510 +QgsProcessingModelAlgorithm.createInstance: src/core/processing/models/qgsprocessingmodelalgorithm.h#L591 +QgsProcessingModelAlgorithm.deactivateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L150 +QgsProcessingModelAlgorithm.designerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L546 +QgsProcessingModelAlgorithm.displayName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L52 +QgsProcessingModelAlgorithm.flags: src/core/processing/models/qgsprocessingmodelalgorithm.h#L50 +QgsProcessingModelAlgorithm.fromFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L379 +QgsProcessingModelAlgorithm.group: src/core/processing/models/qgsprocessingmodelalgorithm.h#L53 +QgsProcessingModelAlgorithm.groupId: src/core/processing/models/qgsprocessingmodelalgorithm.h#L54 +QgsProcessingModelAlgorithm.helpUrl: src/core/processing/models/qgsprocessingmodelalgorithm.h#L59 +QgsProcessingModelAlgorithm.icon: src/core/processing/models/qgsprocessingmodelalgorithm.h#L55 QgsProcessingModelAlgorithm.initAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L48 -QgsProcessingModelAlgorithm.loadVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L396 -QgsProcessingModelAlgorithm.modelNameMatchesFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L439 -QgsProcessingModelAlgorithm.modelParameterFromChildIdAndOutputName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L565 -QgsProcessingModelAlgorithm.name: src/core/processing/models/qgsprocessingmodelalgorithm.h#L50 -QgsProcessingModelAlgorithm.otherParametersDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L242 -QgsProcessingModelAlgorithm.outputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L324 -QgsProcessingModelAlgorithm.processAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L592 -QgsProcessingModelAlgorithm.removeChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L140 -QgsProcessingModelAlgorithm.removeGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L366 -QgsProcessingModelAlgorithm.removeModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L218 -QgsProcessingModelAlgorithm.safeName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L574 -QgsProcessingModelAlgorithm.setChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L111 -QgsProcessingModelAlgorithm.setChildAlgorithms: src/core/processing/models/qgsprocessingmodelalgorithm.h#L103 -QgsProcessingModelAlgorithm.setDesignerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L558 -QgsProcessingModelAlgorithm.setGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L74 -QgsProcessingModelAlgorithm.setHelpContent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L417 -QgsProcessingModelAlgorithm.setName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L68 -QgsProcessingModelAlgorithm.setOutputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L332 -QgsProcessingModelAlgorithm.setOutputOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L316 -QgsProcessingModelAlgorithm.setParameterComponent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L269 -QgsProcessingModelAlgorithm.setParameterComponents: src/core/processing/models/qgsprocessingmodelalgorithm.h#L260 -QgsProcessingModelAlgorithm.setParameterOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L297 -QgsProcessingModelAlgorithm.setSourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L429 -QgsProcessingModelAlgorithm.setVariables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L532 -QgsProcessingModelAlgorithm.shortDescription: src/core/processing/models/qgsprocessingmodelalgorithm.h#L57 -QgsProcessingModelAlgorithm.shortHelpString: src/core/processing/models/qgsprocessingmodelalgorithm.h#L56 -QgsProcessingModelAlgorithm.sourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L423 -QgsProcessingModelAlgorithm.svgIconPath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L55 -QgsProcessingModelAlgorithm.toFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L372 -QgsProcessingModelAlgorithm.toVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L387 -QgsProcessingModelAlgorithm.updateDestinationParameters: src/core/processing/models/qgsprocessingmodelalgorithm.h#L339 -QgsProcessingModelAlgorithm.updateModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L210 -QgsProcessingModelAlgorithm.validate: src/core/processing/models/qgsprocessingmodelalgorithm.h#L83 -QgsProcessingModelAlgorithm.validateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L194 -QgsProcessingModelAlgorithm.variables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L521 +QgsProcessingModelAlgorithm.loadVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L397 +QgsProcessingModelAlgorithm.modelNameMatchesFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L440 +QgsProcessingModelAlgorithm.modelParameterFromChildIdAndOutputName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L566 +QgsProcessingModelAlgorithm.name: src/core/processing/models/qgsprocessingmodelalgorithm.h#L51 +QgsProcessingModelAlgorithm.otherParametersDependOnParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L243 +QgsProcessingModelAlgorithm.outputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L325 +QgsProcessingModelAlgorithm.processAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L593 +QgsProcessingModelAlgorithm.removeChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L141 +QgsProcessingModelAlgorithm.removeGroupBox: src/core/processing/models/qgsprocessingmodelalgorithm.h#L367 +QgsProcessingModelAlgorithm.removeModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L219 +QgsProcessingModelAlgorithm.safeName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L575 +QgsProcessingModelAlgorithm.setChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L112 +QgsProcessingModelAlgorithm.setChildAlgorithms: src/core/processing/models/qgsprocessingmodelalgorithm.h#L104 +QgsProcessingModelAlgorithm.setDesignerParameterValues: src/core/processing/models/qgsprocessingmodelalgorithm.h#L559 +QgsProcessingModelAlgorithm.setGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L75 +QgsProcessingModelAlgorithm.setHelpContent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L418 +QgsProcessingModelAlgorithm.setName: src/core/processing/models/qgsprocessingmodelalgorithm.h#L69 +QgsProcessingModelAlgorithm.setOutputGroup: src/core/processing/models/qgsprocessingmodelalgorithm.h#L333 +QgsProcessingModelAlgorithm.setOutputOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L317 +QgsProcessingModelAlgorithm.setParameterComponent: src/core/processing/models/qgsprocessingmodelalgorithm.h#L270 +QgsProcessingModelAlgorithm.setParameterComponents: src/core/processing/models/qgsprocessingmodelalgorithm.h#L261 +QgsProcessingModelAlgorithm.setParameterOrder: src/core/processing/models/qgsprocessingmodelalgorithm.h#L298 +QgsProcessingModelAlgorithm.setSourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L430 +QgsProcessingModelAlgorithm.setVariables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L533 +QgsProcessingModelAlgorithm.shortDescription: src/core/processing/models/qgsprocessingmodelalgorithm.h#L58 +QgsProcessingModelAlgorithm.shortHelpString: src/core/processing/models/qgsprocessingmodelalgorithm.h#L57 +QgsProcessingModelAlgorithm.sourceFilePath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L424 +QgsProcessingModelAlgorithm.svgIconPath: src/core/processing/models/qgsprocessingmodelalgorithm.h#L56 +QgsProcessingModelAlgorithm.toFile: src/core/processing/models/qgsprocessingmodelalgorithm.h#L373 +QgsProcessingModelAlgorithm.toVariant: src/core/processing/models/qgsprocessingmodelalgorithm.h#L388 +QgsProcessingModelAlgorithm.updateDestinationParameters: src/core/processing/models/qgsprocessingmodelalgorithm.h#L340 +QgsProcessingModelAlgorithm.updateModelParameter: src/core/processing/models/qgsprocessingmodelalgorithm.h#L211 +QgsProcessingModelAlgorithm.validate: src/core/processing/models/qgsprocessingmodelalgorithm.h#L84 +QgsProcessingModelAlgorithm.validateChildAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L195 +QgsProcessingModelAlgorithm.variables: src/core/processing/models/qgsprocessingmodelalgorithm.h#L522 QgsProcessingModelAlgorithm: src/core/processing/models/qgsprocessingmodelalgorithm.h#L37 QgsProcessingModelChildAlgorithm.addParameterSources: src/core/processing/models/qgsprocessingmodelchildalgorithm.h#L177 QgsProcessingModelChildAlgorithm.algorithm: src/core/processing/models/qgsprocessingmodelchildalgorithm.h#L150 From 9a08f1097a80d793f893b2b3afc7feb70ccd418b Mon Sep 17 00:00:00 2001 From: Nick Bowsher <55232428+nstrahl@users.noreply.github.com> Date: Wed, 2 Oct 2024 03:13:40 +0200 Subject: [PATCH 40/43] [feature] Add extra mesh layer legend node for currently displayed vector datasets --- .../default/propertyicons/meshvectors.svg | 2 +- .../layertree/qgscolorramplegendnode.sip.in | 10 ++- .../qgslayertreemodellegendnode.sip.in | 4 +- .../layertree/qgscolorramplegendnode.sip.in | 10 ++- .../qgslayertreemodellegendnode.sip.in | 4 +- src/core/layertree/qgscolorramplegendnode.cpp | 13 ++- src/core/layertree/qgscolorramplegendnode.h | 13 ++- .../layertree/qgslayertreemodellegendnode.cpp | 29 ++++--- .../layertree/qgslayertreemodellegendnode.h | 5 +- src/core/qgsmaplayerlegend.cpp | 77 +++++++++++++++-- tests/src/core/testqgslayertree.cpp | 5 +- tests/src/core/testqgslegendrenderer.cpp | 80 +++++++++++++++++- .../src/python/test_qgscolorramplegendnode.py | 4 +- ...xpected_legend_diagram_attributes_mask.png | Bin 6905 -> 6961 bytes ..._legend_mesh_diagram_color_ramp_vector.png | Bin 0 -> 11935 bytes ...nd_mesh_diagram_color_ramp_vector_mask.png | Bin 0 -> 12179 bytes ...expected_legend_mesh_diagram_no_vector.png | Bin 0 -> 6917 bytes ...ted_legend_mesh_diagram_no_vector_mask.png | Bin 0 -> 6147 bytes ...xpected_legend_mesh_diagram_red_vector.png | Bin 0 -> 9095 bytes ...ed_legend_mesh_diagram_red_vector_mask.png | Bin 0 -> 9080 bytes 20 files changed, 218 insertions(+), 38 deletions(-) create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector.png create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector_mask.png create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_no_vector/expected_legend_mesh_diagram_no_vector.png create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_no_vector/expected_legend_mesh_diagram_no_vector_mask.png create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_red_vector/expected_legend_mesh_diagram_red_vector.png create mode 100644 tests/testdata/control_images/legend/expected_legend_mesh_diagram_red_vector/expected_legend_mesh_diagram_red_vector_mask.png diff --git a/images/themes/default/propertyicons/meshvectors.svg b/images/themes/default/propertyicons/meshvectors.svg index b2659f1e7f38..ad8c3e722ab0 100644 --- a/images/themes/default/propertyicons/meshvectors.svg +++ b/images/themes/default/propertyicons/meshvectors.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/python/PyQt6/core/auto_generated/layertree/qgscolorramplegendnode.sip.in b/python/PyQt6/core/auto_generated/layertree/qgscolorramplegendnode.sip.in index 5ff845be34ef..ca6ff9325755 100644 --- a/python/PyQt6/core/auto_generated/layertree/qgscolorramplegendnode.sip.in +++ b/python/PyQt6/core/auto_generated/layertree/qgscolorramplegendnode.sip.in @@ -23,7 +23,8 @@ A legend node which renders a color ramp. public: QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp /Transfer/, - const QString &minimumLabel, const QString &maximumLabel, QObject *parent /TransferThis/ = 0 ); + const QString &minimumLabel, const QString &maximumLabel, QObject *parent /TransferThis/ = 0, + const QString &key = QString(), const QString &parentKey = QString() ); %Docstring Constructor for QgsColorRampLegendNode. @@ -32,11 +33,14 @@ Constructor for QgsColorRampLegendNode. :param minimumLabel: label text to render for the minimum value in the ramp :param maximumLabel: label text to render for the maximum value in the ramp :param parent: attach a parent QObject to the legend node. +:param key: rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) +:param parentKey: rule key of parent (since QGIS 3.40) %End QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp /Transfer/, const QgsColorRampLegendNodeSettings &settings, double minimumValue, - double maximumValue, QObject *parent /TransferThis/ = 0 ); + double maximumValue, QObject *parent /TransferThis/ = 0, + const QString &key = QString(), const QString &parentKey = QString() ); %Docstring Constructor for QgsColorRampLegendNode. @@ -46,6 +50,8 @@ Constructor for QgsColorRampLegendNode. :param minimumValue: value associated with minimum of ramp :param maximumValue: value associated with maximum of ramp :param parent: attach a parent QObject to the legend node. +:param key: rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) +:param parentKey: rule key of parent (since QGIS 3.40) %End diff --git a/python/PyQt6/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in b/python/PyQt6/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in index c0b284923f37..e21b95ef9768 100644 --- a/python/PyQt6/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in +++ b/python/PyQt6/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in @@ -582,7 +582,8 @@ Implementation of legend node interface for displaying raster legend entries %End public: - QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent /TransferThis/ = 0, bool isCheckable = false, const QString &ruleKey = QString() ); + QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent /TransferThis/ = 0, + bool isCheckable = false, const QString &ruleKey = QString(), const QString &parentRuleKey = QString() ); %Docstring Constructor for QgsRasterSymbolLegendNode. @@ -592,6 +593,7 @@ Constructor for QgsRasterSymbolLegendNode. :param parent: attach a parent QObject to the legend node. :param isCheckable: set to ``True`` to enable the checkbox for the node (since QGIS 3.18) :param ruleKey: optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.18) +:param parentRuleKey: rule key of parent (since QGIS 3.40) %End virtual Qt::ItemFlags flags() const; diff --git a/python/core/auto_generated/layertree/qgscolorramplegendnode.sip.in b/python/core/auto_generated/layertree/qgscolorramplegendnode.sip.in index 5ff845be34ef..ca6ff9325755 100644 --- a/python/core/auto_generated/layertree/qgscolorramplegendnode.sip.in +++ b/python/core/auto_generated/layertree/qgscolorramplegendnode.sip.in @@ -23,7 +23,8 @@ A legend node which renders a color ramp. public: QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp /Transfer/, - const QString &minimumLabel, const QString &maximumLabel, QObject *parent /TransferThis/ = 0 ); + const QString &minimumLabel, const QString &maximumLabel, QObject *parent /TransferThis/ = 0, + const QString &key = QString(), const QString &parentKey = QString() ); %Docstring Constructor for QgsColorRampLegendNode. @@ -32,11 +33,14 @@ Constructor for QgsColorRampLegendNode. :param minimumLabel: label text to render for the minimum value in the ramp :param maximumLabel: label text to render for the maximum value in the ramp :param parent: attach a parent QObject to the legend node. +:param key: rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) +:param parentKey: rule key of parent (since QGIS 3.40) %End QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp /Transfer/, const QgsColorRampLegendNodeSettings &settings, double minimumValue, - double maximumValue, QObject *parent /TransferThis/ = 0 ); + double maximumValue, QObject *parent /TransferThis/ = 0, + const QString &key = QString(), const QString &parentKey = QString() ); %Docstring Constructor for QgsColorRampLegendNode. @@ -46,6 +50,8 @@ Constructor for QgsColorRampLegendNode. :param minimumValue: value associated with minimum of ramp :param maximumValue: value associated with maximum of ramp :param parent: attach a parent QObject to the legend node. +:param key: rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) +:param parentKey: rule key of parent (since QGIS 3.40) %End diff --git a/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in b/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in index f2b7406ccbd8..fadc70328f35 100644 --- a/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in +++ b/python/core/auto_generated/layertree/qgslayertreemodellegendnode.sip.in @@ -582,7 +582,8 @@ Implementation of legend node interface for displaying raster legend entries %End public: - QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent /TransferThis/ = 0, bool isCheckable = false, const QString &ruleKey = QString() ); + QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent /TransferThis/ = 0, + bool isCheckable = false, const QString &ruleKey = QString(), const QString &parentRuleKey = QString() ); %Docstring Constructor for QgsRasterSymbolLegendNode. @@ -592,6 +593,7 @@ Constructor for QgsRasterSymbolLegendNode. :param parent: attach a parent QObject to the legend node. :param isCheckable: set to ``True`` to enable the checkbox for the node (since QGIS 3.18) :param ruleKey: optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.18) +:param parentRuleKey: rule key of parent (since QGIS 3.40) %End virtual Qt::ItemFlags flags() const; diff --git a/src/core/layertree/qgscolorramplegendnode.cpp b/src/core/layertree/qgscolorramplegendnode.cpp index 7dbb85904275..780984813114 100644 --- a/src/core/layertree/qgscolorramplegendnode.cpp +++ b/src/core/layertree/qgscolorramplegendnode.cpp @@ -27,9 +27,11 @@ #include #include -QgsColorRampLegendNode::QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp, const QString &minimumLabel, const QString &maximumLabel, QObject *parent ) +QgsColorRampLegendNode::QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp, const QString &minimumLabel, const QString &maximumLabel, QObject *parent, const QString &key, const QString &parentKey ) : QgsLayerTreeModelLegendNode( nodeLayer, parent ) , mRamp( ramp ) + , mKey( key ) + , mParentKey( parentKey ) { mSettings.setMinimumLabel( minimumLabel ); mSettings.setMaximumLabel( maximumLabel ); @@ -37,12 +39,14 @@ QgsColorRampLegendNode::QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, Qg init( nodeLayer ); } -QgsColorRampLegendNode::QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp, const QgsColorRampLegendNodeSettings &settings, double minimumValue, double maximumValue, QObject *parent ) +QgsColorRampLegendNode::QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp, const QgsColorRampLegendNodeSettings &settings, double minimumValue, double maximumValue, QObject *parent, const QString &key, const QString &parentKey ) : QgsLayerTreeModelLegendNode( nodeLayer, parent ) , mRamp( ramp ) , mSettings( settings ) , mMinimumValue( minimumValue ) , mMaximumValue( maximumValue ) + , mKey( key ) + , mParentKey( parentKey ) { init( nodeLayer ); } @@ -178,7 +182,10 @@ QVariant QgsColorRampLegendNode::data( int role ) const { return QgsLayerTreeModelLegendNode::ColorRampLegend; } - + else if ( role == static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::RuleKey ) ) + return mKey; + else if ( role == static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::ParentRuleKey ) ) + return mParentKey; return QVariant(); } diff --git a/src/core/layertree/qgscolorramplegendnode.h b/src/core/layertree/qgscolorramplegendnode.h index 2c6089235d30..8856770b1bdc 100644 --- a/src/core/layertree/qgscolorramplegendnode.h +++ b/src/core/layertree/qgscolorramplegendnode.h @@ -43,9 +43,12 @@ class CORE_EXPORT QgsColorRampLegendNode : public QgsLayerTreeModelLegendNode * \param minimumLabel label text to render for the minimum value in the ramp * \param maximumLabel label text to render for the maximum value in the ramp * \param parent attach a parent QObject to the legend node. + * \param key rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) + * \param parentKey rule key of parent (since QGIS 3.40) */ QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp SIP_TRANSFER, - const QString &minimumLabel, const QString &maximumLabel, QObject *parent SIP_TRANSFERTHIS = nullptr ); + const QString &minimumLabel, const QString &maximumLabel, QObject *parent SIP_TRANSFERTHIS = nullptr, + const QString &key = QString(), const QString &parentKey = QString() ); /** * Constructor for QgsColorRampLegendNode. @@ -55,10 +58,13 @@ class CORE_EXPORT QgsColorRampLegendNode : public QgsLayerTreeModelLegendNode * \param minimumValue value associated with minimum of ramp * \param maximumValue value associated with maximum of ramp * \param parent attach a parent QObject to the legend node. + * \param key rule key. optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.40) + * \param parentKey rule key of parent (since QGIS 3.40) */ QgsColorRampLegendNode( QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp SIP_TRANSFER, const QgsColorRampLegendNodeSettings &settings, double minimumValue, - double maximumValue, QObject *parent SIP_TRANSFERTHIS = nullptr ); + double maximumValue, QObject *parent SIP_TRANSFERTHIS = nullptr, + const QString &key = QString(), const QString &parentKey = QString() ); QVariant data( int role ) const override; @@ -113,7 +119,8 @@ class CORE_EXPORT QgsColorRampLegendNode : public QgsLayerTreeModelLegendNode QgsColorRampLegendNodeSettings mSettings; double mMinimumValue = 0; double mMaximumValue = 0; - + QString mKey; + QString mParentKey; }; diff --git a/src/core/layertree/qgslayertreemodellegendnode.cpp b/src/core/layertree/qgslayertreemodellegendnode.cpp index b6ab65296057..1c9ecea6867a 100644 --- a/src/core/layertree/qgslayertreemodellegendnode.cpp +++ b/src/core/layertree/qgslayertreemodellegendnode.cpp @@ -142,27 +142,26 @@ QSizeF QgsLayerTreeModelLegendNode::drawSymbol( const QgsLegendSettings &setting size.setHeight( ctx->patchSize.height( ) ); } - if ( ctx && ctx->painter ) + if ( ctx && ctx->painter && ctx->context ) { + const QgsScopedRenderContextScaleToPixels scopedScaleToPixels( *( ctx->context ) ); + const double scaleFactor = ctx->context->scaleFactor(); + const int width = static_cast( size.width() * scaleFactor ); + const int height = static_cast( size.height() * scaleFactor ); + const int y = static_cast( ( ctx->top + ( itemHeight - size.height() ) / 2 ) * scaleFactor ); + int x = 0; + switch ( settings.symbolAlignment() ) { case Qt::AlignLeft: default: - symbolIcon.paint( ctx->painter, - static_cast< int >( ctx->columnLeft ), - static_cast< int >( ctx->top + ( itemHeight - size.height() ) / 2 ), - static_cast< int >( size.width() ), - static_cast< int >( size.height() ) ); + x = static_cast( ctx->columnLeft * scaleFactor ); break; - case Qt::AlignRight: - symbolIcon.paint( ctx->painter, - static_cast< int >( ctx->columnRight - size.width() ), - static_cast< int >( ctx->top + ( itemHeight - size.height() ) / 2 ), - static_cast< int >( size.width() ), - static_cast< int >( size.height() ) ); + x = static_cast( ( ctx->columnRight - size.width() ) * scaleFactor ); break; } + symbolIcon.paint( ctx->painter, x, y, width, height ); } return size; } @@ -1070,12 +1069,13 @@ QJsonObject QgsImageLegendNode::exportSymbolToJson( const QgsLegendSettings &, c // ------------------------------------------------------------------------- -QgsRasterSymbolLegendNode::QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent, bool isCheckable, const QString &ruleKey ) +QgsRasterSymbolLegendNode::QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent, bool isCheckable, const QString &ruleKey, const QString &parentRuleKey ) : QgsLayerTreeModelLegendNode( nodeLayer, parent ) , mColor( color ) , mLabel( label ) , mCheckable( isCheckable ) , mRuleKey( ruleKey ) + , mParentRuleKey( parentRuleKey ) { } @@ -1109,6 +1109,9 @@ QVariant QgsRasterSymbolLegendNode::data( int role ) const case static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::RuleKey ): return mRuleKey; + case static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::ParentRuleKey ): + return mParentRuleKey; + case Qt::CheckStateRole: { if ( !mCheckable ) diff --git a/src/core/layertree/qgslayertreemodellegendnode.h b/src/core/layertree/qgslayertreemodellegendnode.h index cc5d179aa9ef..8f3579da132c 100644 --- a/src/core/layertree/qgslayertreemodellegendnode.h +++ b/src/core/layertree/qgslayertreemodellegendnode.h @@ -679,8 +679,10 @@ class CORE_EXPORT QgsRasterSymbolLegendNode : public QgsLayerTreeModelLegendNode * \param parent attach a parent QObject to the legend node. * \param isCheckable set to TRUE to enable the checkbox for the node (since QGIS 3.18) * \param ruleKey optional identifier to allow a unique ID to be assigned to the node by a renderer (since QGIS 3.18) + * \param parentRuleKey rule key of parent (since QGIS 3.40) */ - QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent SIP_TRANSFERTHIS = nullptr, bool isCheckable = false, const QString &ruleKey = QString() ); + QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent SIP_TRANSFERTHIS = nullptr, + bool isCheckable = false, const QString &ruleKey = QString(), const QString &parentRuleKey = QString() ); Qt::ItemFlags flags() const override; QVariant data( int role ) const override; @@ -715,6 +717,7 @@ class CORE_EXPORT QgsRasterSymbolLegendNode : public QgsLayerTreeModelLegendNode QString mLabel; bool mCheckable = false; QString mRuleKey; + QString mParentRuleKey; }; class QgsImageFetcher; diff --git a/src/core/qgsmaplayerlegend.cpp b/src/core/qgsmaplayerlegend.cpp index 59680bd262b8..14486fc9bb47 100644 --- a/src/core/qgsmaplayerlegend.cpp +++ b/src/core/qgsmaplayerlegend.cpp @@ -552,16 +552,17 @@ QList QgsDefaultMeshLayerLegend::createLayerTreeM return nodes; } - nodes << new QgsSimpleLegendNode( nodeLayer, name ); - if ( indexScalar > -1 ) { + const QString scalarNameKey = QStringLiteral( "scalarName" ); + nodes << new QgsSimpleLegendNode( nodeLayer, mLayer->datasetGroupMetadata( indexScalar ).name(), + QIcon(), nullptr, scalarNameKey ); const QgsMeshRendererScalarSettings settings = rendererSettings.scalarSettings( indexScalar ); const QgsColorRampShader shader = settings.colorRampShader(); switch ( shader.colorRampType() ) { case Qgis::ShaderInterpolationMethod::Linear: - if ( ! shader.legendSettings() || shader.legendSettings()->useContinuousLegend() ) + if ( !shader.legendSettings() || shader.legendSettings()->useContinuousLegend() ) { // for interpolated shaders we use a ramp legend node if ( !shader.colorRampItemList().isEmpty() ) @@ -569,7 +570,10 @@ QList QgsDefaultMeshLayerLegend::createLayerTreeM nodes << new QgsColorRampLegendNode( nodeLayer, shader.createColorRamp(), shader.legendSettings() ? *shader.legendSettings() : QgsColorRampLegendNodeSettings(), shader.minimumValue(), - shader.maximumValue() ); + shader.maximumValue(), + nullptr, + QStringLiteral( "scalarLegend" ), + scalarNameKey ); } break; } @@ -582,13 +586,76 @@ QList QgsDefaultMeshLayerLegend::createLayerTreeM settings.colorRampShader().legendSymbologyItems( items ); for ( const QPair< QString, QColor > &item : items ) { - nodes << new QgsRasterSymbolLegendNode( nodeLayer, item.second, item.first ); + nodes << new QgsRasterSymbolLegendNode( nodeLayer, item.second, item.first, nullptr, false, + QStringLiteral( "scalarLegend" ) + QUuid::createUuid().toString(), + scalarNameKey + ); } break; } } } + if ( indexVector > -1 ) + { + const QgsMeshRendererVectorSettings settings = rendererSettings.vectorSettings( indexVector ); + const QString vectorNameKey = QStringLiteral( "vectorName" ); + switch ( settings.coloringMethod() ) + { + case QgsInterpolatedLineColor::ColoringMethod::SingleColor: + { + const QColor arrowColor = settings.color(); + const QIcon vectorIcon = QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/meshvectors.svg" ), arrowColor, arrowColor ); + nodes << new QgsSimpleLegendNode( nodeLayer, mLayer->datasetGroupMetadata( indexVector ).name(), + vectorIcon, nullptr, vectorNameKey ); + break; + } + case QgsInterpolatedLineColor::ColoringMethod::ColorRamp: + { + const QIcon vectorIcon = QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/meshvectors.svg" ) ); + nodes << new QgsSimpleLegendNode( nodeLayer, mLayer->datasetGroupMetadata( indexVector ).name(), + vectorIcon, nullptr, vectorNameKey ); + const QgsColorRampShader shader = settings.colorRampShader(); + switch ( shader.colorRampType() ) + { + case Qgis::ShaderInterpolationMethod::Linear: + if ( !shader.legendSettings() || shader.legendSettings()->useContinuousLegend() ) + { + // for interpolated shaders we use a ramp legend node + if ( !shader.colorRampItemList().isEmpty() ) + { + nodes << new QgsColorRampLegendNode( nodeLayer, shader.createColorRamp(), + shader.legendSettings() ? *shader.legendSettings() : QgsColorRampLegendNodeSettings(), + shader.minimumValue(), + shader.maximumValue(), + nullptr, + QStringLiteral( "vectorLegend" ), + vectorNameKey ); + } + break; + } + [[fallthrough]]; + case Qgis::ShaderInterpolationMethod::Discrete: + case Qgis::ShaderInterpolationMethod::Exact: + { + // for all others we use itemised lists + QgsLegendColorList items; + settings.colorRampShader().legendSymbologyItems( items ); + for ( const QPair< QString, QColor > &item : items ) + { + nodes << new QgsRasterSymbolLegendNode( nodeLayer, item.second, item.first, nullptr, false, + QStringLiteral( "vectorLegend" ) + QUuid::createUuid().toString(), + vectorNameKey + ); + } + break; + } + break; + } + } + } + } + return nodes; } diff --git a/tests/src/core/testqgslayertree.cpp b/tests/src/core/testqgslayertree.cpp index 35a7c2dfc14f..ef380b7b433a 100644 --- a/tests/src/core/testqgslayertree.cpp +++ b/tests/src/core/testqgslayertree.cpp @@ -973,18 +973,19 @@ void TestQgsLayerTree::testRasterSymbolNode() const std::unique_ptr< QgsLayerTreeLayer > n = std::make_unique< QgsLayerTreeLayer >( rl.get() ); // not checkable - QgsRasterSymbolLegendNode rasterNode( n.get(), QColor( 255, 0, 0 ), QStringLiteral( "my node" ), nullptr, false, QStringLiteral( "key" ) ); + QgsRasterSymbolLegendNode rasterNode( n.get(), QColor( 255, 0, 0 ), QStringLiteral( "my node" ), nullptr, false, QStringLiteral( "key" ), QStringLiteral( "parentKey" ) ); QVERIFY( !rasterNode.isCheckable() ); QCOMPARE( rasterNode.ruleKey(), QStringLiteral( "key" ) ); QCOMPARE( static_cast< int >( rasterNode.flags() ), static_cast< int >( Qt::ItemIsEnabled | Qt::ItemIsSelectable ) ); QCOMPARE( rasterNode.data( Qt::DisplayRole ).toString(), QStringLiteral( "my node" ) ); QCOMPARE( rasterNode.data( static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::NodeType ) ).toInt(), static_cast< int >( QgsLayerTreeModelLegendNode::RasterSymbolLegend ) ); QCOMPARE( rasterNode.data( static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::RuleKey ) ).toString(), QStringLiteral( "key" ) ); + QCOMPARE( rasterNode.data( static_cast< int >( QgsLayerTreeModelLegendNode::CustomRole::ParentRuleKey ) ).toString(), QStringLiteral( "parentKey" ) ); QCOMPARE( rasterNode.data( Qt::CheckStateRole ), QVariant() ); QVERIFY( !rasterNode.setData( true, Qt::CheckStateRole ) ); // checkable - const QgsRasterSymbolLegendNode rasterNode2( n.get(), QColor( 255, 0, 0 ), QStringLiteral( "my node" ), nullptr, true, QStringLiteral( "key" ) ); + const QgsRasterSymbolLegendNode rasterNode2( n.get(), QColor( 255, 0, 0 ), QStringLiteral( "my node" ), nullptr, true, QStringLiteral( "key" ), QStringLiteral( "parentKey" ) ); QVERIFY( rasterNode2.isCheckable() ); QCOMPARE( static_cast< int >( rasterNode2.flags() ), static_cast< int >( Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable ) ); } diff --git a/tests/src/core/testqgslegendrenderer.cpp b/tests/src/core/testqgslegendrenderer.cpp index 5adcd2196fbf..3579a6b134a6 100644 --- a/tests/src/core/testqgslegendrenderer.cpp +++ b/tests/src/core/testqgslegendrenderer.cpp @@ -50,7 +50,7 @@ #include "qgsmarkersymbol.h" #include "qgsfillsymbol.h" #include "qgsheatmaprenderer.h" - +#include "qgsmeshlayer.h" class TestRasterRenderer : public QgsPalettedRasterRenderer { public: @@ -135,6 +135,7 @@ class TestQgsLegendRenderer : public QgsTest void testFilterByExpression(); void testFilterByExpressionWithContext(); void testDiagramAttributeLegend(); + void testDiagramMeshLegend(); void testDiagramSizeLegend(); void testDataDefinedSizeCollapsed(); void testDataDefinedSizeSeparated(); @@ -161,9 +162,9 @@ class TestQgsLegendRenderer : public QgsTest QgsRasterLayer *mRL = nullptr; bool _testLegendColumns( int itemCount, int columnCount, const QString &testName, double symbolSpacing ); - bool _verifyImage( const QImage &image, const QString &testName, int diff = 30 ) + bool _verifyImage( const QImage &image, const QString &testName, int diff = 30, const QSize &sizeTolerance = QSize( 6, 10 ) ) { - return QGSIMAGECHECK( testName, testName, image, QString(), diff, QSize( 6, 10 ) ); + return QGSIMAGECHECK( testName, testName, image, QString(), diff, sizeTolerance ); } static void setStandardTestFont( QgsLegendSettings &settings, const QString &style = QStringLiteral( "Roman" ) ) @@ -1450,6 +1451,79 @@ void TestQgsLegendRenderer::testDiagramAttributeLegend() QgsProject::instance()->removeMapLayer( vl4 ); } +void TestQgsLegendRenderer::testDiagramMeshLegend() +{ + const QString uri_1( QString( TEST_DATA_DIR ) + QStringLiteral( "/mesh/mesh_z_ws_d_vel.nc" ) ); //mesh with dataset group "Bed Elevation", "Water Level", "Depth" and "Velocity" + + QTemporaryDir tempDir; + const QString uri( tempDir.filePath( QStringLiteral( "mesh.nc" ) ) ); + + QFile::copy( uri_1, uri ); + QgsMeshLayer *layer = new QgsMeshLayer( uri, QStringLiteral( "mesh" ), QStringLiteral( "mdal" ) ); + QVERIFY( layer->isValid() ); + QCOMPARE( layer->datasetGroupCount(), 4 ); + + QgsProject::instance()->addMapLayer( layer ); + + int scalarIndex = 0; + int vectorIndex = -1; + + QgsMeshRendererSettings rendererSettings = layer->rendererSettings(); + rendererSettings.setActiveScalarDatasetGroup( scalarIndex ); + rendererSettings.setActiveVectorDatasetGroup( vectorIndex ); + layer->setRendererSettings( rendererSettings ); + + std::unique_ptr< QgsLayerTree > root( std::make_unique() ); + root->addLayer( layer ); + std::unique_ptr legendModel( std::make_unique( root.get() ) ); + + QgsLegendSettings settings; + + setStandardTestFont( settings ); + QImage res = renderLegend( legendModel.get(), settings ); + + QVERIFY( _verifyImage( res, QStringLiteral( "legend_mesh_diagram_no_vector" ), 30, QSize( 8, 12 ) ) ); + + //red vector + QgsMeshLayer *layer2 = layer->clone(); + QgsProject::instance()->removeMapLayer( layer ); + QgsProject::instance()->addMapLayer( layer2 ); + + vectorIndex = 2; + rendererSettings.setActiveVectorDatasetGroup( vectorIndex ); + QgsMeshRendererVectorSettings vectorSettings = rendererSettings.vectorSettings( vectorIndex ); + vectorSettings.setColor( Qt::red ); + rendererSettings.setVectorSettings( vectorIndex, vectorSettings ); + layer2->setRendererSettings( rendererSettings ); + + root = std::make_unique(); + root->addLayer( layer2 ); + legendModel = std::make_unique( root.get() ); + + res = renderLegend( legendModel.get(), settings ); + QVERIFY( _verifyImage( res, QStringLiteral( "legend_mesh_diagram_red_vector" ), 30, QSize( 8, 13 ) ) ); + + //color ramp vector + QgsMeshLayer *layer3 = layer2->clone(); + QgsProject::instance()->removeMapLayer( layer2 ); + QgsProject::instance()->addMapLayer( layer3 ); + + const QgsColorRampShader fcn = rendererSettings.scalarSettings( vectorIndex ).colorRampShader(); + vectorSettings.setColorRampShader( fcn ); + vectorSettings.setColoringMethod( QgsInterpolatedLineColor::ColorRamp ); + rendererSettings.setVectorSettings( vectorIndex, vectorSettings ); + layer3->setRendererSettings( rendererSettings ); + + root = std::make_unique(); + root->addLayer( layer3 ); + legendModel = std::make_unique( root.get() ); + + res = renderLegend( legendModel.get(), settings ); + QVERIFY( _verifyImage( res, QStringLiteral( "legend_mesh_diagram_color_ramp_vector" ), 30, QSize( 8, 19 ) ) ); + + QgsProject::instance()->removeMapLayer( layer3 ); +} + void TestQgsLegendRenderer::testDiagramSizeLegend() { QgsVectorLayer *vl4 = new QgsVectorLayer( QStringLiteral( "Point" ), QStringLiteral( "Point Layer" ), QStringLiteral( "memory" ) ); diff --git a/tests/src/python/test_qgscolorramplegendnode.py b/tests/src/python/test_qgscolorramplegendnode.py index b5fef7a89a48..e098032eaaf2 100644 --- a/tests/src/python/test_qgscolorramplegendnode.py +++ b/tests/src/python/test_qgscolorramplegendnode.py @@ -129,10 +129,12 @@ def test_basic(self): layer = QgsVectorLayer('dummy', 'test', 'memory') layer_tree_layer = QgsLayerTreeLayer(layer) - node = QgsColorRampLegendNode(layer_tree_layer, r, 'min_label', 'max_label') + node = QgsColorRampLegendNode(layer_tree_layer, r, 'min_label', 'max_label', None, 'key', 'parentKey') self.assertEqual(node.ramp().color1().name(), '#c80000') self.assertEqual(node.ramp().color2().name(), '#00c800') + self.assertEqual(node.data(QgsLayerTreeModelLegendNode.LegendNodeRoles.RuleKeyRole), 'key') + self.assertEqual(node.data(QgsLayerTreeModelLegendNode.LegendNodeRoles.ParentRuleKeyRole), 'parentKey') node.setIconSize(QSize(11, 12)) self.assertEqual(node.iconSize(), QSize(11, 12)) diff --git a/tests/testdata/control_images/legend/expected_legend_diagram_attributes/expected_legend_diagram_attributes_mask.png b/tests/testdata/control_images/legend/expected_legend_diagram_attributes/expected_legend_diagram_attributes_mask.png index 62bf04e9cb7e803d6b641375d891d717e07be987..5409ca13bae96bd9de1ee6dcea2d30523d9579fc 100644 GIT binary patch literal 6961 zcma)>byQUGxAqSqT>>H?C7_^$L3g)wN()GX(%s!644on+l2U?zGzK9cAqq$+t-^q` zch6n#`>yx?@muSzb!LV&z?|3v*@UilJ4+J59fO%k5NR>Mv2>r5(yo{c2-gds9o}SW|fkN{&*EQRE1wk2aEiHqK zmo6p}$bahAR&tADnv8Wb<;W`;kT~XR6?{K@xtMa6*@oK~s1mW?- z@tpBj#Q1;x#V_C7w53WXd-m67Bw(aE;L*31wv+WXuT6uFejMq=#WAeY8eU|uotT4{ zEWbN0LC)^+($W}RUaPPt-v4~7r-t|KNqAKi7YQjT79t;+aQT+ETbw63`Sx0IN^Gq3 zV1BhXJuz&A$m72m8s`Ob7&TLx>b6rwL8{azGc36yuZn9 zW^DZ86?R9}>88cMp6|UeSO|6)Qlgk7>+bG;Ia9TzQO)${XrYp^F}<1^J7xZ**yV3w zPGcTxB>4#+#>ObrGI{&!tp^|f-7!l?p^A%&kcE(c5~pWpCc_*k)q4MZM;kl4<@t^P zVUHgqKSm45B@0sooTj9UwcuD>_;>D;aOC3RQt!5`m?ss&M9w7sc6l%*H9tS;@X&W= zW~MRgXW_q7j`p1#0jIaie{TEinC3|Y(4;U+4GiZB)w|3I4z2Fe?0vAg`_iO^%+Jry z_w?`%ulbwU{)EeNEEJxn2?0t)hS~D04t(Eoj*gGVQCx=h%L7T&w6w|{{`;&!K|u}8 z&1HmC*T-&koys~*y>!UXFllAr6H;1$1eb2?WSVY9cC3ma` z#_& zC`wjVcBro}a>ZRFiC!Syduv99HC37GQ3{g;Cl^;j^P>d~b8~Zclxn5VuX%pE5r!`v z0YVCjiVYqYu(6_IVp=xEwtkddal3D9JPtec?*03Cgrab?9Pa;k_yyvj&!18Gf8TKw zj^&AXH0}nU?N9StzD25;dxwXU?y0Na;N*-A4-aolcF3@stk6zRP3=B?Z*%u}tt7>M z=j&_s%nyVJ9WAYvr)OgZIYLcI+0%?q#-JQ>wrQclLQxm!=;7t%lJWQCS68{iM414W zN3D6s(A-?^vyu`KH?NG=j9V5OWo2dD9gh|yMSXv>1pVp1?D^v(-R{AG?O+D?{T@eb zF)^_mQLmd~*HNlBBqZ|h^6^#H)jhEtEvQ~CuWWsqmX>WHCnwkDy-mMYrNyay6Ge$o zCiD*nTdKQZ71h<<_CMI7yL9>T1Qc#lvcpv1)YMdCz+czuyM!%`Nkn`grPHa314lWJE-)Y-}Yo{nx08Fsp|}3?@4q zGxFJz{P7jXrhn8MbaL=;5Q10_Pm(e`pSNaG|St3F(0G0 zmoG^U4h~#?R904EAzwQJ44wW#3p9>@{`}eZ810ZSy|{N|96T{GF^4uWF(FP>o?N=a z$H(`)y!@4?g2DxxyL4(*dN*VHt=p1o+9E)p>CD5s) zUR_;95G5t0)5GNymmfzv?Z4`*2g$N>a-KbZ9=Y98S10}8!BsVA)S0K${@s5AW)K-jEu}BW7%w_sZZa+ zV!`niw5`O8s;Y|=6rmI4nmG2SyD=nm;pb;3LSkLb%`^f60u>b%2qG*d<`nl~VS!n; znBu~P3rMKczoXH^)4fp>^ci|xH!CY^arTuR5<1uN$ohTy4W21_%>r>5FE6ihw2T9h zagsdigJ-$IZmi~SeE$ptw_U0I97liUO2YW~IE~BddlV8HhJ)X*mynQ9ti^dd@bED$ zEv+;=Wp{u71&<#eWmHv(pcqDR_4V{3p+_6uC?zwO2cg={o}_E?vyW`#~WPL(H%zIWiku^ZcrudC-g-MT8(NkUaFhU~My|G2o%*H$<5XG05zZ6N`HQr&WmPZ;3>A(LmlC?YC4 z{zAWslZPjXn}=uiwfpNgv)1Pg4?oy%PF1h0t<6}`@$m3COufACxi(g;L6r$UxIN#| zK08rUTYGDDWyRjB&wXjUuE}XyC&1xm`jaOVs%mN_;CW-~6XiEVM6yTn#gu$@z7~U_ zO@M$p%)jv)4$R5Q8v8MvTUk*N>*(mX20u2seiOx9hmVhs_x#&1oZQvbKfWJ-ZO^r= zue?h`?~O|78W_-^($lpR6ciGI)1E$UlvLAo6OgF6!CO>+<=VAtQ4I|Zoba-{ySoM_ z;`iING42d}ZD6ipns0yo`gMMrAqp@OHrUpNrY4sI4J{V~1B2&UoSeeKMw<-G%*D&kvV1_U7mYmj4Wa9AW%pbTlPW_JQHQx4$}DMXmh({m~~2{|a<;b=RRBJi&%v zR8$mw$hIT6adDdddpyN89aB1t&V~)Z= zSx^V#S{vbj_O0r?qN|x7-1ay0^Thoq!BAm86rkJu(Q9GQU)FuG7nL}zGSl zX?c0fzw^Ic!v}_jhRd+o!k%js8hOHhjHj7I+}RDPjV~ZZEv}4|R8(Stq{PI;zJ7jK z2$N)B?8}!g4S)PWqx%4ojNnQ?+1uN%)%|Kgx$+eN^*lH|{9}CLE6&7DNw~GOML|aw z2jpdSurqZ08HoFfe><24OiG8K&My$CF4Ij7Ufzc64&m zwy+>asYZSIVhk!6F}Um%P0WLfjRho#Sc2ANNd}3=5?m2<4(;re6dV2ck;J6gxf_^D zTUR#%1Ba89x>KR05d9&U{A#=@mg~ zO-*v7&S{$W@bIuMP)0^Z>m~}0T9U|dCg|_ZvjY>;*2h?-rKJ_s)e8Fhm)t!(>Y>+^ zOLczxigQvE{qX6DB;@Xb1tl|z4J4D&-Ni*Lt*pYKqnE(hLDHq+zknL<037lBt1_sz z@)L6T5*ZnZOMU55aakE2pWTS_tF1>bwZOuv<6by=`1q8Ycldj~?~>lL;GrgJ8V@=~ zKbQmk!{yf~?{Z%y!cd;LxVSQJW*Q20DTzrU2lVQNfZz1MKy*~^_efAEl(wzy zbz+8=;4}Z-{e2hhR`r%rog2{k+TPxRL3_hOTZcVS#DvHVYNF%Okn`SykmL1ophp=x zIy&P$?ge?%lY{M&r6ns6gl8bFx*#@~Ga_R`3xRS_C5^Vj^u~?$7qN;aC-rD9X*1&K zSy&X>e$0|V>?g|9x5(?EW^UfPRlc#|NVCTZx~brqn2=!o@XznxMWd1@i3h(HG^-42 zZGSe}U?Xn6II#p^(LB)?u|wP1+BE#Im-ddfM1d0G;^Gb$BghdXSLl(VnHgg=86y!u zjcJGfrGbF~;hgxUY%z>dGnnLZ~6WeWVqJ4vd zY`nZ=uzN!vKFC4M!KM9P`@{zBg#)K3lG<5;bQ2R3jY*wsoShS)!|Mcf z?22?MDVUhZ5Q>EU$38wvpz6`UQDb9T(34X<4;&ri0T!3wM4UHo_CPS36@c!WTOFO8 zqy}k{*4Dl_QXr8~AQ6C#a;1QjOgm8xaJ>60Vy$ywocLu%zBPUisk`F9=!C{OAa?;-zAn8}zWNwV)n_w>jL3kxp}Bwa!1yQlzt zO}l~_DdTVvdi4+}x<2T{o0g95doQ_EAKYRDfpjPwe0s=rR=M2t z!l9B7w6Ujodut1$k-NL@6?!iWa!J$)Nl9J2O+J47*avPt~$BQ>zCwzhU{B0e!c-Zj@740f`z*k8YXeUh6?j2LzJ3jk8$a&d9t z;^H>?R)ey08`UA;wu-^Ql1^fd(IcK-UQs}PyL)@7>FKy^Y;2f%8W_Oy_V)gLa4^sr zbndC zNM*mj@ww4+eVpbjR-X0!=%`)s$KKxF+zUN>fBqChpH6^{s&G>4*xPdgEPetKdI!b= zk@?-1FKx3EOJACt#CF@gIv#)F;uYB6-`{>u1(OL7e_+VY^o>8c z{rH&OTf<02)qAke?gJAa%+#UAL`P?Q>3nU?9?oB$laphBGvr{btUSaOu}&Bz`}CcS z=gQE*VpyT%{69cXVcTt z zQQGC(-MMoIuwA;KpnyG9*&fo4*}=%uE8K_4pSnUq^b8HHKRr_zdiM@OlvQR@qwg)( zgkMx3uF<)1B}F)Rp-`x zjmSG$bzrkO15JZPU%s|s7j1UR`bxbG`g_;Yx`&1;W^swUB1|M?WF;z#8X71;w@67z zpD44#XK<%zaYo9shQZX#TOxV7WNy+l=am%{J(aQU#^&Z#YNGDtKP)r}@Z9Klja3#@ z6vFsy8tWJ*@9-S^VD1F0?r0-!^if9-N|`-Rd7ct;{=Y`R870x-oahvmvMu>}@K|_GcPECZFRXOMbO{*6J7r-2&9ECqt;8amwKK)VC zM7KM1VCs)9UzmrmuvQ;ZZMdLRFN8^lf(6+E zlfiFz4mzi&r(f;0FY$G3zL}yuu3?&nO}*b{p20&wDxiaganSTU)cB zmMhE3qG7Hm7jUq36(|gw{xTM%0rdA6=7vC`sPJ^vYd28u1@TGXZ_<*Pr8Iy}pLa*# z>w0?fmzI?^EURU3uWvA;T^e?-@=6wJf|I9bWhr01dez3kK}90qfSsJ2JVz=-QVcVw zU}a?;nwrXhaTOgs{nPe#F&@*_Col(A28Ls&Ai%&iIHHlHl$2DnWvLOjYZHTGn4>Ys z^4yf^WZElN)*669Ej>MItR%T4KypPeVLdIaqH8rUN6@*6nj9OGe)#aAp1!^UjN5QS z85kKIHYO|CX%cR*u|@Rs^cZylq&Hj;7BHOlMS+w$kUAZp(Odub3YzK=Er<_HUeZcXv}WFno3X z8sv06?cEylze9WzHoJFEufb@2`m@y9oXs~m)0~!)X2+PmK6#9}yUf&u(eN0{gP!u+ zex&s_<;{GxJ?$`7HQdt^j-hD{4GmoWnx>NVm{+dsyu*s#PE8TzDkF&T^RX-HhzM5*7(IN&x_B^ftR`EK`-820fC1O`?`e? zq2_+V>T&Q$Sg5F|ss&TalmpOf-OU{x9VU74QzT2*&eh_aQ{`i)ZKwP2AAqzrRN5m%$Lr*p!l= z=u|$3RMZ5jgIWciRE7=)>zc3?advjjLXwh_REo96AR%QzL2sixm>1YKnU?PI^FMEF zxE#UbVDg_%0Bbu8F;OMdz=n zV!s4*2Ddw??e~=x+*IYr7;@%kt*x!IZgzHddIkp1>gwtyPTf68Ty?l%m@)t!_Mc`e b%l{DN)eLt+l@ks44h&II(2%c@wG96+nKoiW delta 6588 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 fo%2Pu&{JJ9<`(UqWm1bN0coF(PLuJ~^ diff --git a/tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector.png b/tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ae78d0dfece4728bf1faf92575286bd89a3c13 GIT binary patch literal 11935 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 literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector_mask.png b/tests/testdata/control_images/legend/expected_legend_mesh_diagram_color_ramp_vector/expected_legend_mesh_diagram_color_ramp_vector_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..94c4bd0000b768caecc2851ea2f407eb85319c26 GIT binary patch literal 12179 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 literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/legend/expected_legend_mesh_diagram_no_vector/expected_legend_mesh_diagram_no_vector_mask.png b/tests/testdata/control_images/legend/expected_legend_mesh_diagram_no_vector/expected_legend_mesh_diagram_no_vector_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe2124f6d5196c8fa7019a6d777f06e74dd4b0e GIT binary patch literal 6147 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 literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/legend/expected_legend_mesh_diagram_red_vector/expected_legend_mesh_diagram_red_vector_mask.png b/tests/testdata/control_images/legend/expected_legend_mesh_diagram_red_vector/expected_legend_mesh_diagram_red_vector_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..95fd3dad4f0be0e1c48f3092a18877719454bec4 GIT binary patch literal 9080 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 a{CIBa>Q~DVFSwNkaYsp0u}r}{^nU;!Oj)l0 literal 0 HcmV?d00001 From b47c3781c99e44bea727bd63154660ff14dd7a99 Mon Sep 17 00:00:00 2001 From: qgis-bot Date: Wed, 2 Oct 2024 01:16:52 +0000 Subject: [PATCH 41/43] =?UTF-8?q?auto=20sipify=20=F0=9F=8D=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/PyQt6/core/class_map.yaml | 66 ++++++++++++++++---------------- python/core/class_map.yaml | 66 ++++++++++++++++---------------- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/python/PyQt6/core/class_map.yaml b/python/PyQt6/core/class_map.yaml index 74b87c4eadd3..60808d305fd7 100644 --- a/python/PyQt6/core/class_map.yaml +++ b/python/PyQt6/core/class_map.yaml @@ -2378,15 +2378,15 @@ QgsColorRamp.properties: src/core/qgscolorramp.h#L89 QgsColorRamp.type: src/core/qgscolorramp.h#L73 QgsColorRamp.value: src/core/qgscolorramp.h#L61 QgsColorRamp: src/core/qgscolorramp.h#L28 -QgsColorRampLegendNode.data: src/core/layertree/qgscolorramplegendnode.h#L64 -QgsColorRampLegendNode.drawSymbol: src/core/layertree/qgscolorramplegendnode.h#L65 -QgsColorRampLegendNode.drawSymbolText: src/core/layertree/qgscolorramplegendnode.h#L66 -QgsColorRampLegendNode.exportSymbolToJson: src/core/layertree/qgscolorramplegendnode.h#L67 -QgsColorRampLegendNode.iconSize: src/core/layertree/qgscolorramplegendnode.h#L81 -QgsColorRampLegendNode.ramp: src/core/layertree/qgscolorramplegendnode.h#L86 -QgsColorRampLegendNode.setIconSize: src/core/layertree/qgscolorramplegendnode.h#L74 -QgsColorRampLegendNode.setSettings: src/core/layertree/qgscolorramplegendnode.h#L100 -QgsColorRampLegendNode.settings: src/core/layertree/qgscolorramplegendnode.h#L93 +QgsColorRampLegendNode.data: src/core/layertree/qgscolorramplegendnode.h#L70 +QgsColorRampLegendNode.drawSymbol: src/core/layertree/qgscolorramplegendnode.h#L71 +QgsColorRampLegendNode.drawSymbolText: src/core/layertree/qgscolorramplegendnode.h#L72 +QgsColorRampLegendNode.exportSymbolToJson: src/core/layertree/qgscolorramplegendnode.h#L73 +QgsColorRampLegendNode.iconSize: src/core/layertree/qgscolorramplegendnode.h#L87 +QgsColorRampLegendNode.ramp: src/core/layertree/qgscolorramplegendnode.h#L92 +QgsColorRampLegendNode.setIconSize: src/core/layertree/qgscolorramplegendnode.h#L80 +QgsColorRampLegendNode.setSettings: src/core/layertree/qgscolorramplegendnode.h#L106 +QgsColorRampLegendNode.settings: src/core/layertree/qgscolorramplegendnode.h#L99 QgsColorRampLegendNode: src/core/layertree/qgscolorramplegendnode.h#L32 QgsColorRampLegendNodeSettings.direction: src/core/layertree/qgscolorramplegendnodesettings.h#L64 QgsColorRampLegendNodeSettings.maximumLabel: src/core/layertree/qgscolorramplegendnodesettings.h#L102 @@ -3102,10 +3102,10 @@ QgsDataDefinedSizeLegend.updateFromSymbolAndProperty: src/core/qgsdatadefinedsiz QgsDataDefinedSizeLegend.verticalAlignment: src/core/qgsdatadefinedsizelegend.h#L126 QgsDataDefinedSizeLegend.writeXml: src/core/qgsdatadefinedsizelegend.h#L165 QgsDataDefinedSizeLegend: src/core/qgsdatadefinedsizelegend.h#L41 -QgsDataDefinedSizeLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L804 -QgsDataDefinedSizeLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L799 -QgsDataDefinedSizeLegendNode.draw: src/core/layertree/qgslayertreemodellegendnode.h#L801 -QgsDataDefinedSizeLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L790 +QgsDataDefinedSizeLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L807 +QgsDataDefinedSizeLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L802 +QgsDataDefinedSizeLegendNode.draw: src/core/layertree/qgslayertreemodellegendnode.h#L804 +QgsDataDefinedSizeLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L793 QgsDataItem.__repr__: src/core/browser/qgsdataitem.h#L97 QgsDataItem.acceptDrop: src/core/browser/qgsdataitem.h#L215 QgsDataItem.addChildItem: src/core/browser/qgsdataitem.h#L159 @@ -14643,14 +14643,14 @@ QgsRasterSingleColorRenderer.setColor: src/core/raster/qgsrastersinglecolorrende QgsRasterSingleColorRenderer.setInputBand: src/core/raster/qgsrastersinglecolorrenderer.h#L69 QgsRasterSingleColorRenderer.writeXml: src/core/raster/qgsrastersinglecolorrenderer.h#L66 QgsRasterSingleColorRenderer: src/core/raster/qgsrastersinglecolorrenderer.h#L34 -QgsRasterSymbolLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L706 -QgsRasterSymbolLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L686 -QgsRasterSymbolLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L688 -QgsRasterSymbolLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L689 -QgsRasterSymbolLegendNode.flags: src/core/layertree/qgslayertreemodellegendnode.h#L685 -QgsRasterSymbolLegendNode.isCheckable: src/core/layertree/qgslayertreemodellegendnode.h#L703 -QgsRasterSymbolLegendNode.ruleKey: src/core/layertree/qgslayertreemodellegendnode.h#L696 -QgsRasterSymbolLegendNode.setData: src/core/layertree/qgslayertreemodellegendnode.h#L687 +QgsRasterSymbolLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L708 +QgsRasterSymbolLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L688 +QgsRasterSymbolLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L690 +QgsRasterSymbolLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L691 +QgsRasterSymbolLegendNode.flags: src/core/layertree/qgslayertreemodellegendnode.h#L687 +QgsRasterSymbolLegendNode.isCheckable: src/core/layertree/qgslayertreemodellegendnode.h#L705 +QgsRasterSymbolLegendNode.ruleKey: src/core/layertree/qgslayertreemodellegendnode.h#L698 +QgsRasterSymbolLegendNode.setData: src/core/layertree/qgslayertreemodellegendnode.h#L689 QgsRasterSymbolLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L668 QgsRasterTransparency.QgsRasterTransparency.__repr__: src/core/raster/qgsrastertransparency.h#L145 QgsRasterTransparency.QgsRasterTransparency.__repr__: src/core/raster/qgsrastertransparency.h#L228 @@ -18383,11 +18383,11 @@ QgsVectorFileWriterTask.finished: src/core/qgsvectorfilewritertask.h#L75 QgsVectorFileWriterTask.run: src/core/qgsvectorfilewritertask.h#L74 QgsVectorFileWriterTask.writeComplete: src/core/qgsvectorfilewritertask.h#L57 QgsVectorFileWriterTask: src/core/qgsvectorfilewritertask.h#L34 -QgsVectorLabelLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L861 -QgsVectorLabelLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L841 -QgsVectorLabelLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L850 -QgsVectorLabelLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L858 -QgsVectorLabelLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L822 +QgsVectorLabelLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L864 +QgsVectorLabelLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L844 +QgsVectorLabelLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L853 +QgsVectorLabelLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L861 +QgsVectorLabelLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L825 QgsVectorLayer.QgsVectorLayer.DeleteContext: src/core/vector/qgsvectorlayer.h#L542 QgsVectorLayer.QgsVectorLayer.LayerOptions: src/core/vector/qgsvectorlayer.h#L429 QgsVectorLayer.QgsVectorLayer.LayerOptions: src/core/vector/qgsvectorlayer.h#L439 @@ -19375,13 +19375,13 @@ QgsWkbTypes.translatedDisplayString: src/core/geometry/qgswkbtypes.h#L1021 QgsWkbTypes.wkbDimensions: src/core/geometry/qgswkbtypes.h#L904 QgsWkbTypes.zmType: src/core/geometry/qgswkbtypes.h#L790 QgsWkbTypes: src/core/geometry/qgswkbtypes.h#L41 -QgsWmsLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L758 -QgsWmsLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L742 -QgsWmsLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L744 -QgsWmsLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L746 -QgsWmsLegendNode.getLegendGraphicBlocking: src/core/layertree/qgslayertreemodellegendnode.h#L754 -QgsWmsLegendNode.invalidateMapBasedData: src/core/layertree/qgslayertreemodellegendnode.h#L748 -QgsWmsLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L727 +QgsWmsLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L761 +QgsWmsLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L745 +QgsWmsLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L747 +QgsWmsLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L749 +QgsWmsLegendNode.getLegendGraphicBlocking: src/core/layertree/qgslayertreemodellegendnode.h#L757 +QgsWmsLegendNode.invalidateMapBasedData: src/core/layertree/qgslayertreemodellegendnode.h#L751 +QgsWmsLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L730 QgsXmlUtils.readBox3D: src/core/qgsxmlutils.h#L58 QgsXmlUtils.readMapUnits: src/core/qgsxmlutils.h#L48 QgsXmlUtils.readRectangle: src/core/qgsxmlutils.h#L50 diff --git a/python/core/class_map.yaml b/python/core/class_map.yaml index 59729590a9be..ce18b6019ffe 100644 --- a/python/core/class_map.yaml +++ b/python/core/class_map.yaml @@ -2378,15 +2378,15 @@ QgsColorRamp.properties: src/core/qgscolorramp.h#L89 QgsColorRamp.type: src/core/qgscolorramp.h#L73 QgsColorRamp.value: src/core/qgscolorramp.h#L61 QgsColorRamp: src/core/qgscolorramp.h#L28 -QgsColorRampLegendNode.data: src/core/layertree/qgscolorramplegendnode.h#L64 -QgsColorRampLegendNode.drawSymbol: src/core/layertree/qgscolorramplegendnode.h#L65 -QgsColorRampLegendNode.drawSymbolText: src/core/layertree/qgscolorramplegendnode.h#L66 -QgsColorRampLegendNode.exportSymbolToJson: src/core/layertree/qgscolorramplegendnode.h#L67 -QgsColorRampLegendNode.iconSize: src/core/layertree/qgscolorramplegendnode.h#L81 -QgsColorRampLegendNode.ramp: src/core/layertree/qgscolorramplegendnode.h#L86 -QgsColorRampLegendNode.setIconSize: src/core/layertree/qgscolorramplegendnode.h#L74 -QgsColorRampLegendNode.setSettings: src/core/layertree/qgscolorramplegendnode.h#L100 -QgsColorRampLegendNode.settings: src/core/layertree/qgscolorramplegendnode.h#L93 +QgsColorRampLegendNode.data: src/core/layertree/qgscolorramplegendnode.h#L70 +QgsColorRampLegendNode.drawSymbol: src/core/layertree/qgscolorramplegendnode.h#L71 +QgsColorRampLegendNode.drawSymbolText: src/core/layertree/qgscolorramplegendnode.h#L72 +QgsColorRampLegendNode.exportSymbolToJson: src/core/layertree/qgscolorramplegendnode.h#L73 +QgsColorRampLegendNode.iconSize: src/core/layertree/qgscolorramplegendnode.h#L87 +QgsColorRampLegendNode.ramp: src/core/layertree/qgscolorramplegendnode.h#L92 +QgsColorRampLegendNode.setIconSize: src/core/layertree/qgscolorramplegendnode.h#L80 +QgsColorRampLegendNode.setSettings: src/core/layertree/qgscolorramplegendnode.h#L106 +QgsColorRampLegendNode.settings: src/core/layertree/qgscolorramplegendnode.h#L99 QgsColorRampLegendNode: src/core/layertree/qgscolorramplegendnode.h#L32 QgsColorRampLegendNodeSettings.direction: src/core/layertree/qgscolorramplegendnodesettings.h#L64 QgsColorRampLegendNodeSettings.maximumLabel: src/core/layertree/qgscolorramplegendnodesettings.h#L102 @@ -3102,10 +3102,10 @@ QgsDataDefinedSizeLegend.updateFromSymbolAndProperty: src/core/qgsdatadefinedsiz QgsDataDefinedSizeLegend.verticalAlignment: src/core/qgsdatadefinedsizelegend.h#L126 QgsDataDefinedSizeLegend.writeXml: src/core/qgsdatadefinedsizelegend.h#L165 QgsDataDefinedSizeLegend: src/core/qgsdatadefinedsizelegend.h#L41 -QgsDataDefinedSizeLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L804 -QgsDataDefinedSizeLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L799 -QgsDataDefinedSizeLegendNode.draw: src/core/layertree/qgslayertreemodellegendnode.h#L801 -QgsDataDefinedSizeLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L790 +QgsDataDefinedSizeLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L807 +QgsDataDefinedSizeLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L802 +QgsDataDefinedSizeLegendNode.draw: src/core/layertree/qgslayertreemodellegendnode.h#L804 +QgsDataDefinedSizeLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L793 QgsDataItem.__repr__: src/core/browser/qgsdataitem.h#L97 QgsDataItem.acceptDrop: src/core/browser/qgsdataitem.h#L215 QgsDataItem.addChildItem: src/core/browser/qgsdataitem.h#L159 @@ -14643,14 +14643,14 @@ QgsRasterSingleColorRenderer.setColor: src/core/raster/qgsrastersinglecolorrende QgsRasterSingleColorRenderer.setInputBand: src/core/raster/qgsrastersinglecolorrenderer.h#L69 QgsRasterSingleColorRenderer.writeXml: src/core/raster/qgsrastersinglecolorrenderer.h#L66 QgsRasterSingleColorRenderer: src/core/raster/qgsrastersinglecolorrenderer.h#L34 -QgsRasterSymbolLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L706 -QgsRasterSymbolLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L686 -QgsRasterSymbolLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L688 -QgsRasterSymbolLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L689 -QgsRasterSymbolLegendNode.flags: src/core/layertree/qgslayertreemodellegendnode.h#L685 -QgsRasterSymbolLegendNode.isCheckable: src/core/layertree/qgslayertreemodellegendnode.h#L703 -QgsRasterSymbolLegendNode.ruleKey: src/core/layertree/qgslayertreemodellegendnode.h#L696 -QgsRasterSymbolLegendNode.setData: src/core/layertree/qgslayertreemodellegendnode.h#L687 +QgsRasterSymbolLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L708 +QgsRasterSymbolLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L688 +QgsRasterSymbolLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L690 +QgsRasterSymbolLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L691 +QgsRasterSymbolLegendNode.flags: src/core/layertree/qgslayertreemodellegendnode.h#L687 +QgsRasterSymbolLegendNode.isCheckable: src/core/layertree/qgslayertreemodellegendnode.h#L705 +QgsRasterSymbolLegendNode.ruleKey: src/core/layertree/qgslayertreemodellegendnode.h#L698 +QgsRasterSymbolLegendNode.setData: src/core/layertree/qgslayertreemodellegendnode.h#L689 QgsRasterSymbolLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L668 QgsRasterTransparency.QgsRasterTransparency.__repr__: src/core/raster/qgsrastertransparency.h#L145 QgsRasterTransparency.QgsRasterTransparency.__repr__: src/core/raster/qgsrastertransparency.h#L228 @@ -18384,11 +18384,11 @@ QgsVectorFileWriterTask.finished: src/core/qgsvectorfilewritertask.h#L75 QgsVectorFileWriterTask.run: src/core/qgsvectorfilewritertask.h#L74 QgsVectorFileWriterTask.writeComplete: src/core/qgsvectorfilewritertask.h#L57 QgsVectorFileWriterTask: src/core/qgsvectorfilewritertask.h#L34 -QgsVectorLabelLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L861 -QgsVectorLabelLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L841 -QgsVectorLabelLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L850 -QgsVectorLabelLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L858 -QgsVectorLabelLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L822 +QgsVectorLabelLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L864 +QgsVectorLabelLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L844 +QgsVectorLabelLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L853 +QgsVectorLabelLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L861 +QgsVectorLabelLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L825 QgsVectorLayer.QgsVectorLayer.DeleteContext: src/core/vector/qgsvectorlayer.h#L542 QgsVectorLayer.QgsVectorLayer.LayerOptions: src/core/vector/qgsvectorlayer.h#L429 QgsVectorLayer.QgsVectorLayer.LayerOptions: src/core/vector/qgsvectorlayer.h#L439 @@ -19376,13 +19376,13 @@ QgsWkbTypes.translatedDisplayString: src/core/geometry/qgswkbtypes.h#L1021 QgsWkbTypes.wkbDimensions: src/core/geometry/qgswkbtypes.h#L904 QgsWkbTypes.zmType: src/core/geometry/qgswkbtypes.h#L790 QgsWkbTypes: src/core/geometry/qgswkbtypes.h#L41 -QgsWmsLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L758 -QgsWmsLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L742 -QgsWmsLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L744 -QgsWmsLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L746 -QgsWmsLegendNode.getLegendGraphicBlocking: src/core/layertree/qgslayertreemodellegendnode.h#L754 -QgsWmsLegendNode.invalidateMapBasedData: src/core/layertree/qgslayertreemodellegendnode.h#L748 -QgsWmsLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L727 +QgsWmsLegendNode.__repr__: src/core/layertree/qgslayertreemodellegendnode.h#L761 +QgsWmsLegendNode.data: src/core/layertree/qgslayertreemodellegendnode.h#L745 +QgsWmsLegendNode.drawSymbol: src/core/layertree/qgslayertreemodellegendnode.h#L747 +QgsWmsLegendNode.exportSymbolToJson: src/core/layertree/qgslayertreemodellegendnode.h#L749 +QgsWmsLegendNode.getLegendGraphicBlocking: src/core/layertree/qgslayertreemodellegendnode.h#L757 +QgsWmsLegendNode.invalidateMapBasedData: src/core/layertree/qgslayertreemodellegendnode.h#L751 +QgsWmsLegendNode: src/core/layertree/qgslayertreemodellegendnode.h#L730 QgsXmlUtils.readBox3D: src/core/qgsxmlutils.h#L58 QgsXmlUtils.readMapUnits: src/core/qgsxmlutils.h#L48 QgsXmlUtils.readRectangle: src/core/qgsxmlutils.h#L50 From fd61e91c7b274ac5bef8b646b1ac80c7843ac3f5 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 2 Oct 2024 10:34:58 +1000 Subject: [PATCH 42/43] Fix use of custom object values from QGIS expressions in virtual layers Fixes #58644 --- .../virtual/qgsvirtuallayersqlitemodule.cpp | 29 ++++++++++--------- tests/src/python/test_provider_virtual.py | 15 +++++++++- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/providers/virtual/qgsvirtuallayersqlitemodule.cpp b/src/providers/virtual/qgsvirtuallayersqlitemodule.cpp index b490b7fcef0d..3dbc4ae80c19 100644 --- a/src/providers/virtual/qgsvirtuallayersqlitemodule.cpp +++ b/src/providers/virtual/qgsvirtuallayersqlitemodule.cpp @@ -831,7 +831,8 @@ void qgisFunctionWrapper( sqlite3_context *ctxt, int nArgs, sqlite3_value **args sqlite3_result_text( ctxt, ba.constData(), ba.size(), SQLITE_TRANSIENT ); break; } - case QMetaType::Type::User: + + default: { if ( ret.userType() == qMetaTypeId< QgsGeometry>() ) { @@ -844,21 +845,21 @@ void qgisFunctionWrapper( sqlite3_context *ctxt, int nArgs, sqlite3_value **args { sqlite3_result_double( ctxt, ret.value().seconds() ); } + else + { + QBuffer buffer; + buffer.open( QBuffer::ReadWrite ); + QDataStream ds( &buffer ); + // something different from 0 (to distinguish from the first byte of a geometry blob) + char type = 1; + buffer.write( &type, 1 ); + // then the serialized version of the variant + ds << ret; + buffer.close(); + sqlite3_result_blob( ctxt, buffer.buffer().constData(), buffer.buffer().size(), SQLITE_TRANSIENT ); + } break; } - default: - { - QBuffer buffer; - buffer.open( QBuffer::ReadWrite ); - QDataStream ds( &buffer ); - // something different from 0 (to distinguish from the first byte of a geometry blob) - char type = 1; - buffer.write( &type, 1 ); - // then the serialized version of the variant - ds << ret; - buffer.close(); - sqlite3_result_blob( ctxt, buffer.buffer().constData(), buffer.buffer().size(), SQLITE_TRANSIENT ); - } }; } diff --git a/tests/src/python/test_provider_virtual.py b/tests/src/python/test_provider_virtual.py index ad0f6b40f0fd..ea39bf24293e 100644 --- a/tests/src/python/test_provider_virtual.py +++ b/tests/src/python/test_provider_virtual.py @@ -12,7 +12,7 @@ import os import tempfile -from qgis.PyQt.QtCore import QTemporaryDir, QUrl, QVariant +from qgis.PyQt.QtCore import QTemporaryDir, QUrl, QVariant, QMetaType from qgis.core import ( Qgis, QgsFeature, @@ -680,6 +680,19 @@ def test_sql3b(self): self.assertTrue(l4.isValid()) self.assertEqual(l4.dataProvider().wkbType(), QgsWkbTypes.Type.Point) + def test_select_qgis_expression_value_types(self): + query = toPercent("SELECT geom_from_wkt( 'POINT(4 5)' ) as geom, make_interval(1) as years") + l4 = QgsVectorLayer(f"?query={query}&geometry=geom", "tt", "virtual", QgsVectorLayer.LayerOptions(False)) + self.assertTrue(l4.isValid()) + self.assertEqual(l4.dataProvider().wkbType(), QgsWkbTypes.Type.Point) + self.assertEqual([f.name() for f in l4.dataProvider().fields()], ['years']) + self.assertEqual([f.type() for f in l4.dataProvider().fields()], + [QMetaType.Double]) + self.assertEqual([f.attributes() for f in l4.getFeatures()], + [[31557600.0]]) + self.assertEqual([f.geometry().asWkt() for f in l4.getFeatures()], + ['Point (4 5)']) + def test_sql4(self): l2 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "france_parts", "ogr", QgsVectorLayer.LayerOptions(False)) From aeec9d5237708815b4cfcbf6a3c08c67b5696a0f Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 2 Oct 2024 15:06:08 +1000 Subject: [PATCH 43/43] Fix test for qt6 --- tests/src/python/test_provider_virtual.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/python/test_provider_virtual.py b/tests/src/python/test_provider_virtual.py index ea39bf24293e..e19eb4aec134 100644 --- a/tests/src/python/test_provider_virtual.py +++ b/tests/src/python/test_provider_virtual.py @@ -687,7 +687,7 @@ def test_select_qgis_expression_value_types(self): self.assertEqual(l4.dataProvider().wkbType(), QgsWkbTypes.Type.Point) self.assertEqual([f.name() for f in l4.dataProvider().fields()], ['years']) self.assertEqual([f.type() for f in l4.dataProvider().fields()], - [QMetaType.Double]) + [QMetaType.Type.Double]) self.assertEqual([f.attributes() for f in l4.getFeatures()], [[31557600.0]]) self.assertEqual([f.geometry().asWkt() for f in l4.getFeatures()],