36
36
37
37
from qgis .core import QgsApplication
38
38
39
+ from processing .gui .wrappers import (
40
+ DIALOG_BATCH ,
41
+ wrapper_from_param ,
42
+ NotYetImplementedWidgetWrapper ,
43
+ )
44
+
39
45
from processing .gui .FileSelectionPanel import FileSelectionPanel
40
46
from processing .gui .CrsSelectionPanel import CrsSelectionPanel
41
47
from processing .gui .ExtentSelectionPanel import ExtentSelectionPanel
52
58
from processing .core .parameters import ParameterExtent
53
59
from processing .core .parameters import ParameterCrs
54
60
from processing .core .parameters import ParameterPoint
55
- from processing .core .parameters import ParameterBoolean
56
61
from processing .core .parameters import ParameterSelection
57
62
from processing .core .parameters import ParameterFixedTable
58
63
from processing .core .parameters import ParameterMultipleInput
@@ -72,6 +77,8 @@ def __init__(self, parent, alg):
72
77
super (BatchPanel , self ).__init__ (None )
73
78
self .setupUi (self )
74
79
80
+ self .widget_wrappers = []
81
+
75
82
self .btnAdvanced .hide ()
76
83
77
84
# Set icons
@@ -140,25 +147,26 @@ def initWidgets(self):
140
147
self .tblParameters .verticalHeader ().setResizeMode (QHeaderView .ResizeToContents )
141
148
self .tblParameters .horizontalHeader ().setStretchLastSection (True )
142
149
150
+ def getWidgetWrapperFromParameter (self , param , row , col ):
151
+ wrapper = wrapper_from_param (param ) # , DIALOG_BATCH)
152
+ if wrapper is not None :
153
+ return wrapper
154
+
155
+ widget = self .getWidgetFromParameter (param , row , col )
156
+ wrapper = NotYetImplementedWidgetWrapper (param , widget )
157
+ return wrapper
158
+
143
159
def getWidgetFromParameter (self , param , row , col ):
144
160
if isinstance (param , (ParameterRaster , ParameterVector , ParameterTable ,
145
161
ParameterMultipleInput )):
146
162
item = BatchInputSelectionPanel (param , row , col , self )
147
- elif isinstance (param , ParameterBoolean ):
148
- item = QComboBox ()
149
- item .addItem (self .tr ('Yes' ))
150
- item .addItem (self .tr ('No' ))
151
- if param .default :
152
- item .setCurrentIndex (0 )
153
- else :
154
- item .setCurrentIndex (1 )
155
163
elif isinstance (param , ParameterSelection ):
156
164
item = QComboBox ()
157
165
item .addItems (param .options )
158
166
elif isinstance (param , ParameterFixedTable ):
159
167
item = FixedTablePanel (param )
160
168
elif isinstance (param , ParameterExtent ):
161
- item = ExtentSelectionPanel (self .parent , param .default )
169
+ item = ExtentSelectionPanel (self .parent , self . alg , param .default )
162
170
elif isinstance (param , ParameterPoint ):
163
171
item = PointSelectionPanel (self .parent , param .default )
164
172
elif isinstance (param , ParameterCrs ):
@@ -181,9 +189,9 @@ def getWidgetFromParameter(self, param, row, col):
181
189
return item
182
190
183
191
def load (self ):
184
- filename , selected_filter = str ( QFileDialog .getOpenFileName (self ,
185
- self .tr ('Open batch' ), None ,
186
- self .tr ('JSON files (*.json)' ) ))
192
+ filename , selected_filter = QFileDialog .getOpenFileName (self ,
193
+ self .tr ('Open batch' ), None ,
194
+ self .tr ('JSON files (*.json)' ))
187
195
if filename :
188
196
with open (filename ) as f :
189
197
values = json .load (f )
@@ -201,18 +209,18 @@ def load(self):
201
209
for param in self .alg .parameters :
202
210
if param .hidden :
203
211
continue
204
- widget = self .tblParameters .cellWidget (row , column )
205
212
if param .name in params :
206
213
value = params [param .name ]
207
- self .setValueInWidget (widget , value )
214
+ wrapper = self .widget_wrappers [row ][column ]
215
+ self .setValueInWidgetWrapper (wrapper , value )
208
216
column += 1
209
217
210
218
for out in self .alg .outputs :
211
219
if out .hidden :
212
220
continue
213
- widget = self .tblParameters .cellWidget (row , column )
214
221
if out .name in outputs :
215
222
value = outputs [out .name ]
223
+ widget = self .tblParameters .cellWidget (row , column )
216
224
self .setValueInWidget (widget , value )
217
225
column += 1
218
226
except TypeError :
@@ -221,6 +229,11 @@ def load(self):
221
229
self .tr ('Error' ),
222
230
self .tr ('An error occurred while reading your file.' ))
223
231
232
+ def setValueInWidgetWrapper (self , wrapper , value ):
233
+ if wrapper .implemented :
234
+ return wrapper .setValue (value )
235
+ self .setValueInWidget (wrapper .widget , value )
236
+
224
237
def setValueInWidget (self , widget , value ):
225
238
if isinstance (widget , (BatchInputSelectionPanel , QLineEdit , FileSelectionPanel )):
226
239
widget .setText (str (value ))
@@ -249,13 +262,28 @@ def save(self):
249
262
for param in alg .parameters :
250
263
if param .hidden :
251
264
continue
252
- widget = self .tblParameters .cellWidget (row , col )
253
- if not self .setParamValue (param , widget , alg ):
265
+ if isinstance (param , ParameterExtent ):
266
+ col += 1
267
+ continue
268
+ wrapper = self .widget_wrappers [row ][col ]
269
+ if not self .setParamValue (param , wrapper , alg ):
254
270
self .parent .lblProgress .setText (
255
271
self .tr ('<b>Missing parameter value: %s (row %d)</b>' ) % (param .description , row + 1 ))
256
272
return
257
273
algParams [param .name ] = param .getValueAsCommandLineParameter ()
258
274
col += 1
275
+ col = 0
276
+ for param in alg .parameters :
277
+ if param .hidden :
278
+ continue
279
+ if isinstance (param , ParameterExtent ):
280
+ wrapper = self .widget_wrappers [row ][col ]
281
+ if not self .setParamValue (param , wrapper , alg ):
282
+ self .parent .lblProgress .setText (
283
+ self .tr ('<b>Missing parameter value: %s (row %d)</b>' ) % (param .description , row + 1 ))
284
+ return
285
+ algParams [param .name ] = unicode (param .value ())
286
+ col += 1
259
287
for out in alg .outputs :
260
288
if out .hidden :
261
289
continue
@@ -270,25 +298,27 @@ def save(self):
270
298
return
271
299
toSave .append ({self .PARAMETERS : algParams , self .OUTPUTS : algOutputs })
272
300
273
- filename , filter = QFileDialog .getSaveFileName (self ,
301
+ filename = unicode ( QFileDialog .getSaveFileName (self ,
274
302
self .tr ('Save batch' ),
275
303
None ,
276
- self .tr ('JSON files (*.json)' ))
304
+ self .tr ('JSON files (*.json)' )))
277
305
if filename :
278
306
if not filename .endswith ('.json' ):
279
307
filename += '.json'
280
308
with open (filename , 'w' ) as f :
281
309
json .dump (toSave , f )
282
310
283
- def setParamValue (self , param , widget , alg = None ):
311
+ def setParamValue (self , param , wrapper , alg = None ):
312
+ if wrapper .implemented :
313
+ return param .setValue (wrapper .value ())
314
+
315
+ widget = wrapper .widget
284
316
if isinstance (param , (ParameterRaster , ParameterVector , ParameterTable ,
285
317
ParameterMultipleInput )):
286
318
value = widget .getText ()
287
319
if str (value ).strip () == '' :
288
320
value = None
289
321
return param .setValue (value )
290
- elif isinstance (param , ParameterBoolean ):
291
- return param .setValue (widget .currentIndex () == 0 )
292
322
elif isinstance (param , ParameterSelection ):
293
323
return param .setValue (widget .currentIndex ())
294
324
elif isinstance (param , ParameterFixedTable ):
@@ -304,7 +334,12 @@ def setParamValue(self, param, widget, alg=None):
304
334
else :
305
335
return param .setValue (widget .text ())
306
336
337
+ def setCellWrapper (self , row , column , wrapper ):
338
+ self .widget_wrappers [row ][column ] = wrapper
339
+ self .tblParameters .setCellWidget (row , column , wrapper .widget )
340
+
307
341
def addRow (self ):
342
+ self .widget_wrappers .append ([None ] * self .tblParameters .columnCount ())
308
343
self .tblParameters .setRowCount (self .tblParameters .rowCount () + 1 )
309
344
310
345
row = self .tblParameters .rowCount () - 1
@@ -313,8 +348,8 @@ def addRow(self):
313
348
if param .hidden :
314
349
continue
315
350
316
- self .tblParameters . setCellWidget (
317
- row , column , self .getWidgetFromParameter ( param , row , column ) )
351
+ wrapper = self .getWidgetWrapperFromParameter ( param , row , column )
352
+ self .setCellWrapper ( row , column , wrapper )
318
353
column += 1
319
354
320
355
for out in self .alg .outputs :
@@ -341,6 +376,7 @@ def removeRows(self):
341
376
#~ self.tblParameters.model().removeRow(i.row())
342
377
#~ self.tblParameters.setUpdatesEnabled(True)
343
378
if self .tblParameters .rowCount () > 2 :
379
+ self .widget_wrappers .pop ()
344
380
self .tblParameters .setRowCount (self .tblParameters .rowCount () - 1 )
345
381
346
382
def fillParameterValues (self , column ):
0 commit comments