""" *************************************************************************** MultipleInputPanel.py --------------------- Date : August 2012 Copyright : (C) 2012 by Victor Olaya Email : volayaf at gmail dot com *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * *************************************************************************** """ __author__ = "Victor Olaya" __date__ = "August 2012" __copyright__ = "(C) 2012, Victor Olaya" import os import warnings from qgis.core import QgsProcessing from qgis.PyQt import uic from qgis.PyQt.QtCore import pyqtSignal "" from processing.gui.MultipleInputDialog import MultipleInputDialog from processing.gui.MultipleFileInputDialog import MultipleFileInputDialog pluginPath = os.path.split(os.path.dirname(__file__))[0] with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) WIDGET, BASE = uic.loadUiType( os.path.join(pluginPath, "ui", "widgetBaseSelector.ui") ) class MultipleInputPanel(BASE, WIDGET): selectionChanged = pyqtSignal() def __init__(self, options=None, datatype=None): super().__init__(None) self.setupUi(self) self.leText.setEnabled(False) self.leText.setText(self.tr("0 elements selected")) self.btnSelect.clicked.connect(self.showSelectionDialog) self.options = options self.datatype = datatype self.selectedoptions = [] def setSelectedItems(self, selected): # No checking is performed! self.selectedoptions = selected self.leText.setText( self.tr("{0} elements selected").format(len(self.selectedoptions)) ) def showSelectionDialog(self): if self.datatype == QgsProcessing.SourceType.TypeFile: dlg = MultipleFileInputDialog(self.selectedoptions) else: dlg = MultipleInputDialog( self.options, self.selectedoptions, datatype=self.datatype ) dlg.exec() if dlg.selectedoptions is not None: self.selectedoptions = dlg.selectedoptions self.leText.setText( self.tr("{0} elements selected").format(len(self.selectedoptions)) ) self.selectionChanged.emit() def updateForOptions(self, options): selectedoptions = [] selected = [ self.options[i] if isinstance(i, int) else i for i in self.selectedoptions ] for sel in selected: if not isinstance(sel, int): try: idx = options.index(sel) selectedoptions.append(idx) except ValueError: pass else: selectedoptions.append(sel) self.options = options self.setSelectedItems(selectedoptions)