mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -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
|
||||
{
|
||||
SortRecommended,
|
||||
SkipNonSpatialFormats,
|
||||
};
|
||||
typedef QFlags<QgsVectorFileWriter::VectorFormatOption> VectorFormatOptions;
|
||||
|
||||
|
@ -2699,6 +2699,14 @@ QList< QgsVectorFileWriter::FilterFormatDetails > QgsVectorFileWriter::supported
|
||||
QString drvName = OGR_Dr_GetName( drv );
|
||||
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 );
|
||||
if ( filterString.isEmpty() )
|
||||
continue;
|
||||
@ -2780,6 +2788,15 @@ QList< QgsVectorFileWriter::DriverDetails > QgsVectorFileWriter::ogrDriverList(
|
||||
if ( 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" ) )
|
||||
{
|
||||
writableDrivers << QStringLiteral( "DBF file" );
|
||||
|
@ -191,6 +191,7 @@ class CORE_EXPORT QgsVectorFileWriter : public QgsFeatureSink
|
||||
enum VectorFormatOption
|
||||
{
|
||||
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 )
|
||||
|
||||
|
@ -54,7 +54,7 @@ QgsGeometryCheckerSetupTab::QgsGeometryCheckerSetupTab( QgisInterface *iface, QD
|
||||
mAbortButton = new QPushButton( tr( "Abort" ) );
|
||||
mRunButton->setEnabled( false );
|
||||
|
||||
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats();
|
||||
const auto filterFormatMap = QgsVectorFileWriter::supportedFiltersAndFormats( QgsVectorFileWriter::SortRecommended | QgsVectorFileWriter::SkipNonSpatialFormats );
|
||||
for ( const QgsVectorFileWriter::FilterFormatDetails &filter : filterFormatMap )
|
||||
{
|
||||
QString driverName = filter.driverName;
|
||||
@ -216,7 +216,7 @@ void QgsGeometryCheckerSetupTab::validateInput()
|
||||
void QgsGeometryCheckerSetupTab::selectOutputDirectory()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
QString driverName = filter.driverName;
|
||||
|
@ -730,12 +730,18 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
||||
self.assertEqual(formats[0].driverName, 'GPKG')
|
||||
self.assertEqual(formats[1].filterString, 'ESRI Shapefile (*.shp *.SHP)')
|
||||
self.assertEqual(formats[1].driverName, 'ESRI Shapefile')
|
||||
self.assertTrue('ODS' in [f.driverName for f in formats])
|
||||
|
||||
# alphabetical sorting
|
||||
formats2 = QgsVectorFileWriter.supportedFiltersAndFormats(QgsVectorFileWriter.VectorFormatOptions())
|
||||
self.assertTrue(formats2[0].driverName < formats2[1].driverName)
|
||||
self.assertCountEqual([f.driverName for f in formats], [f.driverName for f in formats2])
|
||||
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):
|
||||
# test with drivers in recommended order
|
||||
drivers = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.SortRecommended)
|
||||
@ -743,18 +749,24 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
||||
self.assertEqual(drivers[0].driverName, 'GPKG')
|
||||
self.assertEqual(drivers[1].longName, 'ESRI Shapefile')
|
||||
self.assertEqual(drivers[1].driverName, 'ESRI Shapefile')
|
||||
self.assertTrue('ODS' in [f.driverName for f in drivers])
|
||||
# alphabetical sorting
|
||||
drivers2 = QgsVectorFileWriter.ogrDriverList(QgsVectorFileWriter.VectorFormatOptions())
|
||||
self.assertTrue(drivers2[0].longName < drivers2[1].longName)
|
||||
self.assertCountEqual([d.driverName for d in drivers], [d.driverName for d in drivers2])
|
||||
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):
|
||||
formats = QgsVectorFileWriter.supportedFormatExtensions()
|
||||
self.assertTrue('gpkg' in formats)
|
||||
self.assertFalse('exe' in formats)
|
||||
self.assertEqual(formats[0], 'gpkg')
|
||||
self.assertEqual(formats[1], 'shp')
|
||||
self.assertTrue('ods' in formats)
|
||||
|
||||
# alphabetical sorting
|
||||
formats2 = QgsVectorFileWriter.supportedFormatExtensions(QgsVectorFileWriter.VectorFormatOptions())
|
||||
@ -762,16 +774,24 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
||||
self.assertCountEqual(formats, formats2)
|
||||
self.assertNotEqual(formats2[0], 'gpkg')
|
||||
|
||||
formats = QgsVectorFileWriter.supportedFormatExtensions(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||
self.assertFalse('ods' in formats)
|
||||
|
||||
def testFileFilterString(self):
|
||||
formats = QgsVectorFileWriter.fileFilterString()
|
||||
self.assertTrue('gpkg' in formats)
|
||||
self.assertTrue('shp' in formats)
|
||||
self.assertTrue(formats.index('gpkg') < formats.index('shp'))
|
||||
self.assertTrue('ods' in formats)
|
||||
|
||||
# alphabetical sorting
|
||||
formats2 = QgsVectorFileWriter.fileFilterString(QgsVectorFileWriter.VectorFormatOptions())
|
||||
self.assertNotEqual(formats.index('gpkg'), formats2.index('gpkg'))
|
||||
|
||||
# hide non spatial
|
||||
formats = QgsVectorFileWriter.fileFilterString(QgsVectorFileWriter.SkipNonSpatialFormats)
|
||||
self.assertFalse('ods' in formats)
|
||||
|
||||
def testDriverForExtension(self):
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('shp'), 'ESRI Shapefile')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('SHP'), 'ESRI Shapefile')
|
||||
|
Loading…
x
Reference in New Issue
Block a user