Skip to content

Commit a20c86c

Browse files
committed
[processing] use InputLayerSelectorPanel for vector layers
1 parent c605c67 commit a20c86c

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

python/plugins/processing/gui/InputLayerSelectorPanel.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import os
3030

3131
from qgis.PyQt import uic
32-
from qgis.PyQt.QtCore import QSettings
32+
from qgis.PyQt.QtCore import QSettings, pyqtSignal
3333
from qgis.PyQt.QtGui import QIcon
3434
from qgis.PyQt.QtWidgets import QFileDialog
3535
from processing.tools import dataobjects
@@ -41,6 +41,8 @@
4141

4242
class InputLayerSelectorPanel(BASE, WIDGET):
4343

44+
valueHasChanged = pyqtSignal()
45+
4446
def __init__(self, options, param):
4547
super(InputLayerSelectorPanel, self).__init__(None)
4648
self.setupUi(self)
@@ -55,6 +57,7 @@ def __init__(self, options, param):
5557
self.cmbText.addItem(name, value)
5658

5759
self.btnSelect.clicked.connect(self.showSelectionDialog)
60+
self.cmbText.currentIndexChanged.connect(self.valueHasChanged.emit)
5861

5962
def showSelectionDialog(self):
6063
settings = QSettings()
@@ -77,5 +80,11 @@ def showSelectionDialog(self):
7780
self.cmbText.addItem(filename, filename)
7881
self.cmbText.setCurrentIndex(self.cmbText.count() - 1)
7982

83+
def update(self, options):
84+
self.cmbText.clear()
85+
for (name, value) in options:
86+
self.cmbText.addItem(name, value)
87+
self.valueHasChanged.emit()
88+
8089
def getValue(self):
8190
return self.cmbText.itemData(self.cmbText.currentIndex())

python/plugins/processing/gui/wrappers.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -490,13 +490,13 @@ def createWidget(self):
490490
return widget
491491

492492
def refresh(self):
493-
self.widget.cmbText.clear()
494-
layers = dataobjects.getRasterLayers(self)
495-
layers.sort(key=lambda lay: lay.name())
493+
items = []
494+
layers = dataobjects.getRasterLayers()
496495
if self.param.optional:
497-
self.widget.cmbText.addItem(self.NOT_SELECTED, None)
496+
items.append((self.NOT_SELECTED, None))
498497
for layer in layers:
499-
self.widget.cmbText.addItem(getExtendedLayerName(layer), layer)
498+
items.append((getExtendedLayerName(layer), layer))
499+
self.widget.update(items)
500500

501501
def setValue(self, value):
502502
if self.dialogType == DIALOG_STANDARD:
@@ -551,9 +551,15 @@ class VectorWidgetWrapper(WidgetWrapper):
551551

552552
def createWidget(self):
553553
if self.dialogType == DIALOG_STANDARD:
554-
widget = QComboBox()
555-
self._populate(widget)
556-
widget.currentIndexChanged.connect(lambda: self.widgetValueHasChanged.emit(self))
554+
layers = dataobjects.getVectorLayers(self.param.datatype)
555+
items = []
556+
if self.param.optional:
557+
items.append((self.NOT_SELECTED, None))
558+
for layer in layers:
559+
items.append((getExtendedLayerName(layer), layer))
560+
widget = InputLayerSelectorPanel(items, self.param)
561+
widget.name = self.param.name
562+
widget.valueChanged.connect(lambda: self.widgetValueHasChanged.emit(self))
557563
return widget
558564
elif self.dialogType == DIALOG_BATCH:
559565
widget = BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
@@ -570,14 +576,16 @@ def createWidget(self):
570576
return widget
571577

572578
def _populate(self, widget):
573-
widget.clear()
579+
items = []
574580
layers = dataobjects.getVectorLayers(self.param.datatype)
575581
layers.sort(key=lambda lay: lay.name())
576582
if self.param.optional:
577-
widget.addItem(self.NOT_SELECTED, None)
583+
items.append((self.NOT_SELECTED, None))
578584
for layer in layers:
579-
widget.addItem(getExtendedLayerName(layer), layer)
580-
widget.name = self.param.name
585+
items.append((getExtendedLayerName(layer), layer))
586+
self.widget.update(items)
587+
588+
581589

582590
def refresh(self):
583591
self._populate(self.widget)

0 commit comments

Comments
 (0)