[QGIS Commit] r14963 - trunk/qgis/python/plugins/GdalTools/tools

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Dec 21 22:25:14 EST 2010


Author: brushtyler
Date: 2010-12-21 19:25:14 -0800 (Tue, 21 Dec 2010)
New Revision: 14963

Modified:
   trunk/qgis/python/plugins/GdalTools/tools/GdalTools_utils.py
   trunk/qgis/python/plugins/GdalTools/tools/doBuildVRT.py
   trunk/qgis/python/plugins/GdalTools/tools/doOverview.py
   trunk/qgis/python/plugins/GdalTools/tools/doPctRgb.py
   trunk/qgis/python/plugins/GdalTools/tools/doProjection.py
   trunk/qgis/python/plugins/GdalTools/tools/doRgbPct.py
   trunk/qgis/python/plugins/GdalTools/tools/doTranslate.py
   trunk/qgis/python/plugins/GdalTools/tools/doWarp.py
   trunk/qgis/python/plugins/GdalTools/tools/widgetBatchBase.py
   trunk/qgis/python/plugins/GdalTools/tools/widgetBuildVRT.ui
Log:
create VRT with recurse scan of dirs, to fix #3095 
some code cleanup, 
updated labels when in batch mode to follow up the QGis HIG guideline


Modified: trunk/qgis/python/plugins/GdalTools/tools/GdalTools_utils.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/GdalTools_utils.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/GdalTools_utils.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -117,6 +117,32 @@
       count = count +1
   return (layers, names)
 
+def getRasterFiles(path, recursive=False):
+  rasters = QStringList()
+  if not QFileInfo(path).exists():
+    return rasters
+
+  filter = getRasterExtensions()
+  workDir = QDir( path )
+  workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
+  workDir.setNameFilters( filter )
+  files = workDir.entryList()
+  for f in files:
+    rasters << path + "/" + f
+
+  if recursive:
+    import os
+    for myRoot, myDirs, myFiles in os.walk( unicode(path) ):
+      for dir in myDirs:
+        workDir = QDir( myRoot + "/" + dir )
+        workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
+        workDir.setNameFilters( filter )
+        workFiles = workDir.entryList()
+        for f in workFiles:
+          rasters << myRoot + "/" + dir + "/" + f
+
+  return rasters
+
 def fillRasterOutputFormat(aFilter = None, filename = None):
   shortName = QString()
 

Modified: trunk/qgis/python/plugins/GdalTools/tools/doBuildVRT.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doBuildVRT.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doBuildVRT.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -18,19 +18,43 @@
       self.setupUi(self)
       BasePluginWidget.__init__(self, self.iface, "gdalbuildvrt")
 
+      self.recurseCheck.hide()
+
       self.setParamsStatus(
         [
           (self.inputFilesEdit, SIGNAL("textChanged(const QString &)")), 
           (self.outputFileEdit, SIGNAL("textChanged(const QString &)")), 
           (self.resolutionComboBox, SIGNAL("currentIndexChanged(int)"), self.resolutionCheck),
           (self.srcNoDataSpin, SIGNAL("valueChanged(int)"), self.srcNoDataCheck, "1.7.0"),
-          (self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0")
+          (self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"),
+          (self.inputDirCheck, SIGNAL("stateChanged(int)")),
+          (self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck)
         ]
       )
 
       self.connect(self.selectInputFilesButton, SIGNAL("clicked()"), self.fillInputFilesEdit)
       self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
+      self.connect( self.inputDirCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
 
+  def switchToolMode(self):
+      self.inputFilesEdit.clear()
+
+      if self.inputDirCheck.isChecked():
+        self.inFileLabel = self.label.text()
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
+
+        self.recurseCheck.show()
+
+        QObject.disconnect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputFilesEdit )
+        QObject.connect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputDir )
+      else:
+        self.label.setText( self.inFileLabel )
+
+        self.recurseCheck.hide()
+
+        QObject.connect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputFilesEdit )
+        QObject.disconnect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputDir )
+
   def fillInputFilesEdit(self):
       lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
       files = Utils.FileDialog.getOpenFileNames(self, self.tr( "Select the files for VRT" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter)
@@ -47,6 +71,13 @@
 
       self.outputFileEdit.setText(outputFile)
 
+  def fillInputDir( self ):
+      inputDir = Utils.FileDialog.getExistingDirectory( self, self.tr( "Select the input directory with files for VRT" ))
+      if inputDir.isEmpty():
+        return
+
+      self.inputFilesEdit.setText( inputDir )
+
   def getArguments(self):
       arguments = QStringList()
       if self.resolutionCheck.isChecked() and self.resolutionComboBox.currentIndex() >= 0:
@@ -58,7 +89,10 @@
         arguments << "-srcnodata"
         arguments << str(self.srcNoDataSpin.value())
       arguments << self.outputFileEdit.text()
-      arguments << self.inputFilesEdit.text().split(",")
+      if self.inputDirCheck.isChecked():
+        arguments << Utils.getRasterFiles( self.inputFilesEdit.text(), self.recurseCheck.isChecked() )
+      else:
+        arguments << self.inputFilesEdit.text().split(",")
       return arguments
 
   def getOutputFileName(self):

Modified: trunk/qgis/python/plugins/GdalTools/tools/doOverview.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doOverview.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doOverview.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -56,7 +56,7 @@
       self.inputLayerCombo.setCurrentIndex(-1)
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label.text()
-        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
 
         self.progressBar.show()
 

Modified: trunk/qgis/python/plugins/GdalTools/tools/doPctRgb.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doPctRgb.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doPctRgb.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -53,8 +53,8 @@
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label.text()
         self.outFileLabel = self.label_2.text()
-        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
-        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
+        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
 
         self.progressBar.show()
 

Modified: trunk/qgis/python/plugins/GdalTools/tools/doProjection.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doProjection.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doProjection.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -11,128 +11,21 @@
 
 import os.path
 
-class GdalToolsBatchProjectionWidget(BaseBatchWidget):
-  def __init__(self, iface, commandName, helpFileBaseName = None):
-      BaseBatchWidget.__init__(self, iface, commandName, helpFileBaseName)
 
-      layerMap = QgsMapLayerRegistry.instance().mapLayers()
-      self.layerList = []
-      for name, layer in layerMap.iteritems():
-        if layer.type() == QgsMapLayer.RasterLayer:
-          self.layerList.append( unicode( layer.name() ) )
+class GdalToolsDialog( QWidget, Ui_Widget, BaseBatchWidget ):
 
-  def batchRun(self):
-      self.base.enableRun( False )
-      self.base.setCursor( Qt.WaitCursor )
-
-      inDir = self.getInputFileName()
-      outDir = self.getOutputFileName()
-
-      filter = Utils.getRasterExtensions()
-      self.inFiles = []
-      self.outFiles = []
-
-      if self.recurseCheck.isChecked():
-        workDir = QDir( inDir )
-        workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-        workDir.setNameFilters( filter )
-        workFiles = workDir.entryList()
-        for f in workFiles:
-          self.inFiles.append( QString( inDir + "/" + f ) )
-        for myRoot, myDirs, myFiles in os.walk( str( inDir ) ):
-          for dir in myDirs:
-            workDir = QDir( myRoot + "/" + dir )
-            workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-            workDir.setNameFilters( filter )
-            workFiles = workDir.entryList()
-            for f in workFiles:
-              self.inFiles.append( QString( myRoot + "/" + dir + "/" + f ) )
-        for f in self.inFiles:
-          if outDir != None:
-            outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
-            self.outFiles.append( outFile )
-      else:
-        workDir = QDir( inDir )
-        workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-        workDir.setNameFilters( filter )
-        files = workDir.entryList()
-        for f in files:
-          self.inFiles.append( inDir + "/" + f )
-          if outDir != None:
-            outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
-            self.outFiles.append( outDir + "/" + outFile )
-
-      #files = QStringList()
-      #for myRoot, myDirs, myFiles in os.walk( str( inDir ) ):
-      #  for dir in myDirs:
-      #    print "DIR", dir
-      #    workDir = QDir( myRoot + "/" + dir )
-      #    workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-      #    workDir.setNameFilters( filter )
-      #    workFiles = workDir.entryList()
-      #    print "ENTRY", workFiles.join( " " )
-      #    for f in workFiles:
-      #      files.append( QString( myRoot + "/" + dir + "/" + f ) )
-
-      #print "FILES", files.join( "\n" )
-
-      #filter = Utils.getRasterExtensions()
-      #workDir = QDir( inDir )
-      #workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-      #workDir.setNameFilters( filter )
-      #files = workDir.entryList()
-
-      #self.inFiles = []
-      #self.outFiles = []
-
-      #for f in files:
-      #  self.inFiles.append( inDir + "/" + f )
-      #  if outDir != None:
-      #    outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
-      #    self.outFiles.append( outDir + "/" + outFile )
-
-      self.errors = QStringList()
-      self.batchIndex = 0
-      self.batchTotal = len( self.inFiles )
-      self.setProgressRange( self.batchTotal )
-
-      self.runItem( self.batchIndex, self.batchTotal )
-
-  def runItem(self, index, total):
-      if index >= total:
-        self.outFiles = self.inFiles
-
-      BaseBatchWidget.runItem(self, index, total)
-
-  def onFinished(self, exitCode, status):
-      if not self.isBatchEnabled():
-        BaseBatchWidget.onFinished(self, exitCode, status)
-        return
-
-      oldFile = QFile( self.inFiles[self.batchIndex] )
-      newFile = QFile( self.outFiles[self.batchIndex] )
-      if oldFile.remove():
-        newFile.rename(self.inFiles[self.batchIndex])
-
-      BaseBatchWidget.onFinished(self, exitCode, status)
-
-
-class GdalToolsDialog( QWidget, Ui_Widget, GdalToolsBatchProjectionWidget ):
-
   def __init__( self, iface ):
       QWidget.__init__( self )
       self.iface = iface
 
       self.setupUi( self )
-      GdalToolsBatchProjectionWidget.__init__( self, self.iface, "gdalwarp" )
+      BaseBatchWidget.__init__( self, self.iface, "gdalwarp" )
 
       # set the default QSpinBoxes and QProgressBar value
       self.progressBar.setValue(0)
 
       self.progressBar.hide()
       self.recurseCheck.hide()
-      # store temporary file name
-      self.tempFile = QString()
 
       self.setParamsStatus(
         [
@@ -155,7 +48,7 @@
 
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label.text()
-        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
 
         self.progressBar.show()
         self.recurseCheck.show()
@@ -163,7 +56,7 @@
         QObject.disconnect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFileEdit )
         QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputDir )
 
-        QObject.disconnect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
+        #QObject.disconnect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
       else:
         self.label.setText( self.inFileLabel )
 
@@ -173,7 +66,7 @@
         QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFileEdit )
         QObject.disconnect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputDir )
 
-        QObject.connect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
+        #QObject.connect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
 
   def enableRecurse( self ):
     if self.recurseCheck.isChecked():
@@ -186,29 +79,20 @@
 
   def fillInputFileEdit( self ):
       lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
-      file = Utils.FileDialog.getOpenFileName( self, self.tr( "Select the file to analyse" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
-      if file.isEmpty():
+      inputFile = Utils.FileDialog.getOpenFileName( self, self.tr( "Select the file to analyse" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
+      if inputFile.isEmpty():
         return
-
-      outFile = QString( file ).insert( file.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
-      self.tempFile = outFile
-      #self.outputFormat = Utils.fillOutputFormat( lastUsedFilter, file )
       Utils.FileFilter.setLastUsedRasterFilter( lastUsedFilter )
-      self.inputFileEdit.setText( file )
+      #self.outputFormat = Utils.fillOutputFormat( lastUsedFilter, file )
+      self.inputFileEdit.setText( inputFile )
 
   def fillInputDir( self ):
       inputDir = Utils.FileDialog.getExistingDirectory( self, self.tr( "Select the input directory with files to Assign projection" ))
       if inputDir.isEmpty():
         return
 
-      self.inputPath = inputDir
       self.inputFileEdit.setText( inputDir )
 
-      filter = Utils.getRasterExtensions()
-      workDir = QDir( inputDir )
-      workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-      workDir.setNameFilters( filter )
-
   def fillDesiredSRSEdit( self ):
       dialog = SRSDialog( "Select desired SRS" )
       if dialog.exec_():
@@ -225,6 +109,7 @@
       if self.batchCheck.isChecked():
         return arguments
       arguments << self.inputFileEdit.text()
+      self.tempFile = self.inputFileEdit.text().replace( QRegExp( "\.[a-zA-Z]{2,4}$" ), ".tif" ).append( ".tmp" )
       arguments << self.tempFile
       return arguments
 
@@ -234,25 +119,34 @@
   def getOutputFileName( self ):
       return self.inputFileEdit.text()
 
+  def getBatchOutputFileName(self, fn):
+      # get GeoTiff
+      fn = QString( fn ).replace( QRegExp( "\.[a-zA-Z]{2,4}$" ), ".tif" )
+      return BaseBatchWidget.getBatchOutputFileName( self, fn )
+
   def addLayerIntoCanvas(self, fileInfo):
       self.iface.addRasterLayer(fileInfo.filePath())
 
   def checkLayer( self ):
-      layerMap = QgsMapLayerRegistry.instance().mapLayers()
       layerList = []
+
+      layerMap = QgsMapLayerRegistry.instance().mapLayers()
       for name, layer in layerMap.iteritems():
         if layer.type() == QgsMapLayer.RasterLayer:
-          layerList.append( unicode( layer.name() ) )
-      fileName = QString( os.path.split( str( self.inputFileEdit.text() ) )[ 1 ] )
-      fileName = fileName.left( fileName.indexOf( "." ) )
-      if fileName in layerList:
+          layerList.append( unicode( layer.source() ) )
+
+      if unicode( self.inputFileEdit.text() ) in layerList:
         QMessageBox.warning( self, self.tr( "Assign projection" ), self.tr( "This raster already found in map canvas" ) )
         return
+
       self.onRun()
 
   def isBatchEnabled(self):
       return self.batchCheck.isChecked()
 
+  def isRecursiveScanEnabled(self):
+      return self.recurseCheck.isChecked()
+
   def setProgressRange(self, maximum):
       self.progressBar.setRange(0, maximum)
 
@@ -268,65 +162,3 @@
       if oldFile.remove():
         newFile.rename( self.inputFileEdit.text() )
 
-#  def batchRun( self ):
-#      self.base.buttonBox.button( QDialogButtonBox.Ok ).setEnabled( False )
-#      self.base.setCursor( Qt.WaitCursor )
-#
-#      filter = Utils.getRasterExtensions()
-#      inDir = self.inputFileEdit.text()
-#      outDir = inDir
-#      workDir = QDir( inDir )
-#      workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
-#      workDir.setNameFilters( filter )
-#      files = workDir.entryList()
-#
-#      inFiles = []
-#      self.outFiles = []
-#      for f in files:
-#        inFiles.append( inDir + "/" + f )
-#        outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
-#        #outFile = f.replace( QRegExp( "\.[a-zA-Z0-9]{2,4}" ), ".tif" )
-#        self.outFiles.append( outDir + "/" + outFile )
-#
-#      args = QStringList()
-#      for i in range( self.base.arguments.count() ):
-#        args.append( self.base.arguments[ i ] )
-#
-#      self.errors = QStringList()
-#      count = 1
-#      total = len( inFiles )
-#      for i, item in enumerate( inFiles ):
-#        #print "PROCESS", i
-#        #self.lblProgress.setText( self.tr( "Processed: %1 from %2" ).arg( count ).arg( total ) )
-#        #QCoreApplication.processEvents()
-#        count = count + 1
-#
-#        itemArgs = QStringList()
-#        itemArgs << args
-#        itemArgs << item
-#        itemArgs << self.outFiles[ i ]
-#
-#        self.base.process.start( self.base.command, itemArgs, QIODevice.ReadOnly )
-#        if self.base.process.waitForFinished():
-#          msg = QString( self.base.process.readAllStandardError() )
-#          if not msg.isEmpty():
-#            self.errors.append( item )
-#          self.base.process.close()
-#
-#        oldFile = QFile( item )
-#        newFile = QFile( self.outFiles[ i ] )
-#        if oldFile.remove():
-#          newFile.rename( item )
-#
-#      #self.lblProgress.setText( self.tr( "Finished" ) )
-#      self.batchFinished()
-#
-#  def batchFinished( self ):
-#      self.base.buttonBox.button( QDialogButtonBox.Ok ).setEnabled( True )
-#      self.base.setCursor( Qt.ArrowCursor )
-#
-#      if not self.errors.isEmpty():
-#        message = QErrorMessage( self )
-#        msg = QString( "Processing of the following files ended with error:\n\n" ).append( self.errors.join( "\n" ) )
-#        message.showMessage( msg )
-

Modified: trunk/qgis/python/plugins/GdalTools/tools/doRgbPct.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doRgbPct.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doRgbPct.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -51,8 +51,8 @@
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label.text()
         self.outFileLabel = self.label_2.text()
-        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
-        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
+        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
 
         self.progressBar.show()
 

Modified: trunk/qgis/python/plugins/GdalTools/tools/doTranslate.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doTranslate.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doTranslate.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -74,8 +74,8 @@
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label_3.text()
         self.outFileLabel = self.label_2.text()
-        self.label_3.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
-        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
+        self.label_3.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
+        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
 
         self.progressBar.show()
         self.formatLabel.show()

Modified: trunk/qgis/python/plugins/GdalTools/tools/doWarp.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/doWarp.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/doWarp.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -65,8 +65,8 @@
       if self.batchCheck.isChecked():
         self.inFileLabel = self.label.text()
         self.outFileLabel = self.label_2.text()
-        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
-        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
+        self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
+        self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
 
         self.progressBar.show()
 

Modified: trunk/qgis/python/plugins/GdalTools/tools/widgetBatchBase.py
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/widgetBatchBase.py	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/widgetBatchBase.py	2010-12-22 03:25:14 UTC (rev 14963)
@@ -23,12 +23,25 @@
   def isBatchEnabled(self):
       return False
 
-  def setProgressRange(self, maximum ):
+  def isRecursiveScanEnabled(self):
+      return False
+
+  def setProgressRange(self, maximum):
       pass
 
   def updateProgress(self, value, maximum):
       pass
 
+  def getBatchOutputFileName(self, fn):
+      inDir = self.getInputFileName()
+      outDir = self.getOutputFileName()
+
+      # if overwrites existent files
+      if outDir == None or outDir == inDir:
+        return QString( fn ).append( ".tmp" )
+
+      return QString( fn ).mid( len(inDir) ).prepend( outDir )
+
   def onRun( self ):
       if not self.isBatchEnabled():
         BasePluginWidget.onRun(self)
@@ -41,22 +54,18 @@
       self.base.setCursor( Qt.WaitCursor )
 
       inDir = self.getInputFileName()
-      outDir = self.getOutputFileName()
 
       filter = Utils.getRasterExtensions()
       workDir = QDir( inDir )
       workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
       workDir.setNameFilters( filter )
-      files = workDir.entryList()
+      workFiles = workDir.entryList()
 
-      self.inFiles = []
+      self.inFiles = Utils.getRasterFiles( inDir, self.isRecursiveScanEnabled() )
       self.outFiles = []
 
-      for f in files:
-        self.inFiles.append( inDir + "/" + f )
-        if outDir != None:
-          outFile = f.replace( QRegExp( "\.[a-zA-Z0-9]{2,4}" ), ".tif" )
-          self.outFiles.append( outDir + "/" + outFile )
+      for f in self.inFiles:
+        self.outFiles.append( self.getBatchOutputFileName( f ) )
 
       self.errors = QStringList()
       self.batchIndex = 0
@@ -91,6 +100,15 @@
 
       self.base.process.close()
 
+      # overwrite existent files
+      inDir = self.getInputFileName()
+      outDir = self.getOutputFileName()
+      if outDir == None or inDir == outDir:
+        oldFile = QFile( self.inFiles[self.batchIndex] )
+        newFile = QFile( self.outFiles[self.batchIndex] )
+        if oldFile.remove():
+          newFile.rename(self.inFiles[self.batchIndex])
+
       self.batchIndex += 1
       self.runItem( self.batchIndex, self.batchTotal )
 
@@ -101,6 +119,11 @@
         msg = QString( "Processing of the following files ended with error: <br><br>" ).append( self.errors.join( "<br><br>" ) )
         QErrorMessage( self ).showMessage( msg )
 
+      inDir = self.getInputFileName()
+      outDir = self.getOutputFileName()
+      if outDir == None or inDir == outDir:
+        self.outFiles = self.inFiles
+
       # load layers managing the render flag to avoid waste of time
       canvas = self.iface.mapCanvas()
       previousRenderFlag = canvas.renderFlag()

Modified: trunk/qgis/python/plugins/GdalTools/tools/widgetBuildVRT.ui
===================================================================
--- trunk/qgis/python/plugins/GdalTools/tools/widgetBuildVRT.ui	2010-12-21 17:20:33 UTC (rev 14962)
+++ trunk/qgis/python/plugins/GdalTools/tools/widgetBuildVRT.ui	2010-12-22 03:25:14 UTC (rev 14963)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>352</width>
-    <height>182</height>
+    <width>344</width>
+    <height>234</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -25,7 +25,14 @@
      <property name="sizeConstraint">
       <enum>QLayout::SetNoConstraint</enum>
      </property>
-     <item row="0" column="0">
+     <item row="0" column="0" colspan="2">
+      <widget class="QCheckBox" name="inputDirCheck">
+       <property name="text">
+        <string>Choose input directory instead of files</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QLabel" name="label">
        <property name="text">
         <string>&amp;Input files</string>
@@ -35,7 +42,7 @@
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="1" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_3">
        <item>
         <widget class="QLineEdit" name="inputFilesEdit">
@@ -56,7 +63,14 @@
        </item>
       </layout>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="1">
+      <widget class="QCheckBox" name="recurseCheck">
+       <property name="text">
+        <string>Recurse subdirectories</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
       <widget class="QLabel" name="label_2">
        <property name="text">
         <string>&amp;Output file</string>
@@ -66,7 +80,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="3" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_2">
        <item>
         <widget class="QLineEdit" name="outputFileEdit">
@@ -87,14 +101,14 @@
        </item>
       </layout>
      </item>
-     <item row="2" column="0">
+     <item row="4" column="0">
       <widget class="QCheckBox" name="resolutionCheck">
        <property name="text">
         <string>&amp;Resolution</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="4" column="1">
       <widget class="QComboBox" name="resolutionComboBox">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -122,21 +136,21 @@
        </item>
       </widget>
      </item>
-     <item row="3" column="0">
+     <item row="5" column="0">
       <widget class="QCheckBox" name="srcNoDataCheck">
        <property name="text">
         <string>&amp;Source No Data</string>
        </property>
       </widget>
      </item>
-     <item row="3" column="1">
+     <item row="5" column="1">
       <widget class="QSpinBox" name="srcNoDataSpin">
        <property name="maximum">
         <number>65000</number>
        </property>
       </widget>
      </item>
-     <item row="4" column="0">
+     <item row="6" column="0">
       <widget class="QCheckBox" name="separateCheck">
        <property name="text">
         <string>Se&amp;parate</string>



More information about the QGIS-commit mailing list