57 QgsProviderRegistry::QgsProviderRegistry(
const QString& pluginPath )
65 char **argv = qApp->argv();
67 int bin = appDir.
findRev(
"/bin", -1,
false );
69 QString mLibraryDirectory = baseDir +
"/lib";
71 mLibraryDirectory = pluginPath;
76 void QgsProviderRegistry::init()
78 mLibraryDirectory.
setSorting( QDir::Name | QDir::IgnoreCase );
79 mLibraryDirectory.
setFilter( QDir::Files | QDir::NoSymLinks );
81 #if defined(Q_OS_WIN) || defined(__CYGWIN__) 83 #elif defined(ANDROID) 91 if ( mLibraryDirectory.
count() == 0 )
94 msg +=
QObject::tr(
"No vector layers can be loaded. Check your QGIS installation" );
104 QString filePattern = getenv(
"QGIS_PROVIDER_FILE" );
112 while ( it.hasNext() )
118 if ( fileRegexp.
indexIn( fi.fileName() ) == -1 )
120 QgsDebugMsg(
"provider " + fi.fileName() +
" skipped because doesn't match pattern " + filePattern );
128 QgsDebugMsg(
QString(
"Checking %1: ...invalid (lib not loadable): %2" ).arg( myLib.fileName(), myLib.errorString() ) );
137 QgsDebugMsg(
QString(
"Checking %1: ...invalid (has type method)" ).arg( myLib.fileName() ) );
145 QgsDebugMsg(
QString(
"Checking %1: ...invalid (no isProvider method)" ).arg( myLib.fileName() ) );
152 QgsDebugMsg(
QString(
"Checking %1: ...invalid (not a provider)" ).arg( myLib.fileName() ) );
160 QgsDebugMsg(
QString(
"Checking %1: ...invalid (no description method)" ).arg( myLib.fileName() ) );
167 QgsDebugMsg(
QString(
"Checking %1: ...invalid (no providerKey method)" ).arg( myLib.fileName() ) );
176 if ( pDatabaseDrivers )
178 mDatabaseDrivers = pDatabaseDrivers();
183 if ( pDirectoryDrivers )
185 mDirectoryDrivers = pDirectoryDrivers();
190 if ( pProtocolDrivers )
192 mProtocolDrivers = pProtocolDrivers();
197 if ( pFileVectorFilters )
201 if ( !fileVectorFilters.
isEmpty() )
202 mVectorFileFilters += fileVectorFilters;
204 QgsDebugMsg(
QString(
"Checking %1: ...loaded ok (%2 file filters)" ).arg( myLib.fileName() ).arg( fileVectorFilters.
split(
";;" ).
count() ) );
214 pBuild( fileRasterFilters );
216 QgsDebugMsg(
"raster filters: " + fileRasterFilters );
217 if ( !fileRasterFilters.
isEmpty() )
218 mRasterFileFilters += fileRasterFilters;
220 QgsDebugMsg(
QString(
"Checking %1: ...loaded ok (%2 file filters)" ).arg( myLib.fileName() ).arg( fileRasterFilters.
split(
";;" ).
count() ) );
229 void QgsProviderRegistry::clean()
233 Providers::const_iterator it = mProviders.begin();
235 while ( it != mProviders.end() )
238 QString lib = it->second->library();
240 if ( myLib.isLoaded() )
268 QgsProviderRegistry::Providers::const_iterator i =
269 metaData.find( providerKey );
271 if ( i != metaData.end() )
296 Providers::const_iterator it = mProviders.begin();
298 if ( mProviders.empty() )
299 return QObject::tr(
"No data provider plugins are available. No vector layers can be loaded" );
306 while ( it != mProviders.end() )
311 list += it->second->description();
329 mLibraryDirectory = path;
336 return mLibraryDirectory;
360 #ifdef TESTPROVIDERLIB 361 const char *cLib = lib.
toUtf8();
365 void *handle = dlopen( cOgrLib, RTLD_LAZY | RTLD_GLOBAL );
415 if ( !dataCapabilities )
420 return dataCapabilities();
432 if ( !selectFactory )
435 return selectFactory( parent, fl );
438 #if QT_VERSION >= 0x050000 494 typedef void registerGui_function(
QWidget * parent );
498 registerGui_function *registerGui =
reinterpret_cast< registerGui_function *
>(
cast_to_fptr(
function( provider,
"registerGui" ) ) );
503 registerGui( parent );
509 return mVectorFileFilters;
514 return mRasterFileFilters;
519 return mDatabaseDrivers;
524 return mDirectoryDrivers;
529 return mProtocolDrivers;
535 for ( Providers::const_iterator it = mProviders.begin(); it != mProviders.end(); ++it )
static QgsProviderRegistry * instance(const QString &pluginPath=QString::null)
Means of accessing canonical single instance.
QgsDataProvider * classFactoryFunction_t(const QString *)
QString databaseDrivers_t()
virtual QString databaseDrivers() const
Return a string containing the available database drivers.
void cleanupProviderFunction_t()
static QgsProviderMetadata * findMetadata_(QgsProviderRegistry::Providers const &metaData, QString const &providerKey)
Convenience function for finding any existing data providers that match "providerKey".
void setNameFilters(const QStringList &nameFilters)
int findRev(QChar c, int i, bool cs) const
virtual void setTitle(const QString &title)=0
set title for the messages
QString library(const QString &providerKey) const
Return path for the library of the provider.
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
static void warning(const QString &msg)
Goes to qWarning.
const QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Return metadata of the provider or NULL if not found.
const QDir & libraryDirectory() const
Return library directory where plugins are found.
void registerGuis(QWidget *widget)
QString directoryDrivers_t()
static QgsMessageOutput * createMessageOutput()
function that returns new class derived from QgsMessageOutput (don't forget to delete it then if show...
Abstract base class for spatial data provider implementations.
void removeAllMapLayers()
Remove all registered layers.
virtual ~QgsProviderRegistry()
Virtual dectructor.
void setSorting(QFlags< QDir::SortFlag > sort)
QString tr(const char *sourceText, const char *disambiguation, int n)
QWidget * selectFactoryFunction_t(QWidget *parent, Qt::WindowFlags fl)
virtual QString name() const =0
Return a provider name.
QStringList providerList() const
Return list of available providers by their keys.
void setPattern(const QString &pattern)
int indexIn(const QString &str, int offset, CaretMode caretMode) const
void setFilter(QFlags< QDir::Filter > filters)
int count(const T &value) const
void append(const T &value)
QgsDataProvider * provider(const QString &providerKey, const QString &dataSource)
Create an instance of the provider.
QFileInfoList entryInfoList(QFlags< QDir::Filter > filters, QFlags< QDir::SortFlag > sort) const
virtual QString protocolDrivers() const
Return a string containing the available protocol drivers.
int providerCapabilities(const QString &providerKey) const
Return the provider capabilities.
static void logMessage(const QString &message, const QString &tag=QString::null, MessageLevel level=WARNING)
add a message to the instance (and create it if necessary)
virtual void setMessage(const QString &message, MessageType msgType)=0
set message, it won't be displayed until
void setLibraryDirectory(const QDir &path)
Set library directory where to search for plugins.
virtual QString directoryDrivers() const
Return a string containing the available directory drivers.
void buildsupportedrasterfilefilter_t(QString &theFileFiltersString)
virtual QString fileRasterFilters() const
Return raster file filter string.
QString fileVectorFilters_t()
QString pluginList(bool asHtml=false) const
Return list of provider plugins found.
std::map< QString, QgsProviderMetadata * > Providers
Open the given vector data source.
A registry / canonical manager of data providers.
QLibrary * providerLibrary(const QString &providerKey) const
virtual void showMessage(bool blocking=true)=0
display the message to the user and deletes itself
virtual QString fileVectorFilters() const
Return vector file filter string.
static QgsMapLayerRegistry * instance()
Returns the instance pointer, creating the object on the first call.
void * resolve(const char *symbol)
QString left(int n) const
void * function(const QString &providerKey, const QString &functionName)
Get pointer to provider function.
void(*)() cast_to_fptr(void *p)
QString protocolDrivers_t()
Interface for showing messages from QGIS in GUI independent way.
QWidget * selectWidget(const QString &providerKey, QWidget *parent=nullptr, const Qt::WindowFlags &fl=nullptr)
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QByteArray toAscii() const
QString errorString() const
QByteArray toUtf8() const