diff --git a/python/core/auto_generated/annotations/qgsannotationlayer.sip.in b/python/core/auto_generated/annotations/qgsannotationlayer.sip.in index 9f63b10756b1..89a354836fe6 100644 --- a/python/core/auto_generated/annotations/qgsannotationlayer.sip.in +++ b/python/core/auto_generated/annotations/qgsannotationlayer.sip.in @@ -132,9 +132,12 @@ The optional ``feedback`` argument can be used to cancel the search early. virtual bool supportsEditing() const; + virtual QgsDataProvider *dataProvider(); + }; + /************************************************************************ * This file has been generated automatically from * * * diff --git a/src/core/annotations/qgsannotationlayer.cpp b/src/core/annotations/qgsannotationlayer.cpp index 55f277cb5f32..880dfa929803 100644 --- a/src/core/annotations/qgsannotationlayer.cpp +++ b/src/core/annotations/qgsannotationlayer.cpp @@ -103,12 +103,14 @@ QgsAnnotationLayer::QgsAnnotationLayer( const QString &name, const LayerOptions { mShouldValidateCrs = false; mValid = true; + mDataProvider = new QgsAnnotationLayerDataProvider( QgsDataProvider::ProviderOptions(), QgsDataProvider::ReadFlags() ); } QgsAnnotationLayer::~QgsAnnotationLayer() { emit willBeDeleted(); qDeleteAll( mItems ); + delete mDataProvider; } void QgsAnnotationLayer::reset() @@ -385,3 +387,50 @@ bool QgsAnnotationLayer::supportsEditing() const { return true; } + +QgsDataProvider *QgsAnnotationLayer::dataProvider() +{ + return mDataProvider; +} + +const QgsDataProvider *QgsAnnotationLayer::dataProvider() const +{ + return mDataProvider; +} + + +// +// QgsAnnotationLayerDataProvider +// +///@cond PRIVATE +QgsAnnotationLayerDataProvider::QgsAnnotationLayerDataProvider( + const ProviderOptions &options, + QgsDataProvider::ReadFlags flags ) + : QgsDataProvider( QString(), options, flags ) +{} + +QgsCoordinateReferenceSystem QgsAnnotationLayerDataProvider::crs() const +{ + return QgsCoordinateReferenceSystem(); +} + +QString QgsAnnotationLayerDataProvider::name() const +{ + return QStringLiteral( "annotation" ); +} + +QString QgsAnnotationLayerDataProvider::description() const +{ + return QString(); +} + +QgsRectangle QgsAnnotationLayerDataProvider::extent() const +{ + return QgsRectangle(); +} + +bool QgsAnnotationLayerDataProvider::isValid() const +{ + return true; +} +///@endcond diff --git a/src/core/annotations/qgsannotationlayer.h b/src/core/annotations/qgsannotationlayer.h index 09975d36f9de..d91b2a95da43 100644 --- a/src/core/annotations/qgsannotationlayer.h +++ b/src/core/annotations/qgsannotationlayer.h @@ -148,6 +148,8 @@ class CORE_EXPORT QgsAnnotationLayer : public QgsMapLayer bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override; bool isEditable() const override; bool supportsEditing() const override; + QgsDataProvider *dataProvider() override; + const QgsDataProvider *dataProvider() const override SIP_SKIP; private: QMap mItems; @@ -156,10 +158,37 @@ class CORE_EXPORT QgsAnnotationLayer : public QgsMapLayer std::unique_ptr< QgsAnnotationLayerSpatialIndex > mSpatialIndex; QSet< QString > mNonIndexedItems; + QgsDataProvider *mDataProvider = nullptr; + QStringList queryIndex( const QgsRectangle &bounds, QgsFeedback *feedback = nullptr ) const; friend class QgsAnnotationLayerRenderer; }; +#ifndef SIP_RUN +///@cond PRIVATE + +/** + * A minimal data provider for annotation layers. + * + * \since QGIS 3.22 + */ +class QgsAnnotationLayerDataProvider : public QgsDataProvider +{ + Q_OBJECT + + public: + QgsAnnotationLayerDataProvider( const QgsDataProvider::ProviderOptions &providerOptions, + QgsDataProvider::ReadFlags flags ); + QgsCoordinateReferenceSystem crs() const override; + QString name() const override; + QString description() const override; + QgsRectangle extent() const override; + bool isValid() const override; + +}; +///@endcond +#endif + #endif // QGSANNOTATIONLAYER_H