Skip to content

Commit 9aff0d7

Browse files
committed
sort and cleanup gdal and ogr file filter list
1 parent 2f74037 commit 9aff0d7

File tree

2 files changed

+66
-27
lines changed

2 files changed

+66
-27
lines changed

src/providers/gdal/qgsgdalprovider.cpp

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,6 +1868,28 @@ QGISEXTERN bool isProvider()
18681868
{
18691869
return true;
18701870
}
1871+
/**
1872+
1873+
Convenience function for readily creating file filters.
1874+
1875+
Given a long name for a file filter and a regular expression, return
1876+
a file filter string suitable for use in a QFileDialog::OpenFiles()
1877+
call. The regular express, glob, will have both all lower and upper
1878+
case versions added.
1879+
1880+
@note
1881+
1882+
Copied from qgisapp.cpp.
1883+
1884+
@todo XXX This should probably be generalized and moved to a standard
1885+
utility type thingy.
1886+
1887+
*/
1888+
static QString createFileFilter_( QString const &longName, QString const &glob )
1889+
{
1890+
// return longName + " [GDAL] (" + glob.toLower() + " " + glob.toUpper() + ");;";
1891+
return longName + " (" + glob.toLower() + " " + glob.toUpper() + ");;";
1892+
} // createFileFilter_
18711893

18721894
void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString, QStringList & theExtensions, QStringList & theWildcards )
18731895
{
@@ -1904,8 +1926,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
19041926
// driver, which will be found in DMD_LONGNAME, which will have the
19051927
// same form.
19061928

1907-
// start with the default case
1908-
theFileFiltersString = QObject::tr( "[GDAL] All files (*)" );
1929+
theFileFiltersString = "";
19091930

19101931
QgsDebugMsg( QString( "GDAL driver count: %1" ).arg( GDALGetDriverCount() ) );
19111932

@@ -1924,9 +1945,10 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
19241945
// supported; if not, we give it a miss for the next driver
19251946

19261947
myGdalDriverDescription = GDALGetDescription( myGdalDriver );
1927-
19281948
// QgsDebugMsg(QString("got driver string %1").arg(myGdalDriverDescription));
19291949

1950+
myGdalDriverExtension = myGdalDriverLongName = "";
1951+
19301952
myGdalDriverMetadata = GDALGetMetadata( myGdalDriver, NULL );
19311953

19321954
// presumably we know we've run out of metadta if either the
@@ -1959,6 +1981,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
19591981
myGdalDriverLongName.remove( QRegExp( "\\(.*\\)$" ) );
19601982
}
19611983
}
1984+
19621985
// if we have both the file name extension and the long name,
19631986
// then we've all the information we need for the current
19641987
// driver; therefore emit a file filter string and move to
@@ -1990,7 +2013,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
19902013
theExtensions << "jpeg";
19912014
}
19922015

1993-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2016+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, glob );
19942017

19952018
break; // ... to next driver, if any.
19962019
}
@@ -1999,6 +2022,8 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
19992022

20002023
} // each metadata item
20012024

2025+
//QgsDebugMsg(QString("got driver Desc=%1 LongName=%2").arg(myGdalDriverDescription).arg(myGdalDriverLongName));
2026+
20022027
if ( myGdalDriverExtension.isEmpty() && !myGdalDriverLongName.isEmpty() )
20032028
{
20042029
// Then what we have here is a driver with no corresponding
@@ -2015,8 +2040,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
20152040
// USGS DEMs use "*.dem"
20162041
if ( myGdalDriverDescription.startsWith( "USGSDEM" ) )
20172042
{
2018-
QString glob = "*.dem";
2019-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2043+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, "*.dem" );
20202044
theExtensions << "dem";
20212045
}
20222046
else if ( myGdalDriverDescription.startsWith( "DTED" ) )
@@ -2025,33 +2049,29 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
20252049
QString glob = "*.dt0";
20262050
glob += " *.dt1";
20272051
glob += " *.dt2";
2028-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2052+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, glob );
20292053
theExtensions << "dt0" << "dt1" << "dt2";
20302054
}
20312055
else if ( myGdalDriverDescription.startsWith( "MrSID" ) )
20322056
{
20332057
// MrSID use "*.sid"
2034-
QString glob = "*.sid";
2035-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2058+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, "*.sid" );
20362059
theExtensions << "sid";
20372060
}
20382061
else if ( myGdalDriverDescription.startsWith( "EHdr" ) )
20392062
{
2040-
QString glob = "*.bil";
2041-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2063+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, "*.bil" );
20422064
theExtensions << "bil";
20432065
}
20442066
else if ( myGdalDriverDescription.startsWith( "AIG" ) )
20452067
{
2046-
QString glob = "hdr.adf";
2047-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2068+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, "hdr.adf" );
20482069
theWildcards << "hdr.adf";
20492070
}
20502071
else if ( myGdalDriverDescription == "HDF4" )
20512072
{
20522073
// HDF4 extension missing in driver metadata
2053-
QString glob = "*.hdf";
2054-
theFileFiltersString += ";;[GDAL] " + myGdalDriverLongName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2074+
theFileFiltersString += createFileFilter_( myGdalDriverLongName, "*.hdf" );
20552075
theExtensions << "hdf";
20562076
}
20572077
else
@@ -2060,23 +2080,30 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
20602080
}
20612081
} // each loaded GDAL driver
20622082

2063-
myGdalDriverExtension = myGdalDriverLongName = ""; // reset for next driver
2064-
20652083
} // each loaded GDAL driver
20662084

2067-
// VSIFileHandler (see qgsogrprovider.cpp)
2085+
// sort file filters alphabetically
2086+
QgsDebugMsg( "theFileFiltersString: " + theFileFiltersString );
2087+
QStringList filters = theFileFiltersString.split( ";;", QString::SkipEmptyParts );
2088+
filters.sort();
2089+
theFileFiltersString = filters.join( ";;" ) + ";;";
2090+
2091+
// VSIFileHandler (see qgsogrprovider.cpp) - second
20682092
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600
20692093
QSettings settings;
20702094
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() != "no" )
20712095
{
2072-
QString glob = "*.zip";
2073-
glob += " *.gz";
2074-
glob += " *.tar *.tar.gz *.tgz";
2075-
theFileFiltersString += ";;[GDAL] " + QObject::tr( "GDAL/OGR VSIFileHandler" ) + " (" + glob.toLower() + " " + glob.toUpper() + ")";
2096+
theFileFiltersString.prepend( createFileFilter_( QObject::tr( "GDAL/OGR VSIFileHandler" ), "*.zip *.gz *.tar *.tar.gz *.tgz" ) );
20762097
theExtensions << "zip" << "gz" << "tar" << "tar.gz" << "tgz";
20772098
}
20782099
#endif
20792100

2101+
// can't forget the default case - first
2102+
theFileFiltersString.prepend( QObject::tr( "All files" ) + " (*);;" );
2103+
2104+
// cleanup
2105+
if ( theFileFiltersString.endsWith( ";;" ) ) theFileFiltersString.chop( 2 );
2106+
20802107
QgsDebugMsg( "Raster filter list built: " + theFileFiltersString );
20812108
} // buildSupportedRasterFileFilter_()
20822109

src/providers/ogr/qgsogrprovider.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,8 @@ QString QgsOgrProvider::description() const
15801580
*/
15811581
static QString createFileFilter_( QString const &longName, QString const &glob )
15821582
{
1583-
return longName + " [OGR] (" + glob.toLower() + " " + glob.toUpper() + ");;";
1583+
// return longName + " [OGR] (" + glob.toLower() + " " + glob.toUpper() + ");;";
1584+
return longName + " (" + glob.toLower() + " " + glob.toUpper() + ");;";
15841585
} // createFileFilter_
15851586

15861587

@@ -1834,23 +1835,34 @@ QString createFilters( QString type )
18341835

18351836
} // each loaded OGR driver
18361837

1837-
// VSIFileHandler (.zip and .gz files)
1838+
// sort file filters alphabetically
1839+
QgsDebugMsg( "myFileFilters: " + myFileFilters );
1840+
QStringList filters = myFileFilters.split( ";;", QString::SkipEmptyParts );
1841+
filters.sort();
1842+
myFileFilters = filters.join( ";;" ) + ";;";
1843+
QgsDebugMsg( "myFileFilters: " + myFileFilters );
1844+
1845+
// VSIFileHandler (.zip and .gz files) - second
18381846
// see http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip
18391847
// Requires GDAL>=1.6.0 with libz support, let's assume we have it.
18401848
// This does not work for some file types, see VSIFileHandler doc.
18411849
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600
18421850
QSettings settings;
18431851
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() != "no" )
18441852
{
1845-
myFileFilters += createFileFilter_( QObject::tr( "GDAL/OGR VSIFileHandler" ), "*.zip *.gz *.tar *.tar.gz *.tgz" );
1853+
myFileFilters.prepend( createFileFilter_( QObject::tr( "GDAL/OGR VSIFileHandler" ), "*.zip *.gz *.tar *.tar.gz *.tgz" ) );
18461854
myExtensions << "zip" << "gz" << "tar" << "tar.gz" << "tgz";
18471855

18481856
}
18491857
#endif
18501858

1851-
// can't forget the default case
1859+
// can't forget the default case - first
1860+
myFileFilters.prepend( QObject::tr( "All files" ) + " (*);;" );
1861+
1862+
// cleanup
1863+
if ( myFileFilters.endsWith( ";;" ) ) myFileFilters.chop( 2 );
18521864

1853-
myFileFilters += QObject::tr( "All files" ) + " (*)";
1865+
QgsDebugMsg( "myFileFilters: " + myFileFilters );
18541866
}
18551867

18561868
if ( type == "file" )

0 commit comments

Comments
 (0)