From c404848bb453ae0ac1f6988c6752909d1b0e1f0a Mon Sep 17 00:00:00 2001 From: mhugent Date: Tue, 24 Nov 2009 21:00:32 +0000 Subject: [PATCH] Fix for bug 2142: rasters saved without extension git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@12245 c8812cc2-4d05-0410-92ff-de0c093fc19c --- .../interpolation/qgsinterpolationdialog.cpp | 7 +++ .../qgsrasterterrainanalysisdialog.cpp | 49 ++++++++++++++++++- .../qgsrasterterrainanalysisdialog.h | 3 ++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/plugins/interpolation/qgsinterpolationdialog.cpp b/src/plugins/interpolation/qgsinterpolationdialog.cpp index 47121f7d2640..a758d99af417 100644 --- a/src/plugins/interpolation/qgsinterpolationdialog.cpp +++ b/src/plugins/interpolation/qgsinterpolationdialog.cpp @@ -116,6 +116,13 @@ void QgsInterpolationDialog::on_buttonBox_accepted() return; } + //add .asc suffix if the user did not provider it already + QString suffix = theFileInfo.suffix(); + if ( suffix.isEmpty() ) + { + fileName.append( ".asc" ); + } + int nLayers = mLayersTreeWidget->topLevelItemCount(); QList< QgsInterpolator::LayerData > inputLayerList; diff --git a/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.cpp b/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.cpp index 7c1904d58602..9816c3027f16 100644 --- a/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.cpp +++ b/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.cpp @@ -60,6 +60,31 @@ QgsRasterTerrainAnalysisDialog::QgsRasterTerrainAnalysisDialog( QgisInterface* i if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_CREATE, FALSE ) ) { mOutputFormatComboBox->addItem( GDALGetDriverLongName( driver ), QVariant( GDALGetDriverShortName( driver ) ) ); + + //store the driver shortnames and the corresponding extensions + //(just in case the user does not give an extension for the output file name) + int index = 0; + while (( driverMetadata ) && driverMetadata[index] != 0 ) + { + QStringList metadataTokens = QString( driverMetadata[index] ).split( "=", QString::SkipEmptyParts ); + if ( metadataTokens.size() < 1 ) + { + break; + } + + if ( metadataTokens[0] == "DMD_EXTENSION" ) + { + if ( metadataTokens.size() < 2 ) + { + ++index; + continue; + } + mDriverExtensionMap.insert( QString( GDALGetDriverShortName( driver ) ), metadataTokens[1] ); + break; + } + ++index; + } + } } } @@ -107,7 +132,29 @@ QString QgsRasterTerrainAnalysisDialog::selectedDriverKey() const QString QgsRasterTerrainAnalysisDialog::selectedOuputFilePath() const { - return mOutputLayerLineEdit->text(); + QString outputFileName = mOutputLayerLineEdit->text(); + QFileInfo fileInfo( outputFileName ); + QString suffix = fileInfo.suffix(); + if ( !suffix.isEmpty() ) + { + return outputFileName; + } + + //add the file format extension if the user did not specify it + int index = mOutputFormatComboBox->currentIndex(); + if ( index == -1 ) + { + return outputFileName; + } + + QString driverShortName = mOutputFormatComboBox->itemData( index ).toString(); + QMap::const_iterator it = mDriverExtensionMap.find( driverShortName ); + if ( it == mDriverExtensionMap.constEnd() ) + { + return outputFileName; + } + + return ( outputFileName + "." + it.value() ); } bool QgsRasterTerrainAnalysisDialog::addLayerToProject() const diff --git a/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.h b/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.h index 61b204245562..1914348c8c80 100644 --- a/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.h +++ b/src/plugins/raster_terrain_analysis/qgsrasterterrainanalysisdialog.h @@ -42,6 +42,9 @@ class QgsRasterTerrainAnalysisDialog: public QDialog, private Ui::QgsRasterTerra private: QgisInterface* mIface; + + /**Stores relation between driver name and extension*/ + QMap mDriverExtensionMap; }; #endif // QGSRASTERTERRAINANALYSISDIALOG_H