Add capabilities flags for QgsProviderMetadata

So that callers can determine which functionality in the metadata
is implemented for a particular object
This commit is contained in:
Nyall Dawson 2020-11-06 10:13:07 +10:00
parent 9e72b69a7d
commit 8254b7dd1f
7 changed files with 61 additions and 0 deletions

View File

@ -107,6 +107,14 @@ library object.
%End
public:
enum ProviderMetadataCapability
{
PriorityForUri,
LayerTypesForUri,
};
typedef QFlags<QgsProviderMetadata::ProviderMetadataCapability> ProviderMetadataCapabilities;
QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
%Docstring
@ -132,6 +140,13 @@ This key string is used for the associative container in :py:class:`QgsProviderR
This returns descriptive text for the provider
This is used to provide a descriptive list of available data providers.
%End
virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
%Docstring
Returns the provider metadata capabilities.
.. versionadded:: 3.18
%End
QString library() const /Deprecated/;
@ -526,6 +541,10 @@ relating to the connection have been updated.
};
QFlags<QgsProviderMetadata::ProviderMetadataCapability> operator|(QgsProviderMetadata::ProviderMetadataCapability f1, QFlags<QgsProviderMetadata::ProviderMetadataCapability> f2);
/************************************************************************
* This file has been generated automatically from *
* *

View File

@ -145,4 +145,10 @@ QString QgsEptProviderMetadata::encodeUri( const QVariantMap &parts ) const
return path;
}
QgsProviderMetadata::ProviderMetadataCapabilities QgsEptProviderMetadata::capabilities() const
{
return ProviderMetadataCapability::LayerTypesForUri
| ProviderMetadataCapability::PriorityForUri;
}
///@endcond

View File

@ -61,9 +61,11 @@ class QgsEptProviderMetadata : public QgsProviderMetadata
{
public:
QgsEptProviderMetadata();
QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const override;
QgsEptProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) override;
QList< QgsDataItemProvider * > dataItemProviders() const override;
int priorityForUri( const QString &uri ) const override;
QList< QgsMapLayerType > validLayerTypesForUri( const QString &uri ) const override;
bool uriIsBlocklisted( const QString &uri ) const override;
QString encodeUri( const QVariantMap &parts ) const override;
QVariantMap decodeUri( const QString &uri ) const override;

View File

@ -51,6 +51,11 @@ QString QgsProviderMetadata::description() const
return mDescription;
}
QgsProviderMetadata::ProviderMetadataCapabilities QgsProviderMetadata::capabilities() const
{
return QgsProviderMetadata::ProviderMetadataCapabilities();
}
QString QgsProviderMetadata::library() const
{
return mLibrary;

View File

@ -141,6 +141,18 @@ class CORE_EXPORT QgsProviderMetadata : public QObject
public:
/**
* Indicates capabilities of the provider metadata implementation.
*
* \since QGIS 3.18
*/
enum ProviderMetadataCapability
{
PriorityForUri = 1 << 0, //!< Indicates that the metadata can calculate a priority for a URI
LayerTypesForUri = 1 << 1, //!< Indicates that the metadata can determine valid layer types for a URI
};
Q_DECLARE_FLAGS( ProviderMetadataCapabilities, ProviderMetadataCapability )
/**
* Typedef for data provider creation function.
* \since QGIS 3.0
@ -180,6 +192,13 @@ class CORE_EXPORT QgsProviderMetadata : public QObject
*/
QString description() const;
/**
* Returns the provider metadata capabilities.
*
* \since QGIS 3.18
*/
virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
/**
* This returns the library file name
*
@ -604,4 +623,7 @@ class CORE_EXPORT QgsProviderMetadata : public QObject
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QgsProviderMetadata::ProviderMetadataCapabilities )
#endif //QGSPROVIDERMETADATA_H

View File

@ -131,6 +131,12 @@ QgsPdalProvider *QgsPdalProviderMetadata::createProvider( const QString &uri, co
return new QgsPdalProvider( uri, options, flags );
}
QgsProviderMetadata::ProviderMetadataCapabilities QgsPdalProviderMetadata::capabilities() const
{
return ProviderMetadataCapability::LayerTypesForUri
| ProviderMetadataCapability::PriorityForUri;
}
QList<QgsDataItemProvider *> QgsPdalProviderMetadata::dataItemProviders() const
{
QList< QgsDataItemProvider * > providers;

View File

@ -57,6 +57,7 @@ class QgsPdalProviderMetadata : public QgsProviderMetadata
public:
QgsPdalProviderMetadata();
QgsPdalProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) override;
QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const override;
QList< QgsDataItemProvider * > dataItemProviders() const override;
QString encodeUri( const QVariantMap &parts ) const override;
QVariantMap decodeUri( const QString &uri ) const override;