@@ -39,7 +39,7 @@ email : sherman at mrcc.com
39
39
#ifdef HAVE_GUI
40
40
#include " qgssourceselectprovider.h"
41
41
#include " qgsogrsourceselect.h"
42
- #include " qgsgeopackagesourceselect .h"
42
+ #include " qgsogrdbsourceselect .h"
43
43
#endif
44
44
45
45
#include " qgis.h"
@@ -712,8 +712,12 @@ QStringList QgsOgrProvider::subLayers() const
712
712
OGRFeatureDefnH fdef = OGR_L_GetLayerDefn ( layer );
713
713
// Get first column name,
714
714
// TODO: add support for multiple
715
+ QString geometryColumnName;
715
716
OGRGeomFieldDefnH geomH = OGR_FD_GetGeomFieldDefn ( fdef, 0 );
716
- QString geometryColumnName = QString::fromUtf8 ( OGR_GFld_GetNameRef ( geomH ) );
717
+ if ( geomH )
718
+ {
719
+ geometryColumnName = QString::fromUtf8 ( OGR_GFld_GetNameRef ( geomH ) );
720
+ }
717
721
QString layerName = QString::fromUtf8 ( OGR_FD_GetName ( fdef ) );
718
722
OGRwkbGeometryType layerGeomType = OGR_FD_GetGeomType ( fdef );
719
723
@@ -4374,12 +4378,48 @@ class QgsOgrVectorSourceSelectProvider : public QgsSourceSelectProvider
4374
4378
};
4375
4379
4376
4380
4381
+ // ! Provider for GPKG vector source select
4382
+ class QgsGeoPackageSourceSelectProvider : public QgsSourceSelectProvider
4383
+ {
4384
+ public:
4385
+
4386
+ virtual QString providerKey () const override { return QStringLiteral ( " ogr" ); }
4387
+ virtual QString text () const override { return QObject::tr ( " GeoPackage" ); }
4388
+ virtual int ordering () const override { return 45 ; }
4389
+ virtual QIcon icon () const override { return QgsApplication::getThemeIcon ( QStringLiteral ( " /mActionAddGeoPackageLayer.svg" ) ); }
4390
+ virtual QgsAbstractDataSourceWidget *createDataSourceWidget ( QWidget *parent = nullptr , Qt::WindowFlags fl = Qt::Widget, QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::Embedded ) const override
4391
+ {
4392
+ return new QgsOgrDbSourceSelect ( QStringLiteral ( " GPKG" ), QObject::tr ( " GeoPackage" ), QObject::tr ( " GeoPackage Database (*.gpkg)" ), parent, fl, widgetMode );
4393
+ }
4394
+ };
4395
+
4396
+
4397
+ /* This has been tested and works just fine:
4398
+ //! Provider for SQLite vector source select
4399
+ class QgsSpatiaLiteSourceSelectProvider : public QgsSourceSelectProvider
4400
+ {
4401
+ public:
4402
+
4403
+ virtual QString providerKey() const override { return QStringLiteral( "ogr" ); }
4404
+ virtual QString text() const override { return QObject::tr( "SQLite" ); }
4405
+ virtual int ordering() const override { return 46; }
4406
+ virtual QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/mIconSpatialite.svg" ) ); }
4407
+ virtual QgsAbstractDataSourceWidget *createDataSourceWidget( QWidget *parent = nullptr, Qt::WindowFlags fl = Qt::Widget, QgsProviderRegistry::WidgetMode widgetMode = QgsProviderRegistry::WidgetMode::Embedded ) const override
4408
+ {
4409
+ return new QgsOgrDbSourceSelect( QStringLiteral( "SQLite" ), QObject::tr( "SQLite" ), QObject::tr( "SpatiaLite Database (*.db *.sqlite)" ), parent, fl, widgetMode );
4410
+ }
4411
+ };
4412
+ //*/
4413
+
4414
+
4377
4415
QGISEXTERN QList<QgsSourceSelectProvider *> *sourceSelectProviders ()
4378
4416
{
4379
4417
QList<QgsSourceSelectProvider *> *providers = new QList<QgsSourceSelectProvider *>();
4380
4418
4381
4419
*providers
4382
- << new QgsOgrVectorSourceSelectProvider;
4420
+ << new QgsOgrVectorSourceSelectProvider
4421
+ << new QgsGeoPackageSourceSelectProvider;
4422
+ // << new QgsSpatiaLiteSourceSelectProvider;
4383
4423
4384
4424
return providers;
4385
4425
}
0 commit comments