diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 8d875aa1219..31ff73b02d1 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -224,8 +224,11 @@ class BatchPanelFillWidget(QToolButton): context = dataobjects.createContext() first_row = self.panel.batchRowCount() if self.panel.batchRowCount() > 1 else 0 + self.panel.addRow(len(files)) + self.panel.tblParameters.setUpdatesEnabled(False) for row, file in enumerate(files): self.setRowValue(first_row + row, file, context) + self.panel.tblParameters.setUpdatesEnabled(True) def showFileSelectionDialog(self): settings = QgsSettings() @@ -246,8 +249,11 @@ class BatchPanelFillWidget(QToolButton): context = dataobjects.createContext() first_row = self.panel.batchRowCount() if self.panel.batchRowCount() > 1 else 0 + self.panel.addRow(len(files)) + self.panel.tblParameters.setUpdatesEnabled(False) for row, file in enumerate(files): self.setRowValue(first_row + row, file, context) + self.panel.tblParameters.setUpdatesEnabled(True) def showDirectorySelectionDialog(self): settings = QgsSettings() @@ -283,8 +289,11 @@ class BatchPanelFillWidget(QToolButton): context = dataobjects.createContext() first_row = self.panel.batchRowCount() if self.panel.batchRowCount() > 1 else 0 + self.panel.addRow(len(files)) + self.panel.tblParameters.setUpdatesEnabled(False) for row, file in enumerate(files): self.setRowValue(first_row + row, file, context) + self.panel.tblParameters.setUpdatesEnabled(True) def showLayerSelectionDialog(self): layers = [] @@ -382,9 +391,13 @@ class BatchPanelFillWidget(QToolButton): res = [res] first_row = self.panel.batchRowCount() if self.panel.batchRowCount() > 1 else 0 + self.panel.addRow(len(res)) + self.panel.tblParameters.setUpdatesEnabled(False) for row, value in enumerate(res): self.setRowValue(row + first_row, value, context) + self.panel.tblParameters.setUpdatesEnabled(True) else: + self.panel.tblParameters.setUpdatesEnabled(False) for row in range(self.panel.batchRowCount()): params, ok = self.panel.parametersForRow(row, warnOnInvalid=False) @@ -406,6 +419,7 @@ class BatchPanelFillWidget(QToolButton): exp = QgsExpression(dlg.expressionText()) value = exp.evaluate(expression_context) self.setRowValue(row, value, context) + self.panel.tblParameters.setUpdatesEnabled(True) class BatchPanel(QgsPanelWidget, WIDGET): @@ -655,34 +669,39 @@ class BatchPanel(QgsPanelWidget, WIDGET): param_definition = self.alg.parameterDefinition(self.column_to_parameter_definition[col]) self.tblParameters.setCellWidget(0, col, BatchPanelFillWidget(param_definition, col, self)) - def addRow(self): - self.wrappers.append([None] * self.tblParameters.columnCount()) - self.tblParameters.setRowCount(self.tblParameters.rowCount() + 1) + def addRow(self, nb=1): + self.tblParameters.setUpdatesEnabled(False) + self.tblParameters.setRowCount(self.tblParameters.rowCount() + nb) context = dataobjects.createContext() wrappers = {} - row = self.tblParameters.rowCount() - 1 - for param in self.alg.parameterDefinitions(): - if param.isDestination(): - continue + row = self.tblParameters.rowCount() - nb + while row < self.tblParameters.rowCount(): + self.wrappers.append([None] * self.tblParameters.columnCount()) + for param in self.alg.parameterDefinitions(): + if param.isDestination(): + continue - column = self.parameter_to_column[param.name()] - wrapper = WidgetWrapperFactory.create_wrapper(param, self.parent, row, column) - wrappers[param.name()] = wrapper - self.setCellWrapper(row, column, wrapper, context) + column = self.parameter_to_column[param.name()] + wrapper = WidgetWrapperFactory.create_wrapper(param, self.parent, row, column) + wrappers[param.name()] = wrapper + self.setCellWrapper(row, column, wrapper, context) - for out in self.alg.destinationParameterDefinitions(): - if out.flags() & QgsProcessingParameterDefinition.FlagHidden: - continue + for out in self.alg.destinationParameterDefinitions(): + if out.flags() & QgsProcessingParameterDefinition.FlagHidden: + continue - column = self.parameter_to_column[out.name()] - self.tblParameters.setCellWidget( - row, column, BatchOutputSelectionPanel( - out, self.alg, row, column, self)) + column = self.parameter_to_column[out.name()] + self.tblParameters.setCellWidget( + row, column, BatchOutputSelectionPanel( + out, self.alg, row, column, self)) - for wrapper in list(wrappers.values()): - wrapper.postInitialize(list(wrappers.values())) + for wrapper in list(wrappers.values()): + wrapper.postInitialize(list(wrappers.values())) + row += 1 + + self.tblParameters.setUpdatesEnabled(True) def removeRows(self): rows = set()