Skip to content

Commit 42f16ef

Browse files
committedNov 17, 2014
[processing] refactor batch processing dialog and update related parameters widgets
1 parent bec113b commit 42f16ef

10 files changed

+571
-737
lines changed
 

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def setParamValues(self):
8282

8383
return True
8484

85-
def setParamValue(self, param, widget):
85+
def setParamValue(self, param, widget, alg=None):
8686
if isinstance(param, ParameterRaster):
8787
return param.setValue(widget.getValue())
8888
elif isinstance(param, (ParameterVector, ParameterTable)):
@@ -154,7 +154,7 @@ def accept(self):
154154

155155
self.progressBar.setMaximum(0)
156156
self.lblProgress.setText(self.tr('Processing algorithm...'))
157-
# Make sure the log tab is visible before executing the algorithm
157+
# Make sure the Log tab is visible before executing the algorithm
158158
try:
159159
self.tabWidget.setCurrentIndex(1)
160160
self.repaint()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def setText(self, text):
135135
def setParamValues(self):
136136
pass
137137

138-
def setParamValue(self, param, widget):
138+
def setParamValue(self, param, widget, alg=None):
139139
pass
140140

141141
def accept(self):

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

Lines changed: 0 additions & 330 deletions
This file was deleted.
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
BatchAlgorithmDialog.py
6+
---------------------
7+
Date : August 2012
8+
Copyright : (C) 2012 by Victor Olaya
9+
Email : volayaf at gmail dot com
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Victor Olaya'
21+
__date__ = 'August 2012'
22+
__copyright__ = '(C) 2012, Victor Olaya'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from PyQt4.QtGui import *
29+
from PyQt4.QtCore import *
30+
31+
from processing.gui.BatchPanel import BatchPanel
32+
from processing.gui.AlgorithmDialogBase import AlgorithmDialogBase
33+
from processing.gui.AlgorithmExecutor import runalg
34+
from processing.gui.Postprocessing import handleAlgorithmResults
35+
36+
from processing.core.ProcessingResults import ProcessingResults
37+
38+
from processing.core.parameters import ParameterFile
39+
from processing.core.parameters import ParameterRaster
40+
from processing.core.parameters import ParameterTable
41+
from processing.core.parameters import ParameterVector
42+
from processing.core.parameters import ParameterExtent
43+
from processing.core.parameters import ParameterCrs
44+
from processing.core.parameters import ParameterBoolean
45+
from processing.core.parameters import ParameterSelection
46+
from processing.core.parameters import ParameterFixedTable
47+
from processing.core.parameters import ParameterMultipleInput
48+
from processing.core.outputs import OutputNumber
49+
from processing.core.outputs import OutputString
50+
from processing.core.outputs import OutputHTML
51+
52+
class BatchAlgorithmDialog(AlgorithmDialogBase):
53+
54+
def __init__(self, alg):
55+
AlgorithmDialogBase.__init__(self, alg)
56+
57+
self.alg = alg
58+
59+
self.setWindowTitle(self.tr('Batch Processing - %s') % self.alg.name)
60+
61+
self.mainWidget = BatchPanel(self, self.alg)
62+
self.setMainWidget()
63+
64+
def setParamValue(self, param, widget, alg=None):
65+
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable,
66+
ParameterMultipleInput)):
67+
value = widget.getText()
68+
if unicode(value).strip() == '':
69+
value = None
70+
return param.setValue(value)
71+
elif isinstance(param, ParameterBoolean):
72+
return param.setValue(widget.currentIndex() == 0)
73+
elif isinstance(param, ParameterSelection):
74+
return param.setValue(widget.currentIndex())
75+
elif isinstance(param, ParameterFixedTable):
76+
return param.setValue(widget.table)
77+
elif isinstance(param, ParameterExtent):
78+
if alg is not None:
79+
widget.useNewAlg(alg)
80+
return param.setValue(widget.getValue())
81+
elif isinstance(param, (ParameterCrs, ParameterFile)):
82+
return param.setValue(widget.getValue())
83+
else:
84+
return param.setValue(widget.text())
85+
86+
def accept(self):
87+
self.algs = []
88+
self.load = []
89+
self.canceled = False
90+
91+
for row in range(self.mainWidget.tblParameters.rowCount()):
92+
alg = self.alg.getCopy()
93+
col = 0
94+
for param in alg.parameters:
95+
if param.hidden:
96+
continue
97+
98+
widget = self.mainWidget.tblParameters.cellWidget(row, col)
99+
if not self.setParamValue(param, widget, alg):
100+
self.lblProgress.setText(
101+
self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1))
102+
self.algs = None
103+
return
104+
col += 1
105+
106+
for out in alg.outputs:
107+
if out.hidden:
108+
continue
109+
110+
widget = self.mainWidget.tblParameters.cellWidget(row, col)
111+
text = widget.getValue()
112+
if text.strip() != '':
113+
out.value = text
114+
col += 1
115+
else:
116+
self.lblProgress.setText(
117+
self.tr('<b>Wrong or missing parameter value: %s (row %d)</b>') % (out.description, row + 1))
118+
self.algs = None
119+
return
120+
121+
self.algs.append(alg)
122+
if self.alg.getVisibleOutputsCount():
123+
widget = self.mainWidget.tblParameters.cellWidget(row, col)
124+
self.load.append(widget.currentIndex() == 0)
125+
else:
126+
self.load.append(False)
127+
128+
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
129+
self.mainWidget.setEnabled(False)
130+
131+
self.progressBar.setMaximum(len(self.algs))
132+
# Make sure the Log tab is visible before executing the algorithm
133+
try:
134+
self.tabWidget.setCurrentIndex(1)
135+
self.repaint()
136+
except:
137+
pass
138+
139+
for count, alg in enumerate(self.algs):
140+
self.setText(self.tr('Processing algorithm %d/%d...') % (count + 1, len(self.algs)))
141+
self.setInfo(self.tr('<b>Algorithm %s starting...</b>' % alg.name))
142+
if runalg(alg, self) and not self.canceled:
143+
if self.load[count]:
144+
handleAlgorithmResults(alg, self, False)
145+
self.setInfo(self.tr('Algorithm %s correctly executed...') % alg.name)
146+
else:
147+
QApplication.restoreOverrideCursor()
148+
return
149+
150+
self.finish()
151+
152+
def finish(self):
153+
for count, alg in enumerate(self.algs):
154+
self.loadHTMLResults(alg, count)
155+
156+
self.createSummaryTable()
157+
QApplication.restoreOverrideCursor()
158+
159+
self.mainWidget.setEnabled(True)
160+
QMessageBox.information(self, self.tr('Batch processing'),
161+
self.tr('Batch processing successfully completed!'))
162+
163+
def loadHTMLResults(self, alg, num):
164+
for out in alg.outputs:
165+
if out.hidden or not out.open:
166+
continue
167+
168+
if isinstance(out, OutputHTML):
169+
ProcessingResults.addResult(
170+
'{} [{}]'.format(out.description, num), out.value)
171+
172+
def createSummaryTable(self):
173+
createTable = False
174+
175+
for out in self.algs[0].outputs:
176+
if isinstance(out, (OutputNumber, OutputString)):
177+
createTable = True
178+
break
179+
180+
if not createTable:
181+
return
182+
183+
outputFile = getTempFilename('html')
184+
with codecs.open(outputFile, 'w', encoding='utf-8') as f:
185+
for alg in self.algs:
186+
f.write('<hr>\n')
187+
for out in alg.outputs:
188+
if isinstance(out, (OutputNumber, OutputString)):
189+
f.write('<p>{}: {}</p>\n'.format(out.description, out.value))
190+
f.write('<hr>\n')
191+
192+
ProcessingResults.addResult(
193+
'{} [summary]'.format(self.algs[0].name), outputFile)

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

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,56 +26,64 @@
2626
__revision__ = '$Format:%H$'
2727

2828
import os
29-
from PyQt4 import QtGui, QtCore
30-
from processing.core.parameters import ParameterMultipleInput
29+
30+
from PyQt4.QtGui import *
31+
from PyQt4.QtCore import *
32+
3133
from processing.gui.MultipleInputDialog import MultipleInputDialog
32-
from processing.tools import dataobjects
34+
35+
from processing.core.parameters import ParameterMultipleInput
3336
from processing.core.parameters import ParameterRaster
3437
from processing.core.parameters import ParameterVector
3538
from processing.core.parameters import ParameterTable
3639

40+
from processing.tools import dataobjects
41+
3742

38-
class BatchInputSelectionPanel(QtGui.QWidget):
43+
class BatchInputSelectionPanel(QWidget):
3944

40-
def __init__(self, param, row, col, batchDialog, parent=None):
41-
super(BatchInputSelectionPanel, self).__init__(parent)
45+
def __init__(self, param, row, col, panel):
46+
super(BatchInputSelectionPanel, self).__init__(None)
4247
self.param = param
43-
self.batchDialog = batchDialog
44-
self.table = batchDialog.table
48+
self.panel = panel
49+
self.table = self.panel.tblParameters
4550
self.row = row
4651
self.col = col
47-
self.horizontalLayout = QtGui.QHBoxLayout(self)
52+
self.horizontalLayout = QHBoxLayout(self)
4853
self.horizontalLayout.setSpacing(0)
4954
self.horizontalLayout.setMargin(0)
50-
self.text = QtGui.QLineEdit()
55+
self.text = QLineEdit()
5156
self.text.setText('')
52-
self.text.setSizePolicy(QtGui.QSizePolicy.Expanding,
53-
QtGui.QSizePolicy.Expanding)
57+
self.text.setSizePolicy(QSizePolicy.Expanding,
58+
QSizePolicy.Expanding)
5459
self.horizontalLayout.addWidget(self.text)
55-
self.pushButton = QtGui.QPushButton()
60+
self.pushButton = QPushButton()
5661
self.pushButton.setText('...')
5762
self.pushButton.clicked.connect(self.showPopupMenu)
5863
self.horizontalLayout.addWidget(self.pushButton)
5964
self.setLayout(self.horizontalLayout)
6065

6166
def showPopupMenu(self):
62-
popupmenu = QtGui.QMenu()
63-
if not (isinstance(self.param, ParameterMultipleInput)
64-
and self.param.datatype == ParameterMultipleInput.TYPE_FILE):
65-
selectLayerAction = QtGui.QAction(self.tr('Select from open layers'),
66-
self.pushButton)
67+
popupmenu = QMenu()
68+
69+
if not (isinstance(self.param, ParameterMultipleInput) and
70+
self.param.datatype == ParameterMultipleInput.TYPE_FILE):
71+
selectLayerAction = QAction(
72+
self.tr('Select from open layers'), self.pushButton)
6773
selectLayerAction.triggered.connect(self.showLayerSelectionDialog)
6874
popupmenu.addAction(selectLayerAction)
69-
selectFileAction = QtGui.QAction(self.tr('Select from filesystem'),
70-
self.pushButton)
75+
76+
selectFileAction = QAction(
77+
self.tr('Select from filesystem'), self.pushButton)
7178
selectFileAction.triggered.connect(self.showFileSelectionDialog)
7279
popupmenu.addAction(selectFileAction)
73-
popupmenu.exec_(QtGui.QCursor.pos())
80+
81+
popupmenu.exec_(QCursor.pos())
7482

7583
def showLayerSelectionDialog(self):
76-
if (isinstance(self.param, ParameterRaster)
77-
or (isinstance(self.param, ParameterMultipleInput)
78-
and self.param.datatype == ParameterMultipleInput.TYPE_RASTER)):
84+
if (isinstance(self.param, ParameterRaster) or
85+
(isinstance(self.param, ParameterMultipleInput) and
86+
self.param.datatype == ParameterMultipleInput.TYPE_RASTER)):
7987
layers = dataobjects.getRasterLayers()
8088
elif isinstance(self.param, ParameterTable):
8189
layers = dataobjects.getTables()
@@ -85,6 +93,7 @@ def showLayerSelectionDialog(self):
8593
else:
8694
datatype = [self.param.datatype]
8795
layers = dataobjects.getVectorLayers(datatype)
96+
8897
dlg = MultipleInputDialog([layer.name() for layer in layers])
8998
dlg.exec_()
9099
if dlg.selectedoptions is not None:
@@ -97,13 +106,13 @@ def showLayerSelectionDialog(self):
97106
else:
98107
rowdif = len(selected) - (self.table.rowCount() - self.row)
99108
for i in range(rowdif):
100-
self.batchDialog.addRow()
109+
self.table.addRow()
101110
for i, layeridx in enumerate(selected):
102111
self.table.cellWidget(i + self.row,
103112
self.col).setText(layers[layeridx].name())
104113

105114
def showFileSelectionDialog(self):
106-
settings = QtCore.QSettings()
115+
settings = QSettings()
107116
text = unicode(self.text.text())
108117
if os.path.isdir(text):
109118
path = text
@@ -114,7 +123,7 @@ def showFileSelectionDialog(self):
114123
else:
115124
path = ''
116125

117-
ret = QtGui.QFileDialog.getOpenFileNames(self, self.tr('Open file'), path,
126+
ret = QFileDialog.getOpenFileNames(self, self.tr('Open file'), path,
118127
self.tr('All files(*.*);;') + self.param.getFileFilter())
119128
if ret:
120129
files = list(ret)
@@ -130,7 +139,7 @@ def showFileSelectionDialog(self):
130139
else:
131140
rowdif = len(files) - (self.table.rowCount() - self.row)
132141
for i in range(rowdif):
133-
self.batchDialog.addRow()
142+
self.table.addRow()
134143
for i, f in enumerate(files):
135144
self.table.cellWidget(i + self.row,
136145
self.col).setText(f)

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
import os.path
29-
from PyQt4 import QtGui, QtCore
28+
import os
29+
30+
from PyQt4.QtGui import *
31+
from PyQt4.QtCore import *
32+
3033
from processing.gui.AutofillDialog import AutofillDialog
3134
from processing.core.parameters import ParameterMultipleInput
3235
from processing.core.parameters import ParameterRaster
@@ -37,33 +40,33 @@
3740
from processing.core.parameters import ParameterFixedTable
3841

3942

40-
class BatchOutputSelectionPanel(QtGui.QWidget):
43+
class BatchOutputSelectionPanel(QWidget):
4144

42-
def __init__(self, output, alg, row, col, batchDialog):
45+
def __init__(self, output, alg, row, col, panel):
4346
super(BatchOutputSelectionPanel, self).__init__(None)
4447
self.alg = alg
4548
self.row = row
4649
self.col = col
4750
self.output = output
48-
self.batchDialog = batchDialog
49-
self.table = batchDialog.table
50-
self.horizontalLayout = QtGui.QHBoxLayout(self)
51+
self.panel = panel
52+
self.table = self.panel.tblParameters
53+
self.horizontalLayout = QHBoxLayout(self)
5154
self.horizontalLayout.setSpacing(2)
5255
self.horizontalLayout.setMargin(0)
53-
self.text = QtGui.QLineEdit()
56+
self.text = QLineEdit()
5457
self.text.setText('')
55-
self.text.setSizePolicy(QtGui.QSizePolicy.Expanding,
56-
QtGui.QSizePolicy.Expanding)
58+
self.text.setSizePolicy(QSizePolicy.Expanding,
59+
QSizePolicy.Expanding)
5760
self.horizontalLayout.addWidget(self.text)
58-
self.pushButton = QtGui.QPushButton()
61+
self.pushButton = QPushButton()
5962
self.pushButton.setText('...')
6063
self.pushButton.clicked.connect(self.showSelectionDialog)
6164
self.horizontalLayout.addWidget(self.pushButton)
6265
self.setLayout(self.horizontalLayout)
6366

6467
def showSelectionDialog(self):
6568
filefilter = self.output.getFileFilter(self.alg)
66-
filename = QtGui.QFileDialog.getSaveFileName(self, self.tr('Save file'), '',
69+
filename = QFileDialog.getSaveFileName(self, self.tr('Save file'), '',
6770
filefilter)
6871
if filename:
6972
filename = unicode(filename)
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
BatchPanel.py
6+
---------------------
7+
Date : November 2014
8+
Copyright : (C) 2014 by Alexander Bruy
9+
Email : alexander dot bruy at gmail dot com
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Alexander Bruy'
21+
__date__ = 'November 2014'
22+
__copyright__ = '(C) 2014, Alexander Bruy'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from PyQt4.QtCore import *
29+
from PyQt4.QtGui import *
30+
31+
from qgis.core import *
32+
33+
from processing.gui.FileSelectionPanel import FileSelectionPanel
34+
from processing.gui.CrsSelectionPanel import CrsSelectionPanel
35+
from processing.gui.ExtentSelectionPanel import ExtentSelectionPanel
36+
from processing.gui.FixedTablePanel import FixedTablePanel
37+
from processing.gui.BatchInputSelectionPanel import BatchInputSelectionPanel
38+
from processing.gui.BatchOutputSelectionPanel import BatchOutputSelectionPanel
39+
40+
from processing.core.parameters import ParameterFile
41+
from processing.core.parameters import ParameterRaster
42+
from processing.core.parameters import ParameterTable
43+
from processing.core.parameters import ParameterVector
44+
from processing.core.parameters import ParameterExtent
45+
from processing.core.parameters import ParameterCrs
46+
from processing.core.parameters import ParameterBoolean
47+
from processing.core.parameters import ParameterSelection
48+
from processing.core.parameters import ParameterFixedTable
49+
from processing.core.parameters import ParameterMultipleInput
50+
51+
from processing.ui.ui_widgetBatchPanel import Ui_Form
52+
53+
54+
class BatchPanel(QWidget, Ui_Form):
55+
56+
def __init__(self, parent, alg):
57+
QWidget.__init__(self)
58+
self.setupUi(self)
59+
60+
self.btnAdvanced.hide()
61+
62+
# Set icons
63+
self.btnAdd.setIcon(
64+
QgsApplication.getThemeIcon('/mActionSignPlus.png'))
65+
self.btnRemove.setIcon(
66+
QgsApplication.getThemeIcon('/mActionSignMinus.png'))
67+
self.btnAdvanced.setIcon(QIcon(':/processing/images/alg.png'))
68+
69+
self.alg = alg
70+
self.parent = parent
71+
72+
self.btnAdd.clicked.connect(self.addRow)
73+
self.btnRemove.clicked.connect(self.removeRows)
74+
self.btnAdvanced.toggled.connect(self.toggleAdvancedMode)
75+
self.tblParameters.horizontalHeader().sectionDoubleClicked.connect(
76+
self.fillParameterValues)
77+
78+
self.initWidgets()
79+
80+
def initWidgets(self):
81+
# If there are advanced parameters — show corresponding button
82+
for param in self.alg.parameters:
83+
if param.isAdvanced:
84+
self.btnAdvanced.show()
85+
break
86+
87+
# Determine column count
88+
nOutputs = self.alg.getVisibleOutputsCount() + 1
89+
if nOutputs == 1:
90+
nOutputs = 0
91+
92+
self.tblParameters.setColumnCount(
93+
self.alg.getVisibleParametersCount() + nOutputs)
94+
95+
# Table headers
96+
column = 0
97+
for param in self.alg.parameters:
98+
self.tblParameters.setHorizontalHeaderItem(
99+
column, QTableWidgetItem(param.description))
100+
if param.isAdvanced:
101+
self.tblParameters.setColumnHidden(column, True)
102+
column += 1
103+
104+
for out in self.alg.outputs:
105+
if not out.hidden:
106+
self.tblParameters.setHorizontalHeaderItem(
107+
column, QTableWidgetItem(out.description))
108+
column += 1
109+
110+
# Last column for indicating if output will be added to canvas
111+
if self.alg.getVisibleOutputsCount():
112+
self.tblParameters.setHorizontalHeaderItem(
113+
column, QTableWidgetItem(self.tr('Load in QGIS')))
114+
115+
# Add three empty rows by default
116+
for i in xrange(3):
117+
self.addRow()
118+
119+
def getWidgetFromParameter(self, param, row, col):
120+
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable,
121+
ParameterMultipleInput)):
122+
item = BatchInputSelectionPanel(param, row, col, self)
123+
elif isinstance(param, ParameterBoolean):
124+
item = QComboBox()
125+
item.addItem(self.tr('Yes'))
126+
item.addItem(self.tr('No'))
127+
if param.default:
128+
item.setCurrentIndex(0)
129+
else:
130+
item.setCurrentIndex(1)
131+
elif isinstance(param, ParameterSelection):
132+
item = QComboBox()
133+
item.addItems(param.options)
134+
elif isinstance(param, ParameterFixedTable):
135+
item = FixedTablePanel(param)
136+
elif isinstance(param, ParameterExtent):
137+
item = ExtentSelectionPanel(self.parent, self.alg, param.default)
138+
elif isinstance(param, ParameterCrs):
139+
item = CrsSelectionPanel(param.default)
140+
elif isinstance(param, ParameterFile):
141+
item = FileSelectionPanel(param.isFolder)
142+
else:
143+
item = QLineEdit()
144+
try:
145+
item.setText(param.default)
146+
except:
147+
pass
148+
149+
return item
150+
151+
def addRow(self):
152+
self.tblParameters.setRowCount(self.tblParameters.rowCount() + 1)
153+
154+
row = self.tblParameters.rowCount() - 1
155+
column = 0
156+
for param in self.alg.parameters:
157+
if param.hidden:
158+
continue
159+
160+
self.tblParameters.setCellWidget(
161+
row, column, self.getWidgetFromParameter(param, row, column))
162+
column += 1
163+
164+
for out in self.alg.outputs:
165+
if out.hidden:
166+
continue
167+
168+
self.tblParameters.setCellWidget(
169+
row, column, BatchOutputSelectionPanel(
170+
out, self.alg, row, column, self))
171+
column += 1
172+
173+
if self.alg.getVisibleOutputsCount():
174+
item = QComboBox()
175+
item.addItem(self.tr('Yes'))
176+
item.addItem(self.tr('No'))
177+
item.setCurrentIndex(0)
178+
self.tblParameters.setCellWidget(row, column, item)
179+
180+
def removeRows(self):
181+
#~ self.tblParameters.setUpdatesEnabled(False)
182+
#~ indexes = self.tblParameters.selectionModel().selectedIndexes()
183+
#~ indexes.sort()
184+
#~ for i in reversed(indexes):
185+
#~ self.tblParameters.model().removeRow(i.row())
186+
#~ self.tblParameters.setUpdatesEnabled(True)
187+
if self.tblParameters.rowCount() > 2:
188+
self.tblParameters.setRowCount(self.tblParameters.rowCount() - 1)
189+
190+
def fillParameterValues(self, column):
191+
widget = self.tblParameters.cellWidget(0, column)
192+
193+
if isinstance(widget, QComboBox):
194+
widgetValue = widget.currentIndex()
195+
for row in range(1, self.tblParameters.rowCount()):
196+
self.tblParameters.cellWidget(row, col).setCurrentIndex(widgetValue)
197+
elif isinstance(widget, ExtentSelectionPanel):
198+
widgetValue = widget.getValue()
199+
for row in range(1, self.tblParameters.rowCount()):
200+
if widgetValue is not None:
201+
self.tblParameters.cellWidget(row, col).text.setText(widgetValue)
202+
else:
203+
self.tblParameters.cellWidget(row, col).text.setText('')
204+
elif isinstance(widget, CrsSelectionPanel):
205+
widgetValue = widget.getValue()
206+
for row in range(1, self.tblParameters.rowCount()):
207+
self.tblParameters.cellWidget(row, col).setAuthId(widgetValue)
208+
elif isinstance(widget, FileSelectionPanel):
209+
widgetValue = widget.getValue()
210+
for row in range(1, self.tblParameters.rowCount()):
211+
self.tblParameters.cellWidget(row, col).setText(widgetValue)
212+
elif isinstance(widget, QLineEdit):
213+
widgetValue = widget.text()
214+
for row in range(1, self.tblParameters.rowCount()):
215+
self.tblParameters.cellWidget(row, col).setText(widgetValue)
216+
elif isinstance(widget, BatchInputSelectionPanel):
217+
widgetValue = widget.getText()
218+
for row in range(1, self.tblParameters.rowCount()):
219+
self.tblParameters.cellWidget(row, col).setText(widgetValue)
220+
else:
221+
pass
222+
223+
def toggleAdvancedMode(self, checked):
224+
for column, param in enumerate(self.alg.parameters):
225+
if param.isAdvanced:
226+
self.tblParameters.setColumnHidden(column, not checked)

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

Lines changed: 0 additions & 362 deletions
This file was deleted.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from processing.gui.MessageDialog import MessageDialog
3838
from processing.gui.AlgorithmClassification import AlgorithmDecorator
3939
from processing.gui.AlgorithmDialog import AlgorithmDialog
40-
from processing.gui.BatchProcessingDialog import BatchProcessingDialog
40+
from processing.gui.BatchAlgorithmDialog import BatchAlgorithmDialog
4141
from processing.gui.EditRenderingStylesDialog import EditRenderingStylesDialog
4242

4343
from processing.ui.ui_ProcessingToolbox import Ui_ProcessingToolbox
@@ -177,7 +177,7 @@ def executeAlgorithmAsBatchProcess(self):
177177
if isinstance(item, TreeAlgorithmItem):
178178
alg = Processing.getAlgorithm(item.alg.commandLineName())
179179
alg = alg.getCopy()
180-
dlg = BatchProcessingDialog(alg)
180+
dlg = BatchAlgorithmDialog(alg)
181181
dlg.exec_()
182182

183183
def executeAlgorithm(self):
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>Form</class>
4+
<widget class="QWidget" name="Form">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>400</width>
10+
<height>252</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Form</string>
15+
</property>
16+
<layout class="QGridLayout" name="gridLayout">
17+
<property name="margin">
18+
<number>0</number>
19+
</property>
20+
<property name="spacing">
21+
<number>2</number>
22+
</property>
23+
<item row="0" column="0">
24+
<widget class="QToolButton" name="btnAdvanced">
25+
<property name="toolTip">
26+
<string>Toggle advanced mode</string>
27+
</property>
28+
<property name="text">
29+
<string>...</string>
30+
</property>
31+
<property name="checkable">
32+
<bool>true</bool>
33+
</property>
34+
<property name="autoRaise">
35+
<bool>true</bool>
36+
</property>
37+
</widget>
38+
</item>
39+
<item row="0" column="1">
40+
<widget class="QToolButton" name="btnAdd">
41+
<property name="toolTip">
42+
<string>Add row</string>
43+
</property>
44+
<property name="text">
45+
<string>...</string>
46+
</property>
47+
<property name="autoRaise">
48+
<bool>true</bool>
49+
</property>
50+
</widget>
51+
</item>
52+
<item row="0" column="2">
53+
<widget class="QToolButton" name="btnRemove">
54+
<property name="toolTip">
55+
<string>Remove row(s)</string>
56+
</property>
57+
<property name="text">
58+
<string>...</string>
59+
</property>
60+
<property name="autoRaise">
61+
<bool>true</bool>
62+
</property>
63+
</widget>
64+
</item>
65+
<item row="0" column="3">
66+
<spacer name="horizontalSpacer">
67+
<property name="orientation">
68+
<enum>Qt::Horizontal</enum>
69+
</property>
70+
<property name="sizeHint" stdset="0">
71+
<size>
72+
<width>313</width>
73+
<height>20</height>
74+
</size>
75+
</property>
76+
</spacer>
77+
</item>
78+
<item row="1" column="0" colspan="4">
79+
<widget class="QTableWidget" name="tblParameters">
80+
<property name="selectionBehavior">
81+
<enum>QAbstractItemView::SelectRows</enum>
82+
</property>
83+
<attribute name="horizontalHeaderStretchLastSection">
84+
<bool>true</bool>
85+
</attribute>
86+
<attribute name="verticalHeaderVisible">
87+
<bool>false</bool>
88+
</attribute>
89+
</widget>
90+
</item>
91+
</layout>
92+
</widget>
93+
<resources/>
94+
<connections/>
95+
</ui>

0 commit comments

Comments
 (0)
Please sign in to comment.