@@ -19,6 +19,7 @@ def __init__(self, iface):
19
19
20
20
self .inSelector .setType ( self .inSelector .FILE )
21
21
self .outSelector .setType ( self .outSelector .FILE )
22
+ self .recurseCheck .hide ()
22
23
23
24
self .outputFormat = Utils .fillRasterOutputFormat ()
24
25
self .extent = None
@@ -28,7 +29,9 @@ def __init__(self, iface):
28
29
(self .inSelector , SIGNAL ("filenameChanged()" )),
29
30
(self .outSelector , SIGNAL ("filenameChanged()" )),
30
31
(self .noDataSpin , SIGNAL ("valueChanged(int)" ), self .noDataCheck ),
31
- ( self .separateCheck , SIGNAL ( "stateChanged( int )" ) ),
32
+ (self .inputDirCheck , SIGNAL ("stateChanged(int)" )),
33
+ (self .recurseCheck , SIGNAL ("stateChanged(int)" ), self .inputDirCheck ),
34
+ ( self .separateCheck , SIGNAL ( "stateChanged( int )" ) ),
32
35
( self .pctCheck , SIGNAL ( "stateChanged( int )" ) ),
33
36
( self .intersectCheck , SIGNAL ( "stateChanged( int )" ) ),
34
37
(self .creationOptionsTable , [SIGNAL ("cellValueChanged(int, int)" ), SIGNAL ("rowRemoved()" )], self .creationGroupBox )
@@ -37,37 +40,57 @@ def __init__(self, iface):
37
40
38
41
self .connect (self .inSelector , SIGNAL ("selectClicked()" ), self .fillInputFilesEdit )
39
42
self .connect (self .outSelector , SIGNAL ("selectClicked()" ), self .fillOutputFileEdit )
40
- self .connect (self .intersectCheck , SIGNAL ("stateChanged(int)" ), self .refreshExtent )
43
+ self .connect (self .intersectCheck , SIGNAL ("toggled(bool)" ), self .refreshExtent )
44
+ self .connect (self .inputDirCheck , SIGNAL ("stateChanged( int )" ), self .switchToolMode )
45
+ self .connect (self .inSelector , SIGNAL ("filenameChanged()" ), self .refreshExtent )
46
+
47
+ def switchToolMode (self ):
48
+ self .recurseCheck .setVisible ( self .inputDirCheck .isChecked () )
49
+ self .inSelector .clear ()
50
+
51
+ if self .inputDirCheck .isChecked ():
52
+ self .inFileLabel = self .label .text ()
53
+ self .label .setText ( QCoreApplication .translate ( "GdalTools" , "&Input directory" ) )
54
+
55
+ QObject .disconnect (self .inSelector , SIGNAL ("selectClicked()" ), self .fillInputFilesEdit )
56
+ QObject .connect (self .inSelector , SIGNAL ("selectClicked()" ), self .fillInputDir )
57
+ else :
58
+ self .label .setText ( self .inFileLabel )
59
+
60
+ QObject .connect (self .inSelector , SIGNAL ("selectClicked()" ), self .fillInputFilesEdit )
61
+ QObject .disconnect (self .inSelector , SIGNAL ("selectClicked()" ), self .fillInputDir )
41
62
42
63
def fillInputFilesEdit (self ):
43
64
lastUsedFilter = Utils .FileFilter .lastUsedRasterFilter ()
44
65
files = Utils .FileDialog .getOpenFileNames (self , self .tr ( "Select the files to Merge" ), Utils .FileFilter .allRastersFilter (), lastUsedFilter )
45
66
if files .isEmpty ():
46
67
return
47
68
Utils .FileFilter .setLastUsedRasterFilter (lastUsedFilter )
69
+ self .inSelector .setFilename (files )
48
70
49
- self .inSelector .setFilename (files .join ("," ))
71
+ def refreshExtent (self ):
72
+ files = self .getInputFileNames ()
50
73
self .intersectCheck .setEnabled ( files .count () > 1 )
51
- self .refreshExtent ()
52
74
53
- def refreshExtent (self ):
54
- files = self .getInputFileName ()
75
+ if not self .intersectCheck .isChecked ():
76
+ self .someValueChanged ()
77
+ return
78
+
55
79
if files .count () < 2 :
56
80
self .intersectCheck .setChecked ( False )
57
- self .extent = None
58
81
return
59
82
60
- self .extent = self .getExtent ()
61
- self .someValueChanged ()
62
-
63
- if not self .intersectCheck .isChecked ():
64
- return
83
+ self .extent = self .getIntersectedExtent ( files )
65
84
66
85
if self .extent == None :
67
86
QMessageBox .warning ( self , self .tr ( "Error retrieving the extent" ), self .tr ( 'GDAL was unable to retrieve the extent from any file. \n The "Use intersected extent" option will be unchecked.' ) )
68
87
self .intersectCheck .setChecked ( False )
88
+ return
89
+
69
90
elif self .extent .isEmpty ():
70
91
QMessageBox .warning ( self , self .tr ( "Empty extent" ), self .tr ( 'The computed extent is empty. \n Disable the "Use intersected extent" option to have a nonempty output.' ) )
92
+
93
+ self .someValueChanged ()
71
94
72
95
def fillOutputFileEdit (self ):
73
96
lastUsedFilter = Utils .FileFilter .lastUsedRasterFilter ()
@@ -79,6 +102,12 @@ def fillOutputFileEdit(self):
79
102
self .outputFormat = Utils .fillRasterOutputFormat ( lastUsedFilter , outputFile )
80
103
self .outSelector .setFilename ( outputFile )
81
104
105
+ def fillInputDir ( self ):
106
+ inputDir = Utils .FileDialog .getExistingDirectory ( self , self .tr ( "Select the input directory with files to Merge" ))
107
+ if inputDir .isEmpty ():
108
+ return
109
+ self .inSelector .setFilename ( inputDir )
110
+
82
111
def getArguments (self ):
83
112
arguments = QStringList ()
84
113
if self .intersectCheck .isChecked ():
@@ -105,31 +134,39 @@ def getArguments(self):
105
134
arguments << self .outputFormat
106
135
arguments << "-o"
107
136
arguments << outputFn
108
- arguments << self .getInputFileName ()
137
+ arguments << self .getInputFileNames ()
109
138
return arguments
110
139
111
140
def getOutputFileName (self ):
112
141
return self .outSelector .filename ()
113
142
114
143
def getInputFileName (self ):
115
- return self .inSelector .filename ().split ( "," )
144
+ if self .inputDirCheck .isChecked ():
145
+ return self .inSelector .filename ()
146
+ return self .inSelector .filename ().split ("," , QString .SkipEmptyParts )
147
+
148
+ def getInputFileNames (self ):
149
+ if self .inputDirCheck .isChecked ():
150
+ return Utils .getRasterFiles ( self .inSelector .filename (), self .recurseCheck .isChecked () )
151
+ return self .inSelector .filename ().split ("," , QString .SkipEmptyParts )
116
152
117
153
def addLayerIntoCanvas (self , fileInfo ):
118
154
self .iface .addRasterLayer (fileInfo .filePath ())
119
155
120
- def getExtent ( self ):
121
- files = self .getInputFileName ()
122
-
123
- i = 0
124
- res = rect2 = None
156
+ def getIntersectedExtent (self , files ):
157
+ res = None
125
158
for fileName in files :
126
159
if res == None :
127
160
res = Utils .getRasterExtent ( self , fileName )
128
161
continue
162
+
129
163
rect2 = Utils .getRasterExtent ( self , fileName )
130
164
if rect2 == None :
131
165
continue
166
+
132
167
res = res .intersect ( rect2 )
168
+ if res .isEmpty ():
169
+ break
133
170
134
171
return res
135
172
0 commit comments