[processing] Correctly set default value for matrix parameters

Fixes #18871
This commit is contained in:
Nyall Dawson 2018-05-01 10:31:15 +10:00
parent b63733ed96
commit c68262da7f
4 changed files with 31 additions and 6 deletions

View File

@ -81,7 +81,7 @@ class FixedTableDialog(BASE, WIDGET):
# Populate table
for i in range(rows):
for j in range(cols):
item = QStandardItem(table[i][j])
item = QStandardItem(str(table[i][j]))
model.setItem(i, j, item)
self.tblView.setModel(model)

View File

@ -56,11 +56,16 @@ class FixedTablePanel(BASE, WIDGET):
self.btnSelect.clicked.connect(self.showFixedTableDialog)
def updateSummaryText(self):
self.leText.setText(self.tr('Fixed table {0}x{1}').format(
len(self.table), len(self.param.headers())))
def setValue(self, value):
self.table = value
self.updateSummaryText()
def showFixedTableDialog(self):
dlg = FixedTableDialog(self.param, self.table)
dlg.exec_()
if dlg.rettable is not None:
self.table = dlg.rettable
self.leText.setText(self.tr('Fixed table {0}x{1}').format(
len(self.table), len(self.param.headers())))
self.setValue(dlg.rettable)

View File

@ -559,7 +559,7 @@ class FixedTableWidgetWrapper(WidgetWrapper):
return FixedTablePanel(self.param)
def setValue(self, value):
pass
self.widget.setValue(value)
def value(self):
if self.dialogType == DIALOG_MODELER:

View File

@ -28,6 +28,7 @@ __revision__ = '$Format:%H$'
from qgis.testing import start_app, unittest
from qgis.core import (QgsApplication,
QgsCoordinateReferenceSystem,
QgsProcessingParameterMatrix,
QgsVectorLayer)
from qgis.analysis import QgsNativeAlgorithms
@ -158,6 +159,25 @@ class WrappersTest(unittest.TestCase):
widget.deleteLater()
def testMatrix(self):
self.checkConstructWrapper(QgsProcessingParameterMatrix('test'), FixedTableWidgetWrapper)
alg = QgsApplication.processingRegistry().algorithmById('native:centroids')
dlg = AlgorithmDialog(alg)
param = QgsProcessingParameterMatrix('test', 'test', 2, True, ['x', 'y'], [['a', 'b'], ['c', 'd']])
wrapper = FixedTableWidgetWrapper(param, dlg)
widget = wrapper.createWidget()
# check that default value is initially set
self.assertEqual(wrapper.value(), [['a', 'b'], ['c', 'd']])
# test widget
widget.show()
wrapper.setValue([[1, 2], [3, 4]])
self.assertEqual(wrapper.value(), [[1, 2], [3, 4]])
widget.deleteLater()
def testNumber(self):
self.checkConstructWrapper(QgsProcessingParameterNumber('test'), NumberWidgetWrapper)