[QGIS Commit] r11223 - trunk/qgis/src/plugins/interpolation
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Jul 31 06:42:52 EDT 2009
Author: mhugent
Date: 2009-07-31 06:42:51 -0400 (Fri, 31 Jul 2009)
New Revision: 11223
Modified:
trunk/qgis/src/plugins/interpolation/DualEdgeTriangulation.cc
trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.cpp
trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.h
trunk/qgis/src/plugins/interpolation/qgstininterpolatordialog.cpp
Log:
Some error checking and saving of output file directories in interpolation plugin
Modified: trunk/qgis/src/plugins/interpolation/DualEdgeTriangulation.cc
===================================================================
--- trunk/qgis/src/plugins/interpolation/DualEdgeTriangulation.cc 2009-07-31 10:31:21 UTC (rev 11222)
+++ trunk/qgis/src/plugins/interpolation/DualEdgeTriangulation.cc 2009-07-31 10:42:51 UTC (rev 11223)
@@ -3073,16 +3073,34 @@
bool DualEdgeTriangulation::saveAsShapefile( const QString& fileName ) const
{
+ QString shapeFileName = fileName;
+
QgsFieldMap fields;
fields.insert( 0, QgsField( "type", QVariant::String, "String" ) );
- QgsVectorFileWriter writer( fileName, "Utf-8", fields, QGis::WKBLineString, 0 );
+
+ // add the extension if not present
+ if ( shapeFileName.indexOf( ".shp" ) == -1 )
+ {
+ shapeFileName += ".shp";
+ }
+
+ //delete already existing files
+ if ( QFile::exists( shapeFileName ) )
+ {
+ if ( !QgsVectorFileWriter::deleteShapeFile( shapeFileName ) )
+ {
+ return false;
+ }
+ }
+
+ QgsVectorFileWriter writer( shapeFileName, "Utf-8", fields, QGis::WKBLineString, 0 );
if ( writer.hasError() != QgsVectorFileWriter::NoError )
{
return false;
}
bool *alreadyVisitedEdges = new bool[mHalfEdge.size()];
- if( !alreadyVisitedEdges )
+ if ( !alreadyVisitedEdges )
{
QgsDebugMsg( "out of memory" );
return false;
Modified: trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.cpp
===================================================================
--- trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.cpp 2009-07-31 10:31:21 UTC (rev 11222)
+++ trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.cpp 2009-07-31 10:42:51 UTC (rev 11223)
@@ -28,6 +28,7 @@
#include <QComboBox>
#include <QFileDialog>
#include <QMessageBox>
+#include <QSettings>
QgsInterpolationDialog::QgsInterpolationDialog( QWidget* parent, QgisInterface* iface ): QDialog( parent ), mIface( iface ), mInterpolatorDialog( 0 )
@@ -54,6 +55,8 @@
//only inverse distance weighting available for now
mInterpolationMethodComboBox->insertItem( 0, tr( "Triangular interpolation (TIN)" ) );
mInterpolationMethodComboBox->insertItem( 1, tr( "Inverse Distance Weighting (IDW)" ) );
+
+ enableOrDisableOkButton();
}
QgsInterpolationDialog::~QgsInterpolationDialog()
@@ -61,6 +64,28 @@
}
+void QgsInterpolationDialog::enableOrDisableOkButton()
+{
+ bool enabled = true;
+
+ //no input data
+ if ( mLayersTreeWidget->topLevelItemCount() < 1 )
+ {
+ enabled = false;
+ }
+ else
+ {
+ QString fileName = mOutputFileLineEdit->text();
+ QFileInfo theFileInfo( fileName );
+ if ( fileName.isEmpty() || !theFileInfo.dir().exists() )
+ {
+ enabled = false;
+ }
+ }
+
+ buttonBox->button( QDialogButtonBox::Ok )->setEnabled( enabled );
+}
+
void QgsInterpolationDialog::on_buttonBox_accepted()
{
if ( !mInterpolatorDialog )
@@ -68,7 +93,12 @@
return;
}
- //todo: test if an input layer is there and warn the user if not
+ //warn the user if there isn't any input layer
+ if ( mLayersTreeWidget->topLevelItemCount() < 1 )
+ {
+ QMessageBox::information( 0, tr( "No input data for interpolation" ), tr( "Please add one or more input layers" ) );
+ return;
+ }
//read file name
QString fileName = mOutputFileLineEdit->text();
@@ -241,6 +271,8 @@
typeComboBox->addItem( tr( "Break lines" ) );
typeComboBox->setCurrentIndex( 0 );
mLayersTreeWidget->setItemWidget( newLayerItem, 2, typeComboBox );
+
+ enableOrDisableOkButton();
}
void QgsInterpolationDialog::on_mRemovePushButton_clicked()
@@ -251,16 +283,28 @@
return;
}
delete currentItem;
+ enableOrDisableOkButton();
}
void QgsInterpolationDialog::on_mOutputFileButton_clicked()
{
- QString rasterFileName = QFileDialog::getSaveFileName( 0 );
+ //get last output file dir
+ QSettings s;
+ QString lastOutputDir = s.value( "/Interpolation/lastOutputDir", "" ).toString();
+
+ QString rasterFileName = QFileDialog::getSaveFileName( 0, tr( "Save interpolated raster as..." ), lastOutputDir );
if ( !rasterFileName.isEmpty() )
{
mOutputFileLineEdit->setText( rasterFileName );
+ QFileInfo rasterFileInfo( rasterFileName );
+ QDir fileDir = rasterFileInfo.absoluteDir();
+ if ( fileDir.exists() )
+ {
+ s.setValue( "/Interpolation/lastOutputDir", rasterFileInfo.absolutePath() );
+ }
}
+ enableOrDisableOkButton();
}
void QgsInterpolationDialog::on_mConfigureInterpolationButton_clicked()
Modified: trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.h
===================================================================
--- trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.h 2009-07-31 10:31:21 UTC (rev 11222)
+++ trunk/qgis/src/plugins/interpolation/qgsinterpolationdialog.h 2009-07-31 10:42:51 UTC (rev 11223)
@@ -50,6 +50,8 @@
/**Returns the vector layer object with the given name
Returns a pointer to the vector layer or 0 in case of error.*/
QgsVectorLayer* vectorLayerFromName( const QString& name );
+ /**Enables or disables the Ok button depending on the availability of input layers and the output file*/
+ void enableOrDisableOkButton();
};
#endif
Modified: trunk/qgis/src/plugins/interpolation/qgstininterpolatordialog.cpp
===================================================================
--- trunk/qgis/src/plugins/interpolation/qgstininterpolatordialog.cpp 2009-07-31 10:31:21 UTC (rev 11222)
+++ trunk/qgis/src/plugins/interpolation/qgstininterpolatordialog.cpp 2009-07-31 10:42:51 UTC (rev 11223)
@@ -18,6 +18,7 @@
#include "qgstininterpolatordialog.h"
#include "qgstininterpolator.h"
#include <QFileDialog>
+#include <QSettings>
QgsTINInterpolatorDialog::QgsTINInterpolatorDialog( QWidget* parent, QgisInterface* iface ): QgsInterpolatorDialog( parent, iface )
{
@@ -69,6 +70,20 @@
void QgsTINInterpolatorDialog::on_mTriangulationFileButton_clicked()
{
- QString filename = QFileDialog::getSaveFileName( 0, tr( "Save triangulation to file" ), QString(), "*shp" );
- mTriangulationFileEdit->setText( filename );
+ QSettings s;
+ //read last triangulation directory
+ QString lastTriangulationDir = s.value( "/Interpolation/lastTriangulationDir", "" ).toString();
+ QString filename = QFileDialog::getSaveFileName( 0, tr( "Save triangulation to file" ), lastTriangulationDir, "*shp" );
+ if ( !filename.isEmpty() )
+ {
+ mTriangulationFileEdit->setText( filename );
+
+ //and save triangulation directory
+ QFileInfo triangulationFileInfo( filename );
+ QDir fileDir = triangulationFileInfo.absoluteDir();
+ if ( fileDir.exists() )
+ {
+ s.setValue( "/Interpolation/lastTriangulationDir", triangulationFileInfo.absolutePath() );
+ }
+ }
}
More information about the QGIS-commit
mailing list