Skip to content

Commit

Permalink
Add QgsVectorDataProvider::Capability::ReloadData and return it for a…
Browse files Browse the repository at this point in the history
…ppropriate providers

This allows to only show reload actions for data providers that actually support it.
  • Loading branch information
m-kuhn authored and nyalldawson committed Dec 13, 2020
1 parent d94efac commit a83319a
Show file tree
Hide file tree
Showing 9 changed files with 14 additions and 9 deletions.
1 change: 1 addition & 0 deletions python/core/auto_generated/qgsvectordataprovider.sip.in
Expand Up @@ -53,6 +53,7 @@ of feature and attribute information from a spatial datasource.
CancelSupport,
CreateRenderer,
CreateLabeling,
ReloadData,
};

typedef QFlags<QgsVectorDataProvider::Capability> Capabilities;
Expand Down
1 change: 1 addition & 0 deletions src/core/providers/ogr/qgsogrprovider.cpp
Expand Up @@ -3015,6 +3015,7 @@ void QgsOgrProvider::computeCapabilities()
}

ability |= ReadLayerMetadata;
ability |= ReloadData;

if ( updateModeActivated )
leaveUpdateMode();
Expand Down
6 changes: 3 additions & 3 deletions src/core/qgsmaplayer.h
Expand Up @@ -262,7 +262,7 @@ class CORE_EXPORT QgsMapLayer : public QObject
/**
* Returns the layer's data provider, it may be NULLPTR.
*/
virtual QgsDataProvider *dataProvider();
Q_INVOKABLE virtual QgsDataProvider *dataProvider();

/**
* Returns the layer's data provider in a const-correct manner, it may be NULLPTR.
Expand Down Expand Up @@ -502,8 +502,8 @@ class CORE_EXPORT QgsMapLayer : public QObject

/**
* Synchronises with changes in the datasource
*/
virtual void reload() {}
*/
Q_INVOKABLE virtual void reload() {}

/**
* Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context
Expand Down
3 changes: 2 additions & 1 deletion src/core/qgsvectordataprovider.h
Expand Up @@ -94,6 +94,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider, public QgsFeat
CancelSupport = 1 << 23, //!< Supports interruption of pending queries from a separated thread. Since QGIS 3.2
CreateRenderer = 1 << 24, //!< Provider can create feature renderers using backend-specific formatting information. Since QGIS 3.2. See QgsVectorDataProvider::createRenderer().
CreateLabeling = 1 << 25, //!< Provider can set labeling settings using backend-specific formatting information. Since QGIS 3.6. See QgsVectorDataProvider::createLabeling().
ReloadData = 1 << 26, //!< Provider is able to force reload data
};

Q_DECLARE_FLAGS( Capabilities, Capability )
Expand Down Expand Up @@ -400,7 +401,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider, public QgsFeat
* a spatial filter is active on this provider, so it may
* be prudent to check this value per intended operation.
*/
virtual QgsVectorDataProvider::Capabilities capabilities() const;
Q_INVOKABLE virtual QgsVectorDataProvider::Capabilities capabilities() const;

/**
* Returns the above in friendly format.
Expand Down
2 changes: 1 addition & 1 deletion src/providers/arcgisrest/qgsafsprovider.cpp
Expand Up @@ -319,7 +319,7 @@ QgsLayerMetadata QgsAfsProvider::layerMetadata() const

QgsVectorDataProvider::Capabilities QgsAfsProvider::capabilities() const
{
QgsVectorDataProvider::Capabilities c = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::ReadLayerMetadata;
QgsVectorDataProvider::Capabilities c = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::ReadLayerMetadata | QgsVectorDataProvider::Capability::ReloadData;
if ( !mRendererDataMap.empty() )
{
c = c | QgsVectorDataProvider::CreateRenderer;
Expand Down
4 changes: 3 additions & 1 deletion src/providers/postgres/qgspostgresprovider.cpp
Expand Up @@ -1317,6 +1317,8 @@ bool QgsPostgresProvider::hasSufficientPermsAndCapabilities()
{
QgsDebugMsgLevel( QStringLiteral( "Checking for permissions on the relation" ), 2 );

mEnabledCapabilities = QgsVectorDataProvider::Capability::ReloadData;

QgsPostgresResult testAccess;
if ( !mIsQuery )
{
Expand Down Expand Up @@ -1348,7 +1350,7 @@ bool QgsPostgresProvider::hasSufficientPermsAndCapabilities()
// the latter flag is here just for compatibility
if ( !mSelectAtIdDisabled )
{
mEnabledCapabilities = QgsVectorDataProvider::SelectAtId;
mEnabledCapabilities |= QgsVectorDataProvider::SelectAtId;
}

if ( !inRecovery )
Expand Down
2 changes: 1 addition & 1 deletion src/providers/virtual/qgsvirtuallayerprovider.cpp
Expand Up @@ -614,7 +614,7 @@ bool QgsVirtualLayerProvider::isValid() const

QgsVectorDataProvider::Capabilities QgsVirtualLayerProvider::capabilities() const
{
QgsVectorDataProvider::Capabilities capabilities = CancelSupport;
QgsVectorDataProvider::Capabilities capabilities = CancelSupport | QgsVectorDataProvider::Capability::ReloadData;

if ( !mDefinition.uid().isNull() )
{
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wfs/qgsoapifprovider.cpp
Expand Up @@ -254,7 +254,7 @@ bool QgsOapifProvider::isValid() const

QgsVectorDataProvider::Capabilities QgsOapifProvider::capabilities() const
{
return QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::ReadLayerMetadata;
return QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::ReadLayerMetadata | QgsVectorDataProvider::Capability::ReloadData;
}

bool QgsOapifProvider::empty() const
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wfs/qgswfsprovider.cpp
Expand Up @@ -1795,7 +1795,7 @@ QStringList QgsWFSProvider::insertedFeatureIds( const QDomDocument &serverRespon

bool QgsWFSProvider::getCapabilities()
{
mCapabilities = QgsVectorDataProvider::SelectAtId;
mCapabilities = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::Capability::ReloadData;

if ( mShared->mCaps.version.isEmpty() )
{
Expand Down

0 comments on commit a83319a

Please sign in to comment.