From 5e1d1a4c8c5bb050457e6f613e31f334e1125a1d Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 31 Aug 2018 11:22:58 +1000 Subject: [PATCH] Deprecate vector layer setter/getter within QgsSymbol It's not used, and potentially very dangerous --- .../auto_generated/symbology/qgssymbol.sip.in | 11 +++++++-- src/core/symbology/qgssymbol.cpp | 24 +++++++++++++++++++ src/core/symbology/qgssymbol.h | 15 ++++++++---- src/gui/symbology/qgssymbolselectordialog.cpp | 2 ++ 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/python/core/auto_generated/symbology/qgssymbol.sip.in b/python/core/auto_generated/symbology/qgssymbol.sip.in index 3541b7ef026..2972e4de052 100644 --- a/python/core/auto_generated/symbology/qgssymbol.sip.in +++ b/python/core/auto_generated/symbology/qgssymbol.sip.in @@ -387,14 +387,21 @@ Returns whether the symbol utilizes any data defined properties. .. versionadded:: 2.12 %End - void setLayer( const QgsVectorLayer *layer ); + void setLayer( const QgsVectorLayer *layer ) /Deprecated/; %Docstring .. note:: the layer will be NULL after stopRender + +.. deprecated:: Will be removed in QGIS 4.0 +%End + + const QgsVectorLayer *layer() const /Deprecated/; +%Docstring + +.. deprecated:: Will be removed in QGIS 4.0 %End - const QgsVectorLayer *layer() const; void renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false, int currentVertexMarkerType = 0, int currentVertexMarkerSize = 0 ); %Docstring diff --git a/src/core/symbology/qgssymbol.cpp b/src/core/symbology/qgssymbol.cpp index bac266fe912..a8f94e0c4e9 100644 --- a/src/core/symbology/qgssymbol.cpp +++ b/src/core/symbology/qgssymbol.cpp @@ -78,6 +78,7 @@ QgsProperty scaleWholeSymbol( double scaleFactorX, double scaleFactorY, const Qg //////////////////// +Q_NOWARN_DEPRECATED_PUSH // because of deprecated mLayer QgsSymbol::QgsSymbol( SymbolType type, const QgsSymbolLayerList &layers ) : mType( type ) , mLayers( layers ) @@ -97,6 +98,7 @@ QgsSymbol::QgsSymbol( SymbolType type, const QgsSymbolLayerList &layers ) } } } +Q_NOWARN_DEPRECATED_POP QPolygonF QgsSymbol::_getLineString( QgsRenderContext &context, const QgsCurve &curve, bool clipToExtent ) { @@ -434,7 +436,9 @@ void QgsSymbol::stopRender( QgsRenderContext &context ) mSymbolRenderContext.reset( nullptr ); + Q_NOWARN_DEPRECATED_PUSH mLayer = nullptr; + Q_NOWARN_DEPRECATED_POP } void QgsSymbol::setColor( const QColor &color ) @@ -669,6 +673,20 @@ bool QgsSymbol::hasDataDefinedProperties() const return false; } +void QgsSymbol::setLayer( const QgsVectorLayer *layer ) +{ + Q_NOWARN_DEPRECATED_PUSH + mLayer = layer; + Q_NOWARN_DEPRECATED_POP +} + +const QgsVectorLayer *QgsSymbol::layer() const +{ + Q_NOWARN_DEPRECATED_PUSH + return mLayer; + Q_NOWARN_DEPRECATED_POP +} + ///@cond PRIVATE /** @@ -1554,7 +1572,9 @@ QgsMarkerSymbol *QgsMarkerSymbol::clone() const { QgsMarkerSymbol *cloneSymbol = new QgsMarkerSymbol( cloneLayers() ); cloneSymbol->setOpacity( mOpacity ); + Q_NOWARN_DEPRECATED_PUSH cloneSymbol->setLayer( mLayer ); + Q_NOWARN_DEPRECATED_POP cloneSymbol->setClipFeaturesToExtent( mClipFeaturesToExtent ); return cloneSymbol; } @@ -1771,7 +1791,9 @@ QgsLineSymbol *QgsLineSymbol::clone() const { QgsLineSymbol *cloneSymbol = new QgsLineSymbol( cloneLayers() ); cloneSymbol->setOpacity( mOpacity ); + Q_NOWARN_DEPRECATED_PUSH cloneSymbol->setLayer( mLayer ); + Q_NOWARN_DEPRECATED_POP cloneSymbol->setClipFeaturesToExtent( mClipFeaturesToExtent ); return cloneSymbol; } @@ -1889,7 +1911,9 @@ QgsFillSymbol *QgsFillSymbol::clone() const { QgsFillSymbol *cloneSymbol = new QgsFillSymbol( cloneLayers() ); cloneSymbol->setOpacity( mOpacity ); + Q_NOWARN_DEPRECATED_PUSH cloneSymbol->setLayer( mLayer ); + Q_NOWARN_DEPRECATED_POP cloneSymbol->setClipFeaturesToExtent( mClipFeaturesToExtent ); return cloneSymbol; } diff --git a/src/core/symbology/qgssymbol.h b/src/core/symbology/qgssymbol.h index ef7fd3b0e7d..cd2069274f6 100644 --- a/src/core/symbology/qgssymbol.h +++ b/src/core/symbology/qgssymbol.h @@ -394,9 +394,16 @@ class CORE_EXPORT QgsSymbol */ bool hasDataDefinedProperties() const; - //! \note the layer will be NULL after stopRender - void setLayer( const QgsVectorLayer *layer ) { mLayer = layer; } - const QgsVectorLayer *layer() const { return mLayer; } + /** + * \note the layer will be NULL after stopRender + * \deprecated Will be removed in QGIS 4.0 + */ + Q_DECL_DEPRECATED void setLayer( const QgsVectorLayer *layer ) SIP_DEPRECATED; + + /** + * \deprecated Will be removed in QGIS 4.0 + */ + Q_DECL_DEPRECATED const QgsVectorLayer *layer() const SIP_DEPRECATED; /** * Render a feature. Before calling this the startRender() method should be called to initialize @@ -483,7 +490,7 @@ class CORE_EXPORT QgsSymbol RenderHints mRenderHints = nullptr; bool mClipFeaturesToExtent = true; - const QgsVectorLayer *mLayer = nullptr; //current vectorlayer + Q_DECL_DEPRECATED const QgsVectorLayer *mLayer = nullptr; //current vectorlayer private: #ifdef SIP_RUN diff --git a/src/gui/symbology/qgssymbolselectordialog.cpp b/src/gui/symbology/qgssymbolselectordialog.cpp index f7a3c629072..991da6ee5ad 100644 --- a/src/gui/symbology/qgssymbolselectordialog.cpp +++ b/src/gui/symbology/qgssymbolselectordialog.cpp @@ -472,7 +472,9 @@ void QgsSymbolSelectorWidget::layerChanged() { mDataDefineRestorer.reset(); // then it must be a symbol + Q_NOWARN_DEPRECATED_PUSH currentItem->symbol()->setLayer( mVectorLayer ); + Q_NOWARN_DEPRECATED_POP // Now populate symbols of that type using the symbols list widget: QgsSymbolsListWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, mAdvancedMenu, this, mVectorLayer ); symbolsList->setContext( mContext );