QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
qgsproviderregistry.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsproviderregistry.h - Singleton class for
3 registering data providers.
4 -------------------
5 begin : Sat Jan 10 2004
6 copyright : (C) 2004 by Gary E.Sherman
7 email : sherman at mrcc.com
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#ifndef QGSPROVIDERREGISTRY_H
20#define QGSPROVIDERREGISTRY_H
21
22#include <map>
23
24#include <QDir>
25#include <QLibrary>
26#include <QString>
27
28#include "qgsdataprovider.h"
29#include "qgis_core.h"
30#include "qgis_sip.h"
31
32#include <vector>
33#include <memory>
34
36class QgsVectorLayer;
39class QgsDataItem;
41class QgsTransaction;
42class QgsFields;
44class QgsFeedback;
45
60class CORE_EXPORT QgsProviderRegistry
61{
62
63 public:
64
65 // TODO QGIS 4 - either move to QgsAbstractDataSourceWidget or remove altogether
66
71 {
72
79
85
92 };
93
95 static QgsProviderRegistry *instance( const QString &pluginPath = QString() );
96
98
107 Q_DECL_DEPRECATED QString library( const QString &providerKey ) const SIP_DEPRECATED;
108
110 QString pluginList( bool asHtml = false ) const;
111
115 QDir libraryDirectory() const;
116
118 void setLibraryDirectory( const QDir &path );
119
120 /*
121 * IMPORTANT: While it seems like /Factory/ would be the correct annotation here, that's not
122 * the case.
123 * Paraphrasing Phil Thomson's advice on https://www.riverbankcomputing.com/pipermail/pyqt/2017-July/039450.html:
124 *
125 * "
126 * /Factory/ is used when the instance returned is guaranteed to be new to Python.
127 * In this case it isn't because it has already been seen when being returned by by the python function
128 * creating the provider subclass.
129 *
130 * (However for a different sub-class implemented in C++ then it would be the first time it was seen
131 * by Python so the /Factory/ on create() would be correct.)
132 *
133 * You might try using /TransferBack/ on createProvider() instead - that might be the best compromise.
134 * "
135 */
136
147 QgsDataProvider *createProvider( const QString &providerKey,
148 const QString &dataSource,
150 QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) SIP_TRANSFERBACK;
151
158 Q_DECL_DEPRECATED int providerCapabilities( const QString &providerKey ) const SIP_DEPRECATED;
159
165 SIP_SKIP Qgis::VectorExportResult createEmptyLayer( const QString &providerKey, const QString &uri, const QgsFields &fields, Qgis::WkbType wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, QMap<int, int> &oldToNewAttrIdxMap, QString &errorMessage, const QMap<QString, QVariant> *options );
166
173 QgsRasterDataProvider *createRasterDataProvider(
174 const QString &providerKey,
175 const QString &uri,
176 const QString &format,
177 int nBands,
178 Qgis::DataType type,
179 int width, int height,
180 double *geoTransform,
182 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
183
189 QList<QPair<QString, QString> > pyramidResamplingMethods( const QString &providerKey );
190
199 QVariantMap decodeUri( const QString &providerKey, const QString &uri );
200
210 QString encodeUri( const QString &providerKey, const QVariantMap &parts );
211
223 QString absoluteToRelativeUri( const QString &providerKey, const QString &uri, const QgsReadWriteContext &context ) const;
224
236 QString relativeToAbsoluteUri( const QString &providerKey, const QString &uri, const QgsReadWriteContext &context ) const;
237
244 Q_DECL_DEPRECATED QWidget *createSelectionWidget( const QString &providerKey, QWidget *parent = nullptr, Qt::WindowFlags fl = Qt::WindowFlags(), QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::None ) SIP_DEPRECATED;
245
251 QList< QgsDataItemProvider * > dataItemProviders( const QString &providerKey ) const SIP_FACTORY;
252
258 int listStyles( const QString &providerKey,
259 const QString &uri,
260 QStringList &ids,
261 QStringList &names,
262 QStringList &descriptions,
263 QString &errCause );
264
277 bool styleExists( const QString &providerKey, const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
278
286 QString getStyleById( const QString &providerKey, const QString &uri, const QString &styleId, QString &errCause );
287
292 bool deleteStyleById( const QString &providerKey, const QString &uri, const QString &styleId, QString &errCause );
293
299 bool saveStyle( const QString &providerKey, const QString &uri, const QString &qmlStyle, const QString &sldStyle,
300 const QString &styleName, const QString &styleDescription,
301 const QString &uiFileContent, bool useAsDefault, QString &errCause );
302
308 QString loadStyle( const QString &providerKey, const QString &uri, QString &errCause );
309
319 QString loadStoredStyle( const QString &providerKey, const QString &uri, QString &styleName, QString &errCause );
320
336 bool saveLayerMetadata( const QString &providerKey, const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
337
342 bool createDb( const QString &providerKey, const QString &dbPath, QString &errCause );
343
348 QgsTransaction *createTransaction( const QString &providerKey, const QString &connString ) SIP_FACTORY;
349
360 Q_DECL_DEPRECATED QFunctionPointer function( const QString &providerKey, const QString &functionName ) const SIP_DEPRECATED;
361
371 Q_DECL_DEPRECATED QLibrary *createProviderLibrary( const QString &providerKey ) const SIP_FACTORY SIP_DEPRECATED;
372
374 QStringList providerList() const;
375
377 QgsProviderMetadata *providerMetadata( const QString &providerKey ) const;
378
385 QSet< QString > providersForLayerType( Qgis::LayerType type ) const;
386
394 class CORE_EXPORT ProviderCandidateDetails
395 {
396
397 public:
398
402 ProviderCandidateDetails( QgsProviderMetadata *metadata, const QList< Qgis::LayerType > &layerTypes )
403 : mMetadata( metadata )
404 , mLayerTypes( layerTypes )
405 {}
406
410 QgsProviderMetadata *metadata() const { return mMetadata; }
411
416 QList<Qgis::LayerType> layerTypes() const { return mLayerTypes; }
417
418#ifdef SIP_RUN
419 SIP_PYOBJECT __repr__();
420 % MethodCode
421 QString str = QStringLiteral( "<QgsProviderRegistry.ProviderCandidateDetails: %1>" ).arg( sipCpp->metadata()->key() );
422 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
423 % End
424#endif
425
426 private:
427 QgsProviderMetadata *mMetadata = nullptr;
428
429 QList< Qgis::LayerType > mLayerTypes;
430
431 };
432
449 QList< QgsProviderRegistry::ProviderCandidateDetails > preferredProvidersForUri( const QString &uri ) const;
450
462 class CORE_EXPORT UnusableUriDetails
463 {
464 public:
465
472 UnusableUriDetails( const QString &uri = QString(), const QString &warning = QString(), const QList< Qgis::LayerType > &layerTypes = QList< Qgis::LayerType >() )
473 : uri( uri )
474 , warning( warning )
475 , layerTypes( layerTypes )
476 {}
477
481 QString uri;
482
486 QString warning;
487
492
497 QList<Qgis::LayerType> layerTypes;
498
499#ifdef SIP_RUN
500 SIP_PYOBJECT __repr__();
501 % MethodCode
502 QString str = QStringLiteral( "<QgsProviderRegistry.UnusableUriDetails: %1>" ).arg( sipCpp->warning );
503 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
504 % End
505#endif
506
507 };
508
522 {
523
524 public:
525
526 virtual ~UnusableUriHandlerInterface() = default;
527
531 virtual bool matchesUri( const QString &uri ) const = 0;
532
536 virtual UnusableUriDetails details( const QString &uri ) const = 0;
537
538 };
539
550 bool registerUnusableUriHandler( UnusableUriHandlerInterface *handler SIP_TRANSFER );
551
575 bool handleUnusableUri( const QString &uri, UnusableUriDetails &details SIP_OUT ) const;
576
593 bool shouldDeferUriForOtherProviders( const QString &uri, const QString &providerKey ) const;
594
608 bool uriIsBlocklisted( const QString &uri ) const;
609
621 QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
622
635 QString fileVectorFilters() const;
636
651 QString fileRasterFilters() const;
652
668 QString fileMeshFilters() const;
669
680 QString fileMeshDatasetFilters() const;
681
696 QString filePointCloudFilters() const;
697
712 QString fileVectorTileFilters() const;
713
728 QString fileTiledSceneFilters() const;
729
731 QString databaseDrivers() const;
733 QString directoryDrivers() const;
735 QString protocolDrivers() const;
736
740 Q_DECL_DEPRECATED void registerGuis( QWidget *widget ) SIP_DEPRECATED;
741
748 bool registerProvider( QgsProviderMetadata *providerMetadata SIP_TRANSFER );
749
751 SIP_SKIP typedef std::map<QString, QgsProviderMetadata *> Providers;
752
753 private:
755 QgsProviderRegistry( const QString &pluginPath );
756
757#ifdef SIP_RUN
758 QgsProviderRegistry( const QString &pluginPath );
759#endif
760
761 void init();
762 void clean();
763
765 Providers mProviders;
766
768 QDir mLibraryDirectory;
769
770 void rebuildFilterStrings();
771
781 QString mVectorFileFilters;
782
786 QString mRasterFileFilters;
787
791 QString mMeshFileFilters;
792
796 QString mMeshDatasetFileFilters;
797
801 QString mPointCloudFileFilters;
802
806 QString mVectorTileFileFilters;
807
811 QString mTiledSceneFileFilters;
812
819 QString mDatabaseDrivers;
820
826 QString mDirectoryDrivers;
827
834 QString mProtocolDrivers;
835
836 QList< UnusableUriHandlerInterface * > mUnusableUriHandlers;
837
841 static bool exists();
842
843 friend class QgsApplication;
844
845}; // class QgsProviderRegistry
846
847#endif //QGSPROVIDERREGISTRY_H
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
Extends QApplication to provide access to QGIS specific resources such as theme paths,...
This class represents a coordinate reference system (CRS).
This is the interface for those who want to add custom data items to the browser tree.
Base class for all items in the model.
Definition qgsdataitem.h:46
Abstract base class for spatial data provider implementations.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:45
Container of fields for a vector layer.
Definition qgsfields.h:45
A structured metadata store for a map layer.
Custom exception class which is raised when an operation is not supported.
Holds data provider key, description, and associated shared library file or function pointer informat...
Contains information pertaining to a candidate provider.
QList< Qgis::LayerType > layerTypes() const
Returns a list of map layer types which are valid options for opening the target using this candidate...
QgsProviderMetadata * metadata() const
Returns the candidate provider metadata.
ProviderCandidateDetails(QgsProviderMetadata *metadata, const QList< Qgis::LayerType > &layerTypes)
Constructor for ProviderCandidateDetails, with the specified provider metadata and valid candidate la...
Contains information about unusable URIs which aren't handled by any registered providers.
QString warning
Contains a short, user-friendly, translated message advising why the URI is not usable.
QString uri
URI which could not be handled.
QString detailedWarning
Contains a longer, user-friendly, translated message advising why the URI is not usable.
UnusableUriDetails(const QString &uri=QString(), const QString &warning=QString(), const QList< Qgis::LayerType > &layerTypes=QList< Qgis::LayerType >())
Constructor for UnusableUriDetails for the given uri, with the specified user-friendly,...
QList< Qgis::LayerType > layerTypes
Contains a list of map layer types which are usually valid options for opening the target URI.
An interface used to handle unusable URIs which aren't handled by any registered providers,...
virtual UnusableUriDetails details(const QString &uri) const =0
Returns the details for advising the user why the uri is not usable.
virtual bool matchesUri(const QString &uri) const =0
Returns true if the handle is an unusable URI handler for the specified uri.
A registry / canonical manager of data providers.
std::map< QString, QgsProviderMetadata * > Providers
Type for data provider metadata associative container.
WidgetMode
Different ways a source select dialog can be used.
@ Embedded
Used for the data source manager dialog where the widget is embedded as the main content for a partic...
@ None
Basic mode when the widget is used as a standalone dialog.
@ Manager
Used by data items for QgsDataItem::paramWidget().
Contains details about a sub layer available from a dataset.
Base class for raster data providers.
The class is used as a container of context for various read/write operations on other objects.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
Represents a vector layer which manages a vector based data sets.
#define str(x)
Definition qgis.cpp:38
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_TRANSFERBACK
Definition qgis_sip.h:48
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_THROW(name,...)
Definition qgis_sip.h:198
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.