Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Create minimal data provider for annotation layers
  • Loading branch information
nyalldawson committed Aug 5, 2020
1 parent 83e48c0 commit bc745a1
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 9 deletions.
Expand Up @@ -43,6 +43,7 @@ Constructor for LayerOptions.


QgsAnnotationLayer( const QString &name, const QgsAnnotationLayer::LayerOptions &options );
~QgsAnnotationLayer();

void addItem( QgsAnnotationItem *item /Transfer/ );

Expand All @@ -62,16 +63,19 @@ Constructor for LayerOptions.
virtual QgsRectangle extent() const;


virtual void setTransformContext( const QgsCoordinateTransformContext &ctx );
virtual void setTransformContext( const QgsCoordinateTransformContext &context );


virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const;
virtual bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );

protected:

virtual QgsDataProvider *dataProvider();


};


/************************************************************************
* This file has been generated automatically from *
* *
Expand Down
63 changes: 59 additions & 4 deletions src/core/annotations/qgsannotationlayer.cpp
Expand Up @@ -21,11 +21,20 @@

QgsAnnotationLayer::QgsAnnotationLayer( const QString &name, const LayerOptions &options )
: QgsMapLayer( QgsMapLayerType::AnnotationLayer, name )
, mTransformContext( options.transformContext )
{
QgsDataProvider::ProviderOptions providerOptions;
providerOptions.transformContext = options.transformContext;
mDataProvider = qgis::make_unique< QgsAnnotationLayerDataProvider >( providerOptions );

mValid = true;
}

QgsAnnotationLayer::~QgsAnnotationLayer()
{
emit willBeDeleted();
mDataProvider.reset();
}

void QgsAnnotationLayer::addItem( QgsAnnotationItem *item )
{
mItems.insert( QUuid::createUuid().toString(), item );
Expand All @@ -40,7 +49,7 @@ QgsAnnotationItem *QgsAnnotationItem::takeItem( const QString &itemId )

QgsAnnotationLayer *QgsAnnotationLayer::clone() const
{
QgsAnnotationLayer::LayerOptions options( mTransformContext );
QgsAnnotationLayer::LayerOptions options( mDataProvider->transformContext() );
std::unique_ptr< QgsAnnotationLayer > layer = qgis::make_unique< QgsAnnotationLayer >( name(), options );
QgsMapLayer::clone( layer.get() );

Expand Down Expand Up @@ -79,9 +88,19 @@ QgsRectangle QgsAnnotationLayer::extent() const
return rect;
}

void QgsAnnotationLayer::setTransformContext( const QgsCoordinateTransformContext &ctx )
void QgsAnnotationLayer::setTransformContext( const QgsCoordinateTransformContext &context )
{
mTransformContext = ctx;
mDataProvider->setTransformContext( context );
}

QgsDataProvider *QgsAnnotationLayer::dataProvider()
{
return mDataProvider.get();
}

const QgsDataProvider *QgsAnnotationLayer::dataProvider() const
{
return mDataProvider.get();
}

#if 0
Expand Down Expand Up @@ -131,3 +150,39 @@ QRectF QgsAnnotationLayer::margin() const
}
#endif




//
// QgsAnnotationLayerDataProvider
//
///@cond PRIVATE
QgsAnnotationLayerDataProvider::QgsAnnotationLayerDataProvider( const QgsDataProvider::ProviderOptions &options )
: QgsDataProvider( QString(), options )
{}

QgsCoordinateReferenceSystem QgsAnnotationLayerDataProvider::crs() const
{
return QgsCoordinateReferenceSystem();
}

QString QgsAnnotationLayerDataProvider::name() const
{
return QStringLiteral( "annotation" );
}

QString QgsAnnotationLayerDataProvider::description() const
{
return QString();
}

QgsRectangle QgsAnnotationLayerDataProvider::extent() const
{
return mExtent;
}

bool QgsAnnotationLayerDataProvider::isValid() const
{
return true;
}
///@endcond
37 changes: 34 additions & 3 deletions src/core/annotations/qgsannotationlayer.h
Expand Up @@ -54,6 +54,7 @@ class CORE_EXPORT QgsAnnotationLayer : public QgsMapLayer


QgsAnnotationLayer( const QString &name, const QgsAnnotationLayer::LayerOptions &options );
~QgsAnnotationLayer() override;

void addItem( QgsAnnotationItem *item SIP_TRANSFER );

Expand All @@ -76,16 +77,46 @@ class CORE_EXPORT QgsAnnotationLayer : public QgsMapLayer
virtual QString pickItem( const QgsRectangle &pickRect, const QgsMapSettings &mapSettings ) const;
QString pickItem( const QgsPointXY &mapPos, const QgsMapSettings &mapSettings ) const;
#endif
void setTransformContext( const QgsCoordinateTransformContext &ctx ) override;
void setTransformContext( const QgsCoordinateTransformContext &context ) override;

bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const override { return true; }
bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override { return true; }

protected:

QgsDataProvider *dataProvider() override;
const QgsDataProvider *dataProvider() const override SIP_SKIP;

private:
std::unique_ptr< QgsDataProvider > mDataProvider;

QMap<QString, QgsAnnotationItem *> mItems;
QgsCoordinateTransformContext mTransformContext;
double mOpacity = 100;
};

#ifndef SIP_RUN
///@cond PRIVATE

/**
* A minimal data provider for annotation layers
*/
class QgsAnnotationLayerDataProvider : public QgsDataProvider
{
Q_OBJECT

public:
QgsAnnotationLayerDataProvider( const QgsDataProvider::ProviderOptions &providerOptions );
void setExtent( const QgsRectangle &extent ) { mExtent = extent; }
QgsCoordinateReferenceSystem crs() const override;
QString name() const override;
QString description() const override;
QgsRectangle extent() const override;
bool isValid() const override;

private:

QgsRectangle mExtent;
};
///@endcond
#endif

#endif // QGSANNOTATIONLAYER_H

0 comments on commit bc745a1

Please sign in to comment.