Skip to content

Commit 7d7c06c

Browse files
committed
Implement widget wrapper for QgsProcessingParameterMapLayer
1 parent e0fbe34 commit 7d7c06c

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

python/plugins/processing/algs/qgis/Rasterize.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,7 @@ def initAlgorithm(self, config=None):
101101
self.addParameter(map_theme_param)
102102

103103
self.addParameter(
104-
# TODO use QgsProcessingParameterMapLayer when
105-
# the LayerWidgetWrapper class will be implemented
106-
QgsProcessingParameterRasterLayer(
104+
QgsProcessingParameterMapLayer(
107105
self.LAYER,
108106
description=self.tr(
109107
'Layer to render. Will only be used if the map theme '

python/plugins/processing/gui/wrappers.py

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
QgsProcessingParameterVectorLayer,
6363
QgsProcessingParameterField,
6464
QgsProcessingParameterFeatureSource,
65+
QgsProcessingParameterMapLayer,
6566
QgsProcessingParameterBand,
6667
QgsProcessingFeatureSourceDefinition,
6768
QgsProcessingOutputRasterLayer,
@@ -626,7 +627,7 @@ def value(self):
626627
return self.widget.getValue()
627628

628629

629-
class RasterWidgetWrapper(WidgetWrapper):
630+
class MapLayerWidgetWrapper(WidgetWrapper):
630631

631632
NOT_SELECTED = '[Not selected]'
632633

@@ -651,11 +652,10 @@ def createWidget(self):
651652
if ProcessingConfig.getSetting(ProcessingConfig.SHOW_CRS_DEF):
652653
self.combo.setShowCrs(True)
653654

654-
self.combo.setFilters(QgsMapLayerProxyModel.RasterLayer)
655-
self.combo.setExcludedProviders(['grass'])
655+
self.setComboBoxFilters(self.combo)
656+
656657
try:
657-
if iface.activeLayer().type() == QgsMapLayer.RasterLayer:
658-
self.combo.setLayer(iface.activeLayer())
658+
self.combo.setLayer(iface.activeLayer())
659659
except:
660660
pass
661661

@@ -666,7 +666,7 @@ def createWidget(self):
666666
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
667667
else:
668668
self.combo = QComboBox()
669-
layers = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
669+
layers = self.getAvailableLayers()
670670
self.combo.setEditable(True)
671671
for layer in layers:
672672
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
@@ -687,10 +687,16 @@ def createWidget(self):
687687
widget.setLayout(layout)
688688
return widget
689689

690+
def setComboBoxFilters(self, combo):
691+
pass
692+
693+
def getAvailableLayers(self):
694+
return self.dialog.getAvailableValuesOfType([QgsProcessingParameterRasterLayer, QgsProcessingParameterVectorLayer, QgsProcessingParameterMapLayer],
695+
[QgsProcessingOutputRasterLayer, QgsProcessingOutputVectorLayer])
696+
690697
def selectFile(self):
691698
filename, selected_filter = self.getFileName(self.combo.currentText())
692699
if filename:
693-
filename = dataobjects.getRasterSublayer(filename, self.param)
694700
if isinstance(self.combo, QgsMapLayerComboBox):
695701
items = self.combo.additionalItems()
696702
items.append(filename)
@@ -728,6 +734,28 @@ def validator(v):
728734
return self.comboValue(validator, combobox=self.combo)
729735

730736

737+
class RasterWidgetWrapper(MapLayerWidgetWrapper):
738+
739+
def getAvailableLayers(self):
740+
return self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
741+
742+
def setComboBoxFilters(self, combo):
743+
combo.setFilters(QgsMapLayerProxyModel.RasterLayer)
744+
combo.setExcludedProviders(['grass'])
745+
746+
def selectFile(self):
747+
filename, selected_filter = self.getFileName(self.combo.currentText())
748+
if filename:
749+
filename = dataobjects.getRasterSublayer(filename, self.param)
750+
if isinstance(self.combo, QgsMapLayerComboBox):
751+
items = self.combo.additionalItems()
752+
items.append(filename)
753+
self.combo.setAdditionalItems(items)
754+
self.combo.setCurrentIndex(self.combo.findText(filename))
755+
else:
756+
self.combo.setEditText(filename)
757+
758+
731759
class SelectionWidgetWrapper(WidgetWrapper):
732760

733761
def createWidget(self):
@@ -754,12 +782,6 @@ def value(self):
754782
return self.widget.currentData()
755783

756784

757-
class LayerWidgetWrapper(WidgetWrapper):
758-
759-
def __init__(self):
760-
raise NotImplementedError('Layer widget wrapper is not implemented yet')
761-
762-
763785
class VectorWidgetWrapper(WidgetWrapper):
764786

765787
NOT_SELECTED = '[Not selected]'
@@ -1395,7 +1417,7 @@ def create_wrapper_from_class(param, dialog, row=0, col=0):
13951417
elif param.type() == 'band':
13961418
wrapper = BandWidgetWrapper
13971419
elif param.type() == 'layer':
1398-
wrapper = LayerWidgetWrapper
1420+
wrapper = MapLayerWidgetWrapper
13991421
else:
14001422
assert False, param.type()
14011423
return wrapper(param, dialog, row, col)

0 commit comments

Comments
 (0)