[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)
else:
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
options = dataobjects.getVectorLayers()
options = dataobjects.getVectorLayers(sorting=False)
else:
options = dataobjects.getRasterLayers()
options = dataobjects.getRasterLayers(sorting=False)
return param.setValue([options[i] for i in widget.selectedoptions])
elif isinstance(param, (ParameterNumber, ParameterFile, ParameterCrs,
ParameterExtent)):

View File

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