[processing] Make batch process faster (#38989)

This commit is contained in:
Mathieu Pellerin 2020-09-24 12:34:59 +07:00 committed by GitHub
parent c1702db1be
commit 931136879c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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()