mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-15 00:07:25 -05:00
[processing] Fix batch mode 'fill with parameter values' option for outputs
Fixes #30543
This commit is contained in:
parent
2850683205
commit
ec246e3ddb
@ -45,13 +45,13 @@ class AutofillDialog(BASE, WIDGET):
|
||||
super(AutofillDialog, self).__init__(None)
|
||||
self.setupUi(self)
|
||||
self.mode = None
|
||||
self.param_index = None
|
||||
self.param_name = None
|
||||
self.alg = alg
|
||||
|
||||
self.cmbFillType.currentIndexChanged.connect(self.toggleParameters)
|
||||
|
||||
for param in self.alg.parameterDefinitions():
|
||||
self.cmbParameters.addItem(param.description())
|
||||
self.cmbParameters.addItem(param.description(), param.name())
|
||||
|
||||
def toggleParameters(self, index):
|
||||
if index == self.FILL_WITH_PARAMETER:
|
||||
@ -63,10 +63,10 @@ class AutofillDialog(BASE, WIDGET):
|
||||
|
||||
def accept(self):
|
||||
self.mode = self.cmbFillType.currentIndex()
|
||||
self.param_index = self.cmbParameters.currentIndex()
|
||||
self.param_name = self.cmbParameters.currentData()
|
||||
QDialog.accept(self)
|
||||
|
||||
def reject(self):
|
||||
self.mode = None
|
||||
self.param_index = None
|
||||
self.param_name = None
|
||||
QDialog.reject(self)
|
||||
|
||||
@ -88,47 +88,39 @@ class BatchOutputSelectionPanel(QWidget):
|
||||
dlg = AutofillDialog(self.alg)
|
||||
dlg.exec_()
|
||||
if dlg.mode is not None:
|
||||
try:
|
||||
if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL:
|
||||
self.table.cellWidget(self.row,
|
||||
self.col).setValue(filename)
|
||||
elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS:
|
||||
n = self.table.rowCount() - self.row
|
||||
for i in range(n):
|
||||
name = filename[:filename.rfind('.')] \
|
||||
+ str(i + 1) + filename[filename.rfind('.'):]
|
||||
self.table.cellWidget(i + self.row,
|
||||
self.col).setValue(name)
|
||||
elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER:
|
||||
n = self.table.rowCount() - self.row
|
||||
for i in range(n):
|
||||
widget = self.table.cellWidget(i + self.row,
|
||||
dlg.param_index)
|
||||
param = self.alg.parameterDefinitions()[dlg.param_index]
|
||||
if isinstance(param, (QgsProcessingParameterRasterLayer,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingParameterVectorLayer,
|
||||
QgsProcessingParameterMultipleLayers)):
|
||||
v = widget.value()
|
||||
if isinstance(v, QgsMapLayer):
|
||||
s = v.name()
|
||||
else:
|
||||
s = os.path.basename(v)
|
||||
s = os.path.splitext(s)[0]
|
||||
elif isinstance(param, QgsProcessingParameterBoolean):
|
||||
s = str(widget.currentIndex() == 0)
|
||||
elif isinstance(param, QgsProcessingParameterEnum):
|
||||
s = str(widget.currentText())
|
||||
elif isinstance(param, QgsProcessingParameterMatrix):
|
||||
s = str(widget.table)
|
||||
if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL:
|
||||
self.table.cellWidget(self.row,
|
||||
self.col).setValue(filename)
|
||||
elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS:
|
||||
n = self.table.rowCount() - self.row
|
||||
for i in range(n):
|
||||
name = filename[:filename.rfind('.')] \
|
||||
+ str(i + 1) + filename[filename.rfind('.'):]
|
||||
self.table.cellWidget(i + self.row,
|
||||
self.col).setValue(name)
|
||||
elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER:
|
||||
for row in range(self.row, self.table.rowCount()):
|
||||
v = self.panel.valueForParameter(row - 1, dlg.param_name)
|
||||
param = self.alg.parameterDefinition(dlg.param_name)
|
||||
if isinstance(param, (QgsProcessingParameterRasterLayer,
|
||||
QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingParameterVectorLayer,
|
||||
QgsProcessingParameterMultipleLayers)):
|
||||
if isinstance(v, QgsMapLayer):
|
||||
s = v.name()
|
||||
else:
|
||||
s = str(widget.text())
|
||||
name = filename[:filename.rfind('.')] + s \
|
||||
+ filename[filename.rfind('.'):]
|
||||
self.table.cellWidget(i + self.row,
|
||||
self.col).setValue(name)
|
||||
except:
|
||||
pass
|
||||
s = os.path.basename(v)
|
||||
s = os.path.splitext(s)[0]
|
||||
elif isinstance(param, QgsProcessingParameterBoolean):
|
||||
s = 'true' if v else 'false'
|
||||
elif isinstance(param, QgsProcessingParameterEnum):
|
||||
s = param.options()[v]
|
||||
else:
|
||||
s = str(v)
|
||||
name = filename[:filename.rfind('.')] + s \
|
||||
+ filename[filename.rfind('.'):]
|
||||
self.table.cellWidget(row,
|
||||
self.col).setValue(name)
|
||||
|
||||
def selectDirectory(self):
|
||||
|
||||
|
||||
@ -567,6 +567,13 @@ class BatchPanel(BASE, WIDGET):
|
||||
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
|
||||
self.tblParameters.setColumnHidden(self.parameter_to_column[param.name()], not checked)
|
||||
|
||||
def valueForParameter(self, row, parameter_name):
|
||||
"""
|
||||
Returns the current value for a parameter in a row
|
||||
"""
|
||||
wrapper = self.wrappers[row][self.parameter_to_column[parameter_name]]
|
||||
return wrapper.parameterValue()
|
||||
|
||||
def parametersForRow(self, row, destinationProject=None, warnOnInvalid=True):
|
||||
"""
|
||||
Returns the parameters dictionary corresponding to a row in the batch table
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user