Skip to content

Commit 3535ee2

Browse files
committedApr 18, 2017
Allow QgsDataProvider access through QgsMapLayer
Avoids having to cast to QgsRasterLayer/QgsVectorLayer before accessing the common QgsDataProvider members
1 parent 87a6708 commit 3535ee2

14 files changed

+57
-81
lines changed
 

‎python/core/qgsmaplayer.sip

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ Returns the layer's unique ID, which is used to access this layer from QgsProjec
9595
:rtype: str
9696
%End
9797

98+
virtual QgsDataProvider *dataProvider();
99+
%Docstring
100+
Returns the layer's data provider.
101+
:rtype: QgsDataProvider
102+
%End
103+
104+
98105
QString originalName() const;
99106
%Docstring
100107
Returns the original name of the layer.

‎python/core/qgsvectorlayer.sip

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -383,12 +383,7 @@ Returns a comment for the data in the layer
383383
:rtype: str
384384
%End
385385

386-
QgsVectorDataProvider *dataProvider();
387-
%Docstring
388-
Returns the data provider
389-
:rtype: QgsVectorDataProvider
390-
%End
391-
386+
virtual QgsVectorDataProvider *dataProvider();
392387

393388
void setProviderEncoding( const QString &encoding );
394389
%Docstring

‎python/core/raster/qgsrasterlayer.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ class QgsRasterLayer : QgsMapLayer
103103
QString bandName( int bandNoInt ) const;
104104

105105
/** Returns the data provider */
106-
QgsRasterDataProvider* dataProvider();
106+
virtual QgsRasterDataProvider* dataProvider();
107107

108108
/** Returns the data provider in a const-correct manner
109109
@note available in python bindings as constDataProvider()
110110
*/
111-
const QgsRasterDataProvider* dataProvider() const /PyName=constDataProvider/;
111+
virtual const QgsRasterDataProvider* dataProvider() const /PyName=constDataProvider/;
112112

113113
/** Synchronises with changes in the datasource */
114114
virtual void reload();

‎src/core/layertree/qgslayertreegroup.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,20 @@ class CORE_EXPORT QgsLayerTreeGroup : public QgsLayerTreeNode
215215

216216
//! Whether the group is mutually exclusive (i.e. only one child can be checked at a time)
217217
bool mMutuallyExclusive;
218-
//! Keeps track which child has been most recently selected
219-
//! (so if the whole group is unchecked and checked again, we know which child to check)
218+
219+
/**
220+
* Keeps track which child has been most recently selected
221+
* (so if the whole group is unchecked and checked again, we know which child to check)
222+
*/
220223
int mMutuallyExclusiveChildIndex;
221224

222225
private:
223226

224227
#ifdef SIP_RUN
228+
229+
/**
230+
* Copies are not allowed
231+
*/
225232
QgsLayerTreeGroup( const QgsLayerTreeGroup &other );
226233
#endif
227234

‎src/core/layertree/qgslayertreelayer.cpp

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -146,25 +146,7 @@ void QgsLayerTreeLayer::writeXml( QDomElement &parentElement )
146146
if ( mRef.layer )
147147
{
148148
elem.setAttribute( "source", mRef.layer->publicSource() );
149-
QString providerKey;
150-
switch ( mRef.layer->type() )
151-
{
152-
case QgsMapLayer::VectorLayer:
153-
{
154-
QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( mRef.layer );
155-
providerKey = vl->dataProvider()->name();
156-
break;
157-
}
158-
case QgsMapLayer::RasterLayer:
159-
{
160-
QgsRasterLayer *rl = qobject_cast< QgsRasterLayer * >( mRef.layer );
161-
providerKey = rl->dataProvider()->name();
162-
break;
163-
}
164-
case QgsMapLayer::PluginLayer:
165-
break;
166-
}
167-
elem.setAttribute( "providerKey", providerKey );
149+
elem.setAttribute( "providerKey", mRef.layer->dataProvider() ? mRef.layer->dataProvider()->name() : QString() );
168150
}
169151

170152
elem.setAttribute( QStringLiteral( "checked" ), mChecked ? QStringLiteral( "Qt::Checked" ) : QStringLiteral( "Qt::Unchecked" ) );

‎src/core/layertree/qgslayertreelayer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ class CORE_EXPORT QgsLayerTreeLayer : public QgsLayerTreeNode
131131
private:
132132

133133
#ifdef SIP_RUN
134+
135+
/**
136+
* Copies are not allowed
137+
*/
134138
QgsLayerTreeLayer( const QgsLayerTreeLayer &other );
135139
#endif
136140
};

‎src/core/qgscolorramp.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,6 @@ class CORE_EXPORT QgsPresetSchemeColorRamp : public QgsColorRamp, public QgsColo
450450
*/
451451
QList< QColor > colors() const;
452452

453-
// QgsColorRamp interface
454453
virtual double value( int index ) const override;
455454
virtual QColor color( double value ) const override;
456455
virtual QString type() const override { return QStringLiteral( "preset" ); }
@@ -459,10 +458,8 @@ class CORE_EXPORT QgsPresetSchemeColorRamp : public QgsColorRamp, public QgsColo
459458
virtual QgsStringMap properties() const override;
460459
int count() const override;
461460

462-
// QgsColorScheme interface
463461
QString schemeName() const override { return QStringLiteral( "preset" ); }
464-
QgsNamedColorList fetchColors( const QString &context = QString(),
465-
const QColor &baseColor = QColor() ) override;
462+
QgsNamedColorList fetchColors( const QString &context = QString(), const QColor &baseColor = QColor() ) override;
466463
bool isEditable() const override { return true; }
467464

468465
private:

‎src/core/qgsmaplayer.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "qgsrendercontext.h"
3636
#include "qgsmaplayerdependency.h"
3737

38+
class QgsDataProvider;
3839
class QgsMapLayerLegend;
3940
class QgsMapLayerRenderer;
4041
class QgsMapLayerStyleManager;
@@ -128,6 +129,17 @@ class CORE_EXPORT QgsMapLayer : public QObject
128129
*/
129130
QString name() const;
130131

132+
/**
133+
* Returns the layer's data provider.
134+
*/
Code has comments. Press enter to view.
135+
virtual QgsDataProvider *dataProvider() { return nullptr; }
136+
137+
/**
138+
* Returns the layer's data provider in a const-correct manner
139+
* \note not available in Python bindings
140+
*/
141+
virtual const QgsDataProvider *dataProvider() const SIP_SKIP { return nullptr; }
142+
131143
/** Returns the original name of the layer.
132144
* \returns the original layer name
133145
*/

‎src/core/qgsmaplayerproxymodel.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,7 @@ bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex
9898
if ( mExceptList.contains( layer ) )
9999
return false;
100100

101-
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );
102-
if ( vl && mExcludedProviders.contains( vl->dataProvider()->name() ) )
103-
return false;
104-
QgsRasterLayer *rl = qobject_cast<QgsRasterLayer *>( layer );
105-
if ( rl && mExcludedProviders.contains( rl->dataProvider()->name() ) )
101+
if ( mExcludedProviders.contains( layer->dataProvider()->name() ) )
106102
return false;
107103

108104
if ( mFilters.testFlag( WritableLayer ) && layer->readOnly() )
@@ -122,7 +118,7 @@ bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex
122118
mFilters.testFlag( HasGeometry );
123119
if ( detectGeometry && layer->type() == QgsMapLayer::VectorLayer )
124120
{
125-
if ( vl )
121+
if ( QgsVectorLayer *vl = qobject_cast< QgsVectorLayer *>( layer ) )
126122
{
127123
if ( mFilters.testFlag( HasGeometry ) && vl->hasGeometryType() )
128124
return true;

‎src/core/qgsmaplayerref.h

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,26 +65,9 @@ struct _LayerRef
6565
layer->name() != name )
6666
return false;
6767

68-
switch ( layer->type() )
69-
{
70-
case QgsMapLayer::VectorLayer:
71-
{
72-
QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( layer );
73-
if ( vl->dataProvider()->name() != provider )
74-
return false;
75-
break;
76-
}
77-
case QgsMapLayer::RasterLayer:
78-
{
79-
QgsRasterLayer *rl = qobject_cast< QgsRasterLayer * >( layer );
80-
if ( rl->dataProvider()->name() != provider )
81-
return false;
82-
break;
83-
}
84-
case QgsMapLayer::PluginLayer:
85-
break;
68+
if ( layer->dataProvider()->name() != provider )
69+
return false;
8670

87-
}
8871
return true;
8972
}
9073
};

‎src/core/qgsmimedatautils.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,23 +108,21 @@ static void _addLayerTreeNodeToUriList( QgsLayerTreeNode *node, QgsMimeDataUtils
108108
else if ( QgsLayerTree::isLayer( node ) )
109109
{
110110
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
111-
if ( !nodeLayer->layer() )
111+
QgsMapLayer *layer = nodeLayer->layer();
112+
if ( !layer )
112113
return;
113114

114115
QgsMimeDataUtils::Uri uri;
115-
if ( QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( nodeLayer->layer() ) )
116+
uri.name = layer->name();
117+
uri.uri = layer->dataProvider()->dataSourceUri();
118+
uri.providerKey = layer->dataProvider()->name();
119+
if ( layer->type() == QgsMapLayer::VectorLayer )
116120
{
117121
uri.layerType = QStringLiteral( "vector" );
118-
uri.name = vlayer->name();
119-
uri.providerKey = vlayer->dataProvider()->name();
120-
uri.uri = vlayer->dataProvider()->dataSourceUri();
121122
}
122-
else if ( QgsRasterLayer *rlayer = qobject_cast<QgsRasterLayer *>( nodeLayer->layer() ) )
123+
else if ( layer->type() == QgsMapLayer::RasterLayer )
123124
{
124125
uri.layerType = QStringLiteral( "raster" );
125-
uri.name = rlayer->name();
126-
uri.providerKey = rlayer->dataProvider()->name();
127-
uri.uri = rlayer->dataProvider()->dataSourceUri();
128126
}
129127
else
130128
{

‎src/core/qgsvectordataprovider.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,22 +525,22 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider
525525
* Get metadata, dependent on the provider type, that will be display in the metadata tab of the layer properties.
526526
* \returns The provider metadata
527527
*/
528-
virtual QVariantMap metadata() const { return QVariantMap(); };
528+
virtual QVariantMap metadata() const { return QVariantMap(); }
529529

530530
/**
531531
* Get the translated metadata key.
532532
* \param mdKey The metadata key
533533
* \returns The translated metadata value
534534
*/
535-
virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; };
535+
virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
536536

537537
/**
538538
* Get the translated metadata value.
539539
* \param mdKey The metadata key
540540
* \param value The metadata value
541541
* \returns The translated metadata value
542542
*/
543-
virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ); return value.toString(); };
543+
virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ); return value.toString(); }
544544

545545
signals:
546546

‎src/core/qgsvectorlayer.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "qgsfeaturerequest.h"
3434
#include "qgsfields.h"
3535
#include "qgssnapper.h"
36+
#include "qgsvectordataprovider.h"
3637
#include "qgsvectorsimplifymethod.h"
3738
#include "qgseditformconfig.h"
3839
#include "qgsattributetableconfig.h"
@@ -63,7 +64,6 @@ class QgsRelation;
6364
class QgsRelationManager;
6465
class QgsSingleSymbolRenderer;
6566
class QgsSymbol;
66-
class QgsVectorDataProvider;
6767
class QgsVectorLayerJoinInfo;
6868
class QgsVectorLayerEditBuffer;
6969
class QgsVectorLayerJoinBuffer;
@@ -437,13 +437,8 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
437437
*/
438438
QString displayExpression() const;
439439

440-
//! Returns the data provider
441-
QgsVectorDataProvider *dataProvider();
442-
443-
/** Returns the data provider in a const-correct manner
444-
* \note not available in Python bindings
445-
*/
446-
const QgsVectorDataProvider *dataProvider() const SIP_SKIP;
440+
QgsVectorDataProvider *dataProvider() override;
441+
const QgsVectorDataProvider *dataProvider() const override SIP_SKIP;
447442

448443
//! Sets the textencoding of the data provider
449444
void setProviderEncoding( const QString &encoding );

‎src/core/raster/qgsrasterlayer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "qgis.h"
3333
#include "qgsmaplayer.h"
3434
#include "qgsraster.h"
35+
#include "qgsrasterdataprovider.h"
3536
#include "qgsrasterpipe.h"
3637
#include "qgsrasterviewport.h"
3738
#include "qgsrasterminmaxorigin.h"
@@ -247,13 +248,12 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
247248
//! \brief Get the name of a band given its number
248249
QString bandName( int bandNoInt ) const;
249250

250-
//! Returns the data provider
251-
QgsRasterDataProvider *dataProvider();
251+
QgsRasterDataProvider *dataProvider() override;
252252

253253
/** Returns the data provider in a const-correct manner
254254
\note available in Python bindings as constDataProvider()
255255
*/
256-
const QgsRasterDataProvider *dataProvider() const;
256+
const QgsRasterDataProvider *dataProvider() const override;
257257

258258
//! Synchronises with changes in the datasource
259259
virtual void reload() override;

0 commit comments

Comments
 (0)
Please sign in to comment.