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+
731759class 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-
763785class 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