@@ -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
18721894void 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
0 commit comments