Skip to content

Commit 7484fff

Browse files
author
brushtyler
committedDec 22, 2010
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 git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@14963 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

10 files changed

+152
-223
lines changed

10 files changed

+152
-223
lines changed
 

‎python/plugins/GdalTools/tools/GdalTools_utils.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,32 @@ def getVectorLayers():
117117
count = count +1
118118
return (layers, names)
119119

120+
def getRasterFiles(path, recursive=False):
121+
rasters = QStringList()
122+
if not QFileInfo(path).exists():
123+
return rasters
124+
125+
filter = getRasterExtensions()
126+
workDir = QDir( path )
127+
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
128+
workDir.setNameFilters( filter )
129+
files = workDir.entryList()
130+
for f in files:
131+
rasters << path + "/" + f
132+
133+
if recursive:
134+
import os
135+
for myRoot, myDirs, myFiles in os.walk( unicode(path) ):
136+
for dir in myDirs:
137+
workDir = QDir( myRoot + "/" + dir )
138+
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
139+
workDir.setNameFilters( filter )
140+
workFiles = workDir.entryList()
141+
for f in workFiles:
142+
rasters << myRoot + "/" + dir + "/" + f
143+
144+
return rasters
145+
120146
def fillRasterOutputFormat(aFilter = None, filename = None):
121147
shortName = QString()
122148

‎python/plugins/GdalTools/tools/doBuildVRT.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,42 @@ def __init__(self, iface):
1818
self.setupUi(self)
1919
BasePluginWidget.__init__(self, self.iface, "gdalbuildvrt")
2020

21+
self.recurseCheck.hide()
22+
2123
self.setParamsStatus(
2224
[
2325
(self.inputFilesEdit, SIGNAL("textChanged(const QString &)")),
2426
(self.outputFileEdit, SIGNAL("textChanged(const QString &)")),
2527
(self.resolutionComboBox, SIGNAL("currentIndexChanged(int)"), self.resolutionCheck),
2628
(self.srcNoDataSpin, SIGNAL("valueChanged(int)"), self.srcNoDataCheck, "1.7.0"),
27-
(self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0")
29+
(self.separateCheck, SIGNAL("stateChanged(int)"), None, "1.7.0"),
30+
(self.inputDirCheck, SIGNAL("stateChanged(int)")),
31+
(self.recurseCheck, SIGNAL("stateChanged(int)"), self.inputDirCheck)
2832
]
2933
)
3034

3135
self.connect(self.selectInputFilesButton, SIGNAL("clicked()"), self.fillInputFilesEdit)
3236
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
37+
self.connect( self.inputDirCheck, SIGNAL( "stateChanged( int )" ), self.switchToolMode )
38+
39+
def switchToolMode(self):
40+
self.inputFilesEdit.clear()
41+
42+
if self.inputDirCheck.isChecked():
43+
self.inFileLabel = self.label.text()
44+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
45+
46+
self.recurseCheck.show()
47+
48+
QObject.disconnect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputFilesEdit )
49+
QObject.connect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputDir )
50+
else:
51+
self.label.setText( self.inFileLabel )
52+
53+
self.recurseCheck.hide()
54+
55+
QObject.connect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputFilesEdit )
56+
QObject.disconnect( self.selectInputFilesButton, SIGNAL( "clicked()" ), self.fillInputDir )
3357

3458
def fillInputFilesEdit(self):
3559
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
@@ -47,6 +71,13 @@ def fillOutputFileEdit(self):
4771

4872
self.outputFileEdit.setText(outputFile)
4973

74+
def fillInputDir( self ):
75+
inputDir = Utils.FileDialog.getExistingDirectory( self, self.tr( "Select the input directory with files for VRT" ))
76+
if inputDir.isEmpty():
77+
return
78+
79+
self.inputFilesEdit.setText( inputDir )
80+
5081
def getArguments(self):
5182
arguments = QStringList()
5283
if self.resolutionCheck.isChecked() and self.resolutionComboBox.currentIndex() >= 0:
@@ -58,7 +89,10 @@ def getArguments(self):
5889
arguments << "-srcnodata"
5990
arguments << str(self.srcNoDataSpin.value())
6091
arguments << self.outputFileEdit.text()
61-
arguments << self.inputFilesEdit.text().split(",")
92+
if self.inputDirCheck.isChecked():
93+
arguments << Utils.getRasterFiles( self.inputFilesEdit.text(), self.recurseCheck.isChecked() )
94+
else:
95+
arguments << self.inputFilesEdit.text().split(",")
6296
return arguments
6397

6498
def getOutputFileName(self):

‎python/plugins/GdalTools/tools/doOverview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def switchToolMode( self ):
5656
self.inputLayerCombo.setCurrentIndex(-1)
5757
if self.batchCheck.isChecked():
5858
self.inFileLabel = self.label.text()
59-
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
59+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
6060

6161
self.progressBar.show()
6262

‎python/plugins/GdalTools/tools/doPctRgb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ def switchToolMode( self ):
5353
if self.batchCheck.isChecked():
5454
self.inFileLabel = self.label.text()
5555
self.outFileLabel = self.label_2.text()
56-
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
57-
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
56+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
57+
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
5858

5959
self.progressBar.show()
6060

‎python/plugins/GdalTools/tools/doProjection.py

Lines changed: 24 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -11,128 +11,21 @@
1111

1212
import os.path
1313

14-
class GdalToolsBatchProjectionWidget(BaseBatchWidget):
15-
def __init__(self, iface, commandName, helpFileBaseName = None):
16-
BaseBatchWidget.__init__(self, iface, commandName, helpFileBaseName)
1714

18-
layerMap = QgsMapLayerRegistry.instance().mapLayers()
19-
self.layerList = []
20-
for name, layer in layerMap.iteritems():
21-
if layer.type() == QgsMapLayer.RasterLayer:
22-
self.layerList.append( unicode( layer.name() ) )
23-
24-
def batchRun(self):
25-
self.base.enableRun( False )
26-
self.base.setCursor( Qt.WaitCursor )
27-
28-
inDir = self.getInputFileName()
29-
outDir = self.getOutputFileName()
30-
31-
filter = Utils.getRasterExtensions()
32-
self.inFiles = []
33-
self.outFiles = []
34-
35-
if self.recurseCheck.isChecked():
36-
workDir = QDir( inDir )
37-
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
38-
workDir.setNameFilters( filter )
39-
workFiles = workDir.entryList()
40-
for f in workFiles:
41-
self.inFiles.append( QString( inDir + "/" + f ) )
42-
for myRoot, myDirs, myFiles in os.walk( str( inDir ) ):
43-
for dir in myDirs:
44-
workDir = QDir( myRoot + "/" + dir )
45-
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
46-
workDir.setNameFilters( filter )
47-
workFiles = workDir.entryList()
48-
for f in workFiles:
49-
self.inFiles.append( QString( myRoot + "/" + dir + "/" + f ) )
50-
for f in self.inFiles:
51-
if outDir != None:
52-
outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
53-
self.outFiles.append( outFile )
54-
else:
55-
workDir = QDir( inDir )
56-
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
57-
workDir.setNameFilters( filter )
58-
files = workDir.entryList()
59-
for f in files:
60-
self.inFiles.append( inDir + "/" + f )
61-
if outDir != None:
62-
outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
63-
self.outFiles.append( outDir + "/" + outFile )
64-
65-
#files = QStringList()
66-
#for myRoot, myDirs, myFiles in os.walk( str( inDir ) ):
67-
# for dir in myDirs:
68-
# print "DIR", dir
69-
# workDir = QDir( myRoot + "/" + dir )
70-
# workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
71-
# workDir.setNameFilters( filter )
72-
# workFiles = workDir.entryList()
73-
# print "ENTRY", workFiles.join( " " )
74-
# for f in workFiles:
75-
# files.append( QString( myRoot + "/" + dir + "/" + f ) )
76-
77-
#print "FILES", files.join( "\n" )
78-
79-
#filter = Utils.getRasterExtensions()
80-
#workDir = QDir( inDir )
81-
#workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
82-
#workDir.setNameFilters( filter )
83-
#files = workDir.entryList()
84-
85-
#self.inFiles = []
86-
#self.outFiles = []
87-
88-
#for f in files:
89-
# self.inFiles.append( inDir + "/" + f )
90-
# if outDir != None:
91-
# outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
92-
# self.outFiles.append( outDir + "/" + outFile )
93-
94-
self.errors = QStringList()
95-
self.batchIndex = 0
96-
self.batchTotal = len( self.inFiles )
97-
self.setProgressRange( self.batchTotal )
98-
99-
self.runItem( self.batchIndex, self.batchTotal )
100-
101-
def runItem(self, index, total):
102-
if index >= total:
103-
self.outFiles = self.inFiles
104-
105-
BaseBatchWidget.runItem(self, index, total)
106-
107-
def onFinished(self, exitCode, status):
108-
if not self.isBatchEnabled():
109-
BaseBatchWidget.onFinished(self, exitCode, status)
110-
return
111-
112-
oldFile = QFile( self.inFiles[self.batchIndex] )
113-
newFile = QFile( self.outFiles[self.batchIndex] )
114-
if oldFile.remove():
115-
newFile.rename(self.inFiles[self.batchIndex])
116-
117-
BaseBatchWidget.onFinished(self, exitCode, status)
118-
119-
120-
class GdalToolsDialog( QWidget, Ui_Widget, GdalToolsBatchProjectionWidget ):
15+
class GdalToolsDialog( QWidget, Ui_Widget, BaseBatchWidget ):
12116

12217
def __init__( self, iface ):
12318
QWidget.__init__( self )
12419
self.iface = iface
12520

12621
self.setupUi( self )
127-
GdalToolsBatchProjectionWidget.__init__( self, self.iface, "gdalwarp" )
22+
BaseBatchWidget.__init__( self, self.iface, "gdalwarp" )
12823

12924
# set the default QSpinBoxes and QProgressBar value
13025
self.progressBar.setValue(0)
13126

13227
self.progressBar.hide()
13328
self.recurseCheck.hide()
134-
# store temporary file name
135-
self.tempFile = QString()
13629

13730
self.setParamsStatus(
13831
[
@@ -155,15 +48,15 @@ def switchToolMode( self ):
15548

15649
if self.batchCheck.isChecked():
15750
self.inFileLabel = self.label.text()
158-
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
51+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
15952

16053
self.progressBar.show()
16154
self.recurseCheck.show()
16255

16356
QObject.disconnect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFileEdit )
16457
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputDir )
16558

166-
QObject.disconnect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
59+
#QObject.disconnect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
16760
else:
16861
self.label.setText( self.inFileLabel )
16962

@@ -173,7 +66,7 @@ def switchToolMode( self ):
17366
QObject.connect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputFileEdit )
17467
QObject.disconnect( self.selectInputFileButton, SIGNAL( "clicked()" ), self.fillInputDir )
17568

176-
QObject.connect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
69+
#QObject.connect( self.base.buttonBox.button( QDialogButtonBox.Ok ), SIGNAL( "clicked()" ), self.checkLayer )
17770

17871
def enableRecurse( self ):
17972
if self.recurseCheck.isChecked():
@@ -186,29 +79,20 @@ def enableRecurse( self ):
18679

18780
def fillInputFileEdit( self ):
18881
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
189-
file = Utils.FileDialog.getOpenFileName( self, self.tr( "Select the file to analyse" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
190-
if file.isEmpty():
82+
inputFile = Utils.FileDialog.getOpenFileName( self, self.tr( "Select the file to analyse" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
83+
if inputFile.isEmpty():
19184
return
192-
193-
outFile = QString( file ).insert( file.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
194-
self.tempFile = outFile
195-
#self.outputFormat = Utils.fillOutputFormat( lastUsedFilter, file )
19685
Utils.FileFilter.setLastUsedRasterFilter( lastUsedFilter )
197-
self.inputFileEdit.setText( file )
86+
#self.outputFormat = Utils.fillOutputFormat( lastUsedFilter, file )
87+
self.inputFileEdit.setText( inputFile )
19888

19989
def fillInputDir( self ):
20090
inputDir = Utils.FileDialog.getExistingDirectory( self, self.tr( "Select the input directory with files to Assign projection" ))
20191
if inputDir.isEmpty():
20292
return
20393

204-
self.inputPath = inputDir
20594
self.inputFileEdit.setText( inputDir )
20695

207-
filter = Utils.getRasterExtensions()
208-
workDir = QDir( inputDir )
209-
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
210-
workDir.setNameFilters( filter )
211-
21296
def fillDesiredSRSEdit( self ):
21397
dialog = SRSDialog( "Select desired SRS" )
21498
if dialog.exec_():
@@ -225,6 +109,7 @@ def getArguments( self ):
225109
if self.batchCheck.isChecked():
226110
return arguments
227111
arguments << self.inputFileEdit.text()
112+
self.tempFile = self.inputFileEdit.text().replace( QRegExp( "\.[a-zA-Z]{2,4}$" ), ".tif" ).append( ".tmp" )
228113
arguments << self.tempFile
229114
return arguments
230115

@@ -234,25 +119,34 @@ def getInputFileName(self):
234119
def getOutputFileName( self ):
235120
return self.inputFileEdit.text()
236121

122+
def getBatchOutputFileName(self, fn):
123+
# get GeoTiff
124+
fn = QString( fn ).replace( QRegExp( "\.[a-zA-Z]{2,4}$" ), ".tif" )
125+
return BaseBatchWidget.getBatchOutputFileName( self, fn )
126+
237127
def addLayerIntoCanvas(self, fileInfo):
238128
self.iface.addRasterLayer(fileInfo.filePath())
239129

240130
def checkLayer( self ):
241-
layerMap = QgsMapLayerRegistry.instance().mapLayers()
242131
layerList = []
132+
133+
layerMap = QgsMapLayerRegistry.instance().mapLayers()
243134
for name, layer in layerMap.iteritems():
244135
if layer.type() == QgsMapLayer.RasterLayer:
245-
layerList.append( unicode( layer.name() ) )
246-
fileName = QString( os.path.split( str( self.inputFileEdit.text() ) )[ 1 ] )
247-
fileName = fileName.left( fileName.indexOf( "." ) )
248-
if fileName in layerList:
136+
layerList.append( unicode( layer.source() ) )
137+
138+
if unicode( self.inputFileEdit.text() ) in layerList:
249139
QMessageBox.warning( self, self.tr( "Assign projection" ), self.tr( "This raster already found in map canvas" ) )
250140
return
141+
251142
self.onRun()
252143

253144
def isBatchEnabled(self):
254145
return self.batchCheck.isChecked()
255146

147+
def isRecursiveScanEnabled(self):
148+
return self.recurseCheck.isChecked()
149+
256150
def setProgressRange(self, maximum):
257151
self.progressBar.setRange(0, maximum)
258152

@@ -268,65 +162,3 @@ def finished( self ):
268162
if oldFile.remove():
269163
newFile.rename( self.inputFileEdit.text() )
270164

271-
# def batchRun( self ):
272-
# self.base.buttonBox.button( QDialogButtonBox.Ok ).setEnabled( False )
273-
# self.base.setCursor( Qt.WaitCursor )
274-
#
275-
# filter = Utils.getRasterExtensions()
276-
# inDir = self.inputFileEdit.text()
277-
# outDir = inDir
278-
# workDir = QDir( inDir )
279-
# workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
280-
# workDir.setNameFilters( filter )
281-
# files = workDir.entryList()
282-
#
283-
# inFiles = []
284-
# self.outFiles = []
285-
# for f in files:
286-
# inFiles.append( inDir + "/" + f )
287-
# outFile = QString( f ).insert( f.indexOf( "." ), "_1" ).replace( QRegExp( "\.[a-zA-Z]{3,4}$" ), ".tif" )
288-
# #outFile = f.replace( QRegExp( "\.[a-zA-Z0-9]{2,4}" ), ".tif" )
289-
# self.outFiles.append( outDir + "/" + outFile )
290-
#
291-
# args = QStringList()
292-
# for i in range( self.base.arguments.count() ):
293-
# args.append( self.base.arguments[ i ] )
294-
#
295-
# self.errors = QStringList()
296-
# count = 1
297-
# total = len( inFiles )
298-
# for i, item in enumerate( inFiles ):
299-
# #print "PROCESS", i
300-
# #self.lblProgress.setText( self.tr( "Processed: %1 from %2" ).arg( count ).arg( total ) )
301-
# #QCoreApplication.processEvents()
302-
# count = count + 1
303-
#
304-
# itemArgs = QStringList()
305-
# itemArgs << args
306-
# itemArgs << item
307-
# itemArgs << self.outFiles[ i ]
308-
#
309-
# self.base.process.start( self.base.command, itemArgs, QIODevice.ReadOnly )
310-
# if self.base.process.waitForFinished():
311-
# msg = QString( self.base.process.readAllStandardError() )
312-
# if not msg.isEmpty():
313-
# self.errors.append( item )
314-
# self.base.process.close()
315-
#
316-
# oldFile = QFile( item )
317-
# newFile = QFile( self.outFiles[ i ] )
318-
# if oldFile.remove():
319-
# newFile.rename( item )
320-
#
321-
# #self.lblProgress.setText( self.tr( "Finished" ) )
322-
# self.batchFinished()
323-
#
324-
# def batchFinished( self ):
325-
# self.base.buttonBox.button( QDialogButtonBox.Ok ).setEnabled( True )
326-
# self.base.setCursor( Qt.ArrowCursor )
327-
#
328-
# if not self.errors.isEmpty():
329-
# message = QErrorMessage( self )
330-
# msg = QString( "Processing of the following files ended with error:\n\n" ).append( self.errors.join( "\n" ) )
331-
# message.showMessage( msg )
332-

‎python/plugins/GdalTools/tools/doRgbPct.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def switchToolMode( self ):
5151
if self.batchCheck.isChecked():
5252
self.inFileLabel = self.label.text()
5353
self.outFileLabel = self.label_2.text()
54-
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
55-
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
54+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
55+
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
5656

5757
self.progressBar.show()
5858

‎python/plugins/GdalTools/tools/doTranslate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ def switchToolMode( self ):
7474
if self.batchCheck.isChecked():
7575
self.inFileLabel = self.label_3.text()
7676
self.outFileLabel = self.label_2.text()
77-
self.label_3.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
78-
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
77+
self.label_3.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
78+
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
7979

8080
self.progressBar.show()
8181
self.formatLabel.show()

‎python/plugins/GdalTools/tools/doWarp.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ def switchToolMode( self ):
6565
if self.batchCheck.isChecked():
6666
self.inFileLabel = self.label.text()
6767
self.outFileLabel = self.label_2.text()
68-
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory:" ) )
69-
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory:" ) )
68+
self.label.setText( QCoreApplication.translate( "GdalTools", "&Input directory" ) )
69+
self.label_2.setText( QCoreApplication.translate( "GdalTools", "&Output directory" ) )
7070

7171
self.progressBar.show()
7272

‎python/plugins/GdalTools/tools/widgetBatchBase.py

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,25 @@ def getBatchArguments(self, inFile, outFile = None):
2323
def isBatchEnabled(self):
2424
return False
2525

26-
def setProgressRange(self, maximum ):
26+
def isRecursiveScanEnabled(self):
27+
return False
28+
29+
def setProgressRange(self, maximum):
2730
pass
2831

2932
def updateProgress(self, value, maximum):
3033
pass
3134

35+
def getBatchOutputFileName(self, fn):
36+
inDir = self.getInputFileName()
37+
outDir = self.getOutputFileName()
38+
39+
# if overwrites existent files
40+
if outDir == None or outDir == inDir:
41+
return QString( fn ).append( ".tmp" )
42+
43+
return QString( fn ).mid( len(inDir) ).prepend( outDir )
44+
3245
def onRun( self ):
3346
if not self.isBatchEnabled():
3447
BasePluginWidget.onRun(self)
@@ -41,22 +54,18 @@ def batchRun(self):
4154
self.base.setCursor( Qt.WaitCursor )
4255

4356
inDir = self.getInputFileName()
44-
outDir = self.getOutputFileName()
4557

4658
filter = Utils.getRasterExtensions()
4759
workDir = QDir( inDir )
4860
workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
4961
workDir.setNameFilters( filter )
50-
files = workDir.entryList()
62+
workFiles = workDir.entryList()
5163

52-
self.inFiles = []
64+
self.inFiles = Utils.getRasterFiles( inDir, self.isRecursiveScanEnabled() )
5365
self.outFiles = []
5466

55-
for f in files:
56-
self.inFiles.append( inDir + "/" + f )
57-
if outDir != None:
58-
outFile = f.replace( QRegExp( "\.[a-zA-Z0-9]{2,4}" ), ".tif" )
59-
self.outFiles.append( outDir + "/" + outFile )
67+
for f in self.inFiles:
68+
self.outFiles.append( self.getBatchOutputFileName( f ) )
6069

6170
self.errors = QStringList()
6271
self.batchIndex = 0
@@ -91,6 +100,15 @@ def onFinished(self, exitCode, status):
91100

92101
self.base.process.close()
93102

103+
# overwrite existent files
104+
inDir = self.getInputFileName()
105+
outDir = self.getOutputFileName()
106+
if outDir == None or inDir == outDir:
107+
oldFile = QFile( self.inFiles[self.batchIndex] )
108+
newFile = QFile( self.outFiles[self.batchIndex] )
109+
if oldFile.remove():
110+
newFile.rename(self.inFiles[self.batchIndex])
111+
94112
self.batchIndex += 1
95113
self.runItem( self.batchIndex, self.batchTotal )
96114

@@ -101,6 +119,11 @@ def batchFinished( self ):
101119
msg = QString( "Processing of the following files ended with error: <br><br>" ).append( self.errors.join( "<br><br>" ) )
102120
QErrorMessage( self ).showMessage( msg )
103121

122+
inDir = self.getInputFileName()
123+
outDir = self.getOutputFileName()
124+
if outDir == None or inDir == outDir:
125+
self.outFiles = self.inFiles
126+
104127
# load layers managing the render flag to avoid waste of time
105128
canvas = self.iface.mapCanvas()
106129
previousRenderFlag = canvas.renderFlag()

‎python/plugins/GdalTools/tools/widgetBuildVRT.ui

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>352</width>
10-
<height>182</height>
9+
<width>344</width>
10+
<height>234</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -25,7 +25,14 @@
2525
<property name="sizeConstraint">
2626
<enum>QLayout::SetNoConstraint</enum>
2727
</property>
28-
<item row="0" column="0">
28+
<item row="0" column="0" colspan="2">
29+
<widget class="QCheckBox" name="inputDirCheck">
30+
<property name="text">
31+
<string>Choose input directory instead of files</string>
32+
</property>
33+
</widget>
34+
</item>
35+
<item row="1" column="0">
2936
<widget class="QLabel" name="label">
3037
<property name="text">
3138
<string>&amp;Input files</string>
@@ -35,7 +42,7 @@
3542
</property>
3643
</widget>
3744
</item>
38-
<item row="0" column="1">
45+
<item row="1" column="1">
3946
<layout class="QHBoxLayout" name="horizontalLayout_3">
4047
<item>
4148
<widget class="QLineEdit" name="inputFilesEdit">
@@ -56,7 +63,14 @@
5663
</item>
5764
</layout>
5865
</item>
59-
<item row="1" column="0">
66+
<item row="2" column="1">
67+
<widget class="QCheckBox" name="recurseCheck">
68+
<property name="text">
69+
<string>Recurse subdirectories</string>
70+
</property>
71+
</widget>
72+
</item>
73+
<item row="3" column="0">
6074
<widget class="QLabel" name="label_2">
6175
<property name="text">
6276
<string>&amp;Output file</string>
@@ -66,7 +80,7 @@
6680
</property>
6781
</widget>
6882
</item>
69-
<item row="1" column="1">
83+
<item row="3" column="1">
7084
<layout class="QHBoxLayout" name="horizontalLayout_2">
7185
<item>
7286
<widget class="QLineEdit" name="outputFileEdit">
@@ -87,14 +101,14 @@
87101
</item>
88102
</layout>
89103
</item>
90-
<item row="2" column="0">
104+
<item row="4" column="0">
91105
<widget class="QCheckBox" name="resolutionCheck">
92106
<property name="text">
93107
<string>&amp;Resolution</string>
94108
</property>
95109
</widget>
96110
</item>
97-
<item row="2" column="1">
111+
<item row="4" column="1">
98112
<widget class="QComboBox" name="resolutionComboBox">
99113
<property name="sizePolicy">
100114
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -122,21 +136,21 @@
122136
</item>
123137
</widget>
124138
</item>
125-
<item row="3" column="0">
139+
<item row="5" column="0">
126140
<widget class="QCheckBox" name="srcNoDataCheck">
127141
<property name="text">
128142
<string>&amp;Source No Data</string>
129143
</property>
130144
</widget>
131145
</item>
132-
<item row="3" column="1">
146+
<item row="5" column="1">
133147
<widget class="QSpinBox" name="srcNoDataSpin">
134148
<property name="maximum">
135149
<number>65000</number>
136150
</property>
137151
</widget>
138152
</item>
139-
<item row="4" column="0">
153+
<item row="6" column="0">
140154
<widget class="QCheckBox" name="separateCheck">
141155
<property name="text">
142156
<string>Se&amp;parate</string>

0 commit comments

Comments
 (0)
Please sign in to comment.