59
59
QgsProcessingParameterExpression ,
60
60
QgsProcessingParameterTable ,
61
61
QgsProcessingParameterTableField ,
62
- QgsProcessingParameterFeatureSource )
62
+ QgsProcessingParameterFeatureSource ,
63
+ QgsProcessingFeatureSourceDefinition )
63
64
64
65
from qgis .PyQt .QtWidgets import (
65
66
QCheckBox ,
66
67
QComboBox ,
67
68
QDialog ,
68
69
QFileDialog ,
69
70
QHBoxLayout ,
71
+ QVBoxLayout ,
70
72
QLineEdit ,
71
73
QPlainTextEdit ,
72
74
QToolButton ,
@@ -760,7 +762,18 @@ def createWidget(self):
760
762
btn .clicked .connect (self .selectFile )
761
763
layout .addWidget (btn )
762
764
763
- widget .setLayout (layout )
765
+ vl = QVBoxLayout ()
766
+ vl .setMargin (0 )
767
+ vl .setContentsMargins (0 , 0 , 0 , 0 )
768
+ vl .setSpacing (2 )
769
+ vl .addLayout (layout )
770
+
771
+ self .use_selection_checkbox = QCheckBox (self .tr ('Selected features only' ))
772
+ self .use_selection_checkbox .setChecked (False )
773
+ self .use_selection_checkbox .setEnabled (False )
774
+ vl .addWidget (self .use_selection_checkbox )
775
+
776
+ widget .setLayout (vl )
764
777
765
778
filters = QgsMapLayerProxyModel .Filters ()
766
779
if QgsProcessingParameterDefinition .TypeVectorAny in self .param .dataTypes ():
@@ -775,6 +788,8 @@ def createWidget(self):
775
788
try :
776
789
if iface .activeLayer ().type () == QgsMapLayer .VectorLayer :
777
790
self .combo .setLayer (iface .activeLayer ())
791
+ self .use_selection_checkbox .setEnabled (iface .activeLayer ().selectedFeatureCount () > 0 )
792
+
778
793
except :
779
794
pass
780
795
@@ -787,8 +802,7 @@ def createWidget(self):
787
802
self .combo .setFilters (filters )
788
803
self .combo .setExcludedProviders (['grass' ])
789
804
790
- self .combo .currentIndexChanged .connect (lambda : self .widgetValueHasChanged .emit (self ))
791
- self .combo .currentTextChanged .connect (lambda : self .widgetValueHasChanged .emit (self ))
805
+ self .combo .layerChanged .connect (self .layerChanged )
792
806
return widget
793
807
794
808
elif self .dialogType == DIALOG_BATCH :
@@ -818,6 +832,14 @@ def createWidget(self):
818
832
widget .setLayout (layout )
819
833
return widget
820
834
835
+ def layerChanged (self , layer ):
836
+ if not layer or layer .type () != QgsMapLayer .VectorLayer or layer .selectedFeatureCount () == 0 :
837
+ self .use_selection_checkbox .setChecked (False )
838
+ self .use_selection_checkbox .setEnabled (False )
839
+ else :
840
+ self .use_selection_checkbox .setEnabled (True )
841
+ self .widgetValueHasChanged .emit (self )
842
+
821
843
def selectFile (self ):
822
844
filename , selected_filter = self .getFileName (self .combo .currentText ())
823
845
if filename :
@@ -840,14 +862,15 @@ def setValue(self, value):
840
862
841
863
def value (self ):
842
864
if self .dialogType == DIALOG_STANDARD :
865
+ use_selected_features = self .use_selection_checkbox .isChecked ()
843
866
try :
844
867
layer = self .combo .currentLayer ()
845
868
if layer :
846
- return layer .id ()
869
+ return QgsProcessingFeatureSourceDefinition ( layer .id (), use_selected_features )
847
870
else :
848
- return self .combo .currentText ()
871
+ return QgsProcessingFeatureSourceDefinition ( self .combo .currentText (), use_selected_features )
849
872
except :
850
- return self .combo .currentText ()
873
+ return QgsProcessingFeatureSourceDefinition ( self .combo .currentText (), use_selected_features )
851
874
elif self .dialogType == DIALOG_BATCH :
852
875
return self .widget .value ()
853
876
else :
0 commit comments