Skip to content

Commit fbab369

Browse files
arnaud-morvanvolaya
authored andcommittedOct 5, 2016
Use boolean wrapper in batch algorithm dialog
Conflicts: python/plugins/processing/gui/BatchPanel.py
1 parent f3c9aaa commit fbab369

File tree

2 files changed

+62
-26
lines changed

2 files changed

+62
-26
lines changed
 

‎python/plugins/processing/gui/BatchPanel.py

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@
3636

3737
from qgis.core import QgsApplication
3838

39+
from processing.gui.wrappers import (
40+
DIALOG_BATCH,
41+
wrapper_from_param,
42+
NotYetImplementedWidgetWrapper,
43+
)
44+
3945
from processing.gui.FileSelectionPanel import FileSelectionPanel
4046
from processing.gui.CrsSelectionPanel import CrsSelectionPanel
4147
from processing.gui.ExtentSelectionPanel import ExtentSelectionPanel
@@ -52,7 +58,6 @@
5258
from processing.core.parameters import ParameterExtent
5359
from processing.core.parameters import ParameterCrs
5460
from processing.core.parameters import ParameterPoint
55-
from processing.core.parameters import ParameterBoolean
5661
from processing.core.parameters import ParameterSelection
5762
from processing.core.parameters import ParameterFixedTable
5863
from processing.core.parameters import ParameterMultipleInput
@@ -72,6 +77,8 @@ def __init__(self, parent, alg):
7277
super(BatchPanel, self).__init__(None)
7378
self.setupUi(self)
7479

80+
self.widget_wrappers = []
81+
7582
self.btnAdvanced.hide()
7683

7784
# Set icons
@@ -140,25 +147,26 @@ def initWidgets(self):
140147
self.tblParameters.verticalHeader().setResizeMode(QHeaderView.ResizeToContents)
141148
self.tblParameters.horizontalHeader().setStretchLastSection(True)
142149

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+
143159
def getWidgetFromParameter(self, param, row, col):
144160
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable,
145161
ParameterMultipleInput)):
146162
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)
155163
elif isinstance(param, ParameterSelection):
156164
item = QComboBox()
157165
item.addItems(param.options)
158166
elif isinstance(param, ParameterFixedTable):
159167
item = FixedTablePanel(param)
160168
elif isinstance(param, ParameterExtent):
161-
item = ExtentSelectionPanel(self.parent, param.default)
169+
item = ExtentSelectionPanel(self.parent, self.alg, param.default)
162170
elif isinstance(param, ParameterPoint):
163171
item = PointSelectionPanel(self.parent, param.default)
164172
elif isinstance(param, ParameterCrs):
@@ -181,9 +189,9 @@ def getWidgetFromParameter(self, param, row, col):
181189
return item
182190

183191
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)'))
187195
if filename:
188196
with open(filename) as f:
189197
values = json.load(f)
@@ -201,18 +209,18 @@ def load(self):
201209
for param in self.alg.parameters:
202210
if param.hidden:
203211
continue
204-
widget = self.tblParameters.cellWidget(row, column)
205212
if param.name in params:
206213
value = params[param.name]
207-
self.setValueInWidget(widget, value)
214+
wrapper = self.widget_wrappers[row][column]
215+
self.setValueInWidgetWrapper(wrapper, value)
208216
column += 1
209217

210218
for out in self.alg.outputs:
211219
if out.hidden:
212220
continue
213-
widget = self.tblParameters.cellWidget(row, column)
214221
if out.name in outputs:
215222
value = outputs[out.name]
223+
widget = self.tblParameters.cellWidget(row, column)
216224
self.setValueInWidget(widget, value)
217225
column += 1
218226
except TypeError:
@@ -221,6 +229,11 @@ def load(self):
221229
self.tr('Error'),
222230
self.tr('An error occurred while reading your file.'))
223231

232+
def setValueInWidgetWrapper(self, wrapper, value):
233+
if wrapper.implemented:
234+
return wrapper.setValue(value)
235+
self.setValueInWidget(wrapper.widget, value)
236+
224237
def setValueInWidget(self, widget, value):
225238
if isinstance(widget, (BatchInputSelectionPanel, QLineEdit, FileSelectionPanel)):
226239
widget.setText(str(value))
@@ -249,13 +262,28 @@ def save(self):
249262
for param in alg.parameters:
250263
if param.hidden:
251264
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):
254270
self.parent.lblProgress.setText(
255271
self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1))
256272
return
257273
algParams[param.name] = param.getValueAsCommandLineParameter()
258274
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
259287
for out in alg.outputs:
260288
if out.hidden:
261289
continue
@@ -270,25 +298,27 @@ def save(self):
270298
return
271299
toSave.append({self.PARAMETERS: algParams, self.OUTPUTS: algOutputs})
272300

273-
filename, filter = QFileDialog.getSaveFileName(self,
301+
filename = unicode(QFileDialog.getSaveFileName(self,
274302
self.tr('Save batch'),
275303
None,
276-
self.tr('JSON files (*.json)'))
304+
self.tr('JSON files (*.json)')))
277305
if filename:
278306
if not filename.endswith('.json'):
279307
filename += '.json'
280308
with open(filename, 'w') as f:
281309
json.dump(toSave, f)
282310

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
284316
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable,
285317
ParameterMultipleInput)):
286318
value = widget.getText()
287319
if str(value).strip() == '':
288320
value = None
289321
return param.setValue(value)
290-
elif isinstance(param, ParameterBoolean):
291-
return param.setValue(widget.currentIndex() == 0)
292322
elif isinstance(param, ParameterSelection):
293323
return param.setValue(widget.currentIndex())
294324
elif isinstance(param, ParameterFixedTable):
@@ -304,7 +334,12 @@ def setParamValue(self, param, widget, alg=None):
304334
else:
305335
return param.setValue(widget.text())
306336

337+
def setCellWrapper(self, row, column, wrapper):
338+
self.widget_wrappers[row][column] = wrapper
339+
self.tblParameters.setCellWidget(row, column, wrapper.widget)
340+
307341
def addRow(self):
342+
self.widget_wrappers.append([None] * self.tblParameters.columnCount())
308343
self.tblParameters.setRowCount(self.tblParameters.rowCount() + 1)
309344

310345
row = self.tblParameters.rowCount() - 1
@@ -313,8 +348,8 @@ def addRow(self):
313348
if param.hidden:
314349
continue
315350

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)
318353
column += 1
319354

320355
for out in self.alg.outputs:
@@ -341,6 +376,7 @@ def removeRows(self):
341376
#~ self.tblParameters.model().removeRow(i.row())
342377
#~ self.tblParameters.setUpdatesEnabled(True)
343378
if self.tblParameters.rowCount() > 2:
379+
self.widget_wrappers.pop()
344380
self.tblParameters.setRowCount(self.tblParameters.rowCount() - 1)
345381

346382
def fillParameterValues(self, column):

‎python/plugins/processing/gui/wrappers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from qgis.PyQt.QtWidgets import (
3232
QCheckBox,
3333
QComboBox,
34-
)
34+
)
3535

3636
DIALOG_STANDARD = 'standard'
3737
DIALOG_BATCH = 'batch'

0 commit comments

Comments
 (0)
Please sign in to comment.