Skip to content

Commit b919198

Browse files
committed
Fix loading of XYZ tile layer data item provider
1 parent 4a1b4fd commit b919198

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

src/core/qgsdataitemproviderregistry.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "qgslogger.h"
2222
#include "qgsproviderregistry.h"
2323

24+
typedef QList<QgsDataItemProvider*> dataItemProviders_t();
25+
2426

2527
/**
2628
* \ingroup core
@@ -64,6 +66,17 @@ QgsDataItemProviderRegistry::QgsDataItemProviderRegistry()
6466
if ( !library )
6567
continue;
6668

69+
// new / better way of returning data items from providers
70+
71+
dataItemProviders_t* dataItemProvidersFn = reinterpret_cast< dataItemProviders_t * >( cast_to_fptr( library->resolve( "dataItemProviders" ) ) );
72+
if ( dataItemProvidersFn )
73+
{
74+
// the function is a factory - we keep ownership of the returned providers
75+
mProviders << dataItemProvidersFn();
76+
}
77+
78+
// legacy support - using dataItem() and dataCapabilities() methods
79+
6780
dataCapabilities_t * dataCapabilities = reinterpret_cast< dataCapabilities_t * >( cast_to_fptr( library->resolve( "dataCapabilities" ) ) );
6881
if ( !dataCapabilities )
6982
{

src/providers/wms/qgswmsdataitems.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -420,23 +420,15 @@ void QgsWMSRootItem::newConnection()
420420
QGISEXTERN void registerGui( QMainWindow *mainWindow )
421421
{
422422
QgsTileScaleWidget::showTileScale( mainWindow );
423-
424-
// with dataItem(...) at provider level we can only have one root item,
425-
// so we have a data item provider for XYZ tile layers
426-
QgsDataItemProviderRegistry::instance()->addProvider( new QgsXyzTileDataItemProvider );
427423
}
428424

429425
QGISEXTERN QgsWMSSourceSelect * selectWidget( QWidget * parent, Qt::WindowFlags fl )
430426
{
431427
return new QgsWMSSourceSelect( parent, fl );
432428
}
433429

434-
QGISEXTERN int dataCapabilities()
435-
{
436-
return QgsDataProvider::Net;
437-
}
438430

439-
QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
431+
QgsDataItem* QgsWmsDataItemProvider::createDataItem( const QString& thePath, QgsDataItem *parentItem )
440432
{
441433
QgsDebugMsg( "thePath = " + thePath );
442434
if ( thePath.isEmpty() )
@@ -458,6 +450,12 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
458450
return nullptr;
459451
}
460452

453+
QGISEXTERN QList<QgsDataItemProvider*> dataItemProviders()
454+
{
455+
return QList<QgsDataItemProvider*>()
456+
<< new QgsWmsDataItemProvider
457+
<< new QgsXyzTileDataItemProvider;
458+
}
461459

462460
// ---------------------------------------------------------------------------
463461

src/providers/wms/qgswmsdataitems.h

+13
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,19 @@ class QgsWMSRootItem : public QgsDataCollectionItem
106106
void newConnection();
107107
};
108108

109+
110+
//! Provider for WMS root data item
111+
class QgsWmsDataItemProvider : public QgsDataItemProvider
112+
{
113+
public:
114+
virtual QString name() override { return "WMS"; }
115+
116+
virtual int capabilities() override { return QgsDataProvider::Net; }
117+
118+
virtual QgsDataItem* createDataItem( const QString& path, QgsDataItem* parentItem ) override;
119+
};
120+
121+
109122
//! Root item for XYZ tile layers
110123
class QgsXyzTileRootItem : public QgsDataCollectionItem
111124
{

0 commit comments

Comments
 (0)