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()
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
const QDir & libraryDirectory() const
Return library directory where plugins are found.
virtual void setTitle(const QString &title)=0
set title for the messages
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
static void warning(const QString &msg)
Goes to qWarning.
virtual QString protocolDrivers() const
Return a string containing the available protocol drivers.
QLibrary * providerLibrary(const QString &providerKey) const
QString library(const QString &providerKey) const
Return path for the library of the provider.
void registerGuis(QWidget *widget)
virtual QString databaseDrivers() const
Return a string containing the available database drivers.
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.
virtual QString fileVectorFilters() const
Return vector file filter string.
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
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.
const QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Return metadata of the provider or NULL if not found.
QString pluginList(bool asHtml=false) const
Return list of provider plugins found.
void buildsupportedrasterfilefilter_t(QString &theFileFiltersString)
QString fileVectorFilters_t()
std::map< QString, QgsProviderMetadata * > Providers
Open the given vector data source.
A registry / canonical manager of data providers.
int providerCapabilities(const QString &providerKey) const
Return the provider capabilities.
virtual void showMessage(bool blocking=true)=0
display the message to the user and deletes itself
static QgsMapLayerRegistry * instance()
Returns the instance pointer, creating the object on the first call.
void * resolve(const char *symbol)
virtual QString directoryDrivers() const
Return a string containing the available directory drivers.
virtual QString fileRasterFilters() const
Return raster file filter string.
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()
QStringList providerList() const
Return list of available providers by their keys.
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