mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
[processing] Add file picker to vector/raster/table parameters
in modeller Makes it obvious that users can set an algorithm vector/raster/ table input to a fixed table
This commit is contained in:
parent
f78f2a05c6
commit
fc65334a60
@ -115,7 +115,7 @@ class WidgetWrapper(QObject):
|
|||||||
self.setValue(param.default)
|
self.setValue(param.default)
|
||||||
|
|
||||||
def comboValue(self, validator=None, combobox=None):
|
def comboValue(self, validator=None, combobox=None):
|
||||||
if not combobox:
|
if combobox is None:
|
||||||
combobox = self.widget
|
combobox = self.widget
|
||||||
idx = combobox.findText(combobox.currentText())
|
idx = combobox.findText(combobox.currentText())
|
||||||
if idx < 0:
|
if idx < 0:
|
||||||
@ -132,7 +132,7 @@ class WidgetWrapper(QObject):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def setComboValue(self, value, combobox=None):
|
def setComboValue(self, value, combobox=None):
|
||||||
if not combobox:
|
if combobox is None:
|
||||||
combobox = self.widget
|
combobox = self.widget
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
value = value[0]
|
value = value[0]
|
||||||
@ -265,7 +265,6 @@ class CrsWidgetWrapper(WidgetWrapper):
|
|||||||
self.combo.setEditText(self.param.default)
|
self.combo.setEditText(self.param.default)
|
||||||
return widget
|
return widget
|
||||||
else:
|
else:
|
||||||
|
|
||||||
widget = QgsProjectionSelectionWidget()
|
widget = QgsProjectionSelectionWidget()
|
||||||
if self.param.optional:
|
if self.param.optional:
|
||||||
widget.setOptionVisible(QgsProjectionSelectionWidget.CrsNotSet, True)
|
widget.setOptionVisible(QgsProjectionSelectionWidget.CrsNotSet, True)
|
||||||
@ -584,23 +583,39 @@ class RasterWidgetWrapper(WidgetWrapper):
|
|||||||
elif self.dialogType == DIALOG_BATCH:
|
elif self.dialogType == DIALOG_BATCH:
|
||||||
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
|
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
|
||||||
else:
|
else:
|
||||||
widget = QComboBox()
|
self.combo = QComboBox()
|
||||||
widget.setEditable(True)
|
layers = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
|
||||||
files = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
|
self.combo.setEditable(True)
|
||||||
for f in files:
|
for layer in layers:
|
||||||
widget.addItem(self.dialog.resolveValueDescription(f), f)
|
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
|
||||||
if self.param.optional:
|
if self.param.optional:
|
||||||
widget.setEditText("")
|
self.combo.setEditText("")
|
||||||
|
|
||||||
|
widget = QWidget()
|
||||||
|
layout = QHBoxLayout()
|
||||||
|
layout.setMargin(0)
|
||||||
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
layout.setSpacing(2)
|
||||||
|
layout.addWidget(self.combo)
|
||||||
|
btn = QToolButton()
|
||||||
|
btn.setText('...')
|
||||||
|
btn.setToolTip(self.tr("Select file"))
|
||||||
|
btn.clicked.connect(self.selectFile)
|
||||||
|
layout.addWidget(btn)
|
||||||
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
def selectFile(self):
|
def selectFile(self):
|
||||||
filename, selected_filter = self.getFileName(self.combo.currentText())
|
filename, selected_filter = self.getFileName(self.combo.currentText())
|
||||||
if filename:
|
if filename:
|
||||||
filename = dataobjects.getRasterSublayer(filename, self.param)
|
filename = dataobjects.getRasterSublayer(filename, self.param)
|
||||||
items = self.combo.additionalItems()
|
if isinstance(self.combo, QgsMapLayerComboBox):
|
||||||
items.append(filename)
|
items = self.combo.additionalItems()
|
||||||
self.combo.setAdditionalItems(items)
|
items.append(filename)
|
||||||
self.combo.setCurrentIndex(self.combo.findText(filename))
|
self.combo.setAdditionalItems(items)
|
||||||
|
self.combo.setCurrentIndex(self.combo.findText(filename))
|
||||||
|
else:
|
||||||
|
self.combo.setEditText(filename)
|
||||||
|
|
||||||
def setValue(self, value):
|
def setValue(self, value):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -608,7 +623,7 @@ class RasterWidgetWrapper(WidgetWrapper):
|
|||||||
elif self.dialogType == DIALOG_BATCH:
|
elif self.dialogType == DIALOG_BATCH:
|
||||||
self.widget.setText(value)
|
self.widget.setText(value)
|
||||||
else:
|
else:
|
||||||
self.setComboValue(value)
|
self.setComboValue(value, combobox=self.combo)
|
||||||
|
|
||||||
def value(self):
|
def value(self):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -628,7 +643,7 @@ class RasterWidgetWrapper(WidgetWrapper):
|
|||||||
return self.param.optional
|
return self.param.optional
|
||||||
else:
|
else:
|
||||||
return os.path.exists(v)
|
return os.path.exists(v)
|
||||||
return self.comboValue(validator)
|
return self.comboValue(validator, combobox=self.combo)
|
||||||
|
|
||||||
|
|
||||||
class SelectionWidgetWrapper(WidgetWrapper):
|
class SelectionWidgetWrapper(WidgetWrapper):
|
||||||
@ -704,23 +719,39 @@ class VectorWidgetWrapper(WidgetWrapper):
|
|||||||
widget.valueChanged.connect(lambda: self.widgetValueHasChanged.emit(self))
|
widget.valueChanged.connect(lambda: self.widgetValueHasChanged.emit(self))
|
||||||
return widget
|
return widget
|
||||||
else:
|
else:
|
||||||
widget = QComboBox()
|
self.combo = QComboBox()
|
||||||
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
|
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
|
||||||
widget.setEditable(True)
|
self.combo.setEditable(True)
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
widget.addItem(self.dialog.resolveValueDescription(layer), layer)
|
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
|
||||||
if self.param.optional:
|
if self.param.optional:
|
||||||
widget.setEditText("")
|
self.combo.setEditText("")
|
||||||
|
|
||||||
|
widget = QWidget()
|
||||||
|
layout = QHBoxLayout()
|
||||||
|
layout.setMargin(0)
|
||||||
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
layout.setSpacing(2)
|
||||||
|
layout.addWidget(self.combo)
|
||||||
|
btn = QToolButton()
|
||||||
|
btn.setText('...')
|
||||||
|
btn.setToolTip(self.tr("Select file"))
|
||||||
|
btn.clicked.connect(self.selectFile)
|
||||||
|
layout.addWidget(btn)
|
||||||
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
def selectFile(self):
|
def selectFile(self):
|
||||||
filename, selected_filter = self.getFileName(self.combo.currentText())
|
filename, selected_filter = self.getFileName(self.combo.currentText())
|
||||||
if filename:
|
if filename:
|
||||||
filename = dataobjects.getRasterSublayer(filename, self.param)
|
filename = dataobjects.getRasterSublayer(filename, self.param)
|
||||||
items = self.combo.additionalItems()
|
if isinstance(self.combo, QgsMapLayerComboBox):
|
||||||
items.append(filename)
|
items = self.combo.additionalItems()
|
||||||
self.combo.setAdditionalItems(items)
|
items.append(filename)
|
||||||
self.combo.setCurrentIndex(self.combo.findText(filename))
|
self.combo.setAdditionalItems(items)
|
||||||
|
self.combo.setCurrentIndex(self.combo.findText(filename))
|
||||||
|
else:
|
||||||
|
self.combo.setEditText(filename)
|
||||||
|
|
||||||
def setValue(self, value):
|
def setValue(self, value):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -728,7 +759,7 @@ class VectorWidgetWrapper(WidgetWrapper):
|
|||||||
elif self.dialogType == DIALOG_BATCH:
|
elif self.dialogType == DIALOG_BATCH:
|
||||||
self.widget.setValue(value)
|
self.widget.setValue(value)
|
||||||
else:
|
else:
|
||||||
self.setComboValue(value)
|
self.setComboValue(value, combobox=self.combo)
|
||||||
|
|
||||||
def value(self):
|
def value(self):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -748,7 +779,7 @@ class VectorWidgetWrapper(WidgetWrapper):
|
|||||||
return self.param.optional
|
return self.param.optional
|
||||||
else:
|
else:
|
||||||
return os.path.exists(v)
|
return os.path.exists(v)
|
||||||
return self.comboValue(validator)
|
return self.comboValue(validator, combobox=self.combo)
|
||||||
|
|
||||||
|
|
||||||
class StringWidgetWrapper(WidgetWrapper):
|
class StringWidgetWrapper(WidgetWrapper):
|
||||||
@ -911,25 +942,43 @@ class TableWidgetWrapper(WidgetWrapper):
|
|||||||
elif self.dialogType == DIALOG_BATCH:
|
elif self.dialogType == DIALOG_BATCH:
|
||||||
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
|
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
|
||||||
else:
|
else:
|
||||||
widget = QComboBox()
|
self.combo = QComboBox()
|
||||||
|
layers = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
|
||||||
|
self.combo.setEditable(True)
|
||||||
tables = self.dialog.getAvailableValuesOfType(ParameterTable, OutputTable)
|
tables = self.dialog.getAvailableValuesOfType(ParameterTable, OutputTable)
|
||||||
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
|
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
|
||||||
if self.param.optional:
|
if self.param.optional:
|
||||||
widget.addItem(self.NOT_SELECTED, None)
|
self.combo.addItem(self.NOT_SELECTED, None)
|
||||||
for table in tables:
|
for table in tables:
|
||||||
widget.addItem(self.dialog.resolveValueDescription(table), table)
|
self.combo.addItem(self.dialog.resolveValueDescription(table), table)
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
widget.addItem(self.dialog.resolveValueDescription(layer), layer)
|
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
|
||||||
|
|
||||||
|
widget = QWidget()
|
||||||
|
layout = QHBoxLayout()
|
||||||
|
layout.setMargin(0)
|
||||||
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
layout.setSpacing(2)
|
||||||
|
layout.addWidget(self.combo)
|
||||||
|
btn = QToolButton()
|
||||||
|
btn.setText('...')
|
||||||
|
btn.setToolTip(self.tr("Select file"))
|
||||||
|
btn.clicked.connect(self.selectFile)
|
||||||
|
layout.addWidget(btn)
|
||||||
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
def selectFile(self):
|
def selectFile(self):
|
||||||
filename, selected_filter = self.getFileName(self.combo.currentText())
|
filename, selected_filter = self.getFileName(self.combo.currentText())
|
||||||
if filename:
|
if filename:
|
||||||
filename = dataobjects.getRasterSublayer(filename, self.param)
|
filename = dataobjects.getRasterSublayer(filename, self.param)
|
||||||
items = self.combo.additionalItems()
|
if isinstance(self.combo, QgsMapLayerComboBox):
|
||||||
items.append(filename)
|
items = self.combo.additionalItems()
|
||||||
self.combo.setAdditionalItems(items)
|
items.append(filename)
|
||||||
self.combo.setCurrentIndex(self.combo.findText(filename))
|
self.combo.setAdditionalItems(items)
|
||||||
|
self.combo.setCurrentIndex(self.combo.findText(filename))
|
||||||
|
else:
|
||||||
|
self.combo.setEditText(filename)
|
||||||
|
|
||||||
def setValue(self, value):
|
def setValue(self, value):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -937,7 +986,7 @@ class TableWidgetWrapper(WidgetWrapper):
|
|||||||
elif self.dialogType == DIALOG_BATCH:
|
elif self.dialogType == DIALOG_BATCH:
|
||||||
return self.widget.setText(value)
|
return self.widget.setText(value)
|
||||||
else:
|
else:
|
||||||
self.setComboValue(value)
|
self.setComboValue(value, combobox=self.combo)
|
||||||
|
|
||||||
def value(self):
|
def value(self):
|
||||||
if self.dialogType == DIALOG_STANDARD:
|
if self.dialogType == DIALOG_STANDARD:
|
||||||
@ -954,7 +1003,7 @@ class TableWidgetWrapper(WidgetWrapper):
|
|||||||
else:
|
else:
|
||||||
def validator(v):
|
def validator(v):
|
||||||
return bool(v) or self.param.optional
|
return bool(v) or self.param.optional
|
||||||
return self.comboValue(validator)
|
return self.comboValue(validator, combobox=self.combo)
|
||||||
|
|
||||||
|
|
||||||
class TableFieldWidgetWrapper(WidgetWrapper):
|
class TableFieldWidgetWrapper(WidgetWrapper):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user