mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
Add option to hide non-spatial formats from driver lists
And hide non-spatial formats from geometry checker available formats
This commit is contained in:
parent
fe0566000e
commit
8499d7fcef
@ -147,6 +147,7 @@ Some formats require a compulsory encoding, typically UTF-8. If no compulsory en
|
|||||||
enum VectorFormatOption
|
enum VectorFormatOption
|
||||||
{
|
{
|
||||||
SortRecommended,
|
SortRecommended,
|
||||||
|
SkipNonSpatialFormats,
|
||||||
};
|
};
|
||||||
typedef QFlags<QgsVectorFileWriter::VectorFormatOption> VectorFormatOptions;
|
typedef QFlags<QgsVectorFileWriter::VectorFormatOption> VectorFormatOptions;
|
||||||
|
|
||||||
|
@ -2699,6 +2699,14 @@ QList< QgsVectorFileWriter::FilterFormatDetails > QgsVectorFileWriter::supported
|
|||||||
QString drvName = OGR_Dr_GetName( drv );
|
QString drvName = OGR_Dr_GetName( drv );
|
||||||
if ( OGR_Dr_TestCapability( drv, "CreateDataSource" ) != 0 )
|
if ( OGR_Dr_TestCapability( drv, "CreateDataSource" ) != 0 )
|
||||||
{
|
{
|
||||||
|
if ( options & SkipNonSpatialFormats )
|
||||||
|
{
|
||||||
|
// skip non-spatial formats
|
||||||
|
// TODO - use GDAL metadata to determine this, when support exists in GDAL
|
||||||
|
if ( drvName == QStringLiteral( "ODS" ) || drvName == QStringLiteral( "XLSX" ) || drvName == QStringLiteral( "XLS" ) )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
QString filterString = filterForDriver( drvName );
|
QString filterString = filterForDriver( drvName );
|
||||||
if ( filterString.isEmpty() )
|
if ( filterString.isEmpty() )
|
||||||
continue;
|
continue;
|
||||||
@ -2780,6 +2788,15 @@ QList< QgsVectorFileWriter::DriverDetails > QgsVectorFileWriter::ogrDriverList(
|
|||||||
if ( drv )
|
if ( drv )
|
||||||
{
|
{
|
||||||
QString drvName = OGR_Dr_GetName( drv );
|
QString drvName = OGR_Dr_GetName( drv );
|
||||||
|
|
||||||
|
if ( options & SkipNonSpatialFormats )
|
||||||
|
{
|
||||||
|
// skip non-spatial formats
|
||||||
|
// TODO - use GDAL metadata to determine this, when support exists in GDAL
|
||||||
|
if ( drvName == QStringLiteral( "ODS" ) || drvName == QStringLiteral( "XLSX" ) || drvName == QStringLiteral( "XLS" ) )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ( drvName == QLatin1String( "ESRI Shapefile" ) )
|
if ( drvName == QLatin1String( "ESRI Shapefile" ) )
|
||||||
{
|
{
|
||||||
writableDrivers << QStringLiteral( "DBF file" );
|
writableDrivers << QStringLiteral( "DBF file" );
|
||||||
|
@ -191,6 +191,7 @@ class CORE_EXPORT QgsVectorFileWriter : public QgsFeatureSink
|
|||||||
enum VectorFormatOption
|
enum VectorFormatOption
|
||||||
{
|
{
|
||||||
SortRecommended = 1 << 1, //!< Use recommended sort order, with extremely commonly used formats listed first
|
SortRecommended = 1 << 1, //!< Use recommended sort order, with extremely commonly used formats listed first
|
||||||
|
SkipNonSpatialFormats = 1 << 2, //!< Filter out any formats which do not have spatial support (e.g. those which cannot save geometries)
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS( VectorFormatOptions, VectorFormatOption )
|
Q_DECLARE_FLAGS( VectorFormatOptions, VectorFormatOption )
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ QgsGeometryCheckerSetupTab::QgsGeometryCheckerSetupTab( QgisInterface *iface, QD
|
|||||||
mAbortButton = new QPushButton( tr( "Abort" ) );
|
mAbortButton = new QPushButton( tr( "Abort" ) );
|
||||||
mRunButton->setEnabled( false );
|
mRunButton->setEnabled( false );
|
||||||
|
|
||||||
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats();
|
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats( QgsVectorFileWriter::SortRecommended | QgsVectorFileWriter::SkipNonSpatialFormats );
|
||||||
for ( const QgsVectorFileWriter::FilterFormatDetails &filter : filterFormatMap )
|
for ( const QgsVectorFileWriter::FilterFormatDetails &filter : filterFormatMap )
|
||||||
{
|
{
|
||||||
QString driverName = filter.driverName;
|
QString driverName = filter.driverName;
|
||||||
@ -216,7 +216,7 @@ void QgsGeometryCheckerSetupTab::validateInput()
|
|||||||
void QgsGeometryCheckerSetupTab::selectOutputDirectory()
|
void QgsGeometryCheckerSetupTab::selectOutputDirectory()
|
||||||
{
|
{
|
||||||
QString filterString = QgsVectorFileWriter::filterForDriver( QStringLiteral( "GPKG" ) );
|
QString filterString = QgsVectorFileWriter::filterForDriver( QStringLiteral( "GPKG" ) );
|
||||||
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats();
|
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats( QgsVectorFileWriter::SortRecommended | QgsVectorFileWriter::SkipNonSpatialFormats );
|
||||||
for ( const QgsVectorFileWriter::FilterFormatDetails &filter : filterFormatMap )
|
for ( const QgsVectorFileWriter::FilterFormatDetails &filter : filterFormatMap )
|
||||||
{
|
{
|
||||||
QString driverName = filter.driverName;
|
QString driverName = filter.driverName;
|
||||||
|
@ -730,12 +730,18 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
|||||||
self.assertEqual(formats[0].driverName, 'GPKG')
|
self.assertEqual(formats[0].driverName, 'GPKG')
|
||||||
self.assertEqual(formats[1].filterString, 'ESRI Shapefile (*.shp *.SHP)')
|
self.assertEqual(formats[1].filterString, 'ESRI Shapefile (*.shp *.SHP)')
|
||||||
self.assertEqual(formats[1].driverName, 'ESRI Shapefile')
|
self.assertEqual(formats[1].driverName, 'ESRI Shapefile')
|
||||||
|
self.assertTrue('ODS' in [f.driverName for f in formats])
|
||||||
|
|
||||||
# alphabetical sorting
|
# alphabetical sorting
|
||||||
formats2 = QgsVectorFileWriter.supportedFiltersAndFormats(QgsVectorFileWriter.VectorFormatOptions())
|
formats2 = QgsVectorFileWriter.supportedFiltersAndFormats(QgsVectorFileWriter.VectorFormatOptions())
|
||||||
self.assertTrue(formats2[0].driverName < formats2[1].driverName)
|
self.assertTrue(formats2[0].driverName < formats2[1].driverName)
|
||||||
self.assertCountEqual([f.driverName for f in formats], [f.driverName for f in formats2])
|
self.assertCountEqual([f.driverName for f in formats], [f.driverName for f in formats2])
|
||||||
self.assertNotEqual(formats2[0].driverName, 'GeoPackage')
|
self.assertNotEqual(formats2[0].driverName, 'GeoPackage')
|
||||||
|
|
||||||
|
# skip non-spatial
|
||||||
|
formats = QgsVectorFileWriter.supportedFiltersAndFormats(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||||
|
self.assertFalse('ODS' in [f.driverName for f in formats])
|
||||||
|
|
||||||
def testOgrDriverList(self):
|
def testOgrDriverList(self):
|
||||||
# test with drivers in recommended order
|
# test with drivers in recommended order
|
||||||
drivers = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.SortRecommended)
|
drivers = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.SortRecommended)
|
||||||
@ -743,18 +749,24 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
|||||||
self.assertEqual(drivers[0].driverName, 'GPKG')
|
self.assertEqual(drivers[0].driverName, 'GPKG')
|
||||||
self.assertEqual(drivers[1].longName, 'ESRI Shapefile')
|
self.assertEqual(drivers[1].longName, 'ESRI Shapefile')
|
||||||
self.assertEqual(drivers[1].driverName, 'ESRI Shapefile')
|
self.assertEqual(drivers[1].driverName, 'ESRI Shapefile')
|
||||||
|
self.assertTrue('ODS' in [f.driverName for f in drivers])
|
||||||
# alphabetical sorting
|
# alphabetical sorting
|
||||||
drivers2 = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.VectorFormatOptions())
|
drivers2 = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.VectorFormatOptions())
|
||||||
self.assertTrue(drivers2[0].longName < drivers2[1].longName)
|
self.assertTrue(drivers2[0].longName < drivers2[1].longName)
|
||||||
self.assertCountEqual([d.driverName for d in drivers], [d.driverName for d in drivers2])
|
self.assertCountEqual([d.driverName for d in drivers], [d.driverName for d in drivers2])
|
||||||
self.assertNotEqual(drivers2[0].driverName, 'GPKG')
|
self.assertNotEqual(drivers2[0].driverName, 'GPKG')
|
||||||
|
|
||||||
|
# skip non-spatial
|
||||||
|
formats = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||||
|
self.assertFalse('ODS' in [f.driverName for f in formats])
|
||||||
|
|
||||||
def testSupportedFormatExtensions(self):
|
def testSupportedFormatExtensions(self):
|
||||||
formats = QgsVectorFileWriter.supportedFormatExtensions()
|
formats = QgsVectorFileWriter.supportedFormatExtensions()
|
||||||
self.assertTrue('gpkg' in formats)
|
self.assertTrue('gpkg' in formats)
|
||||||
self.assertFalse('exe' in formats)
|
self.assertFalse('exe' in formats)
|
||||||
self.assertEqual(formats[0], 'gpkg')
|
self.assertEqual(formats[0], 'gpkg')
|
||||||
self.assertEqual(formats[1], 'shp')
|
self.assertEqual(formats[1], 'shp')
|
||||||
|
self.assertTrue('ods' in formats)
|
||||||
|
|
||||||
# alphabetical sorting
|
# alphabetical sorting
|
||||||
formats2 = QgsVectorFileWriter.supportedFormatExtensions(QgsVectorFileWriter.VectorFormatOptions())
|
formats2 = QgsVectorFileWriter.supportedFormatExtensions(QgsVectorFileWriter.VectorFormatOptions())
|
||||||
@ -762,16 +774,24 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
|||||||
self.assertCountEqual(formats, formats2)
|
self.assertCountEqual(formats, formats2)
|
||||||
self.assertNotEqual(formats2[0], 'gpkg')
|
self.assertNotEqual(formats2[0], 'gpkg')
|
||||||
|
|
||||||
|
formats = QgsVectorFileWriter.supportedFormatExtensions(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||||
|
self.assertFalse('ods' in formats)
|
||||||
|
|
||||||
def testFileFilterString(self):
|
def testFileFilterString(self):
|
||||||
formats = QgsVectorFileWriter.fileFilterString()
|
formats = QgsVectorFileWriter.fileFilterString()
|
||||||
self.assertTrue('gpkg' in formats)
|
self.assertTrue('gpkg' in formats)
|
||||||
self.assertTrue('shp' in formats)
|
self.assertTrue('shp' in formats)
|
||||||
self.assertTrue(formats.index('gpkg') < formats.index('shp'))
|
self.assertTrue(formats.index('gpkg') < formats.index('shp'))
|
||||||
|
self.assertTrue('ods' in formats)
|
||||||
|
|
||||||
# alphabetical sorting
|
# alphabetical sorting
|
||||||
formats2 = QgsVectorFileWriter.fileFilterString(QgsVectorFileWriter.VectorFormatOptions())
|
formats2 = QgsVectorFileWriter.fileFilterString(QgsVectorFileWriter.VectorFormatOptions())
|
||||||
self.assertNotEqual(formats.index('gpkg'), formats2.index('gpkg'))
|
self.assertNotEqual(formats.index('gpkg'), formats2.index('gpkg'))
|
||||||
|
|
||||||
|
# hide non spatial
|
||||||
|
formats = QgsVectorFileWriter.fileFilterString(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||||
|
self.assertFalse('ods' in formats)
|
||||||
|
|
||||||
def testDriverForExtension(self):
|
def testDriverForExtension(self):
|
||||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('shp'), 'ESRI Shapefile')
|
self.assertEqual(QgsVectorFileWriter.driverForExtension('shp'), 'ESRI Shapefile')
|
||||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('SHP'), 'ESRI Shapefile')
|
self.assertEqual(QgsVectorFileWriter.driverForExtension('SHP'), 'ESRI Shapefile')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user