[processing] more robust layer sorting in multiple selection widget (fixes #11429)

This commit is contained in:
Alexander Bruy 2014-10-18 11:19:53 +03:00
parent 99cec14c5b
commit b1e7ede36b
2 changed files with 19 additions and 16 deletions

View File

@ -175,9 +175,9 @@ class AlgorithmExecutionDialog(QDialog):
return param.setValue(widget.selectedoptions) return param.setValue(widget.selectedoptions)
else: else:
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY: if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
options = dataobjects.getVectorLayers() options = dataobjects.getVectorLayers(sorting=False)
else: else:
options = dataobjects.getRasterLayers() options = dataobjects.getRasterLayers(sorting=False)
return param.setValue([options[i] for i in widget.selectedoptions]) return param.setValue([options[i] for i in widget.selectedoptions])
elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs, elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs,
ParameterExtent)): ParameterExtent)):

View File

@ -69,13 +69,14 @@ def getSupportedOutputTableExtensions():
def getRasterLayers(sorting=True): def getRasterLayers(sorting=True):
layers = QgsMapLayerRegistry.instance().mapLayers().values() layers = QgsProject.instance().layerTreeRoot().findLayers()
raster = [] raster = []
for layer in layers: for layer in layers:
if layer.type() == layer.RasterLayer: mapLayer = layer.layer()
if layer.providerType() == 'gdal': # only gdal file-based layers if mapLayer.type() == QgsMapLayer.RasterLayer:
raster.append(layer) if mapLayer.providerType() == 'gdal': # only gdal file-based layers
raster.append(mapLayer)
if sorting: if sorting:
return sorted(raster, key=lambda layer: layer.name().lower()) return sorted(raster, key=lambda layer: layer.name().lower())
else: else:
@ -83,14 +84,15 @@ def getRasterLayers(sorting=True):
def getVectorLayers(shapetype=[-1], sorting=True): def getVectorLayers(shapetype=[-1], sorting=True):
layers = QgsMapLayerRegistry.instance().mapLayers().values() layers = QgsProject.instance().layerTreeRoot().findLayers()
vector = [] vector = []
for layer in layers: for layer in layers:
if layer.type() == layer.VectorLayer: mapLayer = layer.layer()
if shapetype == ALL_TYPES or layer.geometryType() in shapetype: if mapLayer.type() == QgsMapLayer.VectorLayer:
uri = unicode(layer.source()) if shapetype == ALL_TYPES or mapLayer.geometryType() in shapetype:
uri = unicode(mapLayer.source())
if not uri.lower().endswith('csv') and not uri.lower().endswith('dbf'): if not uri.lower().endswith('csv') and not uri.lower().endswith('dbf'):
vector.append(layer) vector.append(mapLayer)
if sorting: if sorting:
return sorted(vector, key=lambda layer: layer.name().lower()) return sorted(vector, key=lambda layer: layer.name().lower())
else: else:
@ -105,11 +107,12 @@ def getAllLayers():
def getTables(sorting=True): def getTables(sorting=True):
layers = QgsMapLayerRegistry.instance().mapLayers().values() layers = QgsProject.instance().layerTreeRoot().findLayers()
tables = list() tables = []
for layer in layers: for layer in layers:
if layer.type() == layer.VectorLayer: mapLayer = layer.layer()
tables.append(layer) if mapLayer.type() == QgsMapLayer.VectorLayer:
tables.append(mapLayer)
if sorting: if sorting:
return sorted(tables, key=lambda table: table.name().lower()) return sorted(tables, key=lambda table: table.name().lower())
else: else:
@ -119,7 +122,7 @@ def getTables(sorting=True):
def extent(layers): def extent(layers):
first = True first = True
for layer in layers: for layer in layers:
if not isinstance(layer, (QgsRasterLayer, QgsVectorLayer)): if not isinstance(layer, (QgsMapLayer.QgsRasterLayer, QgsMapLayer.QgsVectorLayer)):
layer = getObjectFromUri(layer) layer = getObjectFromUri(layer)
if layer is None: if layer is None:
continue continue