foreach ( QString key, providersList ) { QLibrary *library = QgsProviderRegistry::instance()->providerLibrary( key ); if ( !library ) continue; dataCapabilities_t * dataCapabilities = ( dataCapabilities_t * ) cast_to_fptr( library->resolve( "dataCapabilities" ) ); if ( !dataCapabilities ) { QgsDebugMsg( library->fileName() + " does not have dataCapabilities" ); continue; } int capabilities = dataCapabilities(); if ( capabilities == QgsDataProvider::NoDataCapabilities ) { QgsDebugMsg( library->fileName() + " does not have any dataCapabilities" ); continue; } dataItem_t *dataItem = ( dataItem_t * ) cast_to_fptr( library->resolve( "dataItem" ) ); if ( !dataItem ) { QgsDebugMsg( library->fileName() + " does not have dataItem" ); continue; } QgsDataItem *item = dataItem( "", NULL ); // empty path -> top level if ( item ) { QgsDebugMsg( "Add new top level item : " + item->name() ); connectItem( item ); providerMap.insertMulti( capabilities, item ); } }
int QgsProviderRegistry::providerCapabilities( const QString &providerKey ) const { std::unique_ptr< QLibrary > library( createProviderLibrary( providerKey ) ); if ( !library ) { return QgsDataProvider::NoDataCapabilities; } dataCapabilities_t *dataCapabilities = reinterpret_cast< dataCapabilities_t *>( cast_to_fptr( library->resolve( "dataCapabilities" ) ) ); if ( !dataCapabilities ) { return QgsDataProvider::NoDataCapabilities; } return dataCapabilities(); }
int QgsProviderRegistry::providerCapabilities( const QString &providerKey ) const { QLibrary *library = providerLibrary( providerKey ); if ( !library ) { return QgsDataProvider::NoDataCapabilities; } dataCapabilities_t * dataCapabilities = ( dataCapabilities_t * ) cast_to_fptr( library->resolve( "dataCapabilities" ) ); if ( !dataCapabilities ) { return QgsDataProvider::NoDataCapabilities; } return dataCapabilities(); }