From 8a6137247a3589cd2f0e683b8e8bf8dbf92dd79e Mon Sep 17 00:00:00 2001 From: Blottiere Paul Date: Wed, 17 May 2017 08:53:52 +0200 Subject: [PATCH] Remove the deep copy functionality --- python/core/qgsmaplayer.sip | 12 +++++------- python/core/qgspluginlayer.sip | 2 +- python/core/qgsvectorlayer.sip | 3 +-- python/core/raster/qgsrasterlayer.sip | 3 +-- src/core/qgsmaplayer.cpp | 12 +----------- src/core/qgsmaplayer.h | 17 +++++------------ src/core/qgspluginlayer.h | 2 +- src/core/qgsvectorlayer.cpp | 4 ++-- src/core/qgsvectorlayer.h | 3 +-- src/core/raster/qgsrasterlayer.cpp | 4 ++-- src/core/raster/qgsrasterlayer.h | 3 +-- tests/src/python/test_qgsvectorlayer.py | 7 ------- 12 files changed, 21 insertions(+), 51 deletions(-) diff --git a/python/core/qgsmaplayer.sip b/python/core/qgsmaplayer.sip index a664e875b09..8ee9cf1da46 100644 --- a/python/core/qgsmaplayer.sip +++ b/python/core/qgsmaplayer.sip @@ -67,10 +67,10 @@ class QgsMapLayer : QObject virtual ~QgsMapLayer(); - virtual QgsMapLayer *clone( bool deep ) const = 0; + virtual QgsMapLayer *clone() const = 0; %Docstring - Returns a new instance equivalent to this one. - \param deep If true, a deep copy is done + Returns a new instance equivalent to this one except for the id which + is still unique. :return: a new layer instance .. versionadded:: 3.0 :rtype: QgsMapLayer @@ -1045,12 +1045,10 @@ Signal emitted when the blend mode is changed, through QgsMapLayer.setBlendMode( protected: - void clone( QgsMapLayer *layer, bool deep = false ) const; + void clone( QgsMapLayer *layer ) const; %Docstring - Copies attributes like name, short name, ... into another layer. The - unique ID is copied too if deep parameter is true. + Copies attributes like name, short name, ... into another layer. \param layer The copy recipient - \param deep To copy the unique ID or not .. versionadded:: 3.0 %End diff --git a/python/core/qgspluginlayer.sip b/python/core/qgspluginlayer.sip index 240d976c6d8..0e340711068 100644 --- a/python/core/qgspluginlayer.sip +++ b/python/core/qgspluginlayer.sip @@ -26,7 +26,7 @@ In order to be readable from project files, they should set these attributes in QgsPluginLayer( const QString &layerType, const QString &layerName = QString() ); ~QgsPluginLayer(); - virtual QgsPluginLayer *clone( bool deep ) const = 0; + virtual QgsPluginLayer *clone() const = 0; %Docstring Returns a new instance equivalent to this one. \param deep If true, a deep copy is done diff --git a/python/core/qgsvectorlayer.sip b/python/core/qgsvectorlayer.sip index 59063d1fd72..3939fd0acd8 100644 --- a/python/core/qgsvectorlayer.sip +++ b/python/core/qgsvectorlayer.sip @@ -334,13 +334,12 @@ class QgsVectorLayer : QgsMapLayer, QgsExpressionContextGenerator, QgsFeatureSin virtual ~QgsVectorLayer(); - virtual QgsVectorLayer *clone( bool deep = false ) const /Factory/; + virtual QgsVectorLayer *clone() const /Factory/; %Docstring Returns a new instance equivalent to this one. A new provider is created for the same data source and renderers for features and diagrams are cloned too. Moreover, each attributes (transparency, extent, selected features and so on) are identicals. - \param deep If true, a deep copy is done (unique ID is copied too) :return: a new layer instance .. versionadded:: 3.0 :rtype: QgsVectorLayer diff --git a/python/core/raster/qgsrasterlayer.sip b/python/core/raster/qgsrasterlayer.sip index 3cbe0bea192..415f57ef668 100644 --- a/python/core/raster/qgsrasterlayer.sip +++ b/python/core/raster/qgsrasterlayer.sip @@ -43,11 +43,10 @@ class QgsRasterLayer : QgsMapLayer /** Returns a new instance equivalent to this one. A new provider is * created for the same data source and renderer is cloned too. - * \param deep If true, a deep copy is done (unique ID is copy too) * \returns a new layer instance * \since QGIS 3.0 */ - virtual QgsRasterLayer *clone( bool deep = true ) const /Factory/; + virtual QgsRasterLayer *clone() const /Factory/; /** \brief This enumerator describes the types of shading that can be used */ enum ColorShadingAlgorithm diff --git a/src/core/qgsmaplayer.cpp b/src/core/qgsmaplayer.cpp index 6638119d12b..83a8c4f479d 100644 --- a/src/core/qgsmaplayer.cpp +++ b/src/core/qgsmaplayer.cpp @@ -94,7 +94,7 @@ QgsMapLayer::~QgsMapLayer() delete mStyleManager; } -void QgsMapLayer::clone( QgsMapLayer *layer, bool deep ) const +void QgsMapLayer::clone( QgsMapLayer *layer ) const { layer->setBlendMode( blendMode() ); @@ -123,11 +123,6 @@ void QgsMapLayer::clone( QgsMapLayer *layer, bool deep ) const layer->setDependencies( dependencies() ); layer->setCrs( crs() ); layer->setCustomProperties( mCustomProperties ); - - if ( deep ) - { - layer->setId( id() ); - } } QgsMapLayer::LayerType QgsMapLayer::type() const @@ -140,11 +135,6 @@ QString QgsMapLayer::id() const return mID; } -void QgsMapLayer::setId( const QString &id ) -{ - mID = id; -} - void QgsMapLayer::setName( const QString &name ) { QString newName = capitalizeLayerName( name ); diff --git a/src/core/qgsmaplayer.h b/src/core/qgsmaplayer.h index f56751d5103..fa4cf5e0f93 100644 --- a/src/core/qgsmaplayer.h +++ b/src/core/qgsmaplayer.h @@ -110,12 +110,12 @@ class CORE_EXPORT QgsMapLayer : public QObject //! QgsMapLayer cannot be copied QgsMapLayer &operator=( QgsMapLayer const & ) = delete; - /** Returns a new instance equivalent to this one. - * \param deep If true, a deep copy is done + /** Returns a new instance equivalent to this one except for the id which + * is still unique. * \returns a new layer instance * \since QGIS 3.0 */ - virtual QgsMapLayer *clone( bool deep ) const = 0; + virtual QgsMapLayer *clone() const = 0; /** Returns the type of the layer. */ @@ -930,13 +930,11 @@ class CORE_EXPORT QgsMapLayer : public QObject protected: - /** Copies attributes like name, short name, ... into another layer. The - * unique ID is copied too if deep parameter is true. + /** Copies attributes like name, short name, ... into another layer. * \param layer The copy recipient - * \param deep To copy the unique ID or not * \since QGIS 3.0 */ - void clone( QgsMapLayer *layer, bool deep = false ) const; + void clone( QgsMapLayer *layer ) const; //! Set the extent virtual void setExtent( const QgsRectangle &rect ); @@ -1031,11 +1029,6 @@ class CORE_EXPORT QgsMapLayer : public QObject private: - /** Set the unique id of the layer. - * /param id the new unique id of the layer - */ - void setId( const QString &id ); - /** * This method returns true by default but can be overwritten to specify * that a certain layer is writable. diff --git a/src/core/qgspluginlayer.h b/src/core/qgspluginlayer.h index f1f69facb21..966935be902 100644 --- a/src/core/qgspluginlayer.h +++ b/src/core/qgspluginlayer.h @@ -41,7 +41,7 @@ class CORE_EXPORT QgsPluginLayer : public QgsMapLayer * \returns a new layer instance * \since QGIS 3.0 */ - virtual QgsPluginLayer *clone( bool deep ) const override = 0; + virtual QgsPluginLayer *clone() const override = 0; //! Return plugin layer type (the same as used in QgsPluginLayerRegistry) QString pluginLayerType(); diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 4d68875cad4..f8c1378dbfc 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -202,10 +202,10 @@ QgsVectorLayer::~QgsVectorLayer() delete mConditionalStyles; } -QgsVectorLayer *QgsVectorLayer::clone( bool deep ) const +QgsVectorLayer *QgsVectorLayer::clone() const { QgsVectorLayer *layer = new QgsVectorLayer( source(), originalName(), mProviderKey ); - QgsMapLayer::clone( layer, deep ); + QgsMapLayer::clone( layer ); QList joins = vectorJoins(); Q_FOREACH ( QgsVectorLayerJoinInfo join, joins ) diff --git a/src/core/qgsvectorlayer.h b/src/core/qgsvectorlayer.h index 5d6eac15495..fadf1c6422d 100644 --- a/src/core/qgsvectorlayer.h +++ b/src/core/qgsvectorlayer.h @@ -404,11 +404,10 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte * created for the same data source and renderers for features and diagrams * are cloned too. Moreover, each attributes (transparency, extent, selected * features and so on) are identicals. - * \param deep If true, a deep copy is done (unique ID is copied too) * \returns a new layer instance * \since QGIS 3.0 */ - virtual QgsVectorLayer *clone( bool deep = false ) const override SIP_FACTORY; + virtual QgsVectorLayer *clone() const override SIP_FACTORY; //! Returns the permanent storage type for this layer as a friendly name. QString storageType() const; diff --git a/src/core/raster/qgsrasterlayer.cpp b/src/core/raster/qgsrasterlayer.cpp index c36ee7e86ce..2c7a4017b64 100644 --- a/src/core/raster/qgsrasterlayer.cpp +++ b/src/core/raster/qgsrasterlayer.cpp @@ -144,10 +144,10 @@ QgsRasterLayer::~QgsRasterLayer() // Note: provider and other interfaces are owned and deleted by pipe } -QgsRasterLayer *QgsRasterLayer::clone( bool deep ) const +QgsRasterLayer *QgsRasterLayer::clone() const { QgsRasterLayer *layer = new QgsRasterLayer( source(), originalName(), mProviderKey ); - QgsMapLayer::clone( layer, deep ); + QgsMapLayer::clone( layer ); layer->setRenderer( renderer()->clone() ); return layer; } diff --git a/src/core/raster/qgsrasterlayer.h b/src/core/raster/qgsrasterlayer.h index 56af49fd69e..6f00da2a99d 100644 --- a/src/core/raster/qgsrasterlayer.h +++ b/src/core/raster/qgsrasterlayer.h @@ -190,11 +190,10 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer /** Returns a new instance equivalent to this one. A new provider is * created for the same data source and renderer is cloned too. - * \param deep If true, a deep copy is done (unique ID is copy too) * \returns a new layer instance * \since QGIS 3.0 */ - virtual QgsRasterLayer *clone( bool deep = false ) const override SIP_FACTORY; + virtual QgsRasterLayer *clone() const override SIP_FACTORY; //! \brief This enumerator describes the types of shading that can be used enum ColorShadingAlgorithm diff --git a/tests/src/python/test_qgsvectorlayer.py b/tests/src/python/test_qgsvectorlayer.py index 08f4066e2ee..892b0351d32 100644 --- a/tests/src/python/test_qgsvectorlayer.py +++ b/tests/src/python/test_qgsvectorlayer.py @@ -2195,16 +2195,9 @@ class TestQgsVectorLayer(unittest.TestCase): def testCloneId(self): layer = createLayerWithFivePoints() - # deep clone by default clone = layer.clone() self.assertFalse(clone.id() == layer.id()) - clone = layer.clone(False) - self.assertFalse(clone.id() == layer.id()) - - clone = layer.clone(True) - self.assertEqual(clone.id(), layer.id()) - def testCloneVectorLayerAttributes(self): # init layer layer = createLayerWithFivePoints()