Skip to content

Commit ccdf372

Browse files
committedOct 5, 2016
[processing] UI improvement for defining model parameters
1 parent 53d0372 commit ccdf372

File tree

1 file changed

+97
-113
lines changed

1 file changed

+97
-113
lines changed
 

‎python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py

Lines changed: 97 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,6 @@ class ModelerParameterDefinitionDialog(QDialog):
7070
PARAMETER_CRS = 'CRS'
7171
PARAMETER_MULTIPLE = 'Multiple input'
7272

73-
# To add
74-
PARAMETER_FIXED_TABLE = 'Fixed table'
75-
7673
paramTypes = [
7774
PARAMETER_BOOLEAN,
7875
PARAMETER_EXTENT,
@@ -98,32 +95,15 @@ def __init__(self, alg, paramType=None, param=None):
9895

9996
def setupUi(self):
10097
self.setWindowTitle(self.tr('Parameter definition'))
98+
self.setMinimumWidth(300)
10199

102100
self.verticalLayout = QVBoxLayout(self)
103-
self.verticalLayout.setSpacing(40)
104101
self.verticalLayout.setMargin(20)
105102

106-
self.horizontalLayoutName = QHBoxLayout(self)
107-
self.horizontalLayoutName.setSpacing(2)
108-
self.horizontalLayoutName.setMargin(0)
109103
self.label = QLabel(self.tr('Parameter name'))
110-
self.horizontalLayoutName.addWidget(self.label)
104+
self.verticalLayout.addWidget(self.label)
111105
self.nameTextBox = QLineEdit()
112-
self.horizontalLayoutName.addWidget(self.nameTextBox)
113-
self.verticalLayout.addLayout(self.horizontalLayoutName)
114-
115-
self.horizontalLayoutRequired = QHBoxLayout(self)
116-
self.horizontalLayoutRequired.setSpacing(2)
117-
self.horizontalLayoutRequired.setMargin(0)
118-
self.horizontalLayoutParent = QHBoxLayout(self)
119-
self.horizontalLayoutParent.setSpacing(2)
120-
self.horizontalLayoutParent.setMargin(0)
121-
self.horizontalLayoutDefault = QHBoxLayout(self)
122-
self.horizontalLayoutDefault.setSpacing(2)
123-
self.horizontalLayoutDefault.setMargin(0)
124-
self.horizontalLayoutDatatype = QHBoxLayout(self)
125-
self.horizontalLayoutDatatype.setSpacing(2)
126-
self.horizontalLayoutDatatype.setMargin(0)
106+
self.verticalLayout.addWidget(self.nameTextBox)
127107

128108
if isinstance(self.param, Parameter):
129109
self.nameTextBox.setText(self.param.description)
@@ -134,12 +114,11 @@ def setupUi(self):
134114
self.state.setText(self.tr('Checked'))
135115
self.state.setChecked(False)
136116
if self.param is not None:
137-
self.state.setChecked(True if self.param.value else False)
138-
self.horizontalLayoutParent.addWidget(self.state)
139-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
117+
self.state.setChecked(bool(self.param.value))
118+
self.verticalLayout.addWidget(self.state)
140119
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or \
141120
isinstance(self.param, ParameterTableField):
142-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Parent layer')))
121+
self.verticalLayout.addWidget(QLabel(self.tr('Parent layer')))
143122
self.parentCombo = QComboBox()
144123
idx = 0
145124
for param in list(self.alg.inputs.values()):
@@ -149,40 +128,36 @@ def setupUi(self):
149128
if self.param.parent == param.param.name:
150129
self.parentCombo.setCurrentIndex(idx)
151130
idx += 1
152-
self.horizontalLayoutParent.addWidget(self.parentCombo)
153-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
131+
self.verticalLayout.addWidget(self.parentCombo)
154132

155133
# add the datatype selector
156-
self.horizontalLayoutDatatype.addWidget(QLabel(self.tr('Allowed '
157-
'data type')))
134+
self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type')))
158135
self.datatypeCombo = QComboBox()
159136
self.datatypeCombo.addItem(self.tr('Any'), -1)
160137
self.datatypeCombo.addItem(self.tr('Number'), 0)
161138
self.datatypeCombo.addItem(self.tr('String'), 1)
162-
self.horizontalLayoutDatatype.addWidget(self.datatypeCombo)
139+
self.verticalLayout.addWidget(self.datatypeCombo)
163140

164141
if self.param is not None and self.param.datatype is not None:
165142
# QComboBoxes indexes start at 0,
166143
# self.param.datatype start with -1 that is why I need to do +1
167-
datatype_index = self.param.datatype + 1
168-
self.datatypeCombo.setCurrentIndex(datatype_index)
169-
self.verticalLayout.addLayout(self.horizontalLayoutDatatype)
144+
datatypeIndex = self.param.datatype + 1
145+
self.datatypeCombo.setCurrentIndex(datatypeIndex)
170146

171-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or \
172-
isinstance(self.param, ParameterVector):
173-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Shape type')))
147+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or
148+
isinstance(self.param, ParameterVector)):
149+
self.verticalLayout.addWidget(QLabel(self.tr('Shape type')))
174150
self.shapetypeCombo = QComboBox()
175151
self.shapetypeCombo.addItem(self.tr('Any'))
176152
self.shapetypeCombo.addItem(self.tr('Point'))
177153
self.shapetypeCombo.addItem(self.tr('Line'))
178154
self.shapetypeCombo.addItem(self.tr('Polygon'))
179155
if self.param is not None:
180156
self.shapetypeCombo.setCurrentIndex(self.param.datatype[0] + 1)
181-
self.horizontalLayoutParent.addWidget(self.shapetypeCombo)
182-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
183-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or \
184-
isinstance(self.param, ParameterMultipleInput):
185-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Data type')))
157+
self.verticalLayout.addWidget(self.shapetypeCombo)
158+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or
159+
isinstance(self.param, ParameterMultipleInput)):
160+
self.verticalLayout.addWidget(QLabel(self.tr('Data type')))
186161
self.datatypeCombo = QComboBox()
187162
self.datatypeCombo.addItem(self.tr('Vector (any)'))
188163
self.datatypeCombo.addItem(self.tr('Vector (point)'))
@@ -192,19 +167,18 @@ def setupUi(self):
192167
self.datatypeCombo.addItem(self.tr('File'))
193168
if self.param is not None:
194169
self.datatypeCombo.setCurrentIndex(self.param.datatype + 1)
195-
self.horizontalLayoutParent.addWidget(self.datatypeCombo)
196-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
197-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or \
198-
isinstance(self.param, ParameterNumber):
199-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Min/Max values')))
170+
self.verticalLayout.addWidget(self.datatypeCombo)
171+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or
172+
isinstance(self.param, ParameterNumber)):
173+
self.verticalLayout.addWidget(QLabel(self.tr('Min value')))
200174
self.minTextBox = QLineEdit()
175+
self.verticalLayout.addWidget(self.minTextBox)
176+
self.verticalLayout.addWidget(QLabel(self.tr('Max value')))
201177
self.maxTextBox = QLineEdit()
178+
self.verticalLayout.addWidget(self.maxTextBox)
202179
if self.param is not None:
203180
self.minTextBox.setText(str(self.param.min))
204181
self.maxTextBox.setText(str(self.param.max))
205-
self.horizontalLayoutParent.addWidget(self.minTextBox)
206-
self.horizontalLayoutParent.addWidget(self.maxTextBox)
207-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
208182
self.horizontalLayoutDefault.addWidget(QLabel(self.tr('Default value')))
209183
self.defaultTextBox = QLineEdit()
210184
self.defaultTextBox.setText(self.tr('0'))
@@ -213,54 +187,47 @@ def setupUi(self):
213187
if self.param.isInteger:
214188
default = int(math.floor(default))
215189
if default:
216-
self.defaultTextBox.setText(str(default))
217-
self.horizontalLayoutDefault.addWidget(self.defaultTextBox)
218-
self.verticalLayout.addLayout(self.horizontalLayoutDefault)
219-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or \
220-
isinstance(self.param, ParameterString):
221-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Default value')))
190+
self.defaultTextBox.setText(unicode(default))
191+
self.verticalLayout.addWidget(self.defaultTextBox)
192+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or
193+
isinstance(self.param, ParameterString)):
194+
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
222195
self.defaultTextBox = QLineEdit()
223196
if self.param is not None:
224197
self.defaultTextBox.setText(self.param.default)
225-
self.horizontalLayoutParent.addWidget(self.defaultTextBox)
226-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
227-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or \
228-
isinstance(self.param, ParameterFile):
229-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Type')))
198+
self.verticalLayout.addWidget(self.defaultTextBox)
199+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or
200+
isinstance(self.param, ParameterFile)):
201+
self.verticalLayout.addWidget(QLabel(self.tr('Type')))
230202
self.fileFolderCombo = QComboBox()
231203
self.fileFolderCombo.addItem(self.tr('File'))
232204
self.fileFolderCombo.addItem(self.tr('Folder'))
233205
if self.param is not None:
234206
self.fileFolderCombo.setCurrentIndex(
235207
1 if self.param.isFolder else 0)
236-
self.horizontalLayoutParent.addWidget(self.fileFolderCombo)
237-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
238-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or \
239-
isinstance(self.param, ParameterPoint):
240-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Default value')))
208+
self.verticalLayout.addWidget(self.fileFolderCombo)
209+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or
210+
isinstance(self.param, ParameterPoint)):
211+
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
241212
self.defaultTextBox = QLineEdit()
242213
if self.param is not None:
243214
self.defaultTextBox.setText(self.param.default)
244-
self.horizontalLayoutParent.addWidget(self.defaultTextBox)
245-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
246-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or \
247-
isinstance(self.param, ParameterCrs):
248-
self.horizontalLayoutParent.addWidget(QLabel(self.tr('Default value')))
215+
self.verticalLayout.addWidget(self.defaultTextBox)
216+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
217+
isinstance(self.param, ParameterCrs)):
218+
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
249219
self.defaultTextBox = CrsSelectionPanel('EPSG:4326')
250220
if self.param is not None:
251221
self.defaultTextBox.setAuthId(self.param.default)
252-
self.horizontalLayoutParent.addWidget(self.defaultTextBox)
253-
self.verticalLayout.addLayout(self.horizontalLayoutParent)
222+
self.verticalLayout.addWidget(self.defaultTextBox)
254223

255-
self.horizontalLayoutRequired.addWidget(QLabel(self.tr('Required')))
256-
self.yesNoCombo = QComboBox()
257-
self.yesNoCombo.addItem(self.tr('Yes'))
258-
self.yesNoCombo.addItem(self.tr('No'))
259-
self.horizontalLayoutRequired.addWidget(self.yesNoCombo)
224+
self.verticalLayout.addSpacing(20)
225+
self.requiredCheck = QCheckBox()
226+
self.requiredCheck.setText(self.tr('Mandatory'))
227+
self.requiredCheck.setChecked(True)
260228
if self.param is not None:
261-
self.yesNoCombo.setCurrentIndex(
262-
1 if self.param.optional else 0)
263-
self.verticalLayout.addLayout(self.horizontalLayoutRequired)
229+
self.requiredCheck.setChecked(self.param.optional)
230+
self.verticalLayout.addWidget(self.requiredCheck)
264231

265232
self.buttonBox = QDialogButtonBox(self)
266233
self.buttonBox.setOrientation(Qt.Horizontal)
@@ -270,6 +237,7 @@ def setupUi(self):
270237
self.buttonBox.accepted.connect(self.okPressed)
271238
self.buttonBox.rejected.connect(self.cancelPressed)
272239

240+
self.verticalLayout.addStretch()
273241
self.verticalLayout.addWidget(self.buttonBox)
274242

275243
self.setLayout(self.verticalLayout)
@@ -290,51 +258,53 @@ def okPressed(self):
290258
name = safeName.lower() + str(i)
291259
else:
292260
name = self.param.name
293-
if self.paramType \
294-
== ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN \
295-
or isinstance(self.param, ParameterBoolean):
296-
self.param = ParameterBoolean(name, description,
297-
self.state.isChecked())
298-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD \
299-
or isinstance(self.param, ParameterTableField):
261+
if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN
262+
or isinstance(self.param, ParameterBoolean)):
263+
self.param = ParameterBoolean(name, description, self.state.isChecked())
264+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD
265+
or isinstance(self.param, ParameterTableField)):
300266
if self.parentCombo.currentIndex() < 0:
301267
QMessageBox.warning(self, self.tr('Unable to define parameter'),
302268
self.tr('Wrong or missing parameter values'))
303269
return
304270
parent = self.parentCombo.itemData(self.parentCombo.currentIndex())
305271
datatype = self.datatypeCombo.itemData(self.datatypeCombo.currentIndex())
306272
self.param = ParameterTableField(name, description, parent, datatype)
307-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or \
308-
isinstance(self.param, ParameterRaster):
273+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or
274+
isinstance(self.param, ParameterRaster)):
309275
self.param = ParameterRaster(
310-
name, description,
311-
self.yesNoCombo.currentIndex() == 1)
312-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or \
313-
isinstance(self.param, ParameterTable):
276+
name, description)
277+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or
278+
isinstance(self.param, ParameterTable)):
314279
self.param = ParameterTable(
315-
name, description,
316-
self.yesNoCombo.currentIndex() == 1)
317-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or \
318-
isinstance(self.param, ParameterVector):
280+
name, description)
281+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or
282+
isinstance(self.param, ParameterVector)):
319283
self.param = ParameterVector(
320284
name, description,
321-
[self.shapetypeCombo.currentIndex() - 1],
322-
self.yesNoCombo.currentIndex() == 1)
323-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or \
324-
isinstance(self.param, ParameterMultipleInput):
285+
[self.shapetypeCombo.currentIndex() - 1])
286+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or
287+
isinstance(self.param, ParameterMultipleInput)):
325288
self.param = ParameterMultipleInput(
326289
name, description,
327-
self.datatypeCombo.currentIndex() - 1,
328-
self.yesNoCombo.currentIndex() == 1)
329-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or \
330-
isinstance(self.param, ParameterNumber):
290+
self.datatypeCombo.currentIndex() - 1)
291+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or
292+
isinstance(self.param, ParameterNumber)):
331293
try:
294+
<<<<<<< 8d5f46e6e491417b3449d4beca6ad490e6d2c5fe
332295
vmin = str(self.minTextBox.text()).strip()
296+
=======
297+
vmin = self.minTextBox.text().strip()
298+
>>>>>>> [processing] UI improvement for defining model parameters
333299
if vmin == '':
334300
vmin = None
335301
else:
336302
vmin = float(vmin)
303+
<<<<<<< 8d5f46e6e491417b3449d4beca6ad490e6d2c5fe
337304
vmax = str(self.maxTextBox.text()).strip()
305+
=======
306+
vmax = self.maxTextBox.text().strip()
307+
>>>>>>> [processing] UI improvement for defining model parameters
338308
if vmax == '':
339309
vmax = None
340310
else:
@@ -345,25 +315,39 @@ def okPressed(self):
345315
QMessageBox.warning(self, self.tr('Unable to define parameter'),
346316
self.tr('Wrong or missing parameter values'))
347317
return
348-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or \
349-
isinstance(self.param, ParameterString):
318+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or
319+
isinstance(self.param, ParameterString)):
350320
self.param = ParameterString(name, description,
321+
<<<<<<< 8d5f46e6e491417b3449d4beca6ad490e6d2c5fe
351322
str(self.defaultTextBox.text()))
352323
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or \
353324
isinstance(self.param, ParameterExtent):
325+
=======
326+
unicode(self.defaultTextBox.text()))
327+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or
328+
isinstance(self.param, ParameterExtent)):
329+
>>>>>>> [processing] UI improvement for defining model parameters
354330
self.param = ParameterExtent(name, description)
355-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or \
356-
isinstance(self.param, ParameterFile):
331+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or
332+
isinstance(self.param, ParameterFile)):
357333
isFolder = self.fileFolderCombo.currentIndex() == 1
358334
self.param = ParameterFile(name, description, isFolder=isFolder)
359-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or \
360-
isinstance(self.param, ParameterPoint):
335+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or
336+
isinstance(self.param, ParameterPoint)):
361337
self.param = ParameterPoint(name, description,
338+
<<<<<<< 8d5f46e6e491417b3449d4beca6ad490e6d2c5fe
362339
str(self.defaultTextBox.text()))
363340
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or \
364341
isinstance(self.param, ParameterCrs):
365342
self.param = ParameterCrs(name, description, self.defaultTextBox.getValue(), self.yesNoCombo.currentIndex() == 1)
366343
self.param.optional = self.yesNoCombo.currentIndex() == 1
344+
=======
345+
unicode(self.defaultTextBox.text()))
346+
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
347+
isinstance(self.param, ParameterCrs)):
348+
self.param = ParameterCrs(name, description, self.defaultTextbox.getValue())
349+
self.param.optional = self.requiredCheck.isChecked()
350+
>>>>>>> [processing] UI improvement for defining model parameters
367351
self.close()
368352

369353
def cancelPressed(self):

0 commit comments

Comments
 (0)
Please sign in to comment.