[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