Skip to content

Commit

Permalink
Fix loading of XYZ tile layer data item provider
Browse files Browse the repository at this point in the history
  • Loading branch information
wonder-sk committed Aug 31, 2016
1 parent 4a1b4fd commit b919198
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
13 changes: 13 additions & 0 deletions src/core/qgsdataitemproviderregistry.cpp
Expand Up @@ -21,6 +21,8 @@
#include "qgslogger.h" #include "qgslogger.h"
#include "qgsproviderregistry.h" #include "qgsproviderregistry.h"


typedef QList<QgsDataItemProvider*> dataItemProviders_t();



/** /**
* \ingroup core * \ingroup core
Expand Down Expand Up @@ -64,6 +66,17 @@ QgsDataItemProviderRegistry::QgsDataItemProviderRegistry()
if ( !library ) if ( !library )
continue; continue;


// new / better way of returning data items from providers

dataItemProviders_t* dataItemProvidersFn = reinterpret_cast< dataItemProviders_t * >( cast_to_fptr( library->resolve( "dataItemProviders" ) ) );
if ( dataItemProvidersFn )
{
// the function is a factory - we keep ownership of the returned providers
mProviders << dataItemProvidersFn();
}

// legacy support - using dataItem() and dataCapabilities() methods

dataCapabilities_t * dataCapabilities = reinterpret_cast< dataCapabilities_t * >( cast_to_fptr( library->resolve( "dataCapabilities" ) ) ); dataCapabilities_t * dataCapabilities = reinterpret_cast< dataCapabilities_t * >( cast_to_fptr( library->resolve( "dataCapabilities" ) ) );
if ( !dataCapabilities ) if ( !dataCapabilities )
{ {
Expand Down
16 changes: 7 additions & 9 deletions src/providers/wms/qgswmsdataitems.cpp
Expand Up @@ -420,23 +420,15 @@ void QgsWMSRootItem::newConnection()
QGISEXTERN void registerGui( QMainWindow *mainWindow ) QGISEXTERN void registerGui( QMainWindow *mainWindow )
{ {
QgsTileScaleWidget::showTileScale( mainWindow ); QgsTileScaleWidget::showTileScale( mainWindow );

// with dataItem(...) at provider level we can only have one root item,
// so we have a data item provider for XYZ tile layers
QgsDataItemProviderRegistry::instance()->addProvider( new QgsXyzTileDataItemProvider );
} }


QGISEXTERN QgsWMSSourceSelect * selectWidget( QWidget * parent, Qt::WindowFlags fl ) QGISEXTERN QgsWMSSourceSelect * selectWidget( QWidget * parent, Qt::WindowFlags fl )
{ {
return new QgsWMSSourceSelect( parent, fl ); return new QgsWMSSourceSelect( parent, fl );
} }


QGISEXTERN int dataCapabilities()
{
return QgsDataProvider::Net;
}


QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem ) QgsDataItem* QgsWmsDataItemProvider::createDataItem( const QString& thePath, QgsDataItem *parentItem )
{ {
QgsDebugMsg( "thePath = " + thePath ); QgsDebugMsg( "thePath = " + thePath );
if ( thePath.isEmpty() ) if ( thePath.isEmpty() )
Expand All @@ -458,6 +450,12 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
return nullptr; return nullptr;
} }


QGISEXTERN QList<QgsDataItemProvider*> dataItemProviders()
{
return QList<QgsDataItemProvider*>()
<< new QgsWmsDataItemProvider
<< new QgsXyzTileDataItemProvider;
}


// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------


Expand Down
13 changes: 13 additions & 0 deletions src/providers/wms/qgswmsdataitems.h
Expand Up @@ -106,6 +106,19 @@ class QgsWMSRootItem : public QgsDataCollectionItem
void newConnection(); void newConnection();
}; };



//! Provider for WMS root data item
class QgsWmsDataItemProvider : public QgsDataItemProvider
{
public:
virtual QString name() override { return "WMS"; }

virtual int capabilities() override { return QgsDataProvider::Net; }

virtual QgsDataItem* createDataItem( const QString& path, QgsDataItem* parentItem ) override;
};


//! Root item for XYZ tile layers //! Root item for XYZ tile layers
class QgsXyzTileRootItem : public QgsDataCollectionItem class QgsXyzTileRootItem : public QgsDataCollectionItem
{ {
Expand Down

0 comments on commit b919198

Please sign in to comment.